diff options
Diffstat (limited to 'prenderer.cpp')
-rw-r--r-- | prenderer.cpp | 43 |
1 files changed, 26 insertions, 17 deletions
diff --git a/prenderer.cpp b/prenderer.cpp index aa44a5a..8690f4e 100644 --- a/prenderer.cpp +++ b/prenderer.cpp @@ -257,6 +257,8 @@ Layer_LocalToScreenSpace(project_state *State, memory *Memory, block_layer *Laye static void Fallback_RenderLayer(transform_info T, void *OutputBuffer, rectangle RenderRegion); +static void +Fallback_RenderDirect(direct_info T, void *OutputBuffer, rectangle RenderRegion); static void RenderLayers(render_entry Entry) { @@ -266,14 +268,13 @@ RenderLayers(render_entry Entry) { { Fallback_RenderLayer(*(transform_info *)Entry.RenderData, Entry.OutputBuffer, Entry.RenderRegion); } break; - case render_type_direct: + case render_type_notransform: { - Assert(0); - // Fallback_RenderDirect(*(direct_info *)Entry.RenderData, Entry.OutputBuffer, Entry.RenderRegion); + Fallback_RenderDirect(*(direct_info *)Entry.RenderData, Entry.OutputBuffer, Entry.RenderRegion); } break; case render_type_brush: { - PaintTest_AVX2(*(brush_info *)Entry.RenderData, Entry.OutputBuffer, Entry.RenderRegion); + PaintTest(*(brush_info *)Entry.RenderData, Entry.OutputBuffer, Entry.RenderRegion); } break; default: { @@ -295,6 +296,13 @@ RenderLayers(render_entry Entry) { static void Renderer_Start(void *Data, void *OutputBuffer, render_type RenderType, rectangle RenderRegion) { +#if DEBUG + if (Debug.NoThreading) { + render_entry Entry = { Data, OutputBuffer, RenderType, RenderRegion }; + RenderLayers(Entry); + return; + } +#endif // CPU Threading_BitmapOp(Data, OutputBuffer, RenderType, RenderRegion); } @@ -302,6 +310,12 @@ Renderer_Start(void *Data, void *OutputBuffer, render_type RenderType, rectangle static void Renderer_Check(bool32 *Test, render_type RenderType) { +#if DEBUG + if (Debug.NoThreading) { + *Test = true; + return; + } +#endif // CPU *Test = Threading_IsActive(RenderType); } @@ -521,7 +535,7 @@ Transform_Calculate(project_state *State, memory *Memory, project_data *File, bl A_Blend = A_Dest;\ static void -Fallback_RenderDirect(transform_info T, void *OutputBuffer, rectangle RenderRegion) +Fallback_RenderDirect(direct_info T, void *OutputBuffer, rectangle RenderRegion) { rectangle LayerBounds = ClipRectangle( T.ClipRect, RenderRegion); @@ -534,16 +548,16 @@ Fallback_RenderDirect(transform_info T, void *OutputBuffer, rectangle RenderRegi { uint16 LX = X; uint16 LY = Y; - uint16 LXPlus = Ceil(X+1, (uint32)T.LayerWidth - 1); - uint16 LYPlus = Ceil(Y+1, (uint32)T.LayerHeight - 1); + uint16 LXPlus = Ceil(X+1, (uint32)T.BufferWidth - 1); + uint16 LYPlus = Ceil(Y+1, (uint32)T.BufferHeight - 1); - uint8 *TexPTR0 = ((uint8 *)T.SourceBuffer + ((uint16)T.LayerPitch * LY) + (LX * (uint16)T.LayerBytesPerPixel)); + uint8 *TexPTR0 = ((uint8 *)T.SourceBuffer + ((uint16)T.BufferPitch * LY) + (LX * (uint16)T.BufferBytesPerPixel)); uint32 PixelA = *(uint32 *)TexPTR0; - real32 TexRA = (real32)(*(uint32 *)(TexPTR0 + T.LayerBits.ByteOffset * 0) & T.LayerBits.MaskPixel) * T.LayerBits.Normalized; - real32 TexGA = (real32)(*(uint32 *)(TexPTR0 + T.LayerBits.ByteOffset * 1) & T.LayerBits.MaskPixel) * T.LayerBits.Normalized; - real32 TexBA = (real32)(*(uint32 *)(TexPTR0 + T.LayerBits.ByteOffset * 2) & T.LayerBits.MaskPixel) * T.LayerBits.Normalized; - real32 TexAA = (real32)(*(uint32 *)(TexPTR0 + T.LayerBits.ByteOffset * 3) & T.LayerBits.MaskPixel) * T.LayerBits.Normalized; + 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; real32 LayerAlpha = TexAA * 1; // brush opacity @@ -850,11 +864,9 @@ EndRenderState(project_state *State) } State->NumberOfLayersToRender = 0; -#if THREADED SDL_AtomicSet(&CurrentEntry, 0); SDL_AtomicSet(&QueuedEntries, 0); SDL_AtomicSet(&CompletedEntries, 0); -#endif } @@ -930,7 +942,6 @@ QueueCurrentFrame(project_data *File, comp_buffer *CompBuffer, project_state *St } } -#if THREADED uint16 TileWidth = CompBuffer->Width / 4; uint16 TileHeight = CompBuffer->Height / 4; @@ -957,12 +968,10 @@ QueueCurrentFrame(project_data *File, comp_buffer *CompBuffer, project_state *St } } -#else rectangle RenderRegion = {0, 0, (int32)CompBuffer->Width, (int32)CompBuffer->Height}; RenderLayers(&RenderInfo, RenderRegion); -#endif } #if ARM |