summaryrefslogtreecommitdiff
path: root/main.cpp
diff options
context:
space:
mode:
authorFox Caminiti <fox@foxcam.net>2022-10-25 23:47:17 -0400
committerFox Caminiti <fox@foxcam.net>2022-10-25 23:47:17 -0400
commitbf01cea7274d9ac8ae13fd447c8568c95da31614 (patch)
treeed3b9fb4ae56f1e19cf3514280249954b1043070 /main.cpp
parent87c3fbb37141827622eeadb89189c267ed4baf87 (diff)
graph development
Diffstat (limited to 'main.cpp')
-rw-r--r--main.cpp125
1 files changed, 112 insertions, 13 deletions
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);
}