From bf01cea7274d9ac8ae13fd447c8568c95da31614 Mon Sep 17 00:00:00 2001 From: Fox Caminiti Date: Tue, 25 Oct 2022 23:47:17 -0400 Subject: graph development --- main.cpp | 125 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 112 insertions(+), 13 deletions(-) (limited to 'main.cpp') diff --git a/main.cpp b/main.cpp index bdd4786..74a9e4a 100644 --- a/main.cpp +++ b/main.cpp @@ -70,11 +70,11 @@ static uint32 RandomGlobalIncrement = 0; #include "my_imgui_widgets.cpp" #include "prenderer.cpp" #include "gl_calls.cpp" +#include "bezier.cpp" #if 0 #include "effects.cpp" #include "keyframes.cpp" #include "layer.cpp" -#include "bezier.cpp" #include "bitmap_calls.cpp" #endif @@ -226,6 +226,38 @@ Render_Comp(project_data *File, project_state *State, memory *Memory, ImGuiIO io // for (int a = 0; a < Layer->Block_Effect_Count; a++) { // } + property_channel *Property = &Layer->x; + + if (Property->Keyframe_Count) { + bezier_point *FirstPoint = Bezier_Lookup(Memory, Property, 0); + bezier_point *LastPoint = Bezier_Lookup(Memory, Property, Property->Keyframe_Count - 1); + if (FirstPoint->Pos[0].x >= State->Frame_Current) { + Property->CurrentValue = FirstPoint->Pos[0].y; + } else if (LastPoint->Pos[0].x <= State->Frame_Current) { + Property->CurrentValue = LastPoint->Pos[0].y; + } else { + int KeyframeIndex = 0; + for (;;) { + bezier_point *Point = Bezier_Lookup(Memory, Property, KeyframeIndex + 1); + if (Point->Pos[0].x >= State->Frame_Current) + break; + KeyframeIndex++; + } + bezier_point *Point = Bezier_Lookup(Memory, Property, KeyframeIndex); + bezier_point *NextPoint = Bezier_Lookup(Memory, Property, KeyframeIndex + 1); + Property->CurrentValue = Bezier_SolveYForX(Point->Pos[0], Point->Pos[0] + Point->Pos[2], NextPoint->Pos[0] + NextPoint->Pos[1], NextPoint->Pos[0], State->Frame_Current); + } + } + + /* + for (int h = 0; h < AmountOf(Layer->Property); h++) { + property_channel *Property = &Layer->Property[h]; + if (Property->Keyframe_Count) { + Property->CurrentValue = State->Frame_Current * 2; + } + } + */ + transform_info T = Transform_Calculate(State, Memory, File, Layer, Comp); T.SourceBuffer = BitmapAddress; rectangle RenderRegion = {0, 0, Comp->Width, Comp->Height}; @@ -233,7 +265,7 @@ Render_Comp(project_data *File, project_state *State, memory *Memory, ImGuiIO io bool32 IsRendering = true; Renderer_Start((void *)&T, CompBuffer, RenderRegion); while (IsRendering) { - SDL_Delay(2); + SDL_Delay(1); Renderer_Check(&IsRendering); // TODO(fox): Make interruptable if the render time gets too long. } @@ -328,6 +360,7 @@ int main(int argc, char *argv[]) { File->Occupied = 1; ui UI = {}; + UI.Test = ImDrawListSplitter(); block_composition *MainComp = (block_composition *)Memory_Block_AllocateAddress(&Memory, F_Precomps); @@ -369,6 +402,7 @@ int main(int argc, char *argv[]) { Layer->Col[1] = 0; Layer->Col[2] = 0; Layer->Block_Composition_Index = 0; + Layer->IsSelected = true; property_channel *Property = &Layer->x; Property->Block_Bezier_Index[0] = Memory_Block_AllocateNew(&Memory, F_Bezier); @@ -389,6 +423,7 @@ int main(int argc, char *argv[]) { Bezier->Point[0].Type = interpolation_type_bezier; Bezier->Point[1].Type = interpolation_type_bezier; Bezier->Point[2].Type = interpolation_type_bezier; + Bezier->Point[1].IsSelected = true; Property->Keyframe_Count = 3; property_channel *Property2 = &Layer->opacity; @@ -402,7 +437,6 @@ int main(int argc, char *argv[]) { Bezier2->Point[1].Pos[0] = V2(20, 1); Property2->Keyframe_Count = 2; - /* property_channel *Property3 = &Layer->y; Property3->Block_Bezier_Index[0] = Memory_Block_AllocateNew(&Memory, F_Bezier); Property3->Block_Bezier_Count = 1; @@ -423,7 +457,6 @@ int main(int argc, char *argv[]) { Bezier3->Point[1].Type = interpolation_type_bezier; Bezier3->Point[2].Type = interpolation_type_bezier; Property3->Keyframe_Count = 3; - */ } // { // Layer_CreateFromSource(File, State, &Memory, SourceIndex, MainComp->Frame_End); @@ -439,15 +472,75 @@ int main(int argc, char *argv[]) { { uint16 SourceIndex = Source_Generate(File, State, &Memory, (void *)"../asset/b.jpg"); block_source *Source = (block_source *)Memory_Block_AddressAtIndex(&Memory, F_Sources, 1); - // { - // Layer_CreateFromSource(File, State, &Memory, SourceIndex, MainComp->Frame_End); - // block_layer *Layer = (block_layer *)Memory_Block_AddressAtIndex(&Memory, F_Layers, File->Layer_Count - 1); - // Layer->Vertical_Offset = 5; - // Layer->Col[0] = 0; - // Layer->Col[1] = 0; - // Layer->Col[2] = 1; - // Layer->Block_Composition_Index = 0; - // } + { + Layer_CreateFromSource(File, State, &Memory, SourceIndex, MainComp->Frame_End); + block_layer *Layer = (block_layer *)Memory_Block_AddressAtIndex(&Memory, F_Layers, File->Layer_Count - 1); + Layer->Vertical_Offset = 5; + Layer->Col[0] = 0; + Layer->Col[1] = 0; + Layer->Col[2] = 1; + Layer->Block_Composition_Index = 0; + Layer->IsSelected = true; + + property_channel *Property = &Layer->x; + Property->Block_Bezier_Index[0] = Memory_Block_AllocateNew(&Memory, F_Bezier); + Property->Block_Bezier_Count = 1; + + block_bezier *Bezier = (block_bezier *)Memory_Block_AddressAtIndex(&Memory, F_Bezier, Property->Block_Bezier_Index[0]); + Bezier->Occupied = 1; + + Bezier->Point[0].Pos[0] = V2(30, 0); + Bezier->Point[1].Pos[0] = V2(33, 250); + Bezier->Point[2].Pos[0] = V2(35, -50); + Bezier->Point[3].Pos[0] = V2(55, 0); + Bezier->Point[0].Pos[1] = V2(-1, 0); + Bezier->Point[1].Pos[1] = V2(-1, 0); + Bezier->Point[2].Pos[1] = V2(-1, 0); + Bezier->Point[3].Pos[1] = V2(-1, 0); + Bezier->Point[0].Pos[2] = V2(1, 0); + Bezier->Point[1].Pos[2] = V2(1, 0); + Bezier->Point[2].Pos[2] = V2(1, 0); + Bezier->Point[3].Pos[2] = V2(1, 0); + Bezier->Point[0].Type = interpolation_type_bezier; + Bezier->Point[1].Type = interpolation_type_bezier; + Bezier->Point[2].Type = interpolation_type_bezier; + Bezier->Point[3].Type = interpolation_type_bezier; + Property->Keyframe_Count = 4; + + property_channel *Property2 = &Layer->opacity; + Property2->Block_Bezier_Index[0] = Memory_Block_AllocateNew(&Memory, F_Bezier); + Property2->Block_Bezier_Count = 1; + + block_bezier *Bezier2 = (block_bezier *)Memory_Block_AddressAtIndex(&Memory, F_Bezier, Property2->Block_Bezier_Index[0]); + Bezier2->Occupied = 1; + + Bezier2->Point[0].Pos[0] = V2(25, 1); + Bezier2->Point[1].Pos[0] = V2(40, 0); + Property2->Keyframe_Count = 2; + + /* + property_channel *Property3 = &Layer->y; + Property3->Block_Bezier_Index[0] = Memory_Block_AllocateNew(&Memory, F_Bezier); + Property3->Block_Bezier_Count = 1; + + block_bezier *Bezier3 = (block_bezier *)Memory_Block_AddressAtIndex(&Memory, F_Bezier, Property3->Block_Bezier_Index[0]); + Bezier3->Occupied = 1; + + Bezier3->Point[0].Pos[0] = V2(0, -20); + Bezier3->Point[1].Pos[0] = V2(10, 300); + Bezier3->Point[2].Pos[0] = V2(20, 100); + Bezier3->Point[0].Pos[1] = V2(-4, 0); + Bezier3->Point[1].Pos[1] = V2(-4, 0); + Bezier3->Point[2].Pos[1] = V2(-4, 0); + Bezier3->Point[0].Pos[2] = V2(4, 0); + Bezier3->Point[1].Pos[2] = V2(4, 0); + Bezier3->Point[2].Pos[2] = V2(4, 0); + Bezier3->Point[0].Type = interpolation_type_bezier; + Bezier3->Point[1].Type = interpolation_type_bezier; + Bezier3->Point[2].Type = interpolation_type_bezier; + Property3->Keyframe_Count = 3; + */ + } } { @@ -609,6 +702,12 @@ int main(int argc, char *argv[]) { { Main_InputTest(File, State, &Memory, &UI, window, textureID); + if (State->IsPlaying) { + block_composition *MainComp = (block_composition *)Memory_Block_AddressAtIndex(&Memory, F_Precomps, File->PrincipalCompIndex); + State->Frame_Current = ((State->Frame_Current + 1) >= MainComp->Frame_Count) ? 0 : State->Frame_Current + 1; + State->UpdateFrame = true; + } + if (State->UpdateFrame) { Main_Renderer(File, State, &Memory, window, textureID, io); } -- cgit v1.2.3