diff options
author | David Thompson <dthompson2@worcester.edu> | 2022-12-06 08:23:29 -0500 |
---|---|---|
committer | David Thompson <dthompson2@worcester.edu> | 2022-12-06 08:23:29 -0500 |
commit | df6b92b71b073aac65035471ecad8c3c2707be57 (patch) | |
tree | a08194fb7a4dd73c31197c132dcc0da4a614b883 | |
parent | 1036cf1a2b4a9550ca253da5f70ad745c5a9e111 (diff) |
Add TODO.org file.
-rw-r--r-- | TODO.org | 168 |
1 files changed, 168 insertions, 0 deletions
diff --git a/TODO.org b/TODO.org new file mode 100644 index 0000000..ac3c9c8 --- /dev/null +++ b/TODO.org @@ -0,0 +1,168 @@ +* Tasks +** TODO [#A] Fix 9 patch rendering not working with texture regions +** TODO [#A] Add #:clear-color argument to run-game +** TODO [#A] Improve window resizing support +For example, there's no user hook to handle a resize event. +** TODO [#A] Scheme -> GLSL compiler +Like CL's varjo but for Guile. Start with a simple sexp -> GLSL +serializer. + +Goals: +- Scheme-like syntax +- Embeddable within Scheme source files +- Compiles to GLSL during regular Guile compilation +- Clean interface for passing data from Scheme to shaders +- Implicit returns in tail position (no 'return' keyword) +- Everything is an expression +- Type inference +- Macros +- Nested functions if they are hoistable (no free variables aka not + closures) +- Shader composition + +#+BEGIN_SRC scheme + ;; Input vertices are positional arguments, uniforms are keyword + ;; arguments. + (define (sprite-vertex (vec2 position) (vec2 tex) #:key (mat4 mvp)) + ;; First argument returned is the vertex position, all others get + ;; mapped to fragment shader inputs. + (values (* mvp (vec4 (-> position x) (-> position y) 0.0 1.0)) + tex)) + + (define (sprite-fragment (vec2 ))) +#+END_SRC + +** TODO [#A] Tests for (chickadee math rect) +** TODO [#A] Switch from OpenAL to custom Scheme mixer +I've decided that OpenAL is too high level to be a library that +Chickadee should rely upon, since part of the goal of Chickadee is to +implement as much as possible in Scheme and only resort to C if +absolutely necessary. Instead, we can use SDL2's cross-platform audio +API and implement all the audio mixing directly in Scheme. +** TODO [#A] Ditch the readline dependency +Figure out how to get back to using Guile's built-in REPL for +=chickadee play= so the custom can go away. Readline is hard to make +work in an async manner. +** TODO [#B] Dedicated audio thread +Allow use of (ice-9 futures) for parallelism? +** TODO [#B] Texture fills for vector paths +** TODO [#B] Even-odd rule fills for vector paths +Right now only the non-zero rule is supported. +** TODO [#B] Add shear transformations to vector paths +** TODO [#B] Dashed lines for stroked vector paths +** TODO [#B] Mitered corners for stroked vector paths +** TODO [#B] Text rendering for vector paths +** TODO [#B] Add screenshots to manual +** TODO [#B] Improve particle system +Allow more settings to be modified. Add angular velocity. +Auto-expand to hold all particles rather than setting a hard cap +upfront. +** TODO [#B] Support loading fonts from system font cache +** TODO [#C] Binary bundles for MacOS +** TODO [#C] GPU pipeline data structure +Like this: https://reader.tymoon.eu/article/363 +** TODO [#C] 2D physics simulation +Add bindings for the chipmunk library or implement a rigid body +simulator in Scheme. +** TODO [#C] Multiplayer networking +Take a look at Xelf's UDP networking code and https://gafferongames.com/categories/building-a-game-network-protocol/ +** TODO [#C] Render command queue processing +To replace existing immediate mode rendering +** TODO [#C] Uniform buffers +Need some way to support these while falling back to the current, slow +way that is compatible with OpenGL 2.1. +** TODO [#C] Signed distance field font rendering +** TODO [#C] Physically-based ambient lighting +The PBR shader currently does image based ambient lighting in a very +naive way that does not use physically-based equations. +** TODO [#C] Right-to-left text rendering +** TODO [#C] Top-to-bottom text rendering +** TODO [#C] Octree spatial partitioning +** DONE [#A] Add matrix{3,4}-copy! procedures +** DONE [#A] Load palleted PNGs +** DONE [#A] Remove SDL2-image dependency +Directly link against libpng and libjpeg-turbo, for starters. Support +for other formats can be added later. This will give us more +flexibility since we won't be tied to SDL surfaces and thus a single +thread for image loading. +** DONE [#A] Fix keyboard layout bug +For example, someone with a QWERTZ keyboard layout, when they press +their Z key, will invoke the key-press handler with the Z key, but +(key-pressed? 'z) will be false and (key-pressed? 'y) will be true. +** DONE [#B] Quadtree spatial partitioning +** DONE [#B] Add arc-to procedure for vector paths +** DONE [#A] Tests for (chickadee data array-list) +** DONE [#A] Tests for (chickadee data heap) +** DONE [#A] Tests for (chickadee data queue) +** DONE [#A] Update rendering engine docs +** DONE [#A] Update live coding section of manual +** DONE [#A] Document polygon, cull face, depth test, stencil modes +** DONE [#A] Document cube map texture procedures +** DONE [#A] Document materials, lights, and meshes +** DONE [#A] Add intensity field to lights +** DONE [#A] Test suite +** DONE [#A] Binary bundles for Linux +For easy distribution of builds so players don't have to build +anything from source. +** DONE [#A] Mipmapping +** DONE [#A] Skyboxes +** DONE [#A] Basic 3D shape primitives +Plane, tesselated plane, sphere, cube +** DONE [#A] Image based lighting for 3D models +Cube maps and such. See: +https://learnopengl.com/PBR/IBL/Diffuse-irradiance +** DONE [#A] Reimplement 9-patches +** DONE [#A] Chunk-based tile map rendering +** DONE [#A] Render rotated tiles in Tiled maps correctly +See STIB library for love2d for implementation details. +** DONE [#A] Render animations in Tiled maps +** DONE [#A] Support modifications to Tiled maps +** DONE [#A] Handle window resizing gracefully +** DONE [#A] Display clear error when using OpenGL before game loop has been started +** DONE [#A] Macro for looping over number ranges +Get rid of all the dang named lets for looping over x and y values in +a grid. +** DONE [#A] High-level vertex buffer packing API +Filling vertex buffers by hand sucks and leads to lots of redundant, +brittle code all over the place. Especially so for anything that does +vertex buffer streaming like sprite batches and vector paths. Maybe +copy something like guile-opengl's packed structs. +** DONE [#A] Front/back face culling support +** DONE [#A] Vector graphics rendering +Like NanoVG. +** DONE [#A] Feature request: Support color keyed tilesets in Tiled maps +** DONE [#A] Bug fix: Clear screen even when nothing is being drawn +** DONE [#A] Allow user to manipulate the current window +** DONE [#A] OBJ model loader and renderer +** DONE [#A] Fix bugs/missing features in particle renderer +** DONE [#A] Document how to hook up cooperative REPL server +** DONE [#A] Document (chickadee graphics tiled) module +** DONE [#A] Add pixel x,y to tile x,y procedure for Tiled maps +** DONE [#A] TrueType font rendering + Like love2d or NanoVG +** DONE [#A] Chickadee executable +Like love2d's =love= executable. For getting new users up and running +quickly. +** DONE [#B] Linear/radial gradient fills for vector paths +** DONE [#B] Improved blending API +Rather than using symbols to represent some predefined blending modes, +create an api that supports the full range of options that OpenGL +provides for defining the blending function. +** DONE [#B] Tile map scrolling +** DONE [#B] OpenAL sound +Better than SDL_mixer. For love2d parity. +** DONE [#B] glTF 2.0 asset loading +Partially implemented but most example models don't render correctly. +** DONE [#C] Rewrite GPU state and render context code +Adding a new piece of state requires too much work, much of which +feels redundant. +** DONE [#C] Improve technique-specific state handling +Right now everything (shaders, buffers, etc.) is wrapped in 'delay' +forms and then 'force'd when rendering. It would be better if we +could somehow register this stuff with the gpu object. A plugin +system, maybe. The plugins would be initialized when the gpu object +is created and all the state would live there instead of at the +top-level of various modules. +** DONE [#C] Physically based rendering +Needed for full glTF rendering support but just good in general for +3D. |