summaryrefslogtreecommitdiff
path: root/TODO.org
diff options
context:
space:
mode:
Diffstat (limited to 'TODO.org')
-rw-r--r--TODO.org111
1 files changed, 88 insertions, 23 deletions
diff --git a/TODO.org b/TODO.org
index 70b0ba3..c4aeafb 100644
--- a/TODO.org
+++ b/TODO.org
@@ -1,4 +1,4 @@
-* Things To Do
+* Features
** DONE Game loop
Provide a game loop structure that responds to input events,
@@ -19,12 +19,12 @@
Encapsulates an image and all of its transformations: position,
rotation, scale, color, etc.
- - [X] Use FreeImage
+ - [X] Use SDL2_image
- [X] Add support for texture regions
- [X] Add support for animations
- [X] Use a sprite batch when drawing if one is currently bound
-** TODO Sprite batches
+** DONE Sprite batches
Efficiently render a large number of sprites. Only change OpenGL
context when necessary. For example, don't change texture when
rendering several sprites in a row that use the same one.
@@ -94,13 +94,7 @@
- [ ] Investigate ways to make it fast. Use guile-compost for
performance reasons.
-** TODO Asset Management
- Provide a generic system for loading assets (images, sounds, fonts,
- etc.) and storing them in a cache. Explore using weak keys so that
- assets are removed from the cache when they are no longer
- referenced.
-
- - [ ] Create asset cache
+** DONE Asset Management
- [X] Live asset reloading
** TODO Keymaps
@@ -138,6 +132,7 @@
- Will be available in Guile 2.0.10!
** TODO Shaders
+ - [X] Shader data type
- [ ] Scheme -> GLSL compiler
Port http://wiki.call-cc.org/eggref/4/glls to guile?
@@ -173,7 +168,89 @@
cube is 6 squares, etc. A triangle has 3 vertices with a
particular winding.
-* Release TODO
+** TODO 3D model file loader
+ Use guile-assimp to support loading many 3D model file formats.
+
+** TODO Lighting
+ Ambient, point, directional, etc.
+
+** TODO Multi-pass rendering pipelines
+ It's possible to do multi-pass rendering now by binding
+ framebuffers, shaders, etc. and running the same rendering code
+ again, but there's probably some nicer abstraction that could clean
+ this up.
+
+** TODO Instanced rendering
+ A nice optimization when rendering the same mesh a bunch of times.
+
+* Improvements
+
+** TODO 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
+ naming convention needs to clearly differentiate procedures/macros
+ in the imperative API from those in the high-level API.
+ Originally, I didn't expect users to really ever have to use the
+ imperative API, but the introduction of sprite batches has made me
+ realize that writing custom low-level rendering routines will be
+ common enough to merit a nice API.
+
+** TODO Allow modules to declare state via signals, including OpenGL resources
+ This is a tricky one. The major headache with my Lisp Game Jam
+ attempt was that the signal framework had to be abandoned
+ *everywhere* except the top-level environment of the script that
+ starts the game loop. The reason for this was that the game state
+ typically required that the SDL window was opened and the OpenGL
+ context was available in order to work. Thus, at the top-level, we
+ first had to open a window and only then could we define signals.
+ The goal here would be to eliminate this major restriction so that
+ a game can be factored into many Guile modules and still declare
+ time varying state with signals. One important consequence here is
+ that all OpenGL resources *must* be declared as signals that wait
+ for the game loop to start before loading.
+
+** TODO Use a single OpenGL resource guardian structure
+ This will deduplicate code amongst all Scheme data types that wrap
+ OpenGL resources, because right now each one uses its own separate
+ guardian.
+
+** TODO Separate vertex arrays from meshes
+ Currently, a mesh is a vertex array. This is bad because vertex
+ arrays are useful in situations where the static mesh abstraction
+ isn't a good fit, such as with sprite batches. Therefore, a vertex
+ array should have its own dedicated data type that both meshes and
+ sprite batches use in their respective implementations.
+
+** TODO inotify-based live reloading
+ Better than periodically making 'stat' calls in a loop.
+
+** TODO Pure Scheme 4x4 matrix multiplication implementation
+ Guile 2.1.2's float unboxing optimizations should enable this to be
+ both fast and not allocate so much. The GSL dependency can be
+ removed (yay!) once this is complete. Be sure to use Guile's ,x
+ metacommand to view the disassembly to ensure that the necessary
+ optimizations are indeed being used.
+
+* Documentation
+
+** TODO Document rendering API
+ I can't settle on a rendering API, so I haven't bothered making
+ good docs for it. Once the above rendering tasks are complete,
+ it's probably safe to write docs.
+
+** TODO Write a tutorial
+ Walk a beginner through the basic features of Sly and establish a
+ simple development workflow.
+
+ - Start the game loop
+ - Render a sprite
+ - Move the sprite
+ - Live hack
+
+* Bugs
+
+* Releases
** DONE 0.1 Release
A 0.1 release was made under the project's old name, guile-2d. Now
@@ -189,15 +266,3 @@
- [X] Finish FRP module
- [X] Make basic webpage with HTML docs
- [X] Basic rendering (must support sprites and text)
-
-** TODO January 2016 Lisp Game Jam
-
-*** Blockers
-
- - Sprite batches
- - Sound effects and music support
-
-*** Nice to haves
-
- - SDL2 migration
- - Guix-based standalone binary creation script