Lumenarium/todo.txt

222 lines
5.8 KiB
Plaintext

TODO FOLDHAUS
Pick Up Where You Left Off
- In a node, you aren't filling in all the LED lists. Some of them (the outputs) are empty
when you reach the pattern proc because theyre outputs.
SOLUTION: Probably want to take the led lists out of each set of colors and just pass them in
once per data struct.
Name
x lumen lab
- Splash screen (like blender) (thisll be fun)
- x Create Image
- - Image importer (stb image? or find a png > bmp converter for the image you have)
- - Display on startup
/Debug
x There's an extra tri/quad sometimes when the renderer starts
x Something is still happening when I reload a dll, it sometimes has an error.
x Fixing the debug system seems to have solved this too. Keep an eye out tho
x Make debug scope tracking thread safe - was throwing an error in stringsequal but that stopped.
x Keep an eye out.
Application
x File Browsing to load sculptures
x Different Memory Layouts
- x General Purpose - ideally growable but shouldn't exhibit any size change outside of like 1000x sculptures, for assets etc.
- x SACN - growable, in its own memory. This is a central system.
- x Sculpture - per scultpure, monolithic memory allocation
- x track each sculpture in general purpose memory, linked list
- x need to move the assemblies structs back up the list when I remove an earlier one (ie. remove 0, shift 1 to 0, etc.);
- More efficient HSV <-> RGB
x Load/Unload sculptures
- x Load Function
- x Unload Function
- x Call From Interface
- - Make sure that we offload unloading until after all jobs are completed. Otherwise they'll try and write
- to data that doesn't exist
- Save and load a session
- - Serialize Channels
- - Serialize Patterns
- Don't render if the window isn't visible
Development
x Reloadable DLL
x Make sure Debug Info Isn't Lost When We Reload the DLL
- Fix your scope time tracker to account for threads.
- Nest scope times so you can see totals/dig in
x Darken the area behind debug text so you can see it.
- Log memory allocations
Data Output
x output the data (check but I think we're doing this)
x Universe view - pannable grid of universes with labels
Interface
x pattern controls
- fullscreen
- In world interface elements
- - Handles for Patterns
- - UI Popups
- - Value modifiers
- Scroll view
- Update the text system - use system fonts
Switch To Nodes
x basic node elements
- x ports (expected value) (in/out)
- x display value
- x connections
- - evaluation nodes (nodes that we start evaluation from)
- - evaluation step (one node at a time)
- - process to execute
x reflection
- x look at struct members and figure out how to draw it (see notes at bottom)
- x associate with a process
x draw nodes on canvas
x interact
- x move around
- x reconnect
- x move connections handles (see casey)
- serialize
- delete nodes
- need a way to add a timer to the nodes system (oscillators)
- probably want to build some build-in nodes so they can have custom behavior
- - static value: color, float, int etc
- - oscillators
- - hue range
Patterns
x arbitrary assemblies
x reload at runtime
- load patterns from a separate dll
x pattern initialization
- multiple active patterns
- - pattern blending
- - only update active patterns
- Parameters
Structure
x load structure from a file
x generate arbitrary assemblies
- multiple assemblies
- motion
x reasses if control boxes are even a necessary structure
Renderer
x Push Buffer Renderer
x Get Headers out of the command structs
x Render Text Batch Command
x Render Quads Batch Command
x vertex buffer
x depth sorting
- Mouse Picking - point at a led and see info about it
x Camera: tumble controls
- Camera: pan
- Camera: zoom
- Camera: leds always face camera
Resource Management
x Manually Load/Unload Textures
- TODO: Need to figure out which textures are currently in graphics memory and which need to be resubmitted
- Icons
Animation
- timeline
- create clips that play
- clips can have parameters that drive them?
- clips should have prerequesites
- - channels active
- - patterns active in the channel
- - when a clip is playing, it should just take over the whole structure
Command Line
- select a channel/pattern
- Channel: Add/remove pattern by name
- Channel: Set Blend Mode
- Channel: Set Current Pattern
- Pattern: Edit parameter values
Optimization
- patterns are asking to be multithreaded
- probably want to convert as much color functions to use u32 Packed Colors
- - Probably want to think about this more. What about supporting different color depths
- for different output devices?
NOTES
Reflection for Nodes
// These used for the reflection system
#define CANVAS_STRUCT(name) struct name
#define CANVAS_INPUT(type, name) type name
#define CANVAS_OUTPUT(type, name) type name
CANVAS_STRUCT(multiply_data)
{
CANVAS_INPUT(r32, A);
CANVAS_INPUT(r32, B);
CANVAS_OUTPUT(r32, C);
}
CANVAS_PROC(multiply_proc)
{
multiply_data* Data = (multiply_data*)Data;
Data->C = Data->A * Data->B;
}
node
{
InputCount 2
node_port_values* Inputs;
OutputCount 1
node_port_values* Outputs;
}
node_port_value
{
type NodeInputType_r32
s32 MemoryOffsetFromHead;
s32 DataSize;
r32 UnconnectedValue;
r32* ConnectedValue; // Overrides Unconnected
}
u8* GetValueAddress (node_port_value* Port)
{
u8* Result = &Port->UnconnectedValue;
if (Port->ConnectedValue)
{
Result = Port->ConnectedValue;
}
return Result;
}
void UpdateCanvasElement (u8* Data, s32 DataSize, node* Node)
{
for (s32 i = 0; i < Node->InputCount; i++)
{
GSMemCopy(GetValueAddress(&Node->Input[i]),
Data + Node->Input[i].MemoryOffsetFromHead,
Node->Input[i].DataSize);
}
}
void InitializeMultiplyNode ()
{
node Multiply = {};
Multiply.InputCount = 2;
Alloc Inputs
Input[0].
}