diff --git a/src/GraphicsDrawer.cpp b/src/GraphicsDrawer.cpp index 9744a298..0e2eeb5c 100644 --- a/src/GraphicsDrawer.cpp +++ b/src/GraphicsDrawer.cpp @@ -828,21 +828,13 @@ void GraphicsDrawer::drawLine(int _v0, int _v1, float _width) gfxContext.drawLine(lineWidth, vertexBuf); } -void GraphicsDrawer::drawRect(int _ulx, int _uly, int _lrx, int _lry, float *_pColor) +void GraphicsDrawer::drawRect(int _ulx, int _uly, int _lrx, int _lry) { m_texrectDrawer.draw(); if (!_canDraw()) return; - if (gDP.otherMode.cycleType == G_CYC_FILL) { - gDP.rectColor.r = _pColor[0]; - gDP.rectColor.g = _pColor[1]; - gDP.rectColor.b = _pColor[2]; - gDP.rectColor.a = _pColor[3]; - } else { - gDP.rectColor = gDPInfo::Color(); - } gSP.changed &= ~CHANGED_GEOMETRYMODE; // Don't update cull mode if (gSP.changed || gDP.changed) _updateStates(DrawingState::Rect); @@ -1064,12 +1056,6 @@ void GraphicsDrawer::drawTexturedRect(const TexturedRectParams & _params) _updateTextures(); cmbInfo.updateParameters(); } else { - gDP.rectColor = gDPInfo::Color(); - if (gDP.otherMode.cycleType < G_CYC_COPY) { - if (gDP.combine.mA0 == G_ACMUX_0 && gDP.combine.aA0 == G_ACMUX_SHADE) - gDP.rectColor.a = 1.0f; - } - if (_params.texrectCmd && (gSP.changed | gDP.changed) != 0) _updateStates(DrawingState::TexRect); gfxContext.enable(enable::CULL_FACE, false); diff --git a/src/GraphicsDrawer.h b/src/GraphicsDrawer.h index c64993f1..54026803 100644 --- a/src/GraphicsDrawer.h +++ b/src/GraphicsDrawer.h @@ -45,7 +45,7 @@ public: void drawLine(int _v0, int _v1, float _width); - void drawRect(int _ulx, int _uly, int _lrx, int _lry, float * _pColor); + void drawRect(int _ulx, int _uly, int _lrx, int _lry); struct TexturedRectParams { diff --git a/src/gDP.cpp b/src/gDP.cpp index 25bc96b1..accc8461 100644 --- a/src/gDP.cpp +++ b/src/gDP.cpp @@ -777,10 +777,10 @@ void gDPFillRectangle( s32 ulx, s32 uly, s32 lrx, s32 lry ) if (depthBuffer != dbCleared) { frameBufferList().setBufferChanged(); - f32 fillColor[4]; - gDPGetFillColor(fillColor); if (gDP.otherMode.cycleType == G_CYC_FILL) { + f32 fillColor[4]; + gDPGetFillColor(fillColor); if ((depthBuffer == dbNone) && (ulx == 0) && (uly == 0) && @@ -788,10 +788,17 @@ void gDPFillRectangle( s32 ulx, s32 uly, s32 lrx, s32 lry ) (lry == gDP.scissor.lry)) { frameBufferList().fillRDRAM(ulx, uly, lrx, lry); drawer.clearColorBuffer(fillColor); - } else - drawer.drawRect(ulx, uly, lrx, lry, fillColor); - } else - drawer.drawRect(ulx, uly, lrx, lry, fillColor); + } else { + gDP.rectColor.r = fillColor[0]; + gDP.rectColor.g = fillColor[1]; + gDP.rectColor.b = fillColor[2]; + gDP.rectColor.a = fillColor[3]; + drawer.drawRect(ulx, uly, lrx, lry); + } + } else { + gDP.rectColor = gDPInfo::Color(); + drawer.drawRect(ulx, uly, lrx, lry); + } } if (lrx == gDP.colorImage.width) { @@ -870,6 +877,12 @@ void gDPTextureRectangle(f32 ulx, f32 uly, f32 lrx, f32 lry, s32 tile, f32 s, f3 lrt = t + (lry - uly - 1) * dtdy; } + gDP.rectColor = gDPInfo::Color(); + if (gDP.otherMode.cycleType < G_CYC_COPY) { + if (gDP.combine.mA0 == G_ACMUX_0 && gDP.combine.aA0 == G_ACMUX_SHADE) + gDP.rectColor.a = 1.0f; + } + GraphicsDrawer & drawer = dwnd().getDrawer(); GraphicsDrawer::TexturedRectParams params(ulx, uly, lrx, lry, s, t, lrs, lrt, fabsf(dsdx), fabsf(dtdy), flip, false, true, frameBufferList().getCurrent());