From cbbc83ac96cada335eea37d0386648ad36601dae Mon Sep 17 00:00:00 2001 From: Sergey Lipskiy Date: Wed, 21 Mar 2018 23:06:38 +0700 Subject: [PATCH] Fix noise-based effects on texrects in "texrect in native res" mode. Fixed GLideN64 3.0 Regression (Noise) #1740 --- .../GLSL/glsl_CombinerProgramUniformFactory.cpp | 5 +++++ src/GraphicsDrawer.h | 2 ++ src/TexrectDrawer.cpp | 8 ++++++-- 3 files changed, 13 insertions(+), 2 deletions(-) diff --git a/src/Graphics/OpenGLContext/GLSL/glsl_CombinerProgramUniformFactory.cpp b/src/Graphics/OpenGLContext/GLSL/glsl_CombinerProgramUniformFactory.cpp index 477d95d5..a7cf49a3 100644 --- a/src/Graphics/OpenGLContext/GLSL/glsl_CombinerProgramUniformFactory.cpp +++ b/src/Graphics/OpenGLContext/GLSL/glsl_CombinerProgramUniformFactory.cpp @@ -402,6 +402,11 @@ public: void update(bool _force) override { + if (dwnd().getDrawer().isTexrectDrawerMode()) { + uScreenScale.set(1.0f, 1.0f, _force); + return; + } + FrameBuffer * pBuffer = frameBufferList().getCurrent(); if (pBuffer == nullptr) uScreenScale.set(dwnd().getScaleX(), dwnd().getScaleY(), _force); diff --git a/src/GraphicsDrawer.h b/src/GraphicsDrawer.h index a36bd4ec..d166ffc0 100644 --- a/src/GraphicsDrawer.h +++ b/src/GraphicsDrawer.h @@ -153,6 +153,8 @@ public: void flush() { m_texrectDrawer.draw(); } + bool isTexrectDrawerMode() const { return !m_texrectDrawer.isEmpty(); } + private: friend class DisplayWindow; friend TexrectDrawer; diff --git a/src/TexrectDrawer.cpp b/src/TexrectDrawer.cpp index be94856d..2fc17fc7 100644 --- a/src/TexrectDrawer.cpp +++ b/src/TexrectDrawer.cpp @@ -146,6 +146,7 @@ void TexrectDrawer::add() } if (m_numRects == 0) { + m_numRects = 1; m_pBuffer = frameBufferList().getCurrent(); m_otherMode = gDP.otherMode._u64; m_mux = gDP.combine.mux; @@ -157,7 +158,9 @@ void TexrectDrawer::add() m_lrx = m_max_lrx = pRect[3].x; m_lry = m_max_lry = pRect[3].y; - CombinerInfo::get().update(); + CombinerInfo & cmbInfo = CombinerInfo::get(); + cmbInfo.update(); + cmbInfo.updateParameters(); gfxContext.enableDepthWrite(false); gfxContext.enable(enable::DEPTH_TEST, false); gfxContext.enable(enable::BLEND, false); @@ -167,6 +170,8 @@ void TexrectDrawer::add() gfxContext.setScissor((s32)gDP.scissor.ulx, (s32)gDP.scissor.uly, (s32)(gDP.scissor.lrx - gDP.scissor.ulx), (s32)(gDP.scissor.lry - gDP.scissor.uly)); gfxContext.bindFramebuffer(bufferTarget::DRAW_FRAMEBUFFER, m_FBO); + } else { + ++m_numRects; } if (bDownUp) { @@ -187,7 +192,6 @@ void TexrectDrawer::add() coords.x = pRect[3].x; coords.y = pRect[3].y; m_vecRectCoords.push_back(coords); - ++m_numRects; Context::DrawRectParameters rectParams; rectParams.mode = drawmode::TRIANGLE_STRIP;