OpenGL Renderer:
- Revert r5176 until polygon IDs can be handled correctly in one go. Fixes missing polygon issues in certain games such as missing rings in Sonic Chronicles: The Dark Brotherhood and missing loop traces in the Pokemon Ranger: Shadows of Almia title screen. (Addresses one of the issues noted in bug #1253.)
This commit is contained in:
parent
ee1a489dc7
commit
96c47d6734
|
@ -1871,7 +1871,7 @@ Render3DError OpenGLRenderer_1_2::UploadClearImage(const u16 *__restrict colorBu
|
||||||
{
|
{
|
||||||
for (size_t i = 0; i < GPU_FRAMEBUFFER_NATIVE_WIDTH * GPU_FRAMEBUFFER_NATIVE_HEIGHT; i++)
|
for (size_t i = 0; i < GPU_FRAMEBUFFER_NATIVE_WIDTH * GPU_FRAMEBUFFER_NATIVE_HEIGHT; i++)
|
||||||
{
|
{
|
||||||
OGLRef.workingCIDepthStencilBuffer[i] = depthBuffer[i] << 8;
|
OGLRef.workingCIDepthStencilBuffer[i] = (depthBuffer[i] << 8) | polyIDBuffer[i];
|
||||||
OGLRef.workingCIDepthBuffer[i] = depthBuffer[i] | 0xFF000000;
|
OGLRef.workingCIDepthBuffer[i] = depthBuffer[i] | 0xFF000000;
|
||||||
OGLRef.workingCIFogAttributesBuffer[i] = (fogBuffer[i]) ? 0xFF0000FF : 0xFF000000;
|
OGLRef.workingCIFogAttributesBuffer[i] = (fogBuffer[i]) ? 0xFF0000FF : 0xFF000000;
|
||||||
OGLRef.workingCIPolyIDBuffer[i] = (GLuint)polyIDBuffer[i] | 0xFF000000;
|
OGLRef.workingCIPolyIDBuffer[i] = (GLuint)polyIDBuffer[i] | 0xFF000000;
|
||||||
|
@ -1881,7 +1881,7 @@ Render3DError OpenGLRenderer_1_2::UploadClearImage(const u16 *__restrict colorBu
|
||||||
{
|
{
|
||||||
for (size_t i = 0; i < GPU_FRAMEBUFFER_NATIVE_WIDTH * GPU_FRAMEBUFFER_NATIVE_HEIGHT; i++)
|
for (size_t i = 0; i < GPU_FRAMEBUFFER_NATIVE_WIDTH * GPU_FRAMEBUFFER_NATIVE_HEIGHT; i++)
|
||||||
{
|
{
|
||||||
OGLRef.workingCIDepthStencilBuffer[i] = depthBuffer[i] << 8;
|
OGLRef.workingCIDepthStencilBuffer[i] = (depthBuffer[i] << 8) | polyIDBuffer[i];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2363,7 +2363,7 @@ Render3DError OpenGLRenderer_1_2::ClearUsingImage(const u16 *__restrict colorBuf
|
||||||
// We do this because glBlitFramebufferEXT() for GL_STENCIL_BUFFER_BIT has been tested
|
// We do this because glBlitFramebufferEXT() for GL_STENCIL_BUFFER_BIT has been tested
|
||||||
// to be unsupported on ATI/AMD GPUs running in compatibility mode. So we do the separate
|
// to be unsupported on ATI/AMD GPUs running in compatibility mode. So we do the separate
|
||||||
// glClear() for GL_STENCIL_BUFFER_BIT to keep these GPUs working.
|
// glClear() for GL_STENCIL_BUFFER_BIT to keep these GPUs working.
|
||||||
glClearStencil(0);
|
glClearStencil(polyIDBuffer[0]);
|
||||||
glClear(GL_STENCIL_BUFFER_BIT);
|
glClear(GL_STENCIL_BUFFER_BIT);
|
||||||
|
|
||||||
// Blit the working depth buffer
|
// Blit the working depth buffer
|
||||||
|
@ -2397,7 +2397,7 @@ Render3DError OpenGLRenderer_1_2::ClearUsingImage(const u16 *__restrict colorBuf
|
||||||
glBindFramebufferEXT(GL_READ_FRAMEBUFFER_EXT, OGLRef.fboRenderID);
|
glBindFramebufferEXT(GL_READ_FRAMEBUFFER_EXT, OGLRef.fboRenderID);
|
||||||
glBindFramebufferEXT(GL_DRAW_FRAMEBUFFER_EXT, OGLRef.selectedRenderingFBO);
|
glBindFramebufferEXT(GL_DRAW_FRAMEBUFFER_EXT, OGLRef.selectedRenderingFBO);
|
||||||
|
|
||||||
glClearStencil(0);
|
glClearStencil(polyIDBuffer[0]);
|
||||||
glClear(GL_STENCIL_BUFFER_BIT);
|
glClear(GL_STENCIL_BUFFER_BIT);
|
||||||
|
|
||||||
// Blit the working depth buffer
|
// Blit the working depth buffer
|
||||||
|
@ -2445,7 +2445,7 @@ Render3DError OpenGLRenderer_1_2::ClearUsingValues(const FragmentColor &clearCol
|
||||||
glDrawBuffer(GL_COLOR_ATTACHMENT0_EXT); // texGColorID
|
glDrawBuffer(GL_COLOR_ATTACHMENT0_EXT); // texGColorID
|
||||||
glClearColor(divide5bitBy31_LUT[clearColor.r], divide5bitBy31_LUT[clearColor.g], divide5bitBy31_LUT[clearColor.b], divide5bitBy31_LUT[clearColor.a]);
|
glClearColor(divide5bitBy31_LUT[clearColor.r], divide5bitBy31_LUT[clearColor.g], divide5bitBy31_LUT[clearColor.b], divide5bitBy31_LUT[clearColor.a]);
|
||||||
glClearDepth((GLclampd)clearAttributes.depth / (GLclampd)0x00FFFFFF);
|
glClearDepth((GLclampd)clearAttributes.depth / (GLclampd)0x00FFFFFF);
|
||||||
glClearStencil(0);
|
glClearStencil(clearAttributes.opaquePolyID);
|
||||||
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
|
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
|
||||||
|
|
||||||
glDrawBuffer(GL_COLOR_ATTACHMENT1_EXT); // texGDepthID
|
glDrawBuffer(GL_COLOR_ATTACHMENT1_EXT); // texGDepthID
|
||||||
|
@ -2466,7 +2466,7 @@ Render3DError OpenGLRenderer_1_2::ClearUsingValues(const FragmentColor &clearCol
|
||||||
{
|
{
|
||||||
glClearColor(divide5bitBy31_LUT[clearColor.r], divide5bitBy31_LUT[clearColor.g], divide5bitBy31_LUT[clearColor.b], divide5bitBy31_LUT[clearColor.a]);
|
glClearColor(divide5bitBy31_LUT[clearColor.r], divide5bitBy31_LUT[clearColor.g], divide5bitBy31_LUT[clearColor.b], divide5bitBy31_LUT[clearColor.a]);
|
||||||
glClearDepth((GLclampd)clearAttributes.depth / (GLclampd)0x00FFFFFF);
|
glClearDepth((GLclampd)clearAttributes.depth / (GLclampd)0x00FFFFFF);
|
||||||
glClearStencil(0);
|
glClearStencil(clearAttributes.opaquePolyID);
|
||||||
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
|
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2868,7 +2868,7 @@ Render3DError OpenGLRenderer_1_3::UploadClearImage(const u16 *__restrict colorBu
|
||||||
{
|
{
|
||||||
for (size_t i = 0; i < GPU_FRAMEBUFFER_NATIVE_WIDTH * GPU_FRAMEBUFFER_NATIVE_HEIGHT; i++)
|
for (size_t i = 0; i < GPU_FRAMEBUFFER_NATIVE_WIDTH * GPU_FRAMEBUFFER_NATIVE_HEIGHT; i++)
|
||||||
{
|
{
|
||||||
OGLRef.workingCIDepthStencilBuffer[i] = depthBuffer[i] << 8;
|
OGLRef.workingCIDepthStencilBuffer[i] = (depthBuffer[i] << 8) | polyIDBuffer[i];
|
||||||
OGLRef.workingCIDepthBuffer[i] = depthBuffer[i] | 0xFF000000;
|
OGLRef.workingCIDepthBuffer[i] = depthBuffer[i] | 0xFF000000;
|
||||||
OGLRef.workingCIFogAttributesBuffer[i] = (fogBuffer[i]) ? 0xFF0000FF : 0xFF000000;
|
OGLRef.workingCIFogAttributesBuffer[i] = (fogBuffer[i]) ? 0xFF0000FF : 0xFF000000;
|
||||||
OGLRef.workingCIPolyIDBuffer[i] = (GLuint)polyIDBuffer[i] | 0xFF000000;
|
OGLRef.workingCIPolyIDBuffer[i] = (GLuint)polyIDBuffer[i] | 0xFF000000;
|
||||||
|
@ -2878,7 +2878,7 @@ Render3DError OpenGLRenderer_1_3::UploadClearImage(const u16 *__restrict colorBu
|
||||||
{
|
{
|
||||||
for (size_t i = 0; i < GPU_FRAMEBUFFER_NATIVE_WIDTH * GPU_FRAMEBUFFER_NATIVE_HEIGHT; i++)
|
for (size_t i = 0; i < GPU_FRAMEBUFFER_NATIVE_WIDTH * GPU_FRAMEBUFFER_NATIVE_HEIGHT; i++)
|
||||||
{
|
{
|
||||||
OGLRef.workingCIDepthStencilBuffer[i] = depthBuffer[i] << 8;
|
OGLRef.workingCIDepthStencilBuffer[i] = (depthBuffer[i] << 8) | polyIDBuffer[i];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1411,7 +1411,7 @@ Render3DError OpenGLRenderer_3_2::ClearUsingValues(const FragmentColor &clearCol
|
||||||
const GLfloat oglPolyID[4] = {(GLfloat)clearAttributes.opaquePolyID/63.0f, 0.0, 0.0, 1.0};
|
const GLfloat oglPolyID[4] = {(GLfloat)clearAttributes.opaquePolyID/63.0f, 0.0, 0.0, 1.0};
|
||||||
const GLfloat oglFogAttr[4] = {clearAttributes.isFogged, 0.0, 0.0, 1.0};
|
const GLfloat oglFogAttr[4] = {clearAttributes.isFogged, 0.0, 0.0, 1.0};
|
||||||
|
|
||||||
glClearBufferfi(GL_DEPTH_STENCIL, 0, (GLfloat)clearAttributes.depth / (GLfloat)0x00FFFFFF, 0);
|
glClearBufferfi(GL_DEPTH_STENCIL, 0, (GLfloat)clearAttributes.depth / (GLfloat)0x00FFFFFF, clearAttributes.opaquePolyID);
|
||||||
glClearBufferfv(GL_COLOR, 0, oglColor); // texGColorID
|
glClearBufferfv(GL_COLOR, 0, oglColor); // texGColorID
|
||||||
glClearBufferfv(GL_COLOR, 1, oglDepth); // texGDepthID
|
glClearBufferfv(GL_COLOR, 1, oglDepth); // texGDepthID
|
||||||
glClearBufferfv(GL_COLOR, 2, oglPolyID); // texGPolyID
|
glClearBufferfv(GL_COLOR, 2, oglPolyID); // texGPolyID
|
||||||
|
|
Loading…
Reference in New Issue