summaryrefslogtreecommitdiff
path: root/createcalls.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'createcalls.cpp')
-rw-r--r--createcalls.cpp140
1 files changed, 71 insertions, 69 deletions
diff --git a/createcalls.cpp b/createcalls.cpp
index 2e754af..1d4e2e5 100644
--- a/createcalls.cpp
+++ b/createcalls.cpp
@@ -19,11 +19,11 @@ Source_Generate(project_data *File, memory *Memory, void *Path)
Source->SourceType = source_type_video;
else
Source->SourceType = source_type_image;
- Action_Entry_Commit(Memory, action_entry_default, "Add source");
- Action_Change_Commit(Memory, &Source->Path, &Source->Path, &Path, action_change_ptr);
+ History_Entry_Commit(Memory, action_entry_default, "Add source");
+ History_Action_Change(Memory, &Source->Path, &Source->Path, &Path, action_type_change_ptr);
uint32 i = File->NumberOfSources + 1;
- Action_Change_Commit(Memory, &File->NumberOfSources, &File->NumberOfSources, &i, action_change_u16);
- Action_Entry_End(Memory);
+ History_Action_Change(Memory, &File->NumberOfSources, &File->NumberOfSources, &i, action_type_change_u16);
+ History_Entry_End(Memory);
return 1;
} else {
// PostMsg(State, "File open fail...");
@@ -41,7 +41,6 @@ InitFloatProperty(char *Name, real32 Val, real32 ScrubVal, real32 MinVal = PROPE
Property.MaxVal.f = MaxVal;
Property.ScrubVal.f = ScrubVal;
Property.VarType = type_real;
- Property.GraphWindowHeight = 300;
return Property;
}
@@ -61,30 +60,6 @@ PostMsg(project_state *State, char *msg)
State->Msg = msg;
}
-/*
-static project_layer *
-CreateSolidLayer(project_data *File, memory *Memory, uint16 Width, uint16 Height, v4 Col)
-{
- project_layer *Layer = CreateLayer(File, Memory);
- Layer->RenderInfo = AllocateMemory(Memory, sizeof(source_image), P_SourceData);
- source_image *Source = (source_image *)Layer->RenderInfo;
- Source->Raster = CreateSolidBitmap(Memory, Width, Height, Col);
- Layer->SourceType = source_type_image;
- return Layer;
-}
-
-static project_layer *
-CreateDebugLayer(project_data *File, memory *Memory, uint16 Width, uint16 Height, int i)
-{
- project_layer *Layer = CreateLayer(File, Memory);
- Layer->RenderInfo = AllocateMemory(Memory, sizeof(source_image), P_SourceData);
- source_image *Source = (source_image *)Layer->RenderInfo;
- Source->Raster = CreateDebugBitmap(Memory, Width, Height);
- Layer->SourceType = source_type_image;
- return Layer;
-}
-*/
-
// Note we use total bytes here so we can use this memory for both packed and unpacked bitmaps.
void * Layer_AllocateBitmap(memory *Memory, uint16 Width, uint16 Height, uint16 BytesPerPixel)
{
@@ -102,16 +77,16 @@ project_layer * Layer_Init(project_data *File, memory *Memory)
// from this index in the Action tree since all we need to do to "delete"
// the layer is to unset this. The layer that gets made here is always at
// the top of the index.
- Action_Entry_Commit(Memory, action_entry_layerinit, "Create layer");
- Action_Change_Commit(Memory, &File->NumberOfLayers, &Index, &NextIndex, action_change_u16);
+ History_Entry_Commit(Memory, action_entry_layerinit, "Create layer");
+ History_Action_Change(Memory, &File->NumberOfLayers, &Index, &NextIndex, action_type_change_u16);
File->Layer[Index] = (project_layer *)AllocateMemory(Memory, sizeof(project_layer), F_Layers);
project_layer *Layer = File->Layer[Index];
- Action_Entry_SetPointer(Memory, &Layer->BitmapInfo.AVInfo);
+ History_Entry_SetPointer(Memory, &Layer->BitmapInfo.AVInfo);
- Action_Entry_End(Memory);
+ History_Entry_End(Memory);
Layer->Name = (char *)AllocateMemory(Memory, STRING_SIZE, F_Strings);
sprintf(Layer->Name, "Layer %i", NextIndex); // CSbros...
@@ -208,7 +183,13 @@ Mask_TriangulateAndRasterize(memory *Memory, project_layer *Layer, mask *Mask)
Mask_RasterizePoints(Mask);
gl_vertex_shader VertData;
- gl_effect_layer Test = Layer->BitmapInfo.Test;
+ gl_effect_layer Test = Layer->BitmapInfo.TestM;
+ gl_effect_layer Test2 = Layer->BitmapInfo.Test;
+
+ uint32 Width = Layer->Source->Info.Width;
+ uint32 Height = Layer->Source->Info.Height;
+
+ uint8 *Data = (uint8 *)Layer->BitmapInfo.BitmapBuffer;
glBindFramebuffer(GL_FRAMEBUFFER, Test.FramebufferObject);
@@ -223,7 +204,12 @@ Mask_TriangulateAndRasterize(memory *Memory, project_layer *Layer, mask *Mask)
glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE);
- glUseProgram(MaskShaderProgram);
+ glUseProgram(DefaultShaderProgram);
+
+ int VertexMode = glGetUniformLocation(DefaultShaderProgram, "VertexMode");
+ int FragmentMode = glGetUniformLocation(DefaultShaderProgram, "FragmentMode");
+ glUniform1i(VertexMode, 1);
+ glUniform1i(FragmentMode, 0);
// secondary VBO
glGenVertexArrays(1, &VertData.VertexArrayObject);
@@ -235,8 +221,8 @@ Mask_TriangulateAndRasterize(memory *Memory, project_layer *Layer, mask *Mask)
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 3 * sizeof(float), (void*)0);
glEnableVertexAttribArray(0);
- int Scale = glGetUniformLocation(MaskShaderProgram, "CompDimensions");
- glUniform3f(Scale, (real32)Layer->Source->Info.Width, (real32)Layer->Source->Info.Height, 0);
+ int Scale = glGetUniformLocation(DefaultShaderProgram, "CompDimensions");
+ glUniform3f(Scale, Width, Height, 0);
glStencilOpSeparate(GL_FRONT, GL_KEEP, GL_KEEP, GL_INCR_WRAP);
@@ -251,11 +237,14 @@ Mask_TriangulateAndRasterize(memory *Memory, project_layer *Layer, mask *Mask)
glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE);
glBindVertexArray(0);
- // glStencilFunc(GL_EQUAL, 1, 0xFF);
- // glStencilMask(0x00); // disables stencil writing
- glBindRenderbuffer(GL_RENDERBUFFER, Test.Color_Renderbuffer);
- glUseProgram(DefaultShaderProgram);
+ // glBindRenderbuffer(GL_RENDERBUFFER, Test.Color_Renderbuffer);
+
+ VertexMode = glGetUniformLocation(DefaultShaderProgram, "VertexMode");
+ FragmentMode = glGetUniformLocation(DefaultShaderProgram, "FragmentMode");
+ glUniform1i(VertexMode, 0);
+ glUniform1i(FragmentMode, 1);
+
// // Switch to main buffer
glBindBuffer(GL_ARRAY_BUFFER, DefaultVerts.VertexBufferObject);
@@ -267,10 +256,6 @@ Mask_TriangulateAndRasterize(memory *Memory, project_layer *Layer, mask *Mask)
glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, 5 * sizeof(float), (void*)(3 * sizeof(float)));
glEnableVertexAttribArray(1);
- //glStencilFunc(GL_EQUAL, 0, 0xFF);
- //glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP);
- //glDrawElements(GL_TRIANGLE_STRIP, 6, GL_UNSIGNED_INT, 0);
-
glStencilFunc(GL_NOTEQUAL, 0, 0xFF);
glStencilOp(GL_ZERO, GL_ZERO, GL_ZERO);
glDrawElements(GL_TRIANGLE_STRIP, 6, GL_UNSIGNED_INT, 0);
@@ -279,10 +264,16 @@ Mask_TriangulateAndRasterize(memory *Memory, project_layer *Layer, mask *Mask)
glStencilMask(0xFF);
glStencilFunc(GL_ALWAYS, 0, 0xFF);
- uint8 *Data = (uint8 *)Layer->BitmapInfo.BitmapBuffer;
- glReadPixels(0, 0, Layer->Source->Info.Width, Layer->Source->Info.Height, GL_RGBA, GL_UNSIGNED_BYTE, &Data[0]);
+ glBindFramebuffer(GL_READ_FRAMEBUFFER, Test.FramebufferObject);
+ glBindFramebuffer(GL_DRAW_FRAMEBUFFER, Test2.FramebufferObject);
+ glBlitFramebuffer(0, 0, Width, Height, 0, 0, Width, Height,
+ GL_COLOR_BUFFER_BIT, GL_NEAREST);
+ glBindFramebuffer(GL_FRAMEBUFFER, Test2.FramebufferObject);
+
+ glReadPixels(0, 0, Width, Height, GL_RGBA, GL_UNSIGNED_BYTE, &Data[0]);
glBindFramebuffer(GL_FRAMEBUFFER, 0);
+
}
static void
@@ -348,6 +339,7 @@ Layer_UpdateBitmap(project_data *File, project_layer *Layer, memory *Memory, int
} else {
Bitmap_CopyToPointer(Bitmap->Data, DestBuffer, BytesPerPixel, UnpackedSize);
TestGL_InitTexture(&BitmapInfo->Test, DestBuffer, Width, Height);
+ TestGL_MaskTexture(&BitmapInfo->TestM, DestBuffer, Width, Height);
if (Layer->NumberOfMasks) {
for (int i = 0; i < Layer->NumberOfMasks; i++) {
@@ -367,6 +359,16 @@ Layer_UpdateBitmap(project_data *File, project_layer *Layer, memory *Memory, int
}
#else
Bitmap_CopyToPointer(Bitmap->Data, DestBuffer, BytesPerPixel, UnpackedSize);
+ TestGL_UpdateTexture(&BitmapInfo->Test, DestBuffer, Width, Height, 0);
+ TestGL_UpdateTexture(&BitmapInfo->TestM, DestBuffer, Width, Height, 1);
+
+ if (Layer->NumberOfMasks) {
+ for (int i = 0; i < Layer->NumberOfMasks; i++) {
+ mask *Mask = &Layer->Mask[i];
+ if (Mask->IsClosed)
+ Mask_TriangulateAndRasterize(Memory, Layer, Mask);
+ }
+ }
#endif
}
@@ -404,24 +406,24 @@ LoadTestFootage(project_data *File, project_state *State, memory *Memory)
{
void *SourceString = String_GenerateFromChar(Memory, "../asset/24.mp4");
Source_Generate(File, Memory, SourceString);
+
source *Source = &File->Source[0];
Layer_CreateFromSource(File, State, Memory, Source);
SelectLayer(File->Layer[0], State, 0);
property_channel *Property = &File->Layer[0]->x;
- // for (int i = 0; i < 15; i++)
- // ManualKeyframeInsertF(Property, Memory, i*2, i*2*100);
- ManualKeyframeInsertF(Property, Memory, 1, 100);
- ManualKeyframeInsertF(Property, Memory, 3, 300);
- ManualKeyframeInsertF(Property, Memory, 23, 2300);
- ManualKeyframeInsertF(Property, Memory, 5, 500);
+ // for (int i = 0; i < 16; i++)
+ // Keyframe_Insert(Property, Memory, i*2, i*2*100);
+ // Keyframe_Insert(Property, Memory, 1, 100);
+ // Keyframe_Insert(Property, Memory, 15, 1500);
+ // Keyframe_Insert(Property, Memory, 31, 3100);
+
+ // History_Undo(Memory);
+ // History_Redo(Memory);
+
Property->IsToggled = true;
- Property->IsGraphToggled = true;
- Property->GraphLength = 150;
- Property->GraphYOffset = (Property->GraphWindowHeight - Property->GraphLength)/2;
// AddEffect(File->Layer[0], Memory, 3);
- /*
mask *Mask = &File->Layer[0]->Mask[0];
File->Layer[0]->NumberOfMasks = 1;
Mask->Point[0].Pos = V2(200, 200);
@@ -449,7 +451,7 @@ LoadTestFootage(project_data *File, project_state *State, memory *Memory)
Mask->Point[4].HandleBezier = true;
Mask->NumberOfPoints = 5;
- */
+ Mask->IsClosed = true;
// if (!Source_Generate(File, Memory, "../asset/test.png"))
// PostMsg(State, "File open fail...");
@@ -457,10 +459,10 @@ LoadTestFootage(project_data *File, project_state *State, memory *Memory)
// PostMsg(State, "File open fail...");
// property_channel *Property = &File->Layer[0]->x;
- // ManualKeyframeInsertF(Property, Memory, 1, 500);
- // ManualKeyframeInsertF(Property, Memory, 30, 800);
- // ManualKeyframeInsertF(Property, Memory, 15, 400);
- // ManualKeyframeInsertF(Property, Memory, 20, 100);
+ // Keyframe_Insert(Property, Memory, 1, 500);
+ // Keyframe_Insert(Property, Memory, 30, 800);
+ // Keyframe_Insert(Property, Memory, 15, 400);
+ // Keyframe_Insert(Property, Memory, 20, 100);
// Property->IsToggled = true;
// Property->IsGraphToggled = true;
// Property->GraphLength = 150;
@@ -509,8 +511,8 @@ CreateDemoScene(project_data *File, memory *Memory)
Layer2->y.CurrentValue.f = 720/2;
Layer2->StartFrame = 0;
Layer2->EndFrame = File->EndFrame;
- ManualKeyframeInsertF(&Layer2->rotation, Memory, 2, 0);
- ManualKeyframeInsertF(&Layer2->rotation, Memory, 50, 360);
+ Keyframe_Insert(&Layer2->rotation, Memory, 2, 0);
+ Keyframe_Insert(&Layer2->rotation, Memory, 50, 360);
Layer2->rotation.IsToggled = true;
Layer2->scale.IsToggled = true;
project_layer *Layer3 = CreateSolidLayer(File, Memory, 157, 163, V4(1.0, 0.3, 0.2, 1.0));
@@ -519,9 +521,9 @@ CreateDemoScene(project_data *File, memory *Memory)
Layer3->opacity.CurrentValue.f = 0.5f;
Layer3->StartFrame = 0;
Layer3->EndFrame = File->EndFrame;
- ManualKeyframeInsertF(&Layer3->x, Memory, 2, Layer3->x.CurrentValue.f);
- ManualKeyframeInsertF(&Layer3->x, Memory, 30, Layer3->x.CurrentValue.f+(1280/2));
- ManualKeyframeInsertF(&Layer3->x, Memory, 60, Layer3->x.CurrentValue.f+(1280/3));
+ Keyframe_Insert(&Layer3->x, Memory, 2, Layer3->x.CurrentValue.f);
+ Keyframe_Insert(&Layer3->x, Memory, 30, Layer3->x.CurrentValue.f+(1280/2));
+ Keyframe_Insert(&Layer3->x, Memory, 60, Layer3->x.CurrentValue.f+(1280/3));
Layer3->x.IsToggled = true;
Layer3->y.IsToggled = true;
#endif
@@ -541,8 +543,8 @@ CreateGrid(project_data *File, memory *Memory) {
Layer->opacity.CurrentValue.f = 0.25;
Layer->StartFrame = 0;
Layer->EndFrame = File->EndFrame;
- ManualKeyframeInsertF(&Layer->rotation, Memory, i, 0);
- ManualKeyframeInsertF(&Layer->rotation, Memory, 40+i, 360);
+ Keyframe_Insert(&Layer->rotation, Memory, i, 0);
+ Keyframe_Insert(&Layer->rotation, Memory, 40+i, 360);
}
}
}