| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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.
|
|
|
|
|
| |
* sly/render/sprite-batch.scm (sprite-batch-add!): Take better advantage
of local variables to reduce lookups, add a comment, and reformat.
|
|
|
|
|
|
|
| |
* 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!'
|
|
|
|
|
| |
* sly/render/mesh.scm (vertex-buffer-element-length): Use the cached
length of the buffer bytevector.
|
|
|
|
|
| |
* sly/render/texture.scm (texture-vertex, pack-texture-vertices,
draw-texture-vertices): Delete.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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.
|
|
|
|
|
|
|
|
|
| |
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.
|
|
|
|
|
| |
* sly/render/framebuffer.scm (null-framebuffer): Set texture to the null
texture, rather than #f.
|
|
|
|
| |
* sly/render/framebuffer.scm (framebuffer-null?): New procedure.
|
| |
|
|
|
|
| |
* sly/render/font.scm (enable-fonts): Add docstring.
|
|
|
|
| |
* sly/render/sprite.scm (null-sprite): New variable.
|
|
|
|
|
| |
* sly/render/font.scm (render-text): Add 'blended?' argument.
(make-label): Add #:blended? keyword argument.
|
|
|
|
|
|
| |
* sly/render/sprite-batch.scm (sprite-batch-flush): Don't worry about
VAOs here.
(with-sprite-batch): Unbind VAO before mapping vertex buffers.
|
|
|
|
|
|
|
| |
Finally, we can have decent sprite rendering performance!
* sly/render/sprite-batch.scm: New file.
* Makefile.am (SOURCES): Add it.
|
|
|
|
|
|
|
|
|
|
|
| |
* 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'.
|
|
|
|
|
|
| |
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!
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* 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'.
|
|
|
|
|
|
|
|
|
|
|
|
| |
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.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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.
|
| |
|
|
|
|
|
|
| |
Forgot to update this one to the new rendering API.
* sly/render/shape.scm (make-cube): Use render combinators.
|
|
|
|
| |
* sly/render/camera.scm (3d-camera): New procedure.
|
|
|
|
|
|
|
|
|
|
|
| |
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.
|
|
|
|
|
| |
* sly/render/mesh.scm (with-mesh): Apply the null-mesh after evaluating
the body.
|
|
|
|
|
|
|
|
| |
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.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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.
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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.
|
|
|
|
| |
* sly/render/model.scm (model-scale): New procedure.
|
|
|
|
|
|
|
|
|
|
|
| |
* 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.
|
|
|
|
| |
* sly/render/context.scm (with-render-context-excursion): New syntax.
|
|
|
|
|
|
|
|
|
| |
* 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.
|
|
|
|
|
|
| |
* sly/render/framebuffer.scm (null-framebuffer): New variable.
(apply-framebuffer): New procedure.
(with-framebuffer): Delete.
|
|
|
|
| |
* sly/render/camera.scm (null-viewport): New variable.
|
|
|
|
|
|
|
|
|
| |
* 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.
|
|
|
|
| |
* sly/render/texture.scm (texture-null?): New procedure.
|
|
|
|
|
|
| |
* sly/render/model.scm (null-model): New variable.
(model-null?): New procedure.
(draw-model): Test for null models.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* 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.
|
|
|
|
|
|
|
|
|
| |
* 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.
|
|
|
|
|
|
|
|
|
|
|
|
| |
* 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'.
|
|
|
|
| |
* sly/render/shader.scm (null-shader-program): New variable.
|
|
|
|
|
| |
* sly/render/texture.scm (apply-texture): Enable 2D textures before
binding texture.
|
|
|
|
| |
* sly/render/utils (apply-depth-test): New procedure.
|
|
|
|
|
| |
* sly/render/utils.scm (apply-blend-mode): Enable/disable blending when
necessary.
|
|
|
|
|
|
|
|
|
|
| |
* 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
|
|
|
|
| |
* sly/render/utils.scm (draw): Delete.
|
|
|
|
|
| |
* sly/render/font.scm (make-label): Remove 'shader' keyword argument.
* sly/render/sprite.scm (make-sprite): Likewise.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* 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.
|