-
Notifications
You must be signed in to change notification settings - Fork 0
/
list.todo
214 lines (214 loc) · 14.7 KB
/
list.todo
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
RenderBoi:
Project:
✔ Port to CMake @done(20-04-17 03:59)
☐ Write test suite
☐ Better exceptions
✔ Use ADL to find proper to_string instead of polluting std @done(21-01-04 23:29)
✔ Make everything part of a RenderBoi namespace @done(21-01-04 23:29)
✔ Use const refs where applicable (especially upon fetching values held by iterators) @done(20-12-28 04:52)
✔ Start static member names with caps @done(20-12-28 04:52)
✔ Add const qualifiers everywhere and constexpr qualifiers where possible @done(20-12-28 04:52)
☐ Investigate CRTP to eliminate vtables in large inheritance trees
✘ Investigate CRTP to make clone methods "self-implement" @cancelled(24-07-05 01:51)
✔ Remove virtual keywords where unnecessary @done(20-12-26 15:02)
✔ Move tools to external repo and update CMake to use it @done(20-12-17 14:20)
☐ Set up continuous integration
✔ Better documentation @done(20-10-19 19:22)
✘ In all accessor functions using local-statically generated data: provide a refresh argument @cancelled(22-05-18 13:11)
✔ In all functions using the `bool runOnce` trick to generate local static data once: use initialiser syntax instead @done(22-05-18 13:10)
✔ ADL behaves badly on to_string methods (these REALLY need to be fixed they're a mess rn) @done(24-05-19 22:27)
✔ Investigate move semantics usage @done(24-07-03 00:00)
✔ Change shared_ptr to unique_ptr where ownership is due and to naked pointer where it's just being used @done(22-05-08 20:29)
✔ Destructors with an empty body should just be defaulted @done(24-07-03 00:00)
✘ Put #pragma region directives in files @cancelled(22-02-02 13:42)
☐ Remove friends or if not possible restrict to certain methods
☐ Too many unordered maps, some of those should just be vectors or even arrays or flat maps
Performance:
☐ Find every usage of a vector and figure out sweet spots for upfront space reservation
Core:
Camera:
✔ Use a parent transform instead of a simple up vector @done(20-10-14 12:27)
✔ Simplify view matrix retrieval functions @done(20-10-20 14:28)
✔ Set the projection matrix in terms of parameters rather than a full matrix @done(20-10-26 16:56)
✔ Clean up smart updates depending on parameter values @done(20-10-26 16:56)
✔ Smart update for VP matrix @done(21-07-20 21:06)
Mesh:
☐ Handle several types of draw methods per single mesh
✔ Use glMultiDrawElements, adapt mesh generators @done(20-11-05 08:59)
☐ Star mesh generator (branch count, inset, hollow)
☐ Meshed curve generator, using tools::Curve
☐ Use `glVertexAttribFormat` to describe vertex layout in memory (instead of `glVertexAttribPointer`)
See https://stackoverflow.com/questions/37972229/glvertexattribpointer-and-glvertexattribformat-whats-the-difference
✔ Rename the template meta classes they ugly AF @done(22-02-02 00:14)
Shaders:
✔ Use GL_ARB_shader_language_include @done(20-10-24 17:30)
✔ Declare uniform blocks in their own file @done(20-10-24 17:30)
✔ Interface blocks too @done(20-10-24 17:31)
✔ Find a way to tell whether a shader provides has certain render features @done(20-10-24 17:59)
✔ On-demand shader generation @done(20-11-21 02:50)
☐ Remember the location of a shader and give it back when asked to generate with same parameters
☐ Kaleidoscopic fragment shader
✔ Fix attenuation @done(20-11-05 07:27)
✔ Fix Blinn-Phong @done(20-11-05 07:27)
✔ Fix gamma correction @done(20-11-05 07:27)
☐ Lighting artifacts on weird angles on surfaces and through them
☐ Integrate glslang
☐ Compile shaders to SPIR-V
☐ Figure out proper layout for all stuff to be sent to GPU memory
UBOs:
☐ Lights: figure out a strategy to do minimal flushes to the GPU (in particular when a single light is removed)
Texture:
☐ Check texture generation success and display error info
☐ Handle texture wrapping and filtering options
WorldTransform:
✔ Change Object inheritance from PositionedObject into a compoud WorldTransform object @done(20-07-02 17:00)
✔ Viable alternative to the ugly `transformModified` flag fix (observer pattern) @done(20-09-02 15:12)
✔ Implement transformations relative to different frames of reference @done(20-10-10 12:50)
✔ Implement `WorldTransform::compoundFrom(const WorldTransform& other)` @done(20-10-13 13:49)
✘ Fix all scaling issues in `LocalTransform` @cancelled(24-05-19 22:27)
✔ Add frames of reference for everything that doesn't have it @done(24-05-19 22:28)
Affine operations:
☐ Fix scaling in weird frames of reference
☐ Implement shear
☐ Transform stack?
☐ Make AffineOperation variants that take in and keep references to their parameters, so that the transform can vary from the outside?
Better frame of reference handling:
☐ Make all transformations happen in world coordinates (that's what's mostly happening right now)
☐ Have a `template<FrameOfReference> struct ParameterProxy` kind of thing which wraps Vec3s and Quats
☐ It has a `.get()` member function that returns the wrapped thing in world coordinates
☐ No need for `translate<Ref::World>(t, whatever)` or `Translation(thing).apply<Ref::Self>(t)` anymore, it's now `translate(t, as<Ref::World>(stuff))` or something
VertexDataManager:
☐ A VertexDataManager holds actual vertex data and takes care of memory management
☐ Meshes now only keep handles to vertex content held in a VertexDataManager
!!!!! REQUIRED for proper cloning of mesh render trait config
☐ Investigate better buffering methods
☐ Dynamic meshes
☐ Unity-like prefab system?
☐ Shadows
☐ Transparency
☐ Portals
☐ Particle systems
I/O:
☐ (De)serialize scenes
☐ Load models with Assimp
Toolbox:
Components:
✔ In MeshComponent, make the mesh pointer private, add getter and setter to it @done(20-10-21 16:35)
✔ Keep a shared pointer to the Object @done(20-10-21 13:02)
✔ Provide info as to whether a certain component type is allowed more than once per object @done(20-10-20 16:02)
✘ Add InputProcessorComponent @cancelled(20-12-31 14:44)
✘ Rethink InputProcessingScriptComponent @cancelled(20-12-31 14:20)
☐ Serialisation
☐ Make a concept out of components, simplify template usage in Object
✔ Implement template meta to have componentMap.addComponent<Camera> instead of componentMap.addComponent<CameraComponent> @done(22-01-29 18:13)
☐ Is MeshRenderTags necessary?
☐ Remove MeshComponent::_meshPtr somehow
ComponentMap:
✔ Better naming for template parameters @done(22-02-02 00:16)
Controls:
☐ Make concept for actions, enforce it on Control-related classes
Factory:
✔ Method to attach camera and scripts to scene object@done(20-10-26 02:40)
☐ Forwarding methods to ShaderBuilder
InputSplitter:
☐ Async dispatch of events
/!\ The above may disrupt the update flow of HEAVY scenes by delaying some updates too much
Logger:
☐ Write a real logger, have the input logger use it
Object transform:
✘ Keep a shared pointer to the scene object @cancelled(22-02-02 00:16)
Render traits:
✔ The copy constructor of the RenderTraitConfigMap is WRONG - it should clone configs @done(22-02-08 21:35)
✔ When cloned as part of Object cloning, the MeshRenderTraitConfig needs to reference its new parent Object @done(22-02-08 21:36)
Scene:
✔ In `moveObject`, add possibility to keep world position of moved object @done(20-10-13 14:49)
☐ Add something like `registerObjectTree(ScenePtr)` to import complex objects into a scene
✔ In `getWorldTransform`, the `_transformsUpToDate` test is useless in most cases: FIXED @done(20-10-13 15:33)
✔ Clean up the bullshit with `Scene::init` and `Object::setScene` and whatnot, implement a clean factory instead @done(20-10-12 10:22)
✔ Refactor methods taking in pointers to taking in IDs where applicable @done(20-10-21 16:47)
✔ Return shared pointers instead of weak pointers where possible @done(20-10-20 16:19)
✔ Refactor getComponent & co to fit new several-per-type components @done(20-10-20 16:14)
✔ Refactor methods (e.g. object creation and registration) to skip sanity checks where unnecessary @done(20-10-21 18:02)
✔ Make init() and terminate() private with Factory as a friend @done(20-10-21 19:59)
☐ triggerUpdate() should not update scripts attached to disabled scene objects (or which have a disabled parent)
✔ remove() recursively calls itself instead of a more efficient, check-free private routine @done(24-05-19 22:30)
☐ Implement transform optimisations using object tags
☐ Serialisation
✔ Get rid of _findObjectMetaOrThrow code duplication for const variant @done(24-05-19 22:30)
☐ Use the C++23 "deducing this" paper to fix const variant of methods
☐ Somehow allow WorldTransform and LocalTransform to be queried like any other component
☐ Allow exclusion component types in `view` and `group`
✔ WorldTransform notification subscription is terribly inefficient @done(24-05-19 22:30)
✔ Integrate EnTT @done(24-05-19 22:30)
Object:
✔ Add name for debugging purposes @done(20-10-19 12:04)
✔ Return shared pointers instead of weak pointers where possible @done(20-10-20 16:17)
✔ Keep a shared pointer to the scene @done(20-10-21 19:59)
✔ Remove component @done(24-05-19 22:30)
☐ Add object tags (bitfield enum)
☐ Move Shader and Material from MeshComponent to MeshRenderTraitConfig?
✔ Make `enabled` notify scene on change @done(24-05-19 22:31)
✔ Make component collection public, notify scene as needed @done(24-05-19 22:31)
☐ Serialisation
✔ `_setScene` might not be useful anymore @done(22-01-31 00:54)
SceneRenderer:
✔ Implement a framerate limiter @done(20-10-19 21:49)
☐ Fix the framerate limiter
☐ Better way to handle lights
☐ Mesh rendering order based on distance to camera
☐ Eliminate buffer swaps between objects sharing the same vertex data
☐ WorldTransform direction of lights according to the world transform of their object
✔ Skip the normal restoration where applicable @done(20-10-24 17:47)
✔ Render meshes using a transform, not a matrix @done(20-10-24 17:47)
☐ Occlude objects not in camera FOV
Scripts:
✔ Separate FPSCameraScript into MouseCameraScript and KeyboardMovementScript @done(20-10-20 14:06)
✔ Give a camera reference to the KeyboardMovementScript for it to use a proper front vector @done(20-10-20 18:30)
✔ CameraAspectRatioScript: updates the camera aspect ratio based on framebuffer resize events @done(20-10-26 17:22)
✔ Gamepad movement and camera scripts @done(21-02-08 00:41)
Utilities:
✔ Write resource locator @done(21-01-05 21:54)
Window:
✔ Isolate calls to GLFW in a windowing tool module @done(20-07-02 15:04)
✔ Fill adapter maps the same way as shader maps @done(20-10-26 01:49)
✔ Doc @done(20-10-26 01:49)
✔ Allow selection of window backend with an enum and templated methods @done(20-10-26 02:12)
✔ Move functionality to get input action/button names (used in BasicInputManager) @done(20-12-25 16:00)
✘ Update concrete window instantiation mechanisms? @cancelled(21-01-31 17:12)
✔ Move rendering away in another thread, keep event polling in the main thread @done(21-01-31 17:46)
✔ Handle fullscreen toggling @done(21-07-14 16:07)
✔ Fully integrate GLFW in windowing system @done(24-05-19 22:31)
☐ Make it possible to queue GLContextEvents alonside with parameters for them
✘ Make GLContextClient not dependent on one single GLWindow @cancelled(22-02-04 03:32)
✘ Have window be able to forward events to several GLContextEventManagers @cancelled(22-02-06 15:22)
☐ Move gamepad state polling out of GamepadManager instance, in order to allow for single polling in multiple managers (windows)
☐ GLFW3GamepadManager::_JoystickStatusRefreshFlag may not be necessary
Gamepad:
✔ Write GamepadState @done(21-01-25 12:37)
✔ Write Gamepad @done(21-01-25 15:18)
✔ Write GamepadManager @done(21-01-31 19:53)
✔ Update event flow @done(21-01-31 19:21)
✔ Handle connection / disconnection @done(21-02-04 08:24)
✔ Update input logger @done(21-02-06 01:04)
✔ Add a gamepad input splitter @done(21-02-06 01:04)
☐ Async dispatch of events
☐ Stop rendering when the window loses focus / is minimized
InputProcessor:
☐ Async dispatch of events
☐ Think about breaking the interface apart for performance
☐ Implement an input poll rate limiter
Sandbox:
☐ Add gamepad connection callback
☐ Provide ability to pause
Ideas:
☐ Times table arranged in a circle (https://www.youtube.com/watch?v=qhbuKbxJsk8)
☐ Spyrograph thing (https://www.youtube.com/watch?v=7Fn-26Jmi5E)
Fixes:
✔ WorldTransform::lookAt @done(20-10-13 17:04)
✔ Light attenuation @done(20-04-20 06:55)
Crossplatform-ability:
✔ Provide OpenGL core context hint for GLFW except when EGL is used (i.e. on Wayland systems) @done(20-07-02 14:19)
Online resources:
https://www.youtube.com/watch?v=-bCeNzgiJ8I&list=PLckFgM6dUP2hc4iy-IdKFtqR9TeZWMPjm
http://media.steampowered.com/apps/steamdevdays/slides/beyondporting.pdf
https://www.slideshare.net/CassEveritt/approaching-zero-driver-overhead