diff options
Diffstat (limited to 'prenderer.cpp')
-rw-r--r-- | prenderer.cpp | 50 |
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, |