From e580d11c886a9b7cfa6474544915044e1b5090f7 Mon Sep 17 00:00:00 2001 From: David Thompson Date: Fri, 5 Feb 2016 13:48:58 -0500 Subject: Update TODO list. --- TODO.org | 111 ++++++++++++++++++++++++++++++++++++++++++++++++++------------- 1 file 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 -- cgit v1.2.3