Added a default tag to every strip specifying which assembly it is a part of
This commit is contained in:
parent
cc41442923
commit
c7522bfa4b
|
@ -370,6 +370,15 @@ ReadStructClosing(assembly_tokenizer* T)
|
||||||
return Result;
|
return Result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
internal void
|
||||||
|
StripSetTag(v2_strip* Strip, u32 TagIndex, gs_const_string TagName, gs_const_string TagValue)
|
||||||
|
{
|
||||||
|
Assert(TagIndex < Strip->TagsCount);
|
||||||
|
v2_tag* TagAt = &Strip->Tags[TagIndex];
|
||||||
|
TagAt->NameHash = HashDJB2ToU32(StringExpand(TagName));
|
||||||
|
TagAt->ValueHash = HashDJB2ToU32(StringExpand(TagValue));
|
||||||
|
}
|
||||||
|
|
||||||
internal bool
|
internal bool
|
||||||
ParseAssemblyFile(assembly* Assembly, gs_const_string FileName, gs_string FileText, gs_memory_arena* Transient)
|
ParseAssemblyFile(assembly* Assembly, gs_const_string FileName, gs_string FileText, gs_memory_arena* Transient)
|
||||||
{
|
{
|
||||||
|
@ -420,19 +429,21 @@ ParseAssemblyFile(assembly* Assembly, gs_const_string FileName, gs_string FileTe
|
||||||
StripAt->LedCount = ReadIntField(AssemblyField_LedCount, &Tokenizer);
|
StripAt->LedCount = ReadIntField(AssemblyField_LedCount, &Tokenizer);
|
||||||
Assembly->LedCountTotal += StripAt->LedCount;
|
Assembly->LedCountTotal += StripAt->LedCount;
|
||||||
|
|
||||||
|
|
||||||
StripAt->TagsCount = ReadIntField(AssemblyField_TagsCount, &Tokenizer);
|
StripAt->TagsCount = ReadIntField(AssemblyField_TagsCount, &Tokenizer);
|
||||||
|
// NOTE(pjs): Always add one tag to the input to leave room for the assembly name
|
||||||
|
StripAt->TagsCount += 1;
|
||||||
StripAt->Tags = PushArray(&Assembly->Arena, v2_tag, StripAt->TagsCount);
|
StripAt->Tags = PushArray(&Assembly->Arena, v2_tag, StripAt->TagsCount);
|
||||||
for (u32 Tag = 0; Tag < StripAt->TagsCount; Tag++)
|
StripSetTag(StripAt, 0, ConstString("assembly"), Assembly->Name.ConstString);
|
||||||
|
for (u32 Tag = 1; Tag < StripAt->TagsCount; Tag++)
|
||||||
{
|
{
|
||||||
v2_tag* TagAt = StripAt->Tags + Tag;
|
|
||||||
if (ReadStructOpening(AssemblyField_Tag, &Tokenizer))
|
if (ReadStructOpening(AssemblyField_Tag, &Tokenizer))
|
||||||
{
|
{
|
||||||
// TODO(Peter): Need to store the gs_string somewhere we can look it up for display in the interface
|
// TODO(Peter): Need to store the gs_string somewhere we can look it up for display in the interface
|
||||||
// right now they are stored in temp memory and won't persist
|
// right now they are stored in temp memory and won't persist
|
||||||
gs_string TagName = ReadStringField(AssemblyField_Name, &Tokenizer, Transient);
|
gs_string TagName = ReadStringField(AssemblyField_Name, &Tokenizer, Transient);
|
||||||
gs_string TagValue = ReadStringField(AssemblyField_Value, &Tokenizer, Transient);
|
gs_string TagValue = ReadStringField(AssemblyField_Value, &Tokenizer, Transient);
|
||||||
TagAt->NameHash = HashDJB2ToU32(StringExpand(TagName));
|
StripSetTag(StripAt, Tag, TagName.ConstString, TagValue.ConstString);
|
||||||
TagAt->ValueHash = HashDJB2ToU32(StringExpand(TagValue));
|
|
||||||
if (!ReadStructClosing(&Tokenizer))
|
if (!ReadStructClosing(&Tokenizer))
|
||||||
{
|
{
|
||||||
TokenizerPushError(&Tokenizer, "Struct doesn't close where expected");
|
TokenizerPushError(&Tokenizer, "Struct doesn't close where expected");
|
||||||
|
@ -444,6 +455,7 @@ ParseAssemblyFile(assembly* Assembly, gs_const_string FileName, gs_string FileTe
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if (!ReadStructClosing(&Tokenizer))
|
if (!ReadStructClosing(&Tokenizer))
|
||||||
{
|
{
|
||||||
TokenizerPushError(&Tokenizer, "Struct doesn't close where expected");
|
TokenizerPushError(&Tokenizer, "Struct doesn't close where expected");
|
||||||
|
|
|
@ -77,7 +77,7 @@ LedBufferSetLed(led_buffer* Buffer, u32 Led, v4 Position)
|
||||||
}
|
}
|
||||||
|
|
||||||
internal void
|
internal void
|
||||||
ConstructAssemblyFromDefinition (assembly* Assembly, gs_const_string AssemblyName, led_system* LedSystem)
|
ConstructAssemblyFromDefinition (assembly* Assembly, led_system* LedSystem)
|
||||||
{
|
{
|
||||||
Assembly->LedBufferIndex = LedSystemTakeFreeBuffer(LedSystem, Assembly->LedCountTotal);
|
Assembly->LedBufferIndex = LedSystemTakeFreeBuffer(LedSystem, Assembly->LedCountTotal);
|
||||||
led_buffer* LedBuffer = LedSystemGetBuffer(LedSystem, Assembly->LedBufferIndex);
|
led_buffer* LedBuffer = LedSystemGetBuffer(LedSystem, Assembly->LedBufferIndex);
|
||||||
|
@ -88,7 +88,6 @@ ConstructAssemblyFromDefinition (assembly* Assembly, gs_const_string AssemblyNam
|
||||||
u32 LedsAdded = 0;
|
u32 LedsAdded = 0;
|
||||||
for (u32 StripIdx = 0; StripIdx < Assembly->StripCount; StripIdx++)
|
for (u32 StripIdx = 0; StripIdx < Assembly->StripCount; StripIdx++)
|
||||||
{
|
{
|
||||||
//led_strip_definition StripDef = Definition.LedStrips[StripIdx];
|
|
||||||
v2_strip* StripAt = &Assembly->Strips[StripIdx];
|
v2_strip* StripAt = &Assembly->Strips[StripIdx];
|
||||||
StripAt->LedLUT = PushArray(&Assembly->Arena, u32, StripAt->LedCount);
|
StripAt->LedLUT = PushArray(&Assembly->Arena, u32, StripAt->LedCount);
|
||||||
|
|
||||||
|
@ -120,16 +119,16 @@ LoadAssembly (assembly_array* Assemblies, led_system* LedSystem, gs_memory_arena
|
||||||
{
|
{
|
||||||
gs_string AssemblyFileText = MakeString((char*)AssemblyFile.Memory);
|
gs_string AssemblyFileText = MakeString((char*)AssemblyFile.Memory);
|
||||||
|
|
||||||
Assert(Assemblies->Count < Assemblies->CountMax);
|
|
||||||
assembly* NewAssembly = &Assemblies->Values[Assemblies->Count++];
|
|
||||||
|
|
||||||
s32 IndexOfLastSlash = FindLast(Path, '\\');
|
s32 IndexOfLastSlash = FindLast(Path, '\\');
|
||||||
gs_const_string FileName = Substring(Path, IndexOfLastSlash + 1, Path.Length);
|
gs_const_string FileName = Substring(Path, IndexOfLastSlash + 1, Path.Length);
|
||||||
|
|
||||||
|
Assert(Assemblies->Count < Assemblies->CountMax);
|
||||||
|
assembly* NewAssembly = &Assemblies->Values[Assemblies->Count++];
|
||||||
NewAssembly->Arena = CreateMemoryArena(Context.ThreadContext.Allocator);
|
NewAssembly->Arena = CreateMemoryArena(Context.ThreadContext.Allocator);
|
||||||
|
|
||||||
if (ParseAssemblyFile(NewAssembly, FileName, AssemblyFileText, Scratch))
|
if (ParseAssemblyFile(NewAssembly, FileName, AssemblyFileText, Scratch))
|
||||||
{
|
{
|
||||||
ConstructAssemblyFromDefinition(NewAssembly, FileName, LedSystem);
|
ConstructAssemblyFromDefinition(NewAssembly, LedSystem);
|
||||||
AllocatorFree(Context.ThreadContext.Allocator, AssemblyFile.Memory, AssemblyFile.Size);
|
AllocatorFree(Context.ThreadContext.Allocator, AssemblyFile.Memory, AssemblyFile.Size);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
|
@ -155,6 +155,9 @@ INITIALIZE_APPLICATION(InitializeApplication)
|
||||||
#if 1
|
#if 1
|
||||||
gs_const_string SculpturePath = ConstString("data/blumen_lumen_v2.fold");
|
gs_const_string SculpturePath = ConstString("data/blumen_lumen_v2.fold");
|
||||||
LoadAssembly(&State->Assemblies, &State->LedSystem, &State->Transient, Context, SculpturePath, State->GlobalLog);
|
LoadAssembly(&State->Assemblies, &State->LedSystem, &State->Transient, Context, SculpturePath, State->GlobalLog);
|
||||||
|
|
||||||
|
SculpturePath = ConstString("data/radialumia_v2.fold");
|
||||||
|
LoadAssembly(&State->Assemblies, &State->LedSystem, &State->Transient, Context, SculpturePath, State->GlobalLog);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
State->PixelsToWorldScale = .01f;
|
State->PixelsToWorldScale = .01f;
|
||||||
|
|
|
@ -79,24 +79,33 @@ internal void OpenColorPicker(app_state* State, v4* Address);
|
||||||
internal void
|
internal void
|
||||||
TestPatternOne(led_buffer* Leds, assembly Assembly, r32 Time, gs_memory_arena* Transient)
|
TestPatternOne(led_buffer* Leds, assembly Assembly, r32 Time, gs_memory_arena* Transient)
|
||||||
{
|
{
|
||||||
led_strip_list StemStrips = AssemblyStripsGetWithTagValue(Assembly, ConstString("section"), ConstString("stem"), Transient);
|
led_strip_list BlumenStrips = AssemblyStripsGetWithTagValue(Assembly, ConstString("assembly"), ConstString("Blumen Lumen"), Transient);
|
||||||
|
led_strip_list RadiaStrips = AssemblyStripsGetWithTagValue(Assembly, ConstString("assembly"), ConstString("Radialumia"), Transient);
|
||||||
|
|
||||||
for (u32 i = 0; i < StemStrips.Count; i++)
|
for (u32 i = 0; i < BlumenStrips.Count; i++)
|
||||||
{
|
{
|
||||||
u32 StripIndex = StemStrips.StripIndices[i];
|
u32 StripIndex = BlumenStrips.StripIndices[i];
|
||||||
v2_strip StripAt = Assembly.Strips[StripIndex];
|
v2_strip StripAt = Assembly.Strips[StripIndex];
|
||||||
|
|
||||||
for (u32 j = 0; j < StripAt.LedCount; j++)
|
for (u32 j = 0; j < StripAt.LedCount; j++)
|
||||||
{
|
{
|
||||||
u32 LedIndex = StripAt.LedLUT[j];
|
u32 LedIndex = StripAt.LedLUT[j];
|
||||||
v4 LedPosition = Leds->Positions[LedIndex];
|
Leds->Colors[LedIndex] = { 255, 0, 0 };
|
||||||
float PercentX = RemapClampedR32(LedPosition.x, -150.0f, 150.0f, 0.0f, 1.0f);
|
|
||||||
float PercentY = RemapClampedR32(LedPosition.y, -150.0f, 150.0f, 0.0f, 1.0f);
|
|
||||||
Leds->Colors[LedIndex].R = (u8)(PercentX * 255);
|
|
||||||
Leds->Colors[LedIndex].G = (u8)(PercentY * 255);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for (u32 i = 0; i < RadiaStrips.Count; i++)
|
||||||
|
{
|
||||||
|
u32 StripIndex = RadiaStrips.StripIndices[i];
|
||||||
|
v2_strip StripAt = Assembly.Strips[StripIndex];
|
||||||
|
|
||||||
|
for (u32 j = 0; j < StripAt.LedCount; j++)
|
||||||
|
{
|
||||||
|
u32 LedIndex = StripAt.LedLUT[j];
|
||||||
|
Leds->Colors[LedIndex] = { 0, 255, 0 };
|
||||||
|
}
|
||||||
|
}
|
||||||
#if 0
|
#if 0
|
||||||
for (u32 LedIndex = 0; LedIndex < Leds->LedCount; LedIndex++)
|
for (u32 LedIndex = 0; LedIndex < Leds->LedCount; LedIndex++)
|
||||||
{
|
{
|
||||||
|
|
33
src/todo.txt
33
src/todo.txt
|
@ -1,15 +1,5 @@
|
||||||
TODO FOLDHAUS
|
TODO FOLDHAUS
|
||||||
|
|
||||||
STREAM #0: Metaprogramming
|
|
||||||
- Metaprogramming
|
|
||||||
- fix memory layout (remeber to profile before and after)
|
|
||||||
- Make everything truly platform agnostic
|
|
||||||
- Application DLL
|
|
||||||
- math.h: present for trig functions (though this is part of the c-std lib, so it should be everywhere)
|
|
||||||
- windows.h: only thing left is InterlockedIncrement and InterlockedAdd
|
|
||||||
- Meta Layer
|
|
||||||
- ???
|
|
||||||
|
|
||||||
STREAM #1: 3D Overhaul
|
STREAM #1: 3D Overhaul
|
||||||
- Rendering (Working on this elsewhere)
|
- Rendering (Working on this elsewhere)
|
||||||
- OpenGL 3
|
- OpenGL 3
|
||||||
|
@ -24,6 +14,7 @@ STREAM #1: 3D Overhaul
|
||||||
- leds always face camera
|
- leds always face camera
|
||||||
|
|
||||||
- Sculptures
|
- Sculptures
|
||||||
|
- implicitly add a tag equal to the sculpture name to each strip of leds
|
||||||
- cache led vertex buffers
|
- cache led vertex buffers
|
||||||
- custom sculpture update functions (for motion)
|
- custom sculpture update functions (for motion)
|
||||||
- editing sculpture files (change universe output)
|
- editing sculpture files (change universe output)
|
||||||
|
@ -33,7 +24,6 @@ STREAM #1: 3D Overhaul
|
||||||
- mouse spatial interaction - handles, and hover for info
|
- mouse spatial interaction - handles, and hover for info
|
||||||
- debug capabilities (toggle strip/led/universe colors)
|
- debug capabilities (toggle strip/led/universe colors)
|
||||||
|
|
||||||
STREAM #2: Memory
|
|
||||||
- Buckets & Lists
|
- Buckets & Lists
|
||||||
- On second thought, I just really don't like these. Lets get rid of them, and put custom structures in place
|
- On second thought, I just really don't like these. Lets get rid of them, and put custom structures in place
|
||||||
|
|
||||||
|
@ -44,11 +34,11 @@ STREAM #2: Memory
|
||||||
- Create a bar that displays the most recent error message
|
- Create a bar that displays the most recent error message
|
||||||
- :ErrorLogging
|
- :ErrorLogging
|
||||||
|
|
||||||
STREAM #3: Nodes
|
|
||||||
- Animation System
|
- Animation System
|
||||||
- blending between animation
|
- blending between animation
|
||||||
- layers
|
- layers
|
||||||
- layer masks by sculpture
|
- layer masks by sculpture
|
||||||
|
- layer masks by tag / value
|
||||||
- interface for animation system
|
- interface for animation system
|
||||||
- add/remove layers
|
- add/remove layers
|
||||||
- select blend modes
|
- select blend modes
|
||||||
|
@ -57,17 +47,8 @@ STREAM #3: Nodes
|
||||||
- clips can have parameters that drive them?
|
- clips can have parameters that drive them?
|
||||||
- clips cannot overlap eachother on the same layer
|
- clips cannot overlap eachother on the same layer
|
||||||
|
|
||||||
- Node System
|
|
||||||
- automatic node layout
|
|
||||||
- blending node layouts
|
|
||||||
- workspace -> animation block
|
|
||||||
- generating node workspace as code
|
|
||||||
- compiling node workspace
|
|
||||||
- hotload compiled pattern sets
|
|
||||||
|
|
||||||
- Serialization
|
- Serialization
|
||||||
- saving scenes
|
- saving scenes
|
||||||
- saving node graphs
|
|
||||||
- saving animation timelines
|
- saving animation timelines
|
||||||
- saving projects
|
- saving projects
|
||||||
|
|
||||||
|
@ -157,3 +138,13 @@ Name
|
||||||
- Splash screen (like blender) (thisll be fun)
|
- Splash screen (like blender) (thisll be fun)
|
||||||
- - Image importer (stb image? or find a png > bmp converter for the image you have)
|
- - Image importer (stb image? or find a png > bmp converter for the image you have)
|
||||||
- - Display on startup
|
- - Display on startup
|
||||||
|
|
||||||
|
STREAM #0: Metaprogramming
|
||||||
|
- Metaprogramming
|
||||||
|
- fix memory layout (remeber to profile before and after)
|
||||||
|
- Make everything truly platform agnostic
|
||||||
|
- Application DLL
|
||||||
|
- math.h: present for trig functions (though this is part of the c-std lib, so it should be everywhere)
|
||||||
|
- windows.h: only thing left is InterlockedIncrement and InterlockedAdd
|
||||||
|
- Meta Layer
|
||||||
|
- ???
|
||||||
|
|
Loading…
Reference in New Issue