From 5fd5074f5d664a8c0efee4b8b295109856de0ff8 Mon Sep 17 00:00:00 2001 From: David Thompson Date: Sat, 27 Feb 2016 12:01:49 -0500 Subject: TODO: Move DONE items below TODOs. --- TODO.org | 216 +++++++++++++++++++++++++++++++-------------------------------- 1 file changed, 108 insertions(+), 108 deletions(-) diff --git a/TODO.org b/TODO.org index 3e8baee..4e1e4f7 100644 --- a/TODO.org +++ b/TODO.org @@ -8,84 +8,6 @@ Provide a purely functional means of scripting objects using a monadic combinator interface. -** DONE [#A] Game loop - Provide a game loop structure that responds to input events, - updates the game state, renders the scene. Use a fixed update - timestep and cap the maximum FPS. - -** DONE [#A] Input - Provide hooks to respond to keyboard, mouse, and joystick events. - Wrap SDL keycode, mouse button, etc. constants in our own - enumeration. - - - [X] Keyboard - - [X] Mouse - - [X] Window (active, resize, quit) - - [X] Joystick - -** DONE [#A] Sprites - Encapsulates an image and all of its transformations: position, - rotation, scale, color, etc. - - - [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 - -** DONE [#A] 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. - - - Use streaming vertex buffers - - See: https://www.opengl.org/wiki/Buffer_Object#Mapping - - See: https://www.opengl.org/wiki/Buffer_Object_Streaming - - See: https://bitbucket.org/rude/love/src/d95dfb67079a60f8de64304dac9002544695f1bb/src/modules/graphics/opengl/SpriteBatch.cpp?at=default - -** DONE [#A] Tilesets - Break an image up into many small pieces. Useful for creating maps. - - - [X] Algorithm to split texture into tiles - - [X] type - -** DONE [#A] Coroutines - Provide a way for users to easily script asynchronous behaviors - using coroutines and a scheduler. - - - [X] Coroutines - - [X] Agenda - -** DONE [#A] Vectors and matrices - Vectors and matrices are needed constantly for games. Provide an - easy-to-use module that provides procedures for common - vector/matrix math operations - - - [X] Vectors - - [X] Matrices - -** DONE [#A] Fonts - - [X] Write wrappers for needed FTGL functions - - [X] Write font rendering procedures - -** DONE [#A] Sound - Provide helpful wrappers around SDL sound procedures? - -** DONE [#A] REPL - Provide a REPL that plays nice with the game loop. Easier said than - done. - - - [X] Modify Guile's REPL to work with the game loop - - Short-term solution that *mostly* works - - [X] Write a new REPL that runs in the current thread - - Use coroutines - - Read user input from a separate thread so as to not block the - main thread - - Will be available in Guile 2.0.10! - -** DONE [#A] Upgrade to SDL2 - - Write necessary bindings and release [[https://git.dthompson.us/guile-sdl2.git][guile-sdl2]]. - - Replace freeimage with sdl_image 2.0 - ** TODO [#B] Bitmap font rendering from tileset Some fonts aren't available in TTF format, only as a tileset image. It would very useful for 2D games to be able to render these. Even @@ -107,13 +29,6 @@ again, but there's probably some nicer abstraction that could clean this up. -** DONE [#B] Animations - Create a data type to represent an animated sequence of textures - and/or texture regions. - -** DONE [#B] Asset Management - - [X] Live asset reloading - ** TODO [#C] Tile maps - [ ] Create a generic tilemap module - [ ] Create a loader for Tiled .tmx map files. @@ -182,6 +97,91 @@ ** TODO [#C] Instanced rendering A nice optimization when rendering the same mesh a bunch of times. +** DONE [#A] Game loop + Provide a game loop structure that responds to input events, + updates the game state, renders the scene. Use a fixed update + timestep and cap the maximum FPS. + +** DONE [#A] Input + Provide hooks to respond to keyboard, mouse, and joystick events. + Wrap SDL keycode, mouse button, etc. constants in our own + enumeration. + + - [X] Keyboard + - [X] Mouse + - [X] Window (active, resize, quit) + - [X] Joystick + +** DONE [#A] Sprites + Encapsulates an image and all of its transformations: position, + rotation, scale, color, etc. + + - [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 + +** DONE [#A] 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. + + - Use streaming vertex buffers + - See: https://www.opengl.org/wiki/Buffer_Object#Mapping + - See: https://www.opengl.org/wiki/Buffer_Object_Streaming + - See: https://bitbucket.org/rude/love/src/d95dfb67079a60f8de64304dac9002544695f1bb/src/modules/graphics/opengl/SpriteBatch.cpp?at=default + +** DONE [#A] Tilesets + Break an image up into many small pieces. Useful for creating maps. + + - [X] Algorithm to split texture into tiles + - [X] type + +** DONE [#A] Coroutines + Provide a way for users to easily script asynchronous behaviors + using coroutines and a scheduler. + + - [X] Coroutines + - [X] Agenda + +** DONE [#A] Vectors and matrices + Vectors and matrices are needed constantly for games. Provide an + easy-to-use module that provides procedures for common + vector/matrix math operations + + - [X] Vectors + - [X] Matrices + +** DONE [#A] Fonts + - [X] Write wrappers for needed FTGL functions + - [X] Write font rendering procedures + +** DONE [#A] Sound + Provide helpful wrappers around SDL sound procedures? + +** DONE [#A] REPL + Provide a REPL that plays nice with the game loop. Easier said than + done. + + - [X] Modify Guile's REPL to work with the game loop + - Short-term solution that *mostly* works + - [X] Write a new REPL that runs in the current thread + - Use coroutines + - Read user input from a separate thread so as to not block the + main thread + - Will be available in Guile 2.0.10! + +** DONE [#A] Upgrade to SDL2 + - Write necessary bindings and release [[https://git.dthompson.us/guile-sdl2.git][guile-sdl2]]. + - Replace freeimage with sdl_image 2.0 + +** DONE [#B] Animations + Create a data type to represent an animated sequence of textures + and/or texture regions. + +** DONE [#B] Asset Management + - [X] Live asset reloading + * Improvements ** TODO [#A] Implement , , , and as packed f64 bytevectors @@ -194,6 +194,29 @@ advantage of unboxing, the procedures that get/set these "fields" should be inlined. +** TODO [#B] 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 [#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 + Uniform buffer objects allow setting many uniform values at once, + rather than performing a GPU call for each, which results in better + performance. + +** TODO [#C] inotify-based live reloading + Better than periodically making 'stat' calls in a loop. + ** DONE [#A] 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 @@ -218,34 +241,11 @@ 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. -** TODO [#B] 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 [#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 - Uniform buffer objects allow setting many uniform values at once, - rather than performing a GPU call for each, which results in better - performance. - ** DONE [#B] 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 [#C] inotify-based live reloading - Better than periodically making 'stat' calls in a loop. - * Documentation ** TODO Document rendering API -- cgit v1.2.3