Refactored the ClearParameters type and moved Renderer11's clear logic into a Clear11 helper class.
TRAC #23475
Author: Geoff Lang
Signed-off-by: Jamie Madill
Signed-off-by: Shannon Woods
diff --git a/src/libGLESv2/Context.cpp b/src/libGLESv2/Context.cpp
index 31e75bd..69d2b23 100644
--- a/src/libGLESv2/Context.cpp
+++ b/src/libGLESv2/Context.cpp
@@ -2466,8 +2466,25 @@
return gl::error(GL_INVALID_FRAMEBUFFER_OPERATION);
}
- DWORD flags = 0;
- GLbitfield finalMask = 0;
+ ClearParameters clearParams = { 0 };
+
+ for (unsigned int i = 0; i < ArraySize(clearParams.clearColor); i++)
+ {
+ clearParams.clearColor[i] = false;
+ }
+ clearParams.colorFClearValue = mState.colorClearValue;
+ clearParams.colorClearType = GL_FLOAT;
+ clearParams.colorMaskRed = mState.blend.colorMaskRed;
+ clearParams.colorMaskGreen = mState.blend.colorMaskGreen;
+ clearParams.colorMaskBlue = mState.blend.colorMaskBlue;
+ clearParams.colorMaskAlpha = mState.blend.colorMaskAlpha;
+ clearParams.clearDepth = false;
+ clearParams.depthClearValue = mState.depthClearValue;
+ clearParams.clearStencil = false;
+ clearParams.stencilClearValue = mState.stencilClearValue;
+ clearParams.stencilWriteMask = mState.depthStencil.stencilWritemask;
+ clearParams.scissorEnabled = mState.scissorTest;
+ clearParams.scissor = mState.scissor;
if (mask & GL_COLOR_BUFFER_BIT)
{
@@ -2475,7 +2492,10 @@
if (framebufferObject->hasEnabledColorAttachment())
{
- finalMask |= GL_COLOR_BUFFER_BIT;
+ for (unsigned int i = 0; i < ArraySize(clearParams.clearColor); i++)
+ {
+ clearParams.clearColor[i] = true;
+ }
}
}
@@ -2484,7 +2504,7 @@
mask &= ~GL_DEPTH_BUFFER_BIT;
if (mState.depthStencil.depthMask && framebufferObject->getDepthbufferType() != GL_NONE)
{
- finalMask |= GL_DEPTH_BUFFER_BIT;
+ clearParams.clearDepth = true;
}
}
@@ -2502,7 +2522,7 @@
if (gl::GetStencilBits(depthStencil->getActualFormat(), mClientVersion) > 0)
{
- finalMask |= GL_STENCIL_BUFFER_BIT;
+ clearParams.clearStencil = true;
}
}
}
@@ -2517,17 +2537,6 @@
return;
}
- ClearParameters clearParams;
- clearParams.mask = finalMask;
- clearParams.colorClearValue = mState.colorClearValue;
- clearParams.colorMaskRed = mState.blend.colorMaskRed;
- clearParams.colorMaskGreen = mState.blend.colorMaskGreen;
- clearParams.colorMaskBlue = mState.blend.colorMaskBlue;
- clearParams.colorMaskAlpha = mState.blend.colorMaskAlpha;
- clearParams.depthClearValue = mState.depthClearValue;
- clearParams.stencilClearValue = mState.stencilClearValue;
- clearParams.stencilWriteMask = mState.depthStencil.stencilWritemask;
-
mRenderer->clear(clearParams, framebufferObject);
}