summaryrefslogtreecommitdiff
path: root/prenderer.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'prenderer.cpp')
-rw-r--r--prenderer.cpp50
1 files changed, 49 insertions, 1 deletions
diff --git a/prenderer.cpp b/prenderer.cpp
index 929fd9b..76e76cf 100644
--- a/prenderer.cpp
+++ b/prenderer.cpp
@@ -37,6 +37,55 @@ Transform_ScreenSpaceToLocal(layer_transforms T, uint32 FileWidth, uint32 FileHe
return V2(LayerUV.x * SourceWidth, LayerUV.y * SourceHeight);
}
+static void
+Layer_GetDimensions(memory *Memory, block_layer *Layer, int *Width, int *Height)
+{
+ if (!Layer->IsPrecomp) {
+ block_source *Source = (block_source *)Memory_Block_AddressAtIndex(Memory, F_Sources, Layer->Block_Source_Index);
+ *Width = Source->Width;
+ *Height = Source->Height;
+ } else {
+ block_composition *Comp = (block_composition *)Memory_Block_AddressAtIndex(Memory, F_Precomps, Layer->Block_Source_Index);
+ *Width = Comp->Width;
+ *Height = Comp->Height;
+ }
+}
+
+// static v2
+// Layer_SlowTreeTraverse(project_data *File, memory *Memory, block_layer *Layer, v2 Point)
+// {
+// }
+
+/*
+static v2
+Layer_Transform_ScreenSpaceToLocal_Recurse(project_data *File, memory *Memory, block_layer *Layer, v2 Point)
+{
+ uint32 Recurse[4];
+ real32 Idx = 0;
+ Recurse[0] = Idx = Layer->Block_Composition_Index;
+ v2 LayerUV = Point;
+ int i = 1;
+ do {
+ // block_layer *OuterLayer = (block_layer *)Memory_Block_AddressAtIndex(Memory, F_Layers, Idx);
+ block_composition *Comp = (block_composition *)Memory_Block_AddressAtIndex(Memory, F_Precomps, Idx);
+ Recurse[i++] = Idx;
+ Idx = OuterLayer->Block_Composition_Index;
+ } while (Idx != File->PrincipalCompIndex);
+ for (int a = i-2; a >= 0; a--) {
+ block_layer *OuterLayer = (block_layer *)Memory_Block_AddressAtIndex(Memory, F_Layers, Recurse[a-1]);
+ int OuterWidth = 0, OuterHeight = 0;
+ Layer_GetDimensions(Memory, OuterLayer, &OuterWidth, &OuterHeight);
+ layer_transforms T = Layer_GetTransforms(OuterLayer);
+ block_layer *InnerLayer = (block_layer *)Memory_Block_AddressAtIndex(Memory, F_Layers, Recurse[a]);
+ int InnerWidth = 0, InnerHeight = 0;
+ Layer_GetDimensions(Memory, InnerLayer, &InnerWidth, &InnerHeight);
+ LayerUV = T_CompUVToLayerUV(T, OuterWidth, OuterHeight, InnerWidth, InnerHeight, LayerUV);
+ }
+ // return V2(LayerUV.x * SourceWidth, LayerUV.y * SourceHeight);
+ return V2(LayerUV.x, LayerUV.y);
+}
+*/
+
// Transform given data based on state's Interact data.
static void
Transform_ApplyInteractive(interact_transform Interact, real32 *OutputX, real32 *OutputY, real32 *OutputRotation, real32 *OutputScale)
@@ -88,7 +137,6 @@ Transform_IterateOuterBounds(block_layer *Layer, uint32 Width, uint32 Height, re
if (Points[i].y > *MaxY) { *MaxY = Points[i].y; }
}
}
-
static void
Transform_Recurse(project_state *State, memory *Memory, block_composition *MainComp, uint32 CompIndex, block_layer *ParentLayer[4], uint32 Recursions,
sorted_comp_info *SortedCompArray, sorted_layer *SortedLayerArray,