summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Thompson <dthompson2@worcester.edu>2016-02-27 12:01:49 -0500
committerDavid Thompson <dthompson2@worcester.edu>2016-02-27 12:01:49 -0500
commit5fd5074f5d664a8c0efee4b8b295109856de0ff8 (patch)
tree9b16c027143715a23470fb58d13dc50b658a3a59
parent9b1e6a5f6428f63ad6d4742629b0dd8ea1477e88 (diff)
TODO: Move DONE items below TODOs.
-rw-r--r--TODO.org216
1 files 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] <tileset> 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] <tileset> 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 <rect>, <vector2>, <vector3>, and <vector4> 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