#include "vn_platform.h" #include "vn_platform.cpp" #include "vn_font.h" #include "vn_text_op.h" #include "vn_ui.h" #include "vn_workspace.h" #include "vn_theme_dark.h" #include "vn_animation_curve.h" #include "vn_render.cpp" #include "vn_font.cpp" #include "vn_ui.cpp" #include "vn_ui_utils.cpp" #include "vn_animation_curve.cpp" #include "vn_workspace.cpp" struct vn_state { memory_arena Arena; glyph_atlas *GlyphAtlas; ui UI; workspace Workspace; animation_curve_state AnimationCurveState; }; VN_UPDATE_AND_RENDER(VN_UpdateAndRender) { SetThreadContext(ThreadContext); Platform = Memory->PlatformAPI; vn_state *State = Memory->State; if(!Memory->State) { State = Memory->State = BootstrapPushStruct(vn_state, Arena); State->GlyphAtlas = CreateGlyphAtlas(RenderCommands); //Config_AddS64(&State->Config, StrLit("Platform/RefreshRate"), &Input->RefreshRate); Workspace_Init(&State->Workspace); } AnimationCurve_NewFrame(&State->AnimationCurveState, Input->dtForFrame); UI_NewFrame(&State->UI, Input->EventList, Input->MouseP); Workspace_Update(&State->Workspace, RenderCommands, Input, State->GlyphAtlas); // sixten(NOTE): This allows us to check for UI_SignalFromBox(UI_GetState()->ContainerNode); for(platform_event *Event = Input->EventList->First; Event != 0; Event = Event->Next) { Platform_ConsumeEvent(Input->EventList, Event); } render_group Group = BeginRenderGroup(RenderCommands); PushClear(&Group, V3(0.1, 0.1, 0.1)); UI_RenderFrame(&Group, State->GlyphAtlas); }