From 42263c7cf3b84acc26816836c5fca65c5d94b73b Mon Sep 17 00:00:00 2001 From: Hugh Sanderson Date: Tue, 26 Mar 2024 13:35:01 +0800 Subject: [PATCH] Fix tinted, rotated software alpha bitmap rendering --- project/src/software-renderer/BitmapFill.h | 5 ---- .../src/software-renderer/TileRenderer.cpp | 25 ++++++++----------- 2 files changed, 10 insertions(+), 20 deletions(-) diff --git a/project/src/software-renderer/BitmapFill.h b/project/src/software-renderer/BitmapFill.h index 353392931..e27614333 100644 --- a/project/src/software-renderer/BitmapFill.h +++ b/project/src/software-renderer/BitmapFill.h @@ -35,7 +35,6 @@ class BitmapFillerBase : public Filler mMapped = false; mPerspective = false; mBilinearAdjust = 0; - mTint = ARGB(0xffffffff); } @@ -53,9 +52,6 @@ class BitmapFillerBase : public Filler mDPyDX = (int)(mMapper.m10 * (1<<16)+ 0.5); } - void SetTint(ARGB inTint) { mTint = inTint; } - - void SetMapping(const UserPoint *inVertex, const float *inUVT,int inComponents) { mMapped = true; @@ -181,7 +177,6 @@ class BitmapFillerBase : public Filler double mTX, mTY, mTW; double mBilinearAdjust; Matrix mMapper; - ARGB mTint; GraphicsBitmapFill *mBitmap; }; diff --git a/project/src/software-renderer/TileRenderer.cpp b/project/src/software-renderer/TileRenderer.cpp index 11eb55d8d..df1785712 100644 --- a/project/src/software-renderer/TileRenderer.cpp +++ b/project/src/software-renderer/TileRenderer.cpp @@ -298,7 +298,7 @@ class TileRenderer : public Renderer continue; Rect alpha_rect(visible_pixels); - bool offscreen_buffer = mBlendMode!=bmNormal; + bool offscreen_buffer = mBlendMode!=bmNormal || (s->Format()==pfAlpha && (data.mHasColour || data.mHasTrans)); if (offscreen_buffer) { for(int i=0;i<4;i++) @@ -333,16 +333,12 @@ class TileRenderer : public Renderer // Can render straight to surface .... if (!offscreen_buffer) { - if (s->Format()==pfAlpha) + // Rotated text... + if (s->Format()==pfAlpha && just_alpha) { - if (data.mHasColour) - { - ARGB col = inState.mColourTransform->Transform(data.mColour|0xff000000); - mFiller->SetTint(col); - } mFiller->Fill(*alpha,0,0,inTarget,inState); } - else if (data.mHasTrans && !just_alpha) + else if ( (data.mHasTrans || data.mHasColour) && !just_alpha) { ColorTransform buf; RenderState col_state(inState); @@ -350,7 +346,12 @@ class TileRenderer : public Renderer tint.redMultiplier = ((data.mColour) & 0xff) * one_on_255; tint.greenMultiplier = ((data.mColour>>8) & 0xff) * one_on_255; tint.blueMultiplier = ((data.mColour>>16) & 0xff) * one_on_255; + + tint.redMultiplier = 0; + tint.greenMultiplier = 1; + tint.blueMultiplier = 0; col_state.CombineColourTransform(inState, &tint, &buf); + mFiller->Fill(*alpha,0,0,inTarget,col_state); } else @@ -366,13 +367,6 @@ class TileRenderer : public Renderer AutoSurfaceRender tmp_render(tmp); const RenderTarget &target = tmp_render.Target(); - if (s->Format()==pfAlpha && data.mHasColour) - { - ARGB col = inState.mColourTransform->Transform(data.mColour|0xff000000); - mFiller->SetTint(col); - } - - mFiller->Fill(*alpha,0,0,target,inState); } @@ -388,6 +382,7 @@ class TileRenderer : public Renderer } else if (s->Format()==pfAlpha && mBlendMode==bmNormal && data.mHasColour /* integer co-ordinate?*/ ) { + // Normal, aligned text if (mIsFixed) pos -= data.mOffset; //blits++;