From 1da96e0dbe95f5078623e2b0469152692833a096 Mon Sep 17 00:00:00 2001 From: Fox Caminiti Date: Tue, 22 Nov 2022 23:02:54 -0500 Subject: file io, compression --- prenderer.cpp | 71 ++++++++++++++++++++++++++++++----------------------------- 1 file changed, 36 insertions(+), 35 deletions(-) (limited to 'prenderer.cpp') diff --git a/prenderer.cpp b/prenderer.cpp index 8690f4e..05442f9 100644 --- a/prenderer.cpp +++ b/prenderer.cpp @@ -272,6 +272,10 @@ RenderLayers(render_entry Entry) { { Fallback_RenderDirect(*(direct_info *)Entry.RenderData, Entry.OutputBuffer, Entry.RenderRegion); } break; + case render_type_notransform_swap: + { + Fallback_RenderDirect(*(direct_info *)Entry.RenderData, Entry.OutputBuffer, Entry.RenderRegion); + } break; case render_type_brush: { PaintTest(*(brush_info *)Entry.RenderData, Entry.OutputBuffer, Entry.RenderRegion); @@ -322,21 +326,10 @@ Renderer_Check(bool32 *Test, render_type RenderType) static transform_info -Transform_Calculate(project_state *State, memory *Memory, project_data *File, block_layer *Layer, block_composition *Comp) +Transform_Calculate(project_state *State, memory *Memory, project_data *File, block_layer *Layer, block_composition *Comp, + int Width, int Height, int BytesPerPixel) { transform_info TransformInfo; - int Width = 0, Height = 0, BytesPerPixel = 0; - if (!Layer->IsPrecomp) { - block_source *Source = (block_source *)Memory_Block_AddressAtIndex(Memory, F_Sources, Layer->Block_Source_Index); - Width = Source->Width; - Height = Source->Height; - BytesPerPixel = Source->BytesPerPixel; - } else { - block_composition *Precomp = (block_composition *)Memory_Block_AddressAtIndex(Memory, F_Precomps, Layer->Block_Source_Index); - Width = Precomp->Width; - Height = Precomp->Height; - BytesPerPixel = Precomp->BytesPerPixel; - } real32 Rotation = Layer->rotation.CurrentValue; real32 X = Layer->x.CurrentValue; @@ -552,24 +545,20 @@ Fallback_RenderDirect(direct_info T, void *OutputBuffer, rectangle RenderRegion) uint16 LYPlus = Ceil(Y+1, (uint32)T.BufferHeight - 1); uint8 *TexPTR0 = ((uint8 *)T.SourceBuffer + ((uint16)T.BufferPitch * LY) + (LX * (uint16)T.BufferBytesPerPixel)); - uint32 PixelA = *(uint32 *)TexPTR0; - real32 TexRA = (real32)(*(uint32 *)(TexPTR0 + T.BufferBits.ByteOffset * 0) & T.BufferBits.MaskPixel) * T.BufferBits.Normalized; - real32 TexGA = (real32)(*(uint32 *)(TexPTR0 + T.BufferBits.ByteOffset * 1) & T.BufferBits.MaskPixel) * T.BufferBits.Normalized; - real32 TexBA = (real32)(*(uint32 *)(TexPTR0 + T.BufferBits.ByteOffset * 2) & T.BufferBits.MaskPixel) * T.BufferBits.Normalized; - real32 TexAA = (real32)(*(uint32 *)(TexPTR0 + T.BufferBits.ByteOffset * 3) & T.BufferBits.MaskPixel) * T.BufferBits.Normalized; + uint32 *R_SrcAddress = (uint32 *)(TexPTR0 + T.BufferBits.ByteOffset * 0); + uint32 *G_SrcAddress = (uint32 *)(TexPTR0 + T.BufferBits.ByteOffset * 1); + uint32 *B_SrcAddress = (uint32 *)(TexPTR0 + T.BufferBits.ByteOffset * 2); + uint32 *A_SrcAddress = (uint32 *)(TexPTR0 + T.BufferBits.ByteOffset * 3); - real32 LayerAlpha = TexAA * 1; // brush opacity + real32 R_Src = (real32)(*R_SrcAddress & T.BufferBits.MaskPixel) * T.BufferBits.Normalized; - real32 R_Col = TexRA; - real32 G_Col = TexGA; - real32 B_Col = TexBA; - real32 A_Col = TexAA; + real32 R_Col = (real32)(*R_SrcAddress & T.BufferBits.MaskPixel) * T.BufferBits.Normalized; + real32 G_Col = (real32)(*G_SrcAddress & T.BufferBits.MaskPixel) * T.BufferBits.Normalized; + real32 B_Col = (real32)(*B_SrcAddress & T.BufferBits.MaskPixel) * T.BufferBits.Normalized; + real32 A_Col = (real32)(*A_SrcAddress & T.BufferBits.MaskPixel) * T.BufferBits.Normalized; - real32 R_Blend = TexRA; - real32 G_Blend = TexGA; - real32 B_Blend = TexBA; - real32 A_Blend = TexAA; + real32 LayerAlpha = A_Col * 1; // brush opacity uint8 *DestPixel =((uint8 *)OutputBuffer + ((uint16)Y * (uint16)T.BufferPitch) + ((uint16)X * (uint16)T.BufferBytesPerPixel)); @@ -578,13 +567,21 @@ Fallback_RenderDirect(direct_info T, void *OutputBuffer, rectangle RenderRegion) uint32 *B_DestAddress = (uint32 *)(DestPixel + T.BufferBits.ByteOffset * 2); uint32 *A_DestAddress = (uint32 *)(DestPixel + T.BufferBits.ByteOffset * 3); - if (LayerAlpha != 1.0f || T.BlendMode != blend_normal) { + uint32 R_DestInt = (*R_DestAddress & T.BufferBits.MaskPixel); + uint32 G_DestInt = (*G_DestAddress & T.BufferBits.MaskPixel); + uint32 B_DestInt = (*B_DestAddress & T.BufferBits.MaskPixel); + uint32 A_DestInt = (*A_DestAddress & T.BufferBits.MaskPixel); - real32 R_Dest = (real32)(*R_DestAddress & T.BufferBits.MaskPixel) * T.BufferBits.Normalized; - real32 G_Dest = (real32)(*G_DestAddress & T.BufferBits.MaskPixel) * T.BufferBits.Normalized; - real32 B_Dest = (real32)(*B_DestAddress & T.BufferBits.MaskPixel) * T.BufferBits.Normalized; - real32 A_Dest = (real32)(*A_DestAddress & T.BufferBits.MaskPixel) * T.BufferBits.Normalized; + real32 R_Dest = (real32)(R_DestInt) * T.BufferBits.Normalized; + real32 G_Dest = (real32)(G_DestInt) * T.BufferBits.Normalized; + real32 B_Dest = (real32)(B_DestInt) * T.BufferBits.Normalized; + real32 A_Dest = (real32)(A_DestInt) * T.BufferBits.Normalized; + real32 R_Blend = R_Col; + real32 G_Blend = G_Col; + real32 B_Blend = B_Col; + real32 A_Blend = A_Col; + if (LayerAlpha != 1.0f || T.BlendMode != blend_normal) { Fallback_Blend(); } @@ -593,6 +590,13 @@ Fallback_RenderDirect(direct_info T, void *OutputBuffer, rectangle RenderRegion) uint32 B_Out = (uint32)(Normalize(B_Blend) * T.BufferBits.Bits); uint32 A_Out = (uint32)(Normalize(A_Blend) * T.BufferBits.Bits); + if (T.SwapActive) + { + *R_SrcAddress = (*R_SrcAddress & ~T.BufferBits.MaskPixel) | R_DestInt; + *G_SrcAddress = (*G_SrcAddress & ~T.BufferBits.MaskPixel) | G_DestInt; + *B_SrcAddress = (*B_SrcAddress & ~T.BufferBits.MaskPixel) | B_DestInt; + *A_SrcAddress = (*A_SrcAddress & ~T.BufferBits.MaskPixel) | A_DestInt; + } *R_DestAddress = (*R_DestAddress & ~T.BufferBits.MaskPixel) | R_Out; *G_DestAddress = (*G_DestAddress & ~T.BufferBits.MaskPixel) | G_Out; *B_DestAddress = (*B_DestAddress & ~T.BufferBits.MaskPixel) | B_Out; @@ -619,9 +623,6 @@ Fallback_RenderLayer(transform_info T, void *OutputBuffer, rectangle RenderRegio real32 U = (StartVectorX * T.XAxisPX) + (StartVectorY * T.XAxisPY); real32 V = (StartVectorX * T.YAxisPX) + (StartVectorY * T.YAxisPY); - if (X == T.BufferWidth) - int why = 0; - if (U < 1.0f && U >= 0.0f && V < 1.0f && V >= 0.0f) { real32 TexXFull = U * T.LayerWidth; -- cgit v1.2.3