222 lines
5.8 KiB
Plaintext
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].
|
||
|
}
|