From 5bb434f3be0acc670897bb7db39c179e93851aed Mon Sep 17 00:00:00 2001 From: David Thompson Date: Wed, 18 May 2016 16:25:10 -0400 Subject: Update TODO list. --- TODO.org | 68 +++++++++++++++++++++++++++++++++++++++++++--------------------- 1 file 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 , , , and 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 type into 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 , , , and 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 -- cgit v1.2.3