From 3e399d7f2f37feb10e120d7c5950615ffb350a84 Mon Sep 17 00:00:00 2001 From: Fox Caminiti Date: Sun, 24 Jul 2022 11:22:48 -0400 Subject: demo scene added; minor oversights fixed --- createcalls.cpp | 117 ++++++++++++++++++++++++++++++++++++++++---------------- 1 file changed, 83 insertions(+), 34 deletions(-) (limited to 'createcalls.cpp') 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; } -- cgit v1.2.3