summaryrefslogtreecommitdiff
path: root/sly/render
Commit message (Collapse)AuthorAgeFilesLines
* math: Rewrite rect to use packed f64 bytevectors.David Thompson2016-02-271-4/+7
|
* math: Rewrite vector math library to use packed f64 bytevectors.David Thompson2016-02-271-25/+24
| | | | | | | | | | | | | | | | | | | | The big consequence of this change to the rest of the codebase is that we can no longer use record destructuring when pattern matching, so I had to rewrite every place where pattern matching was used. It was probably a bad idea to expose the record type descriptors publicly in the first place. * sly/math/vector.scm: Reimplement everything in terms of an f64 packed bytevector record type. Do not expose record type descriptors. * sly/game.scm (run-game-loop): Convert viewport width/height to exact numbers. * sly/window.scm (open-window): Likewise. * sly/input/mouse.scm (mouse-position): Rewrite pattern matching. * sly/math/quaternion (make-quaternion, vector->quaternion): Likewise. * sly/math/rect.scm (rect-clamp): Likewise. * sly/math/transform.scm (translate!, translate, scale): Likewise. * sly/render/mesh.scm (vertices-bytevector): Likewise. * examples/mines/mines.scm: Likewise.
* render: sprite-batch: Clean up sprite-batch-add!David Thompson2016-02-271-105/+63
| | | | | * sly/render/sprite-batch.scm (sprite-batch-add!): Take better advantage of local variables to reduce lookups, add a comment, and reformat.
* render: sprite-batch: Implement in terms of a mesh.David Thompson2016-02-231-16/+5
| | | | | | | * sly/render/sprite-batch.scm (<sprite-batch>): Replace 'vao' field with 'mesh' field. (make-sprite-batch): Use 'make-mesh'. (sprite-batch-flush!): Use 'set-graphics-mesh!'
* render: vbo: Use cached buffer length when computing index length.David Thompson2016-02-231-1/+1
| | | | | * sly/render/mesh.scm (vertex-buffer-element-length): Use the cached length of the buffer bytevector.
* render: texture: Remove unused texture vertex code.David Thompson2016-02-231-50/+5
| | | | | * sly/render/texture.scm (texture-vertex, pack-texture-vertices, draw-texture-vertices): Delete.
* Use a single foreign object guardian.David Thompson2016-02-153-38/+37
| | | | | | | | | | | | | | | | | | | | | | Rather than each foreign resource type creating its own guardian, let's just use one instead so that there is only a single guardian to talk to each frame. * sly/guardian.scm: New file. * Makefile.am (SOURCES): Add it. * sly/game.scm (run-game-loop): Start guardian worker. * sly/render/mesh.scm (mesh-guardian): Delete. (free-mesh): New procedure. (make-mesh): Guard newly created meshes. * sly/render/shader.scm (shader-stage-guardian): Delete. (free-shader-stage): New procedure. (make-shader-stage): Guard newly created shader stages. (shader-guardian): Delete. (free-shader): New procedure. (make-shader): Guard newly created shaders. * sly/render/texture.scm (texture-guardian): Delete. (free-texture): New procedure. (make-texture): Guard newly created textures.
* Remove dead modules.David Thompson2016-02-112-285/+0
| | | | | | | | | These modules haven't been used in a long time, but were never deleted. Oops! * sly/render/model.scm: Delete. * sly/render/scene.scm: Delete. * Makefile.am (SOURCES): Remove them.
* render: framebuffer: Use the null texture within the null framebuffer.David Thompson2016-02-101-1/+2
| | | | | * sly/render/framebuffer.scm (null-framebuffer): Set texture to the null texture, rather than #f.
* render: framebuffer: Add framebuffer-null?David Thompson2016-02-101-0/+5
| | | | * sly/render/framebuffer.scm (framebuffer-null?): New procedure.
* render: font: Remove unused module imports.David Thompson2016-02-051-2/+0
|
* render: font: Add docstring for enable-fonts.David Thompson2016-02-051-3/+4
| | | | * sly/render/font.scm (enable-fonts): Add docstring.
* sprite: Add null-sprite.David Thompson2016-01-241-0/+4
| | | | * sly/render/sprite.scm (null-sprite): New variable.
* render: font: Add support for non-blended font rendering.David Thompson2016-01-121-4/+8
| | | | | * sly/render/font.scm (render-text): Add 'blended?' argument. (make-label): Add #:blended? keyword argument.
* render: sprite-batch: Unbind VAO *before* mapping buffers.David Thompson2016-01-021-27/+29
| | | | | | * sly/render/sprite-batch.scm (sprite-batch-flush): Don't worry about VAOs here. (with-sprite-batch): Unbind VAO before mapping vertex buffers.
* render: Add sprite batch.David Thompson2016-01-011-0/+259
| | | | | | | Finally, we can have decent sprite rendering performance! * sly/render/sprite-batch.scm: New file. * Makefile.am (SOURCES): Add it.
* render: mesh: Add support for streaming vertex buffers.David Thompson2016-01-011-13/+56
| | | | | | | | | | | * sly/render/mesh.scm (<vertex-buffer>)[length]: New field. (vertex-buffer-length): Now return the length in bytes. (vertex-buffer-element-length, make-streaming-vertex-buffer) (map-vertex-buffer!, unmap-vertex-buffer!): New procedures. (init-vertex-buffer-data!): Delete. (bytevector->vertex-buffer): Move body of 'init-vertex-buffer-data!' within. (make-mesh): Use 'vertex-buffer-element-length'.
* Upgrade to SDL2!David Thompson2015-12-222-57/+50
| | | | | | This commit is massive and crazy and I'm not going to do the usual GNU ChangeLog thing because it's just too much. Let's just be happy that the port is completed!
* render: shader: Rename <shader-program> to <shader>.David Thompson2015-11-152-144/+122
| | | | | | | | | | | | | | | | | | | | | | | | | | | | * sly/render.scm * sly/render/model.scm (null-model): Use 'null-shader'. * sly/render/shader.scm (<shader-stage>): Rename to <shader>. (<shader-program>): Rename to <shader>. (vertex-shader?, fragment-shader?): Rename to... (vertex-shader-stage?, fragment-shader-stage?): ...these. (shader-stage-guardian): New variable. (%shader-compiled?, shader-compiled?): Rename to... (%shader-stage-compiled?, shader-stage-compiled?): ...these. (display-compilation-error): Change 'shader' to 'stage'. (compile-shader, set-shader-source, make-shader, make-vertex-shader) (make-fragment-shader, load-shader, load-vertex-shader, load-fragment-shader): Rename to... (compile-shader-stage, set-shader-stage-source, make-shader-stage) (make-vertex-shader-stage, make-fragment-shader-stage) (load-shader-stage, load-vertex-shader-stage) (load-fragment-shader-stage): ...these. (shader-program-uniform-location, shader-program-linked?) (make-shader-program, load-shader-program, null-shader-program) (apply-shader-program): Rename to... (shader-uniform-location, shader-linked?, make-shader, load-shader) (null-shader, apply-shader): ...these. (with-shader): Delete. (uniform-set!): Change 'shader-program' argument to 'shader'. (%default-shader): Use 'load-shader'.
* render: shader: Remove 'attributes' field.David Thompson2015-11-141-32/+26
| | | | | | | | | | | | Attributes are fixed so the field is useless. * sly/render/shader.scm (shader-program-attribute-location): Delete. (<shader-program>): Delete 'attributes' field. (make-shader-program): Remove 'attributes' argument. (load-shader-program): Likewise. Change arguments from positional to keyword. (%default-shader): New variable. (load-default-shader): Reimplement in terms of promises.
* config: Fix data directory.David Thompson2015-11-122-5/+3
| | | | | | | | | | | | | | | | | | This was all messed up: - 'pkgdatadir' wasn't something that could be substituted via autoconf - I was still using "GUILE_2D" in the data dir env var name Now it's all better and Sly data should be able to be found from the pre-installation environment *and* the installation prefix. * configure.ac (sly_prefix, sly_datadir): New variables. * pre-inst-env.in: Set SLY_DATADIR. * sly/config.scm.in (%pkgdatadir): Delete. (%datadir): New variable. Use SLY_DATADIR env var or the configured datadir. * sly/render/font.scm (load-default-font): Use %datadir. * sly/render/shader.scm (load-default-shader): Likewise.
* render: mesh: Clean up style a bit.David Thompson2015-11-091-15/+33
|
* render: shape: Fix make-cube.David Thompson2015-11-091-5/+7
| | | | | | Forgot to update this one to the new rendering API. * sly/render/shape.scm (make-cube): Use render combinators.
* render: camera: Add 3d-camera procedure.David Thompson2015-11-091-1/+12
| | | | * sly/render/camera.scm (3d-camera): New procedure.
* render: Reimplement rendering engine using functional combinators.David Thompson2015-09-217-173/+220
| | | | | | | | | | | Warning: This is a huge commit. I completely gutted the old scene graph and replaced it with a somewhat monadic rendering combinator module instead. The interface remains purely functional, but replaces the <model> data type with procedures in the rendering monad instead. This opens the door for rendering *anything*, not just meshes. Now I can implement particle systems and other non-static things.
* render: mesh: Tweak with-mesh to use null-mesh.David Thompson2015-09-091-1/+1
| | | | | * sly/render/mesh.scm (with-mesh): Apply the null-mesh after evaluating the body.
* render: mesh: Add custom record type printer.David Thompson2015-09-091-0/+9
| | | | | | | | This avoids an issue where debugging output would be clogged by dumping *all* of the vertex information for large meshes. * sly/render/mesh.scm (<mesh>): Add record type printer that doesn't print out the vertices.
* render: Add separate projection and model-view matrix stacks.David Thompson2015-09-092-22/+18
| | | | | | | | | | | | | | | Just like the Opengl 2.x days! ;) * sly/render.scm (graphics-transform, graphics-transform-mul!, graphics-transform-identity!): Delete. (graphics-model-view-transform, graphics-model-view-mul!, graphics-model-view-identity!, graphics-projection-transform, graphics-projection-mul!, graphics-projection-identity!): New procedures. (with-model-view-excursion, with-projection-excursion): New syntax. (call-with-transform-excursion): Move matrix copying out of the "in guard." (draw-scene): Use new matrix stacks.
* render: Reimplement OpenGL state machine manager.David Thompson2015-08-263-228/+28
| | | | | | | | | | | | | The implementation is a bit cleaner, and it's a stepping stone towards render combinators. * sly/render/context.scm: Delete. * sly/render.scm: New file. * Makefile.am (SOURCES): Add it. Remove context.scm. * sly/game.scm (run-game-loop): Use new <graphics> type. * sly/render/model.scm (draw-model): Likewise. * sly/render/scene.scm (draw-scene): Likewise. * examples/2048/2048.scm: Remove (sly render context) import.
* Optimize matrix operations.David Thompson2015-08-252-4/+5
| | | | | | | | | | | | | | | | | | | | | Guile's array procedures are slow, so switch to using raw bytevectors instead. Additionally, converting the bytevector to a pointer is also slow, so the pointer is now cached for redundant calls. There's more to be done, but this was low hanging fruit. * sly/math/transform.scm (<transform>)[ptr]: New field. (transform-ptr): New accessor. (set-transform-ptr!): New setter. (make-4x4-matrix): Implement using bytevectors. (matrix-set!, matrix-ref): New procedures. (make-transform, transform-vector2, transform-position): Use 'matrix-set!' and 'matrix-ref'. (transpose, transform+, transform*): Use new transform constructor. (transform->pointer): Cache pointer. * sly/render/context.scm (copy-transform!): Use 'bytevector-copy!' * sly/render/shader.scm: Use 'transform->pointer' in the transform uniform setter.
* render: model: Add model-scale.David Thompson2015-06-061-0/+6
| | | | * sly/render/model.scm (model-scale): New procedure.
* render: Add <scene> record type.David Thompson2015-06-063-50/+134
| | | | | | | | | | | * sly/render/scene.scm: New file. * Makefile.am (SOURCES): Add it. * sly/render/camera.scm (apply-viewport): Do not clear viewport. (clear-viewport): New procedure. * sly/render/model.scm (model-sub-scene): New accessor. (make-model): Add #:sub-scene keyword argument. (draw-sub-scene): New variable. (draw-model): Remove rendering initialization code. Render sub-scenes.
* render: context: Add with-render-context-excursion macro.David Thompson2015-06-061-1/+22
| | | | * sly/render/context.scm (with-render-context-excursion): New syntax.
* render: context: Add framebuffer and viewport fields.David Thompson2015-06-061-1/+18
| | | | | | | | | * sly/render/context.scm (render-context-framebuffer, render-context-viewport): New accessors. (make-render-context): Initialize new GL parameters. (render-context-reset!): Reset new GL parameters. (set-render-context-framebuffer!, set-render-context-viewport!): New procedures.
* render: framebuffer: Tweak interface.David Thompson2015-06-061-7/+8
| | | | | | * sly/render/framebuffer.scm (null-framebuffer): New variable. (apply-framebuffer): New procedure. (with-framebuffer): Delete.
* render: camera: Add null-viewport.David Thompson2015-06-061-0/+3
| | | | * sly/render/camera.scm (null-viewport): New variable.
* render: Bypass texture rendering when a model uses the null texture.David Thompson2015-06-062-1/+2
| | | | | | | | | * data/shaders/default-fragment.glsl (use_texture): New uniform. (main): Skip texture rendering when 'use_texture' is false. * sly/render/model.scm (draw-model): Set 'use_texture' uniform before rendering. * sly/render/shader.scm (load-default-shader): Register 'use_texture' uniform.
* render: texture: Add texture-null? procedure.David Thompson2015-06-061-0/+5
| | | | * sly/render/texture.scm (texture-null?): New procedure.
* render: model: Add null-model.David Thompson2015-04-051-2/+15
| | | | | | * sly/render/model.scm (null-model): New variable. (model-null?): New procedure. (draw-model): Test for null models.
* render: model: Prefix procedures with 'model-'.David Thompson2015-04-051-9/+14
| | | | | | | | | | | | | | * sly/render/model.scm (paint, blend, group, group*, move, place): Renamed. (model-paint, model-blend, model-group, list->model, model-move, model-place): New procedures. * README.org (Example): s/move/model-move/ * examples/2048/2048.scm: Update example. * examples/mines/mines.scm: Likewise. * examples/animation.scm: Likewise. * examples/font.scm: Likewise. * examples/joystick.scm: Likewise. * examples/simple.scm: Likewise. * examples/tilemap.scm: Likewise.
* render: context: Rewrite transform stack.David Thompson2015-03-122-25/+53
| | | | | | | | | * sly/render/context.scm (with-temp-transform): Delete. (render-context-transform, render-context-transform*!, render-context-transform-identity!, render-context-push-transform!, render-context-pop-transform!, copy-transform!): New procedures. (with-transform-excursion): New syntax. (render-context-reset!): Set top of matrix stack to identity matrix.
* render: context: Use GL parameters.David Thompson2015-03-111-54/+34
| | | | | | | | | | | | * sly/render/context.scm (%set-render-context-blend-mode!, %set-render-context-depth-test!?, %set-render-context-texture!, %set-render-context-shader!, %set-render-context-mesh!): Delete. (make-render-context): Create GL parameters. (render-context-reset!): Reset GL parameters. (define-context-setter): New syntax. (set-render-context-blend-mode!, set-render-context-depth-test!?, set-render-context-texture!, set-render-context-shader!, set-render-context-mesh!): Define in terms of 'define-context-setter'.
* render: shader: Add null-shader-program.David Thompson2015-03-111-1/+3
| | | | * sly/render/shader.scm (null-shader-program): New variable.
* render: texture: Ensure 2D textures are enabled when applying texture.David Thompson2015-03-111-1/+3
| | | | | * sly/render/texture.scm (apply-texture): Enable 2D textures before binding texture.
* render: utils: Add apply-depth-test.David Thompson2015-03-111-1/+7
| | | | * sly/render/utils (apply-depth-test): New procedure.
* render: utils: Improve apply-blend-mode.David Thompson2015-03-111-3/+8
| | | | | * sly/render/utils.scm (apply-blend-mode): Enable/disable blending when necessary.
* render: context: Add GL parameter type.David Thompson2015-03-111-0/+18
| | | | | | | | | | * sly/render/context.scm (<gl-parameter>): New record type. (%make-gl-parameter, make-gl-parameter, gl-parameter?, gl-parameter-default, gl-parameter-bind, gl-parameter-ref, %gl-parameter-set!, gl-parameter-set!, gl-parameter-reset!): New procedures. Fixup gl-parameter
* render: utils: Remove generic draw method.David Thompson2015-03-111-5/+1
| | | | * sly/render/utils.scm (draw): Delete.
* render: Remove shader argument from sprite and label constructors.David Thompson2015-03-092-15/+7
| | | | | * sly/render/font.scm (make-label): Remove 'shader' keyword argument. * sly/render/sprite.scm (make-sprite): Likewise.
* render: Merge <group> into <model>.David Thompson2015-03-092-166/+93
| | | | | | | | | | | | | | | | | | | | * sly/render/model.scm (<model>): Add 'transform' and 'children' fields. (model-transform, model-children): New accessors. (make-model): Add 'transform' and 'children' keyword arguments. (set-transform-identity!): New procedure. (draw-model): Recursively draw model and all children. (model-paint, model-blend): Renamed. (paint, blend, group, group*, move, place): New procedures. * sly/render/group.scm: Delete. * Makefile.am (SOURCES): Remove it. * examples/2048/2048.scm: Update example. * examples/animation.scm: Likewise. * examples/font.scm: Likewise. * examples/joystick.scm: Likewise. * examples/mines/mines.scm: Likewise. * examples/simple.scm: Likewise. * examples/tilemap.scm: Likewise. * README.org (Example): Update sample code.