summaryrefslogtreecommitdiff
path: root/createcalls.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'createcalls.cpp')
-rw-r--r--createcalls.cpp117
1 files changed, 83 insertions, 34 deletions
diff --git a/createcalls.cpp b/createcalls.cpp
index d85b271..e5ca18d 100644
--- a/createcalls.cpp
+++ b/createcalls.cpp
@@ -302,6 +302,36 @@ SSE_CopyToBuffer(pixel_buffer *Raster, uint16 Which)
}
}
+internal void
+DebugFillSolid(pixel_buffer *Raster, v4 Color)
+{
+ __m128i Col = _mm_set1_epi32(ColToUint32(Color));
+ uint8 *Row = ((uint8 *)Raster->OriginalBuffer);
+ uint32 bytes = 0;
+ while (bytes <= Raster->Height*Raster->Width*4) {
+ uint8 *Pixel = (uint8 *)Row + bytes;
+ _mm_storeu_si128((__m128i *)Pixel, Col);
+ bytes += 16;
+ }
+}
+
+internal void
+BitmapPackRGB(pixel_buffer *Buffer) {
+#if PACKEDRGB
+ Buffer->Pitch = Buffer->Width*Buffer->BytesPerPixel;
+#else
+ Buffer->Pitch = Buffer->Width; // each row has only 1 byte, 8 bits, per pixel
+ Buffer->Channel = Buffer->Width*Buffer->Height;
+#endif
+#if PACKEDRGB
+ Store4x4Chunk(Buffer);
+ SSE_CopyToBuffer(Buffer, 1);
+ SSE_ClearBuffer(Buffer, 1);
+#else
+ Libav_GBRAToRGBA(Buffer);
+#endif
+}
+
internal pixel_buffer
LoadImage(memory *Memory, char *filename)
{
@@ -315,19 +345,21 @@ LoadImage(memory *Memory, char *filename)
Buffer.Height = h;
Buffer.Width = w;
// printf("%s", stbi_failure_reason());
-#if PACKEDRGB
- Buffer.Pitch = Buffer.Width*Buffer.BytesPerPixel;
-#else
- Buffer.Pitch = Buffer.Width; // each row has only 1 byte, 8 bits, per pixel
- Buffer.Channel = Buffer.Width*Buffer.Height;
-#endif
-#if PACKEDRGB
- Store4x4Chunk(&Buffer);
- SSE_CopyToBuffer(&Buffer, 1);
- SSE_ClearBuffer(&Buffer, 1);
-#else
- Libav_GBRAToRGBA(&Buffer);
-#endif
+ BitmapPackRGB(&Buffer);
+ Buffer.ToUpdate = true;
+ return Buffer;
+}
+
+internal pixel_buffer
+CreateSolidBitmap(memory *Memory, uint16 Height, uint16 Width, v4 Color) {
+ pixel_buffer Buffer = {};
+ Buffer.BytesPerPixel = 4;
+ Buffer.OriginalBuffer = AllocateMemory(Memory, Height * Width * Buffer.BytesPerPixel, B_Scratch);
+ Buffer.EffectBuffer = AllocateMemory(Memory, Height * Width * Buffer.BytesPerPixel, B_Scratch);
+ Buffer.Height = Height;
+ Buffer.Width = Width;
+ DebugFillSolid(&Buffer, Color);
+ BitmapPackRGB(&Buffer);
Buffer.ToUpdate = true;
return Buffer;
}
@@ -649,34 +681,51 @@ CreateLayerFromSource(project_data *File, project_state *State, memory *Memory,
if (IsSupportedFile(&Type, filename)) {
project_layer *Layer = CreateLayer(File, Memory);
CreateRenderInfo(Layer, Memory, *File, Type, filename);
- State->UpdateKeyframes = true;
State->UpdateFrame = true;
+ State->DemoButton = true;
} else {
PostMsg(State, "File open fail...");
}
}
-internal void
-CreateDebugLayer(struct project_data *File, memory *Memory, int16 Width, int16 Height)
+internal project_layer *
+CreateSolidLayer(project_data *File, memory *Memory, uint16 Width, uint16 Height, v4 Col)
{
- int16 a = File->NumberOfLayers++;
- Assert(a < MAX_LAYERS);
-
- File->Layer[a] = (project_layer *)AllocateMemory(Memory, sizeof(project_layer), F_Layers);
+ project_layer *Layer = CreateLayer(File, Memory);
+ Layer->RenderInfo = AllocateMemory(Memory, sizeof(image_source), P_SourceData);
+ image_source *Source = (image_source *)Layer->RenderInfo;
+ Source->Raster = CreateSolidBitmap(Memory, Width, Height, Col);
+ Layer->SourceType = source_image;
+ return Layer;
+}
- File->Layer[a]->Name = (char *)AllocateMemory(Memory, 256, F_Strings);
- sprintf(File->Layer[a]->Name, "Layer %i", a);
- File->Layer[a]->x = InitFloatProperty("X Position", (real32)Width/2, 1.0f);
- File->Layer[a]->y = InitFloatProperty("Y Position", (real32)Height/2, 1.0f);
- File->Layer[a]->ax = InitFloatProperty("Anchor X", 0.5f, 0.005f);
- File->Layer[a]->ay = InitFloatProperty("Anchor Y", 0.5f, 0.005f);
- File->Layer[a]->scale = InitFloatProperty("Scale", 1.0f, 0.005f);
- File->Layer[a]->rotation = InitFloatProperty("Rotation", 0.0f, 1.0f);
- File->Layer[a]->opacity = InitFloatProperty("Opacity", 0.4f, 0.005f, 0.0f, 1.0f);
- File->Layer[a]->time = InitFloatProperty("Frame Number", 0.0f, 1.0f, 0, 100000);
- File->Layer[a]->RenderInfo = AllocateMemory(Memory, sizeof(image_source), P_SourceData);
- image_source *Source = (image_source *)File->Layer[a]->RenderInfo;
- Source->Raster = CreateDebugBitmap(Width, Height, Memory);
- File->Layer[a]->SourceType = source_image;
+internal void
+CreateDemoScene(project_data *File, memory *Memory)
+{
+ project_layer *Layer1 = CreateSolidLayer(File, Memory, 720, 1280, V4(0.0, 0.0, 0.0, 1.0));
+ Layer1->x.CurrentValue.f = 1280/2;
+ Layer1->y.CurrentValue.f = 720/2;
+ Layer1->StartFrame = 0;
+ Layer1->EndFrame = File->EndFrame;
+ project_layer *Layer2 = CreateSolidLayer(File, Memory, 500, 500, V4(0.0, 1.0, 0.4, 1.0));
+ Layer2->x.CurrentValue.f = 1280/2;
+ 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);
+ Layer2->rotation.IsToggled = true;
+ Layer2->scale.IsToggled = true;
+ project_layer *Layer3 = CreateSolidLayer(File, Memory, 160, 160, V4(1.0, 0.3, 0.2, 1.0));
+ Layer3->x.CurrentValue.f = 1280/4;
+ Layer3->y.CurrentValue.f = 720/4;
+ 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));
+ Layer3->x.IsToggled = true;
+ Layer3->y.IsToggled = true;
}