From d5412d30e1c909956ef2a1bd24bda27ab71fc6e5 Mon Sep 17 00:00:00 2001 From: Sergey Lipskiy Date: Tue, 27 Sep 2016 21:51:12 +0700 Subject: [PATCH] Add support for software depth render to OGLRender::drawDMATriangles --- src/OpenGL.cpp | 9 +++++++++ src/SoftwareRender.cpp | 13 ++++++++++--- 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/src/OpenGL.cpp b/src/OpenGL.cpp index bc9374f4..d666375a 100644 --- a/src/OpenGL.cpp +++ b/src/OpenGL.cpp @@ -1327,6 +1327,15 @@ void OGLRender::drawDMATriangles(u32 _numVtx) return; _prepareDrawTriangle(true); glDrawArrays(GL_TRIANGLES, 0, _numVtx); + + if (config.frameBufferEmulation.enable != 0 && + config.frameBufferEmulation.copyDepthToRDRAM == Config::cdSoftwareRender && + gDP.otherMode.depthUpdate != 0) { + renderTriangles(triangles.dmaVertices.data(), nullptr, _numVtx); + FrameBuffer * pCurrentDepthBuffer = frameBufferList().findBuffer(gDP.depthImageAddress); + if (pCurrentDepthBuffer != nullptr) + pCurrentDepthBuffer->m_cleared = false; + } } void OGLRender::drawTriangles() diff --git a/src/SoftwareRender.cpp b/src/SoftwareRender.cpp index 7715c20e..555b4365 100644 --- a/src/SoftwareRender.cpp +++ b/src/SoftwareRender.cpp @@ -169,9 +169,16 @@ void renderTriangles(const SPVertex * _pVertices, const GLubyte * _pElements, u3 SPVertex vdata[6]; for (u32 i = 0; i < _numElements; i += 3) { u32 orbits = 0; - for (u32 j = 0; j < 3; ++j) { - vsrc[j] = &_pVertices[_pElements[i + j]]; - orbits |= vsrc[j]->clip; + if (_pElements != nullptr) { + for (u32 j = 0; j < 3; ++j) { + vsrc[j] = &_pVertices[_pElements[i + j]]; + orbits |= vsrc[j]->clip; + } + } else { + for (u32 j = 0; j < 3; ++j) { + vsrc[j] = &_pVertices[i + j]; + orbits |= vsrc[j]->clip; + } } vsrc[3] = vsrc[0];