summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Thompson <dthompson2@worcester.edu>2016-05-18 16:25:10 -0400
committerDavid Thompson <dthompson2@worcester.edu>2016-05-18 16:25:10 -0400
commit5bb434f3be0acc670897bb7db39c179e93851aed (patch)
tree1724b24258581e734428a7c9e5f74868cce2ae10
parent54ac76dfae3bb7b0b6cefe0500f5c41bae84d5ea (diff)
Update TODO list.
-rw-r--r--TODO.org68
1 files changed, 46 insertions, 22 deletions
diff --git a/TODO.org b/TODO.org
index b77322f..05977a3 100644
--- a/TODO.org
+++ b/TODO.org
@@ -1,6 +1,15 @@
* Features
-** TODO [#A] Smooth animation helper
+** TODO [#A] sexp->glsl compiler
+ Port http://wiki.call-cc.org/eggref/4/glls to Guile? Meh, probably
+ best to write something new that fits with Sly more.
+
+ The meta-language ought to be purely functional. Would be nice if
+ the sexp->glsl conversion happened at compile time rather than
+ runtime, so Guile can spit out errors if shader code has syntax
+ problems.
+
+** TODO [#B] Smooth animation helper
Remove the temporal aliasing in animation by interpolating between
current and previous state of animated objects.
@@ -70,11 +79,6 @@
Press A to kick, then forward + B to uppercut, within 30 frames
time.
-** TODO [#C] Shaders
- - [X] Shader data type
- - [ ] Scheme -> GLSL compiler
- Port http://wiki.call-cc.org/eggref/4/glls to guile?
-
** TODO [#C] "Nine patches"
Images that have a resizable central area but fixed width/height
edges. See [[https://developer.android.com/guide/topics/graphics/2d-graphics.html#nine-patch][this Android document]] for details.
@@ -88,24 +92,28 @@
just stay synchronous.
** TODO [#C] Lighting
- Ambient, point, directional, etc.
+ Ambient, point, directional, etc. Requires GLSL shaders for each
+ light types.
** TODO [#C] Instanced rendering
A nice optimization when rendering the same mesh a bunch of times.
+ Should be very handy for particle systems.
* Improvements
-** TODO [#A] Implement <rect>, <vector2>, <vector3>, and <vector4> as packed f64 bytevectors
- Currently, it's expensive to use these types when performing OpenGL
- operations such as writing to vertex buffer objects because Guile
- does scm->f64 conversions before writing to a bytevector. To take
- advantage of Guile 2.2's float unboxing, we can implement these
- types as a record type with one field: a bytevector. The
- bytevector will store all of the fields packed together. To take
- advantage of unboxing, the procedures that get/set these "fields"
- should be inlined.
+** TODO [#A] Turn <graphics> type into <gpu> type
+ I think this name makes more sense, because it's managing GPU
+ client state.
-** TODO [#B] Clean up imperative rendering API
+** TODO [#A] Remove model/view/projection matrix stacks
+ I don't think this kind of state belongs at the lowest level of the
+ API, and it has implications on the rest of the rendering API.
+ Right now we assume that shaders have mat4 uniforms named "model",
+ "view", and "projection" and set them before we render any mesh.
+ This is too limiting, so removing the matrix stacks allows us to
+ remove the mandated uniforms.
+
+** TODO [#A] Clean up imperative rendering API
The functional, monadic rendering API is nice and clean, but the
low-level imperative API is very messy. Perhaps it could use some
syntactic sugar for all of the "call-with-foo" forms. Also, a
@@ -116,15 +124,21 @@
realize that writing custom low-level rendering routines will be
common enough to merit a nice API.
-** TODO [#B] Treat shaders like procedures
- One can view a draw call as the application of a shader program.
- The arguments to the shader program are uniforms and vertices.
-
-** TODO [#B] Use uniform buffer objects
+** TODO [#A] Use uniform buffer objects
Uniform buffer objects allow setting many uniform values at once,
rather than performing a GPU call for each, which results in better
performance.
+** TODO [#B] Implement <rect>, <vector2>, <vector3>, and <vector4> as packed f64 bytevectors
+ Currently, it's expensive to use these types when performing OpenGL
+ operations such as writing to vertex buffer objects because Guile
+ does scm->f64 conversions before writing to a bytevector. To take
+ advantage of Guile 2.2's float unboxing, we can implement these
+ types as a record type with one field: a bytevector. The
+ bytevector will store all of the fields packed together. To take
+ advantage of unboxing, the procedures that get/set these "fields"
+ should be inlined.
+
** TODO [#C] inotify-based live reloading
Better than periodically making 'stat' calls in a loop.
@@ -409,3 +423,13 @@
:END:
Provide a purely functional means of scripting objects using a
monadic combinator interface.
+
+** TODO [#A] Shaders
+ :PROPERTIES:
+ :ARCHIVE_TIME: 2016-05-18 Wed 16:11
+ :ARCHIVE_FILE: ~/Code/sly/TODO.org
+ :ARCHIVE_OLPATH: Features
+ :ARCHIVE_CATEGORY: TODO
+ :ARCHIVE_TODO: TODO
+ :END:
+ Shader data type