From 4836f7550dd2afe2d134c44ce7521197072af1a0 Mon Sep 17 00:00:00 2001 From: PS Date: Sat, 30 Jan 2021 15:10:46 -0800 Subject: [PATCH] Formalized a system for user space sculpture code --- src/app/blumen_lumen.cpp | 34 +++++++++++++++++++++++ src/app/engine/user_space.cpp | 36 +++++++++++++++++++++++++ src/app/engine/user_space.h | 27 +++++++++++++++++++ src/app/foldhaus_app.cpp | 51 +++++++++-------------------------- src/app/foldhaus_app.h | 7 ++--- src/app/foldhaus_platform.h | 6 ++--- 6 files changed, 117 insertions(+), 44 deletions(-) create mode 100644 src/app/engine/user_space.cpp create mode 100644 src/app/engine/user_space.h diff --git a/src/app/blumen_lumen.cpp b/src/app/blumen_lumen.cpp index 3525506..2fd647d 100644 --- a/src/app/blumen_lumen.cpp +++ b/src/app/blumen_lumen.cpp @@ -47,6 +47,31 @@ BlumenLumen_MicListenJob(gs_thread_context* Ctx, u8* UserData) CloseSocket(Data->SocketManager, Data->ListenSocket); } +internal void +BlumenLumen_LoadPatterns(app_state* State) +{ + animation_pattern_array* Patterns = &State->Patterns; + if (Patterns->CountMax == 0) + { + *Patterns = Patterns_Create(&State->Permanent, 32); + } + + Patterns->Count = 0; + Patterns_PushPattern(Patterns, TestPatternOne); + Patterns_PushPattern(Patterns, TestPatternTwo); + Patterns_PushPattern(Patterns, TestPatternThree); + Patterns_PushPattern(Patterns, Pattern_AllGreen); + Patterns_PushPattern(Patterns, Pattern_HueShift); + Patterns_PushPattern(Patterns, Pattern_HueFade); + Patterns_PushPattern(Patterns, Pattern_Spots); + Patterns_PushPattern(Patterns, Pattern_LighthouseRainbow); + Patterns_PushPattern(Patterns, Pattern_SmoothGrowRainbow); + Patterns_PushPattern(Patterns, Pattern_GrowAndFade); + Patterns_PushPattern(Patterns, Pattern_ColorToWhite); + Patterns_PushPattern(Patterns, Pattern_Blue); + Patterns_PushPattern(Patterns, Pattern_Green); +} + internal gs_data BlumenLumen_CustomInit(app_state* State, context Context) { @@ -176,6 +201,15 @@ BlumenLumen_CustomUpdate(gs_data UserData, app_state* State, context* Context) } } +internal user_space_desc +BlumenLumen_UserSpaceCreate() +{ + user_space_desc Result = {}; + Result.LoadPatterns = BlumenLumen_LoadPatterns; + Result.CustomInit = BlumenLumen_CustomInit; + Result.CustomUpdate = BlumenLumen_CustomUpdate; + return Result; +} #define BLUMEN_LUMEN_CPP #endif // BLUMEN_LUMEN_CPP \ No newline at end of file diff --git a/src/app/engine/user_space.cpp b/src/app/engine/user_space.cpp new file mode 100644 index 0000000..57ceb1c --- /dev/null +++ b/src/app/engine/user_space.cpp @@ -0,0 +1,36 @@ +// +// File: userspace.cpp +// Author: Peter Slattery +// Creation Date: 2021-01-30 +// +#ifndef USERSPACE_CPP + +internal void +US_LoadPatterns(user_space_desc* Desc, app_state* State, context Context) +{ + if (Desc->LoadPatterns) + { + Desc->LoadPatterns(State); + } +} + +internal void +US_CustomInit(user_space_desc* Desc, app_state* State, context Context) +{ + if (Desc->CustomInit) + { + Desc->UserData = Desc->CustomInit(State, Context); + } +} + +internal void +US_CustomUpdate(user_space_desc* Desc, app_state* State, context* Context) +{ + if (Desc->CustomUpdate) + { + Desc->CustomUpdate(Desc->UserData, State, Context); + } +} + +#define USERSPACE_CPP +#endif // USERSPACE_CPP \ No newline at end of file diff --git a/src/app/engine/user_space.h b/src/app/engine/user_space.h new file mode 100644 index 0000000..78b5318 --- /dev/null +++ b/src/app/engine/user_space.h @@ -0,0 +1,27 @@ +// +// File: userspace.h +// Author: Peter Slattery +// Creation Date: 2021-01-30 +// +#ifndef USERSPACE_H + +#define US_LOAD_PATTERNS(name) void name(app_state* State) +typedef US_LOAD_PATTERNS(us_load_patterns_proc); + +#define US_CUSTOM_INIT(name) gs_data name (app_state* State, context Context) +typedef US_CUSTOM_INIT(us_custom_init_proc); + +#define US_CUSTOM_UPDATE(name) void name(gs_data UserData, app_state* State, context* Context) +typedef US_CUSTOM_UPDATE(us_custom_update_proc); + +typedef struct user_space_desc +{ + us_load_patterns_proc* LoadPatterns; + us_custom_init_proc* CustomInit; + us_custom_update_proc* CustomUpdate; + + gs_data UserData; +} user_space_desc; + +#define USERSPACE_H +#endif // USERSPACE_H \ No newline at end of file diff --git a/src/app/foldhaus_app.cpp b/src/app/foldhaus_app.cpp index f53a27c..13111f7 100644 --- a/src/app/foldhaus_app.cpp +++ b/src/app/foldhaus_app.cpp @@ -8,27 +8,6 @@ #include "foldhaus_platform.h" #include "foldhaus_app.h" -internal void -ClearAndPushPatterns(animation_pattern_array* Patterns) -{ - if (Patterns->CountMax == 0) { return; } - - Patterns->Count = 0; - Patterns_PushPattern(Patterns, TestPatternOne); - Patterns_PushPattern(Patterns, TestPatternTwo); - Patterns_PushPattern(Patterns, TestPatternThree); - Patterns_PushPattern(Patterns, Pattern_AllGreen); - Patterns_PushPattern(Patterns, Pattern_HueShift); - Patterns_PushPattern(Patterns, Pattern_HueFade); - Patterns_PushPattern(Patterns, Pattern_Spots); - Patterns_PushPattern(Patterns, Pattern_LighthouseRainbow); - Patterns_PushPattern(Patterns, Pattern_SmoothGrowRainbow); - Patterns_PushPattern(Patterns, Pattern_GrowAndFade); - Patterns_PushPattern(Patterns, Pattern_ColorToWhite); - Patterns_PushPattern(Patterns, Pattern_Blue); - Patterns_PushPattern(Patterns, Pattern_Green); -} - RELOAD_STATIC_DATA(ReloadStaticData) { app_state* State = (app_state*)Context.MemoryBase; @@ -37,7 +16,7 @@ RELOAD_STATIC_DATA(ReloadStaticData) State->PanelSystem.PanelDefs = GlobalPanelDefs; State->PanelSystem.PanelDefsCount = GlobalPanelDefsCount; - ClearAndPushPatterns(&State->Patterns); + US_LoadPatterns(&State->UserSpaceDesc, State, Context); } INITIALIZE_APPLICATION(InitializeApplication) @@ -53,8 +32,11 @@ INITIALIZE_APPLICATION(InitializeApplication) State->CommandQueue = CommandQueue_Create(&State->Permanent, 32); - State->Patterns = Patterns_Create(&State->Permanent, 32); - ClearAndPushPatterns(&State->Patterns); + animation_system_desc AnimSysDesc = {}; + AnimSysDesc.Storage = &State->Permanent; + AnimSysDesc.AnimArrayCount = 32; + AnimSysDesc.SecondsPerFrame = 1.0f / 24.0f; + State->AnimationSystem = AnimationSystem_Init(AnimSysDesc); interface_config IConfig = {0}; IConfig.FontSize = 14; @@ -81,19 +63,10 @@ INITIALIZE_APPLICATION(InitializeApplication) PanelSystem_PushPanel(&State->PanelSystem, PanelType_SculptureView, State, Context); State->Modes = OperationModeSystemInit(&State->Permanent, Context.ThreadContext); + State->UserSpaceDesc = BlumenLumen_UserSpaceCreate(); + ReloadStaticData(Context, GlobalDebugServices); - - animation_system_desc AnimSysDesc = {}; - AnimSysDesc.Storage = &State->Permanent; - AnimSysDesc.AnimArrayCount = 32; - AnimSysDesc.SecondsPerFrame = 1.0f / 24.0f; - State->AnimationSystem = AnimationSystem_Init(AnimSysDesc); - - State->UserData = BlumenLumen_CustomInit(State, Context); - - // TEMP - blumen_lumen_state* BLState = (blumen_lumen_state*)State->UserData.Memory; - return (temp_job_req*)&BLState->JobReq; + US_CustomInit(&State->UserSpaceDesc, State, Context); } UPDATE_AND_RENDER(UpdateAndRender) @@ -101,6 +74,8 @@ UPDATE_AND_RENDER(UpdateAndRender) DEBUG_TRACK_FUNCTION; app_state* State = (app_state*)Context->MemoryBase; + OutputDebugStringA("Test"); + // NOTE(Peter): We do this at the beginning because all the render commands are stored in Transient, // and need to persist beyond the end of the UpdateAndRender call. In the release version, we won't // zero the Transient arena when we clear it so it wouldn't be a problem, but it is technically @@ -117,10 +92,10 @@ UPDATE_AND_RENDER(UpdateAndRender) &State->LedSystem, State->Patterns, State->Transient, - State->UserData.Memory); + State->UserSpaceDesc.UserData.Memory); } - BlumenLumen_CustomUpdate(State->UserData, State, Context); + US_CustomUpdate(&State->UserSpaceDesc, State, Context); AssemblyDebug_OverrideOutput(State->AssemblyDebugState, State->Assemblies, diff --git a/src/app/foldhaus_app.h b/src/app/foldhaus_app.h index 43f0f84..43ded68 100644 --- a/src/app/foldhaus_app.h +++ b/src/app/foldhaus_app.h @@ -41,6 +41,7 @@ typedef struct panel panel; #include "engine/animation/foldhaus_animation_serializer.cpp" #include "engine/animation/foldhaus_animation_renderer.cpp" +#include "engine/user_space.h" #include "blumen_lumen.h" struct app_state @@ -70,15 +71,15 @@ struct app_state panel_system PanelSystem; panel* HotPanel; - // User Space - // - gs_data UserData; + user_space_desc UserSpaceDesc; }; internal void OpenColorPicker(app_state* State, v4* Address); #include "engine/assembly/foldhaus_assembly.cpp" +#include "engine/user_space.cpp" + #include "patterns/blumen_patterns.h" #include "blumen_lumen.cpp" diff --git a/src/app/foldhaus_platform.h b/src/app/foldhaus_platform.h index c3cbb3e..7f10ab0 100644 --- a/src/app/foldhaus_platform.h +++ b/src/app/foldhaus_platform.h @@ -5,10 +5,10 @@ // #ifndef FOLDHAUS_PLATFORM_H +// TODO Remove +#include #include -#include // TODO Remove - #include "..\gs_libs\gs_types.h" #include "..\gs_libs\gs_types.cpp" @@ -66,7 +66,7 @@ struct packet_ringbuffer u32 WriteHead; }; -#define INITIALIZE_APPLICATION(name) temp_job_req* name(context Context) +#define INITIALIZE_APPLICATION(name) void name(context Context) typedef INITIALIZE_APPLICATION(initialize_application); #define UPDATE_AND_RENDER(name) void name(context* Context, input_queue InputQueue, render_command_buffer* RenderBuffer, addressed_data_buffer_list* OutputData)