Commit 54ef3ad4 by Lingfeng Yang Committed by Commit Bot

Run clang-format on State.cpp

BUG=angleproject:2306 Change-Id: I1c5a2dd40fb7d9b51cbf3fd37720a172578d76e8 Reviewed-on: https://chromium-review.googlesource.com/959105 Commit-Queue: Lingfeng Yang <lfy@google.com> Reviewed-by: 's avatarGeoff Lang <geofflang@chromium.org> Reviewed-by: 's avatarJamie Madill <jmadill@chromium.org>
parent cc48e5fa
...@@ -8,8 +8,8 @@ ...@@ -8,8 +8,8 @@
#include "libANGLE/State.h" #include "libANGLE/State.h"
#include <limits>
#include <string.h> #include <string.h>
#include <limits>
#include "common/bitset_utils.h" #include "common/bitset_utils.h"
#include "common/mathutil.h" #include "common/mathutil.h"
...@@ -98,9 +98,7 @@ State::State() ...@@ -98,9 +98,7 @@ State::State()
{ {
} }
State::~State() State::~State() {}
{
}
void State::initialize(const Context *context, void State::initialize(const Context *context,
bool debug, bool debug,
...@@ -109,42 +107,42 @@ void State::initialize(const Context *context, ...@@ -109,42 +107,42 @@ void State::initialize(const Context *context,
bool robustResourceInit, bool robustResourceInit,
bool programBinaryCacheEnabled) bool programBinaryCacheEnabled)
{ {
const Caps &caps = context->getCaps(); const Caps &caps = context->getCaps();
const Extensions &extensions = context->getExtensions(); const Extensions &extensions = context->getExtensions();
const Extensions &nativeExtensions = context->getImplementation()->getNativeExtensions(); const Extensions &nativeExtensions = context->getImplementation()->getNativeExtensions();
const Version &clientVersion = context->getClientVersion(); const Version &clientVersion = context->getClientVersion();
mMaxDrawBuffers = caps.maxDrawBuffers; mMaxDrawBuffers = caps.maxDrawBuffers;
mMaxCombinedTextureImageUnits = caps.maxCombinedTextureImageUnits; mMaxCombinedTextureImageUnits = caps.maxCombinedTextureImageUnits;
setColorClearValue(0.0f, 0.0f, 0.0f, 0.0f); setColorClearValue(0.0f, 0.0f, 0.0f, 0.0f);
mDepthClearValue = 1.0f; mDepthClearValue = 1.0f;
mStencilClearValue = 0; mStencilClearValue = 0;
mScissorTest = false; mScissorTest = false;
mScissor.x = 0; mScissor.x = 0;
mScissor.y = 0; mScissor.y = 0;
mScissor.width = 0; mScissor.width = 0;
mScissor.height = 0; mScissor.height = 0;
mBlendColor.red = 0; mBlendColor.red = 0;
mBlendColor.green = 0; mBlendColor.green = 0;
mBlendColor.blue = 0; mBlendColor.blue = 0;
mBlendColor.alpha = 0; mBlendColor.alpha = 0;
mStencilRef = 0; mStencilRef = 0;
mStencilBackRef = 0; mStencilBackRef = 0;
mSampleCoverage = false; mSampleCoverage = false;
mSampleCoverageValue = 1.0f; mSampleCoverageValue = 1.0f;
mSampleCoverageInvert = false; mSampleCoverageInvert = false;
mMaxSampleMaskWords = caps.maxSampleMaskWords; mMaxSampleMaskWords = caps.maxSampleMaskWords;
mSampleMask = false; mSampleMask = false;
mSampleMaskValues.fill(~GLbitfield(0)); mSampleMaskValues.fill(~GLbitfield(0));
mGenerateMipmapHint = GL_DONT_CARE; mGenerateMipmapHint = GL_DONT_CARE;
mFragmentShaderDerivativeHint = GL_DONT_CARE; mFragmentShaderDerivativeHint = GL_DONT_CARE;
mBindGeneratesResource = bindGeneratesResource; mBindGeneratesResource = bindGeneratesResource;
...@@ -152,16 +150,16 @@ void State::initialize(const Context *context, ...@@ -152,16 +150,16 @@ void State::initialize(const Context *context,
mLineWidth = 1.0f; mLineWidth = 1.0f;
mViewport.x = 0; mViewport.x = 0;
mViewport.y = 0; mViewport.y = 0;
mViewport.width = 0; mViewport.width = 0;
mViewport.height = 0; mViewport.height = 0;
mNearZ = 0.0f; mNearZ = 0.0f;
mFarZ = 1.0f; mFarZ = 1.0f;
mBlend.colorMaskRed = true; mBlend.colorMaskRed = true;
mBlend.colorMaskGreen = true; mBlend.colorMaskGreen = true;
mBlend.colorMaskBlue = true; mBlend.colorMaskBlue = true;
mBlend.colorMaskAlpha = true; mBlend.colorMaskAlpha = true;
mActiveSampler = 0; mActiveSampler = 0;
...@@ -238,7 +236,7 @@ void State::initialize(const Context *context, ...@@ -238,7 +236,7 @@ void State::initialize(const Context *context,
mPathStencilRef = 0; mPathStencilRef = 0;
mPathStencilMask = std::numeric_limits<GLuint>::max(); mPathStencilMask = std::numeric_limits<GLuint>::max();
mRobustResourceInit = robustResourceInit; mRobustResourceInit = robustResourceInit;
mProgramBinaryCacheEnabled = programBinaryCacheEnabled; mProgramBinaryCacheEnabled = programBinaryCacheEnabled;
} }
...@@ -332,9 +330,9 @@ const DepthStencilState &State::getDepthStencilState() const ...@@ -332,9 +330,9 @@ const DepthStencilState &State::getDepthStencilState() const
void State::setColorClearValue(float red, float green, float blue, float alpha) void State::setColorClearValue(float red, float green, float blue, float alpha)
{ {
mColorClearValue.red = red; mColorClearValue.red = red;
mColorClearValue.green = green; mColorClearValue.green = green;
mColorClearValue.blue = blue; mColorClearValue.blue = blue;
mColorClearValue.alpha = alpha; mColorClearValue.alpha = alpha;
mDirtyBits.set(DIRTY_BIT_CLEAR_COLOR); mDirtyBits.set(DIRTY_BIT_CLEAR_COLOR);
} }
...@@ -353,9 +351,9 @@ void State::setStencilClearValue(int stencil) ...@@ -353,9 +351,9 @@ void State::setStencilClearValue(int stencil)
void State::setColorMask(bool red, bool green, bool blue, bool alpha) void State::setColorMask(bool red, bool green, bool blue, bool alpha)
{ {
mBlend.colorMaskRed = red; mBlend.colorMaskRed = red;
mBlend.colorMaskGreen = green; mBlend.colorMaskGreen = green;
mBlend.colorMaskBlue = blue; mBlend.colorMaskBlue = blue;
mBlend.colorMaskAlpha = alpha; mBlend.colorMaskAlpha = alpha;
mDirtyBits.set(DIRTY_BIT_COLOR_MASK); mDirtyBits.set(DIRTY_BIT_COLOR_MASK);
} }
...@@ -413,14 +411,14 @@ void State::setDepthTest(bool enabled) ...@@ -413,14 +411,14 @@ void State::setDepthTest(bool enabled)
void State::setDepthFunc(GLenum depthFunc) void State::setDepthFunc(GLenum depthFunc)
{ {
mDepthStencil.depthFunc = depthFunc; mDepthStencil.depthFunc = depthFunc;
mDirtyBits.set(DIRTY_BIT_DEPTH_FUNC); mDirtyBits.set(DIRTY_BIT_DEPTH_FUNC);
} }
void State::setDepthRange(float zNear, float zFar) void State::setDepthRange(float zNear, float zFar)
{ {
mNearZ = zNear; mNearZ = zNear;
mFarZ = zFar; mFarZ = zFar;
mDirtyBits.set(DIRTY_BIT_DEPTH_RANGE); mDirtyBits.set(DIRTY_BIT_DEPTH_RANGE);
} }
...@@ -447,25 +445,25 @@ void State::setBlend(bool enabled) ...@@ -447,25 +445,25 @@ void State::setBlend(bool enabled)
void State::setBlendFactors(GLenum sourceRGB, GLenum destRGB, GLenum sourceAlpha, GLenum destAlpha) void State::setBlendFactors(GLenum sourceRGB, GLenum destRGB, GLenum sourceAlpha, GLenum destAlpha)
{ {
mBlend.sourceBlendRGB = sourceRGB; mBlend.sourceBlendRGB = sourceRGB;
mBlend.destBlendRGB = destRGB; mBlend.destBlendRGB = destRGB;
mBlend.sourceBlendAlpha = sourceAlpha; mBlend.sourceBlendAlpha = sourceAlpha;
mBlend.destBlendAlpha = destAlpha; mBlend.destBlendAlpha = destAlpha;
mDirtyBits.set(DIRTY_BIT_BLEND_FUNCS); mDirtyBits.set(DIRTY_BIT_BLEND_FUNCS);
} }
void State::setBlendColor(float red, float green, float blue, float alpha) void State::setBlendColor(float red, float green, float blue, float alpha)
{ {
mBlendColor.red = red; mBlendColor.red = red;
mBlendColor.green = green; mBlendColor.green = green;
mBlendColor.blue = blue; mBlendColor.blue = blue;
mBlendColor.alpha = alpha; mBlendColor.alpha = alpha;
mDirtyBits.set(DIRTY_BIT_BLEND_COLOR); mDirtyBits.set(DIRTY_BIT_BLEND_COLOR);
} }
void State::setBlendEquation(GLenum rgbEquation, GLenum alphaEquation) void State::setBlendEquation(GLenum rgbEquation, GLenum alphaEquation)
{ {
mBlend.blendEquationRGB = rgbEquation; mBlend.blendEquationRGB = rgbEquation;
mBlend.blendEquationAlpha = alphaEquation; mBlend.blendEquationAlpha = alphaEquation;
mDirtyBits.set(DIRTY_BIT_BLEND_EQUATIONS); mDirtyBits.set(DIRTY_BIT_BLEND_EQUATIONS);
} }
...@@ -489,15 +487,17 @@ void State::setStencilTest(bool enabled) ...@@ -489,15 +487,17 @@ void State::setStencilTest(bool enabled)
void State::setStencilParams(GLenum stencilFunc, GLint stencilRef, GLuint stencilMask) void State::setStencilParams(GLenum stencilFunc, GLint stencilRef, GLuint stencilMask)
{ {
mDepthStencil.stencilFunc = stencilFunc; mDepthStencil.stencilFunc = stencilFunc;
mStencilRef = (stencilRef > 0) ? stencilRef : 0; mStencilRef = (stencilRef > 0) ? stencilRef : 0;
mDepthStencil.stencilMask = stencilMask; mDepthStencil.stencilMask = stencilMask;
mDirtyBits.set(DIRTY_BIT_STENCIL_FUNCS_FRONT); mDirtyBits.set(DIRTY_BIT_STENCIL_FUNCS_FRONT);
} }
void State::setStencilBackParams(GLenum stencilBackFunc, GLint stencilBackRef, GLuint stencilBackMask) void State::setStencilBackParams(GLenum stencilBackFunc,
GLint stencilBackRef,
GLuint stencilBackMask)
{ {
mDepthStencil.stencilBackFunc = stencilBackFunc; mDepthStencil.stencilBackFunc = stencilBackFunc;
mStencilBackRef = (stencilBackRef > 0) ? stencilBackRef : 0; mStencilBackRef = (stencilBackRef > 0) ? stencilBackRef : 0;
mDepthStencil.stencilBackMask = stencilBackMask; mDepthStencil.stencilBackMask = stencilBackMask;
mDirtyBits.set(DIRTY_BIT_STENCIL_FUNCS_BACK); mDirtyBits.set(DIRTY_BIT_STENCIL_FUNCS_BACK);
} }
...@@ -514,17 +514,21 @@ void State::setStencilBackWritemask(GLuint stencilBackWritemask) ...@@ -514,17 +514,21 @@ void State::setStencilBackWritemask(GLuint stencilBackWritemask)
mDirtyBits.set(DIRTY_BIT_STENCIL_WRITEMASK_BACK); mDirtyBits.set(DIRTY_BIT_STENCIL_WRITEMASK_BACK);
} }
void State::setStencilOperations(GLenum stencilFail, GLenum stencilPassDepthFail, GLenum stencilPassDepthPass) void State::setStencilOperations(GLenum stencilFail,
GLenum stencilPassDepthFail,
GLenum stencilPassDepthPass)
{ {
mDepthStencil.stencilFail = stencilFail; mDepthStencil.stencilFail = stencilFail;
mDepthStencil.stencilPassDepthFail = stencilPassDepthFail; mDepthStencil.stencilPassDepthFail = stencilPassDepthFail;
mDepthStencil.stencilPassDepthPass = stencilPassDepthPass; mDepthStencil.stencilPassDepthPass = stencilPassDepthPass;
mDirtyBits.set(DIRTY_BIT_STENCIL_OPS_FRONT); mDirtyBits.set(DIRTY_BIT_STENCIL_OPS_FRONT);
} }
void State::setStencilBackOperations(GLenum stencilBackFail, GLenum stencilBackPassDepthFail, GLenum stencilBackPassDepthPass) void State::setStencilBackOperations(GLenum stencilBackFail,
GLenum stencilBackPassDepthFail,
GLenum stencilBackPassDepthPass)
{ {
mDepthStencil.stencilBackFail = stencilBackFail; mDepthStencil.stencilBackFail = stencilBackFail;
mDepthStencil.stencilBackPassDepthFail = stencilBackPassDepthFail; mDepthStencil.stencilBackPassDepthFail = stencilBackPassDepthFail;
mDepthStencil.stencilBackPassDepthPass = stencilBackPassDepthPass; mDepthStencil.stencilBackPassDepthPass = stencilBackPassDepthPass;
mDirtyBits.set(DIRTY_BIT_STENCIL_OPS_BACK); mDirtyBits.set(DIRTY_BIT_STENCIL_OPS_BACK);
...@@ -555,7 +559,7 @@ void State::setPolygonOffsetParams(GLfloat factor, GLfloat units) ...@@ -555,7 +559,7 @@ void State::setPolygonOffsetParams(GLfloat factor, GLfloat units)
{ {
// An application can pass NaN values here, so handle this gracefully // An application can pass NaN values here, so handle this gracefully
mRasterizer.polygonOffsetFactor = factor != factor ? 0.0f : factor; mRasterizer.polygonOffsetFactor = factor != factor ? 0.0f : factor;
mRasterizer.polygonOffsetUnits = units != units ? 0.0f : units; mRasterizer.polygonOffsetUnits = units != units ? 0.0f : units;
mDirtyBits.set(DIRTY_BIT_POLYGON_OFFSET); mDirtyBits.set(DIRTY_BIT_POLYGON_OFFSET);
} }
...@@ -583,7 +587,7 @@ void State::setSampleCoverage(bool enabled) ...@@ -583,7 +587,7 @@ void State::setSampleCoverage(bool enabled)
void State::setSampleCoverageParams(GLclampf value, bool invert) void State::setSampleCoverageParams(GLclampf value, bool invert)
{ {
mSampleCoverageValue = value; mSampleCoverageValue = value;
mSampleCoverageInvert = invert; mSampleCoverageInvert = invert;
mDirtyBits.set(DIRTY_BIT_SAMPLE_COVERAGE); mDirtyBits.set(DIRTY_BIT_SAMPLE_COVERAGE);
} }
...@@ -663,9 +667,9 @@ void State::setScissorTest(bool enabled) ...@@ -663,9 +667,9 @@ void State::setScissorTest(bool enabled)
void State::setScissorParams(GLint x, GLint y, GLsizei width, GLsizei height) void State::setScissorParams(GLint x, GLint y, GLsizei width, GLsizei height)
{ {
mScissor.x = x; mScissor.x = x;
mScissor.y = y; mScissor.y = y;
mScissor.width = width; mScissor.width = width;
mScissor.height = height; mScissor.height = height;
mDirtyBits.set(DIRTY_BIT_SCISSOR); mDirtyBits.set(DIRTY_BIT_SCISSOR);
} }
...@@ -701,32 +705,59 @@ void State::setEnableFeature(GLenum feature, bool enabled) ...@@ -701,32 +705,59 @@ void State::setEnableFeature(GLenum feature, bool enabled)
{ {
switch (feature) switch (feature)
{ {
case GL_MULTISAMPLE_EXT: setMultisampling(enabled); break; case GL_MULTISAMPLE_EXT:
case GL_SAMPLE_ALPHA_TO_ONE_EXT: setSampleAlphaToOne(enabled); break; setMultisampling(enabled);
case GL_CULL_FACE: setCullFace(enabled); break; break;
case GL_POLYGON_OFFSET_FILL: setPolygonOffsetFill(enabled); break; case GL_SAMPLE_ALPHA_TO_ONE_EXT:
case GL_SAMPLE_ALPHA_TO_COVERAGE: setSampleAlphaToCoverage(enabled); break; setSampleAlphaToOne(enabled);
case GL_SAMPLE_COVERAGE: setSampleCoverage(enabled); break; break;
case GL_SCISSOR_TEST: setScissorTest(enabled); break; case GL_CULL_FACE:
case GL_STENCIL_TEST: setStencilTest(enabled); break; setCullFace(enabled);
case GL_DEPTH_TEST: setDepthTest(enabled); break; break;
case GL_BLEND: setBlend(enabled); break; case GL_POLYGON_OFFSET_FILL:
case GL_DITHER: setDither(enabled); break; setPolygonOffsetFill(enabled);
case GL_PRIMITIVE_RESTART_FIXED_INDEX: setPrimitiveRestart(enabled); break; break;
case GL_RASTERIZER_DISCARD: setRasterizerDiscard(enabled); break; case GL_SAMPLE_ALPHA_TO_COVERAGE:
case GL_SAMPLE_MASK: setSampleAlphaToCoverage(enabled);
setSampleMaskEnabled(enabled); break;
break; case GL_SAMPLE_COVERAGE:
case GL_DEBUG_OUTPUT_SYNCHRONOUS: setSampleCoverage(enabled);
mDebug.setOutputSynchronous(enabled); break;
break; case GL_SCISSOR_TEST:
case GL_DEBUG_OUTPUT: setScissorTest(enabled);
mDebug.setOutputEnabled(enabled); break;
break; case GL_STENCIL_TEST:
case GL_FRAMEBUFFER_SRGB_EXT: setStencilTest(enabled);
setFramebufferSRGB(enabled); break;
break; case GL_DEPTH_TEST:
default: UNREACHABLE(); setDepthTest(enabled);
break;
case GL_BLEND:
setBlend(enabled);
break;
case GL_DITHER:
setDither(enabled);
break;
case GL_PRIMITIVE_RESTART_FIXED_INDEX:
setPrimitiveRestart(enabled);
break;
case GL_RASTERIZER_DISCARD:
setRasterizerDiscard(enabled);
break;
case GL_SAMPLE_MASK:
setSampleMaskEnabled(enabled);
break;
case GL_DEBUG_OUTPUT_SYNCHRONOUS:
mDebug.setOutputSynchronous(enabled);
break;
case GL_DEBUG_OUTPUT:
mDebug.setOutputEnabled(enabled);
break;
case GL_FRAMEBUFFER_SRGB_EXT:
setFramebufferSRGB(enabled);
break;
default:
UNREACHABLE();
} }
} }
...@@ -734,39 +765,52 @@ bool State::getEnableFeature(GLenum feature) const ...@@ -734,39 +765,52 @@ bool State::getEnableFeature(GLenum feature) const
{ {
switch (feature) switch (feature)
{ {
case GL_MULTISAMPLE_EXT: return isMultisamplingEnabled(); case GL_MULTISAMPLE_EXT:
case GL_SAMPLE_ALPHA_TO_ONE_EXT: return isSampleAlphaToOneEnabled(); return isMultisamplingEnabled();
case GL_CULL_FACE: return isCullFaceEnabled(); case GL_SAMPLE_ALPHA_TO_ONE_EXT:
case GL_POLYGON_OFFSET_FILL: return isPolygonOffsetFillEnabled(); return isSampleAlphaToOneEnabled();
case GL_SAMPLE_ALPHA_TO_COVERAGE: return isSampleAlphaToCoverageEnabled(); case GL_CULL_FACE:
case GL_SAMPLE_COVERAGE: return isSampleCoverageEnabled(); return isCullFaceEnabled();
case GL_SCISSOR_TEST: return isScissorTestEnabled(); case GL_POLYGON_OFFSET_FILL:
case GL_STENCIL_TEST: return isStencilTestEnabled(); return isPolygonOffsetFillEnabled();
case GL_DEPTH_TEST: return isDepthTestEnabled(); case GL_SAMPLE_ALPHA_TO_COVERAGE:
case GL_BLEND: return isBlendEnabled(); return isSampleAlphaToCoverageEnabled();
case GL_DITHER: return isDitherEnabled(); case GL_SAMPLE_COVERAGE:
case GL_PRIMITIVE_RESTART_FIXED_INDEX: return isPrimitiveRestartEnabled(); return isSampleCoverageEnabled();
case GL_RASTERIZER_DISCARD: return isRasterizerDiscardEnabled(); case GL_SCISSOR_TEST:
case GL_SAMPLE_MASK: return isScissorTestEnabled();
return isSampleMaskEnabled(); case GL_STENCIL_TEST:
case GL_DEBUG_OUTPUT_SYNCHRONOUS: return isStencilTestEnabled();
return mDebug.isOutputSynchronous(); case GL_DEPTH_TEST:
case GL_DEBUG_OUTPUT: return isDepthTestEnabled();
return mDebug.isOutputEnabled(); case GL_BLEND:
case GL_BIND_GENERATES_RESOURCE_CHROMIUM: return isBlendEnabled();
return isBindGeneratesResourceEnabled(); case GL_DITHER:
case GL_CLIENT_ARRAYS_ANGLE: return isDitherEnabled();
return areClientArraysEnabled(); case GL_PRIMITIVE_RESTART_FIXED_INDEX:
case GL_FRAMEBUFFER_SRGB_EXT: return isPrimitiveRestartEnabled();
return getFramebufferSRGB(); case GL_RASTERIZER_DISCARD:
case GL_ROBUST_RESOURCE_INITIALIZATION_ANGLE: return isRasterizerDiscardEnabled();
return mRobustResourceInit; case GL_SAMPLE_MASK:
case GL_PROGRAM_CACHE_ENABLED_ANGLE: return isSampleMaskEnabled();
return mProgramBinaryCacheEnabled; case GL_DEBUG_OUTPUT_SYNCHRONOUS:
return mDebug.isOutputSynchronous();
default: case GL_DEBUG_OUTPUT:
UNREACHABLE(); return mDebug.isOutputEnabled();
return false; case GL_BIND_GENERATES_RESOURCE_CHROMIUM:
return isBindGeneratesResourceEnabled();
case GL_CLIENT_ARRAYS_ANGLE:
return areClientArraysEnabled();
case GL_FRAMEBUFFER_SRGB_EXT:
return getFramebufferSRGB();
case GL_ROBUST_RESOURCE_INITIALIZATION_ANGLE:
return mRobustResourceInit;
case GL_PROGRAM_CACHE_ENABLED_ANGLE:
return mProgramBinaryCacheEnabled;
default:
UNREACHABLE();
return false;
} }
} }
...@@ -808,9 +852,9 @@ bool State::areClientArraysEnabled() const ...@@ -808,9 +852,9 @@ bool State::areClientArraysEnabled() const
void State::setViewportParams(GLint x, GLint y, GLsizei width, GLsizei height) void State::setViewportParams(GLint x, GLint y, GLsizei width, GLsizei height)
{ {
mViewport.x = x; mViewport.x = x;
mViewport.y = y; mViewport.y = y;
mViewport.width = width; mViewport.width = width;
mViewport.height = height; mViewport.height = height;
mDirtyBits.set(DIRTY_BIT_VIEWPORT); mDirtyBits.set(DIRTY_BIT_VIEWPORT);
} }
...@@ -862,8 +906,8 @@ void State::detachTexture(const Context *context, const TextureMap &zeroTextures ...@@ -862,8 +906,8 @@ void State::detachTexture(const Context *context, const TextureMap &zeroTextures
// the ResourceManager. // the ResourceManager.
// [OpenGL ES 2.0.24] section 3.8 page 84: // [OpenGL ES 2.0.24] section 3.8 page 84:
// If a texture object is deleted, it is as if all texture units which are bound to that texture object are // If a texture object is deleted, it is as if all texture units which are bound to that texture
// rebound to texture object zero // object are rebound to texture object zero
for (TextureType type : angle::AllEnums<TextureType>()) for (TextureType type : angle::AllEnums<TextureType>())
{ {
...@@ -896,9 +940,9 @@ void State::detachTexture(const Context *context, const TextureMap &zeroTextures ...@@ -896,9 +940,9 @@ void State::detachTexture(const Context *context, const TextureMap &zeroTextures
} }
// [OpenGL ES 2.0.24] section 4.4 page 112: // [OpenGL ES 2.0.24] section 4.4 page 112:
// If a texture object is deleted while its image is attached to the currently bound framebuffer, then it is // If a texture object is deleted while its image is attached to the currently bound
// as if Texture2DAttachment had been called, with a texture of 0, for each attachment point to which this // framebuffer, then it is as if Texture2DAttachment had been called, with a texture of 0, for
// image was attached in the currently bound framebuffer. // each attachment point to which this image was attached in the currently bound framebuffer.
if (mReadFramebuffer && mReadFramebuffer->detachTexture(context, texture)) if (mReadFramebuffer && mReadFramebuffer->detachTexture(context, texture))
{ {
...@@ -975,8 +1019,8 @@ Renderbuffer *State::getCurrentRenderbuffer() const ...@@ -975,8 +1019,8 @@ Renderbuffer *State::getCurrentRenderbuffer() const
void State::detachRenderbuffer(const Context *context, GLuint renderbuffer) void State::detachRenderbuffer(const Context *context, GLuint renderbuffer)
{ {
// [OpenGL ES 2.0.24] section 4.4 page 109: // [OpenGL ES 2.0.24] section 4.4 page 109:
// If a renderbuffer that is currently bound to RENDERBUFFER is deleted, it is as though BindRenderbuffer // If a renderbuffer that is currently bound to RENDERBUFFER is deleted, it is as though
// had been executed with the target RENDERBUFFER and name of zero. // BindRenderbuffer had been executed with the target RENDERBUFFER and name of zero.
if (mRenderbuffer.id() == renderbuffer) if (mRenderbuffer.id() == renderbuffer)
{ {
...@@ -984,9 +1028,10 @@ void State::detachRenderbuffer(const Context *context, GLuint renderbuffer) ...@@ -984,9 +1028,10 @@ void State::detachRenderbuffer(const Context *context, GLuint renderbuffer)
} }
// [OpenGL ES 2.0.24] section 4.4 page 111: // [OpenGL ES 2.0.24] section 4.4 page 111:
// If a renderbuffer object is deleted while its image is attached to the currently bound framebuffer, // If a renderbuffer object is deleted while its image is attached to the currently bound
// then it is as if FramebufferRenderbuffer had been called, with a renderbuffer of 0, for each attachment // framebuffer, then it is as if FramebufferRenderbuffer had been called, with a renderbuffer of
// point to which this image was attached in the currently bound framebuffer. // 0, for each attachment point to which this image was attached in the currently bound
// framebuffer.
Framebuffer *readFramebuffer = mReadFramebuffer; Framebuffer *readFramebuffer = mReadFramebuffer;
Framebuffer *drawFramebuffer = mDrawFramebuffer; Framebuffer *drawFramebuffer = mDrawFramebuffer;
...@@ -1003,7 +1048,6 @@ void State::detachRenderbuffer(const Context *context, GLuint renderbuffer) ...@@ -1003,7 +1048,6 @@ void State::detachRenderbuffer(const Context *context, GLuint renderbuffer)
mDirtyObjects.set(DIRTY_OBJECT_DRAW_FRAMEBUFFER); mDirtyObjects.set(DIRTY_OBJECT_DRAW_FRAMEBUFFER);
} }
} }
} }
void State::setReadFramebufferBinding(Framebuffer *framebuffer) void State::setReadFramebufferBinding(Framebuffer *framebuffer)
...@@ -1061,8 +1105,7 @@ Framebuffer *State::getDrawFramebuffer() const ...@@ -1061,8 +1105,7 @@ Framebuffer *State::getDrawFramebuffer() const
bool State::removeReadFramebufferBinding(GLuint framebuffer) bool State::removeReadFramebufferBinding(GLuint framebuffer)
{ {
if (mReadFramebuffer != nullptr && if (mReadFramebuffer != nullptr && mReadFramebuffer->id() == framebuffer)
mReadFramebuffer->id() == framebuffer)
{ {
setReadFramebufferBinding(nullptr); setReadFramebufferBinding(nullptr);
return true; return true;
...@@ -1073,8 +1116,7 @@ bool State::removeReadFramebufferBinding(GLuint framebuffer) ...@@ -1073,8 +1116,7 @@ bool State::removeReadFramebufferBinding(GLuint framebuffer)
bool State::removeDrawFramebufferBinding(GLuint framebuffer) bool State::removeDrawFramebufferBinding(GLuint framebuffer)
{ {
if (mReadFramebuffer != nullptr && if (mReadFramebuffer != nullptr && mDrawFramebuffer->id() == framebuffer)
mDrawFramebuffer->id() == framebuffer)
{ {
setDrawFramebufferBinding(nullptr); setDrawFramebufferBinding(nullptr);
return true; return true;
...@@ -1207,7 +1249,8 @@ TransformFeedback *State::getCurrentTransformFeedback() const ...@@ -1207,7 +1249,8 @@ TransformFeedback *State::getCurrentTransformFeedback() const
bool State::isTransformFeedbackActiveUnpaused() const bool State::isTransformFeedbackActiveUnpaused() const
{ {
TransformFeedback *curTransformFeedback = getCurrentTransformFeedback(); TransformFeedback *curTransformFeedback = getCurrentTransformFeedback();
return curTransformFeedback && curTransformFeedback->isActive() && !curTransformFeedback->isPaused(); return curTransformFeedback && curTransformFeedback->isActive() &&
!curTransformFeedback->isPaused();
} }
bool State::removeTransformFeedbackBinding(const Context *context, GLuint transformFeedback) bool State::removeTransformFeedbackBinding(const Context *context, GLuint transformFeedback)
...@@ -1723,67 +1766,91 @@ void State::getBooleanv(GLenum pname, GLboolean *params) ...@@ -1723,67 +1766,91 @@ void State::getBooleanv(GLenum pname, GLboolean *params)
{ {
switch (pname) switch (pname)
{ {
case GL_SAMPLE_COVERAGE_INVERT: *params = mSampleCoverageInvert; break; case GL_SAMPLE_COVERAGE_INVERT:
case GL_DEPTH_WRITEMASK: *params = mDepthStencil.depthMask; break; *params = mSampleCoverageInvert;
case GL_COLOR_WRITEMASK: break;
params[0] = mBlend.colorMaskRed; case GL_DEPTH_WRITEMASK:
params[1] = mBlend.colorMaskGreen; *params = mDepthStencil.depthMask;
params[2] = mBlend.colorMaskBlue; break;
params[3] = mBlend.colorMaskAlpha; case GL_COLOR_WRITEMASK:
break; params[0] = mBlend.colorMaskRed;
case GL_CULL_FACE: params[1] = mBlend.colorMaskGreen;
*params = mRasterizer.cullFace; params[2] = mBlend.colorMaskBlue;
break; params[3] = mBlend.colorMaskAlpha;
case GL_POLYGON_OFFSET_FILL: *params = mRasterizer.polygonOffsetFill; break; break;
case GL_SAMPLE_ALPHA_TO_COVERAGE: *params = mBlend.sampleAlphaToCoverage; break; case GL_CULL_FACE:
case GL_SAMPLE_COVERAGE: *params = mSampleCoverage; break; *params = mRasterizer.cullFace;
case GL_SAMPLE_MASK: break;
*params = mSampleMask; case GL_POLYGON_OFFSET_FILL:
break; *params = mRasterizer.polygonOffsetFill;
case GL_SCISSOR_TEST: *params = mScissorTest; break; break;
case GL_STENCIL_TEST: *params = mDepthStencil.stencilTest; break; case GL_SAMPLE_ALPHA_TO_COVERAGE:
case GL_DEPTH_TEST: *params = mDepthStencil.depthTest; break; *params = mBlend.sampleAlphaToCoverage;
case GL_BLEND: *params = mBlend.blend; break; break;
case GL_DITHER: *params = mBlend.dither; break; case GL_SAMPLE_COVERAGE:
case GL_TRANSFORM_FEEDBACK_ACTIVE: *params = getCurrentTransformFeedback()->isActive() ? GL_TRUE : GL_FALSE; break; *params = mSampleCoverage;
case GL_TRANSFORM_FEEDBACK_PAUSED: *params = getCurrentTransformFeedback()->isPaused() ? GL_TRUE : GL_FALSE; break; break;
case GL_PRIMITIVE_RESTART_FIXED_INDEX: case GL_SAMPLE_MASK:
*params = mPrimitiveRestart; *params = mSampleMask;
break; break;
case GL_RASTERIZER_DISCARD: case GL_SCISSOR_TEST:
*params = isRasterizerDiscardEnabled() ? GL_TRUE : GL_FALSE; *params = mScissorTest;
break; break;
case GL_DEBUG_OUTPUT_SYNCHRONOUS: case GL_STENCIL_TEST:
*params = mDebug.isOutputSynchronous() ? GL_TRUE : GL_FALSE; *params = mDepthStencil.stencilTest;
break; break;
case GL_DEBUG_OUTPUT: case GL_DEPTH_TEST:
*params = mDebug.isOutputEnabled() ? GL_TRUE : GL_FALSE; *params = mDepthStencil.depthTest;
break; break;
case GL_MULTISAMPLE_EXT: case GL_BLEND:
*params = mMultiSampling; *params = mBlend.blend;
break; break;
case GL_SAMPLE_ALPHA_TO_ONE_EXT: case GL_DITHER:
*params = mSampleAlphaToOne; *params = mBlend.dither;
break; break;
case GL_BIND_GENERATES_RESOURCE_CHROMIUM: case GL_TRANSFORM_FEEDBACK_ACTIVE:
*params = isBindGeneratesResourceEnabled() ? GL_TRUE : GL_FALSE; *params = getCurrentTransformFeedback()->isActive() ? GL_TRUE : GL_FALSE;
break; break;
case GL_CLIENT_ARRAYS_ANGLE: case GL_TRANSFORM_FEEDBACK_PAUSED:
*params = areClientArraysEnabled() ? GL_TRUE : GL_FALSE; *params = getCurrentTransformFeedback()->isPaused() ? GL_TRUE : GL_FALSE;
break; break;
case GL_FRAMEBUFFER_SRGB_EXT: case GL_PRIMITIVE_RESTART_FIXED_INDEX:
*params = getFramebufferSRGB() ? GL_TRUE : GL_FALSE; *params = mPrimitiveRestart;
break; break;
case GL_ROBUST_RESOURCE_INITIALIZATION_ANGLE: case GL_RASTERIZER_DISCARD:
*params = mRobustResourceInit ? GL_TRUE : GL_FALSE; *params = isRasterizerDiscardEnabled() ? GL_TRUE : GL_FALSE;
break; break;
case GL_PROGRAM_CACHE_ENABLED_ANGLE: case GL_DEBUG_OUTPUT_SYNCHRONOUS:
*params = mProgramBinaryCacheEnabled ? GL_TRUE : GL_FALSE; *params = mDebug.isOutputSynchronous() ? GL_TRUE : GL_FALSE;
break; break;
case GL_DEBUG_OUTPUT:
default: *params = mDebug.isOutputEnabled() ? GL_TRUE : GL_FALSE;
UNREACHABLE(); break;
break; case GL_MULTISAMPLE_EXT:
*params = mMultiSampling;
break;
case GL_SAMPLE_ALPHA_TO_ONE_EXT:
*params = mSampleAlphaToOne;
break;
case GL_BIND_GENERATES_RESOURCE_CHROMIUM:
*params = isBindGeneratesResourceEnabled() ? GL_TRUE : GL_FALSE;
break;
case GL_CLIENT_ARRAYS_ANGLE:
*params = areClientArraysEnabled() ? GL_TRUE : GL_FALSE;
break;
case GL_FRAMEBUFFER_SRGB_EXT:
*params = getFramebufferSRGB() ? GL_TRUE : GL_FALSE;
break;
case GL_ROBUST_RESOURCE_INITIALIZATION_ANGLE:
*params = mRobustResourceInit ? GL_TRUE : GL_FALSE;
break;
case GL_PROGRAM_CACHE_ENABLED_ANGLE:
*params = mProgramBinaryCacheEnabled ? GL_TRUE : GL_FALSE;
break;
default:
UNREACHABLE();
break;
} }
} }
...@@ -1795,39 +1862,49 @@ void State::getFloatv(GLenum pname, GLfloat *params) ...@@ -1795,39 +1862,49 @@ void State::getFloatv(GLenum pname, GLfloat *params)
// case, this should make no difference to the calling application. // case, this should make no difference to the calling application.
switch (pname) switch (pname)
{ {
case GL_LINE_WIDTH: *params = mLineWidth; break; case GL_LINE_WIDTH:
case GL_SAMPLE_COVERAGE_VALUE: *params = mSampleCoverageValue; break; *params = mLineWidth;
case GL_DEPTH_CLEAR_VALUE: *params = mDepthClearValue; break; break;
case GL_POLYGON_OFFSET_FACTOR: *params = mRasterizer.polygonOffsetFactor; break; case GL_SAMPLE_COVERAGE_VALUE:
case GL_POLYGON_OFFSET_UNITS: *params = mRasterizer.polygonOffsetUnits; break; *params = mSampleCoverageValue;
case GL_DEPTH_RANGE: break;
params[0] = mNearZ; case GL_DEPTH_CLEAR_VALUE:
params[1] = mFarZ; *params = mDepthClearValue;
break; break;
case GL_COLOR_CLEAR_VALUE: case GL_POLYGON_OFFSET_FACTOR:
params[0] = mColorClearValue.red; *params = mRasterizer.polygonOffsetFactor;
params[1] = mColorClearValue.green; break;
params[2] = mColorClearValue.blue; case GL_POLYGON_OFFSET_UNITS:
params[3] = mColorClearValue.alpha; *params = mRasterizer.polygonOffsetUnits;
break; break;
case GL_BLEND_COLOR: case GL_DEPTH_RANGE:
params[0] = mBlendColor.red; params[0] = mNearZ;
params[1] = mBlendColor.green; params[1] = mFarZ;
params[2] = mBlendColor.blue; break;
params[3] = mBlendColor.alpha; case GL_COLOR_CLEAR_VALUE:
break; params[0] = mColorClearValue.red;
case GL_MULTISAMPLE_EXT: params[1] = mColorClearValue.green;
*params = static_cast<GLfloat>(mMultiSampling); params[2] = mColorClearValue.blue;
break; params[3] = mColorClearValue.alpha;
case GL_SAMPLE_ALPHA_TO_ONE_EXT: break;
*params = static_cast<GLfloat>(mSampleAlphaToOne); case GL_BLEND_COLOR:
break; params[0] = mBlendColor.red;
case GL_COVERAGE_MODULATION_CHROMIUM: params[1] = mBlendColor.green;
params[0] = static_cast<GLfloat>(mCoverageModulation); params[2] = mBlendColor.blue;
break; params[3] = mBlendColor.alpha;
default: break;
UNREACHABLE(); case GL_MULTISAMPLE_EXT:
break; *params = static_cast<GLfloat>(mMultiSampling);
break;
case GL_SAMPLE_ALPHA_TO_ONE_EXT:
*params = static_cast<GLfloat>(mSampleAlphaToOne);
break;
case GL_COVERAGE_MODULATION_CHROMIUM:
params[0] = static_cast<GLfloat>(mCoverageModulation);
break;
default:
UNREACHABLE();
break;
} }
} }
...@@ -1838,7 +1915,7 @@ Error State::getIntegerv(const Context *context, GLenum pname, GLint *params) ...@@ -1838,7 +1915,7 @@ Error State::getIntegerv(const Context *context, GLenum pname, GLint *params)
unsigned int colorAttachment = (pname - GL_DRAW_BUFFER0_EXT); unsigned int colorAttachment = (pname - GL_DRAW_BUFFER0_EXT);
ASSERT(colorAttachment < mMaxDrawBuffers); ASSERT(colorAttachment < mMaxDrawBuffers);
Framebuffer *framebuffer = mDrawFramebuffer; Framebuffer *framebuffer = mDrawFramebuffer;
*params = framebuffer->getDrawBufferState(colorAttachment); *params = framebuffer->getDrawBufferState(colorAttachment);
return NoError(); return NoError();
} }
...@@ -1858,80 +1935,139 @@ Error State::getIntegerv(const Context *context, GLenum pname, GLint *params) ...@@ -1858,80 +1935,139 @@ Error State::getIntegerv(const Context *context, GLenum pname, GLint *params)
case GL_ELEMENT_ARRAY_BUFFER_BINDING: case GL_ELEMENT_ARRAY_BUFFER_BINDING:
*params = getVertexArray()->getElementArrayBuffer().id(); *params = getVertexArray()->getElementArrayBuffer().id();
break; break;
//case GL_FRAMEBUFFER_BINDING: // now equivalent to GL_DRAW_FRAMEBUFFER_BINDING_ANGLE // case GL_FRAMEBUFFER_BINDING:
case GL_DRAW_FRAMEBUFFER_BINDING_ANGLE: *params = mDrawFramebuffer->id(); break; // now equivalent to GL_DRAW_FRAMEBUFFER_BINDING_ANGLE
case GL_READ_FRAMEBUFFER_BINDING_ANGLE: *params = mReadFramebuffer->id(); break; case GL_DRAW_FRAMEBUFFER_BINDING_ANGLE:
case GL_RENDERBUFFER_BINDING: *params = mRenderbuffer.id(); break; *params = mDrawFramebuffer->id();
case GL_VERTEX_ARRAY_BINDING: *params = mVertexArray->id(); break; break;
case GL_CURRENT_PROGRAM: *params = mProgram ? mProgram->id() : 0; break; case GL_READ_FRAMEBUFFER_BINDING_ANGLE:
case GL_PACK_ALIGNMENT: *params = mPack.alignment; break; *params = mReadFramebuffer->id();
case GL_PACK_REVERSE_ROW_ORDER_ANGLE: *params = mPack.reverseRowOrder; break; break;
case GL_PACK_ROW_LENGTH: case GL_RENDERBUFFER_BINDING:
*params = mPack.rowLength; *params = mRenderbuffer.id();
break; break;
case GL_PACK_SKIP_ROWS: case GL_VERTEX_ARRAY_BINDING:
*params = mPack.skipRows; *params = mVertexArray->id();
break; break;
case GL_PACK_SKIP_PIXELS: case GL_CURRENT_PROGRAM:
*params = mPack.skipPixels; *params = mProgram ? mProgram->id() : 0;
break; break;
case GL_UNPACK_ALIGNMENT: *params = mUnpack.alignment; break; case GL_PACK_ALIGNMENT:
case GL_UNPACK_ROW_LENGTH: *params = mUnpack.rowLength; break; *params = mPack.alignment;
case GL_UNPACK_IMAGE_HEIGHT: break;
*params = mUnpack.imageHeight; case GL_PACK_REVERSE_ROW_ORDER_ANGLE:
break; *params = mPack.reverseRowOrder;
case GL_UNPACK_SKIP_IMAGES: break;
*params = mUnpack.skipImages; case GL_PACK_ROW_LENGTH:
break; *params = mPack.rowLength;
case GL_UNPACK_SKIP_ROWS: break;
*params = mUnpack.skipRows; case GL_PACK_SKIP_ROWS:
break; *params = mPack.skipRows;
case GL_UNPACK_SKIP_PIXELS: break;
*params = mUnpack.skipPixels; case GL_PACK_SKIP_PIXELS:
break; *params = mPack.skipPixels;
case GL_GENERATE_MIPMAP_HINT: *params = mGenerateMipmapHint; break; break;
case GL_FRAGMENT_SHADER_DERIVATIVE_HINT_OES: *params = mFragmentShaderDerivativeHint; break; case GL_UNPACK_ALIGNMENT:
case GL_ACTIVE_TEXTURE: *params = mUnpack.alignment;
*params = (static_cast<GLint>(mActiveSampler) + GL_TEXTURE0); break;
break; case GL_UNPACK_ROW_LENGTH:
case GL_STENCIL_FUNC: *params = mDepthStencil.stencilFunc; break; *params = mUnpack.rowLength;
case GL_STENCIL_REF: *params = mStencilRef; break; break;
case GL_STENCIL_VALUE_MASK: case GL_UNPACK_IMAGE_HEIGHT:
*params = CastMaskValue(context, mDepthStencil.stencilMask); *params = mUnpack.imageHeight;
break; break;
case GL_STENCIL_BACK_FUNC: *params = mDepthStencil.stencilBackFunc; break; case GL_UNPACK_SKIP_IMAGES:
case GL_STENCIL_BACK_REF: *params = mStencilBackRef; break; *params = mUnpack.skipImages;
case GL_STENCIL_BACK_VALUE_MASK: break;
*params = CastMaskValue(context, mDepthStencil.stencilBackMask); case GL_UNPACK_SKIP_ROWS:
break; *params = mUnpack.skipRows;
case GL_STENCIL_FAIL: *params = mDepthStencil.stencilFail; break; break;
case GL_STENCIL_PASS_DEPTH_FAIL: *params = mDepthStencil.stencilPassDepthFail; break; case GL_UNPACK_SKIP_PIXELS:
case GL_STENCIL_PASS_DEPTH_PASS: *params = mDepthStencil.stencilPassDepthPass; break; *params = mUnpack.skipPixels;
case GL_STENCIL_BACK_FAIL: *params = mDepthStencil.stencilBackFail; break; break;
case GL_STENCIL_BACK_PASS_DEPTH_FAIL: *params = mDepthStencil.stencilBackPassDepthFail; break; case GL_GENERATE_MIPMAP_HINT:
case GL_STENCIL_BACK_PASS_DEPTH_PASS: *params = mDepthStencil.stencilBackPassDepthPass; break; *params = mGenerateMipmapHint;
case GL_DEPTH_FUNC: *params = mDepthStencil.depthFunc; break; break;
case GL_BLEND_SRC_RGB: *params = mBlend.sourceBlendRGB; break; case GL_FRAGMENT_SHADER_DERIVATIVE_HINT_OES:
case GL_BLEND_SRC_ALPHA: *params = mBlend.sourceBlendAlpha; break; *params = mFragmentShaderDerivativeHint;
case GL_BLEND_DST_RGB: *params = mBlend.destBlendRGB; break; break;
case GL_BLEND_DST_ALPHA: *params = mBlend.destBlendAlpha; break; case GL_ACTIVE_TEXTURE:
case GL_BLEND_EQUATION_RGB: *params = mBlend.blendEquationRGB; break; *params = (static_cast<GLint>(mActiveSampler) + GL_TEXTURE0);
case GL_BLEND_EQUATION_ALPHA: *params = mBlend.blendEquationAlpha; break; break;
case GL_STENCIL_WRITEMASK: case GL_STENCIL_FUNC:
*params = CastMaskValue(context, mDepthStencil.stencilWritemask); *params = mDepthStencil.stencilFunc;
break; break;
case GL_STENCIL_BACK_WRITEMASK: case GL_STENCIL_REF:
*params = CastMaskValue(context, mDepthStencil.stencilBackWritemask); *params = mStencilRef;
break; break;
case GL_STENCIL_CLEAR_VALUE: *params = mStencilClearValue; break; case GL_STENCIL_VALUE_MASK:
case GL_IMPLEMENTATION_COLOR_READ_TYPE: *params = CastMaskValue(context, mDepthStencil.stencilMask);
*params = mReadFramebuffer->getImplementationColorReadType(context); break;
break; case GL_STENCIL_BACK_FUNC:
case GL_IMPLEMENTATION_COLOR_READ_FORMAT: *params = mDepthStencil.stencilBackFunc;
*params = mReadFramebuffer->getImplementationColorReadFormat(context); break;
break; case GL_STENCIL_BACK_REF:
case GL_SAMPLE_BUFFERS: *params = mStencilBackRef;
case GL_SAMPLES: break;
case GL_STENCIL_BACK_VALUE_MASK:
*params = CastMaskValue(context, mDepthStencil.stencilBackMask);
break;
case GL_STENCIL_FAIL:
*params = mDepthStencil.stencilFail;
break;
case GL_STENCIL_PASS_DEPTH_FAIL:
*params = mDepthStencil.stencilPassDepthFail;
break;
case GL_STENCIL_PASS_DEPTH_PASS:
*params = mDepthStencil.stencilPassDepthPass;
break;
case GL_STENCIL_BACK_FAIL:
*params = mDepthStencil.stencilBackFail;
break;
case GL_STENCIL_BACK_PASS_DEPTH_FAIL:
*params = mDepthStencil.stencilBackPassDepthFail;
break;
case GL_STENCIL_BACK_PASS_DEPTH_PASS:
*params = mDepthStencil.stencilBackPassDepthPass;
break;
case GL_DEPTH_FUNC:
*params = mDepthStencil.depthFunc;
break;
case GL_BLEND_SRC_RGB:
*params = mBlend.sourceBlendRGB;
break;
case GL_BLEND_SRC_ALPHA:
*params = mBlend.sourceBlendAlpha;
break;
case GL_BLEND_DST_RGB:
*params = mBlend.destBlendRGB;
break;
case GL_BLEND_DST_ALPHA:
*params = mBlend.destBlendAlpha;
break;
case GL_BLEND_EQUATION_RGB:
*params = mBlend.blendEquationRGB;
break;
case GL_BLEND_EQUATION_ALPHA:
*params = mBlend.blendEquationAlpha;
break;
case GL_STENCIL_WRITEMASK:
*params = CastMaskValue(context, mDepthStencil.stencilWritemask);
break;
case GL_STENCIL_BACK_WRITEMASK:
*params = CastMaskValue(context, mDepthStencil.stencilBackWritemask);
break;
case GL_STENCIL_CLEAR_VALUE:
*params = mStencilClearValue;
break;
case GL_IMPLEMENTATION_COLOR_READ_TYPE:
*params = mReadFramebuffer->getImplementationColorReadType(context);
break;
case GL_IMPLEMENTATION_COLOR_READ_FORMAT:
*params = mReadFramebuffer->getImplementationColorReadFormat(context);
break;
case GL_SAMPLE_BUFFERS:
case GL_SAMPLES:
{ {
Framebuffer *framebuffer = mDrawFramebuffer; Framebuffer *framebuffer = mDrawFramebuffer;
bool complete = false; bool complete = false;
...@@ -1963,28 +2099,28 @@ Error State::getIntegerv(const Context *context, GLenum pname, GLint *params) ...@@ -1963,28 +2099,28 @@ Error State::getIntegerv(const Context *context, GLenum pname, GLint *params)
} }
} }
break; break;
case GL_VIEWPORT: case GL_VIEWPORT:
params[0] = mViewport.x; params[0] = mViewport.x;
params[1] = mViewport.y; params[1] = mViewport.y;
params[2] = mViewport.width; params[2] = mViewport.width;
params[3] = mViewport.height; params[3] = mViewport.height;
break; break;
case GL_SCISSOR_BOX: case GL_SCISSOR_BOX:
params[0] = mScissor.x; params[0] = mScissor.x;
params[1] = mScissor.y; params[1] = mScissor.y;
params[2] = mScissor.width; params[2] = mScissor.width;
params[3] = mScissor.height; params[3] = mScissor.height;
break; break;
case GL_CULL_FACE_MODE: case GL_CULL_FACE_MODE:
*params = ToGLenum(mRasterizer.cullMode); *params = ToGLenum(mRasterizer.cullMode);
break; break;
case GL_FRONT_FACE: case GL_FRONT_FACE:
*params = mRasterizer.frontFace; *params = mRasterizer.frontFace;
break; break;
case GL_RED_BITS: case GL_RED_BITS:
case GL_GREEN_BITS: case GL_GREEN_BITS:
case GL_BLUE_BITS: case GL_BLUE_BITS:
case GL_ALPHA_BITS: case GL_ALPHA_BITS:
{ {
Framebuffer *framebuffer = getDrawFramebuffer(); Framebuffer *framebuffer = getDrawFramebuffer();
const FramebufferAttachment *colorbuffer = framebuffer->getFirstColorbuffer(); const FramebufferAttachment *colorbuffer = framebuffer->getFirstColorbuffer();
...@@ -1993,10 +2129,18 @@ Error State::getIntegerv(const Context *context, GLenum pname, GLint *params) ...@@ -1993,10 +2129,18 @@ Error State::getIntegerv(const Context *context, GLenum pname, GLint *params)
{ {
switch (pname) switch (pname)
{ {
case GL_RED_BITS: *params = colorbuffer->getRedSize(); break; case GL_RED_BITS:
case GL_GREEN_BITS: *params = colorbuffer->getGreenSize(); break; *params = colorbuffer->getRedSize();
case GL_BLUE_BITS: *params = colorbuffer->getBlueSize(); break; break;
case GL_ALPHA_BITS: *params = colorbuffer->getAlphaSize(); break; case GL_GREEN_BITS:
*params = colorbuffer->getGreenSize();
break;
case GL_BLUE_BITS:
*params = colorbuffer->getBlueSize();
break;
case GL_ALPHA_BITS:
*params = colorbuffer->getAlphaSize();
break;
} }
} }
else else
...@@ -2005,7 +2149,7 @@ Error State::getIntegerv(const Context *context, GLenum pname, GLint *params) ...@@ -2005,7 +2149,7 @@ Error State::getIntegerv(const Context *context, GLenum pname, GLint *params)
} }
} }
break; break;
case GL_DEPTH_BITS: case GL_DEPTH_BITS:
{ {
const Framebuffer *framebuffer = getDrawFramebuffer(); const Framebuffer *framebuffer = getDrawFramebuffer();
const FramebufferAttachment *depthbuffer = framebuffer->getDepthbuffer(); const FramebufferAttachment *depthbuffer = framebuffer->getDepthbuffer();
...@@ -2020,7 +2164,7 @@ Error State::getIntegerv(const Context *context, GLenum pname, GLint *params) ...@@ -2020,7 +2164,7 @@ Error State::getIntegerv(const Context *context, GLenum pname, GLint *params)
} }
} }
break; break;
case GL_STENCIL_BITS: case GL_STENCIL_BITS:
{ {
const Framebuffer *framebuffer = getDrawFramebuffer(); const Framebuffer *framebuffer = getDrawFramebuffer();
const FramebufferAttachment *stencilbuffer = framebuffer->getStencilbuffer(); const FramebufferAttachment *stencilbuffer = framebuffer->getStencilbuffer();
...@@ -2035,97 +2179,99 @@ Error State::getIntegerv(const Context *context, GLenum pname, GLint *params) ...@@ -2035,97 +2179,99 @@ Error State::getIntegerv(const Context *context, GLenum pname, GLint *params)
} }
} }
break; break;
case GL_TEXTURE_BINDING_2D: case GL_TEXTURE_BINDING_2D:
ASSERT(mActiveSampler < mMaxCombinedTextureImageUnits); ASSERT(mActiveSampler < mMaxCombinedTextureImageUnits);
*params = getSamplerTextureId(static_cast<unsigned int>(mActiveSampler), TextureType::_2D); *params =
break; getSamplerTextureId(static_cast<unsigned int>(mActiveSampler), TextureType::_2D);
case GL_TEXTURE_BINDING_RECTANGLE_ANGLE: break;
ASSERT(mActiveSampler < mMaxCombinedTextureImageUnits); case GL_TEXTURE_BINDING_RECTANGLE_ANGLE:
*params = getSamplerTextureId(static_cast<unsigned int>(mActiveSampler), ASSERT(mActiveSampler < mMaxCombinedTextureImageUnits);
TextureType::Rectangle); *params = getSamplerTextureId(static_cast<unsigned int>(mActiveSampler),
break; TextureType::Rectangle);
case GL_TEXTURE_BINDING_CUBE_MAP: break;
ASSERT(mActiveSampler < mMaxCombinedTextureImageUnits); case GL_TEXTURE_BINDING_CUBE_MAP:
*params = ASSERT(mActiveSampler < mMaxCombinedTextureImageUnits);
getSamplerTextureId(static_cast<unsigned int>(mActiveSampler), TextureType::CubeMap); *params = getSamplerTextureId(static_cast<unsigned int>(mActiveSampler),
break; TextureType::CubeMap);
case GL_TEXTURE_BINDING_3D: break;
ASSERT(mActiveSampler < mMaxCombinedTextureImageUnits); case GL_TEXTURE_BINDING_3D:
*params = getSamplerTextureId(static_cast<unsigned int>(mActiveSampler), TextureType::_3D); ASSERT(mActiveSampler < mMaxCombinedTextureImageUnits);
break; *params =
case GL_TEXTURE_BINDING_2D_ARRAY: getSamplerTextureId(static_cast<unsigned int>(mActiveSampler), TextureType::_3D);
ASSERT(mActiveSampler < mMaxCombinedTextureImageUnits); break;
*params = case GL_TEXTURE_BINDING_2D_ARRAY:
getSamplerTextureId(static_cast<unsigned int>(mActiveSampler), TextureType::_2DArray); ASSERT(mActiveSampler < mMaxCombinedTextureImageUnits);
break; *params = getSamplerTextureId(static_cast<unsigned int>(mActiveSampler),
case GL_TEXTURE_BINDING_2D_MULTISAMPLE: TextureType::_2DArray);
ASSERT(mActiveSampler < mMaxCombinedTextureImageUnits); break;
*params = getSamplerTextureId(static_cast<unsigned int>(mActiveSampler), case GL_TEXTURE_BINDING_2D_MULTISAMPLE:
TextureType::_2DMultisample); ASSERT(mActiveSampler < mMaxCombinedTextureImageUnits);
break; *params = getSamplerTextureId(static_cast<unsigned int>(mActiveSampler),
case GL_TEXTURE_BINDING_EXTERNAL_OES: TextureType::_2DMultisample);
ASSERT(mActiveSampler < mMaxCombinedTextureImageUnits); break;
*params = case GL_TEXTURE_BINDING_EXTERNAL_OES:
getSamplerTextureId(static_cast<unsigned int>(mActiveSampler), TextureType::External); ASSERT(mActiveSampler < mMaxCombinedTextureImageUnits);
break; *params = getSamplerTextureId(static_cast<unsigned int>(mActiveSampler),
case GL_UNIFORM_BUFFER_BINDING: TextureType::External);
*params = mBoundBuffers[BufferBinding::Uniform].id(); break;
break; case GL_UNIFORM_BUFFER_BINDING:
case GL_TRANSFORM_FEEDBACK_BINDING: *params = mBoundBuffers[BufferBinding::Uniform].id();
*params = mTransformFeedback.id(); break;
break; case GL_TRANSFORM_FEEDBACK_BINDING:
case GL_TRANSFORM_FEEDBACK_BUFFER_BINDING: *params = mTransformFeedback.id();
*params = mBoundBuffers[BufferBinding::TransformFeedback].id(); break;
break; case GL_TRANSFORM_FEEDBACK_BUFFER_BINDING:
case GL_COPY_READ_BUFFER_BINDING: *params = mBoundBuffers[BufferBinding::TransformFeedback].id();
*params = mBoundBuffers[BufferBinding::CopyRead].id(); break;
break; case GL_COPY_READ_BUFFER_BINDING:
case GL_COPY_WRITE_BUFFER_BINDING: *params = mBoundBuffers[BufferBinding::CopyRead].id();
*params = mBoundBuffers[BufferBinding::CopyWrite].id(); break;
break; case GL_COPY_WRITE_BUFFER_BINDING:
case GL_PIXEL_PACK_BUFFER_BINDING: *params = mBoundBuffers[BufferBinding::CopyWrite].id();
*params = mBoundBuffers[BufferBinding::PixelPack].id(); break;
break; case GL_PIXEL_PACK_BUFFER_BINDING:
case GL_PIXEL_UNPACK_BUFFER_BINDING: *params = mBoundBuffers[BufferBinding::PixelPack].id();
*params = mBoundBuffers[BufferBinding::PixelUnpack].id(); break;
break; case GL_PIXEL_UNPACK_BUFFER_BINDING:
case GL_READ_BUFFER: *params = mBoundBuffers[BufferBinding::PixelUnpack].id();
*params = mReadFramebuffer->getReadBufferState(); break;
break; case GL_READ_BUFFER:
case GL_SAMPLER_BINDING: *params = mReadFramebuffer->getReadBufferState();
ASSERT(mActiveSampler < mMaxCombinedTextureImageUnits); break;
*params = getSamplerId(static_cast<GLuint>(mActiveSampler)); case GL_SAMPLER_BINDING:
break; ASSERT(mActiveSampler < mMaxCombinedTextureImageUnits);
case GL_DEBUG_LOGGED_MESSAGES: *params = getSamplerId(static_cast<GLuint>(mActiveSampler));
*params = static_cast<GLint>(mDebug.getMessageCount()); break;
break; case GL_DEBUG_LOGGED_MESSAGES:
case GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH: *params = static_cast<GLint>(mDebug.getMessageCount());
*params = static_cast<GLint>(mDebug.getNextMessageLength()); break;
break; case GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH:
case GL_DEBUG_GROUP_STACK_DEPTH: *params = static_cast<GLint>(mDebug.getNextMessageLength());
*params = static_cast<GLint>(mDebug.getGroupStackDepth()); break;
break; case GL_DEBUG_GROUP_STACK_DEPTH:
case GL_MULTISAMPLE_EXT: *params = static_cast<GLint>(mDebug.getGroupStackDepth());
*params = static_cast<GLint>(mMultiSampling); break;
break; case GL_MULTISAMPLE_EXT:
case GL_SAMPLE_ALPHA_TO_ONE_EXT: *params = static_cast<GLint>(mMultiSampling);
*params = static_cast<GLint>(mSampleAlphaToOne); break;
break; case GL_SAMPLE_ALPHA_TO_ONE_EXT:
case GL_COVERAGE_MODULATION_CHROMIUM: *params = static_cast<GLint>(mSampleAlphaToOne);
*params = static_cast<GLint>(mCoverageModulation); break;
break; case GL_COVERAGE_MODULATION_CHROMIUM:
case GL_ATOMIC_COUNTER_BUFFER_BINDING: *params = static_cast<GLint>(mCoverageModulation);
*params = mBoundBuffers[BufferBinding::AtomicCounter].id(); break;
break; case GL_ATOMIC_COUNTER_BUFFER_BINDING:
case GL_SHADER_STORAGE_BUFFER_BINDING: *params = mBoundBuffers[BufferBinding::AtomicCounter].id();
*params = mBoundBuffers[BufferBinding::ShaderStorage].id(); break;
break; case GL_SHADER_STORAGE_BUFFER_BINDING:
case GL_DISPATCH_INDIRECT_BUFFER_BINDING: *params = mBoundBuffers[BufferBinding::ShaderStorage].id();
*params = mBoundBuffers[BufferBinding::DispatchIndirect].id(); break;
break; case GL_DISPATCH_INDIRECT_BUFFER_BINDING:
default: *params = mBoundBuffers[BufferBinding::DispatchIndirect].id();
UNREACHABLE(); break;
break; default:
UNREACHABLE();
break;
} }
return NoError(); return NoError();
...@@ -2151,65 +2297,65 @@ void State::getIntegeri_v(GLenum target, GLuint index, GLint *data) ...@@ -2151,65 +2297,65 @@ void State::getIntegeri_v(GLenum target, GLuint index, GLint *data)
{ {
switch (target) switch (target)
{ {
case GL_TRANSFORM_FEEDBACK_BUFFER_BINDING: case GL_TRANSFORM_FEEDBACK_BUFFER_BINDING:
ASSERT(static_cast<size_t>(index) < mTransformFeedback->getIndexedBufferCount()); ASSERT(static_cast<size_t>(index) < mTransformFeedback->getIndexedBufferCount());
*data = mTransformFeedback->getIndexedBuffer(index).id(); *data = mTransformFeedback->getIndexedBuffer(index).id();
break; break;
case GL_UNIFORM_BUFFER_BINDING: case GL_UNIFORM_BUFFER_BINDING:
ASSERT(static_cast<size_t>(index) < mUniformBuffers.size()); ASSERT(static_cast<size_t>(index) < mUniformBuffers.size());
*data = mUniformBuffers[index].id(); *data = mUniformBuffers[index].id();
break; break;
case GL_ATOMIC_COUNTER_BUFFER_BINDING: case GL_ATOMIC_COUNTER_BUFFER_BINDING:
ASSERT(static_cast<size_t>(index) < mAtomicCounterBuffers.size()); ASSERT(static_cast<size_t>(index) < mAtomicCounterBuffers.size());
*data = mAtomicCounterBuffers[index].id(); *data = mAtomicCounterBuffers[index].id();
break; break;
case GL_SHADER_STORAGE_BUFFER_BINDING: case GL_SHADER_STORAGE_BUFFER_BINDING:
ASSERT(static_cast<size_t>(index) < mShaderStorageBuffers.size()); ASSERT(static_cast<size_t>(index) < mShaderStorageBuffers.size());
*data = mShaderStorageBuffers[index].id(); *data = mShaderStorageBuffers[index].id();
break; break;
case GL_VERTEX_BINDING_BUFFER: case GL_VERTEX_BINDING_BUFFER:
ASSERT(static_cast<size_t>(index) < mVertexArray->getMaxBindings()); ASSERT(static_cast<size_t>(index) < mVertexArray->getMaxBindings());
*data = mVertexArray->getVertexBinding(index).getBuffer().id(); *data = mVertexArray->getVertexBinding(index).getBuffer().id();
break; break;
case GL_VERTEX_BINDING_DIVISOR: case GL_VERTEX_BINDING_DIVISOR:
ASSERT(static_cast<size_t>(index) < mVertexArray->getMaxBindings()); ASSERT(static_cast<size_t>(index) < mVertexArray->getMaxBindings());
*data = mVertexArray->getVertexBinding(index).getDivisor(); *data = mVertexArray->getVertexBinding(index).getDivisor();
break; break;
case GL_VERTEX_BINDING_OFFSET: case GL_VERTEX_BINDING_OFFSET:
ASSERT(static_cast<size_t>(index) < mVertexArray->getMaxBindings()); ASSERT(static_cast<size_t>(index) < mVertexArray->getMaxBindings());
*data = static_cast<GLuint>(mVertexArray->getVertexBinding(index).getOffset()); *data = static_cast<GLuint>(mVertexArray->getVertexBinding(index).getOffset());
break; break;
case GL_VERTEX_BINDING_STRIDE: case GL_VERTEX_BINDING_STRIDE:
ASSERT(static_cast<size_t>(index) < mVertexArray->getMaxBindings()); ASSERT(static_cast<size_t>(index) < mVertexArray->getMaxBindings());
*data = mVertexArray->getVertexBinding(index).getStride(); *data = mVertexArray->getVertexBinding(index).getStride();
break; break;
case GL_SAMPLE_MASK_VALUE: case GL_SAMPLE_MASK_VALUE:
ASSERT(static_cast<size_t>(index) < mSampleMaskValues.size()); ASSERT(static_cast<size_t>(index) < mSampleMaskValues.size());
*data = mSampleMaskValues[index]; *data = mSampleMaskValues[index];
break; break;
case GL_IMAGE_BINDING_NAME: case GL_IMAGE_BINDING_NAME:
ASSERT(static_cast<size_t>(index) < mImageUnits.size()); ASSERT(static_cast<size_t>(index) < mImageUnits.size());
*data = mImageUnits[index].texture.id(); *data = mImageUnits[index].texture.id();
break; break;
case GL_IMAGE_BINDING_LEVEL: case GL_IMAGE_BINDING_LEVEL:
ASSERT(static_cast<size_t>(index) < mImageUnits.size()); ASSERT(static_cast<size_t>(index) < mImageUnits.size());
*data = mImageUnits[index].level; *data = mImageUnits[index].level;
break; break;
case GL_IMAGE_BINDING_LAYER: case GL_IMAGE_BINDING_LAYER:
ASSERT(static_cast<size_t>(index) < mImageUnits.size()); ASSERT(static_cast<size_t>(index) < mImageUnits.size());
*data = mImageUnits[index].layer; *data = mImageUnits[index].layer;
break; break;
case GL_IMAGE_BINDING_ACCESS: case GL_IMAGE_BINDING_ACCESS:
ASSERT(static_cast<size_t>(index) < mImageUnits.size()); ASSERT(static_cast<size_t>(index) < mImageUnits.size());
*data = mImageUnits[index].access; *data = mImageUnits[index].access;
break; break;
case GL_IMAGE_BINDING_FORMAT: case GL_IMAGE_BINDING_FORMAT:
ASSERT(static_cast<size_t>(index) < mImageUnits.size()); ASSERT(static_cast<size_t>(index) < mImageUnits.size());
*data = mImageUnits[index].format; *data = mImageUnits[index].format;
break; break;
default: default:
UNREACHABLE(); UNREACHABLE();
break; break;
} }
} }
...@@ -2217,41 +2363,41 @@ void State::getInteger64i_v(GLenum target, GLuint index, GLint64 *data) ...@@ -2217,41 +2363,41 @@ void State::getInteger64i_v(GLenum target, GLuint index, GLint64 *data)
{ {
switch (target) switch (target)
{ {
case GL_TRANSFORM_FEEDBACK_BUFFER_START: case GL_TRANSFORM_FEEDBACK_BUFFER_START:
ASSERT(static_cast<size_t>(index) < mTransformFeedback->getIndexedBufferCount()); ASSERT(static_cast<size_t>(index) < mTransformFeedback->getIndexedBufferCount());
*data = mTransformFeedback->getIndexedBuffer(index).getOffset(); *data = mTransformFeedback->getIndexedBuffer(index).getOffset();
break; break;
case GL_TRANSFORM_FEEDBACK_BUFFER_SIZE: case GL_TRANSFORM_FEEDBACK_BUFFER_SIZE:
ASSERT(static_cast<size_t>(index) < mTransformFeedback->getIndexedBufferCount()); ASSERT(static_cast<size_t>(index) < mTransformFeedback->getIndexedBufferCount());
*data = mTransformFeedback->getIndexedBuffer(index).getSize(); *data = mTransformFeedback->getIndexedBuffer(index).getSize();
break; break;
case GL_UNIFORM_BUFFER_START: case GL_UNIFORM_BUFFER_START:
ASSERT(static_cast<size_t>(index) < mUniformBuffers.size()); ASSERT(static_cast<size_t>(index) < mUniformBuffers.size());
*data = mUniformBuffers[index].getOffset(); *data = mUniformBuffers[index].getOffset();
break; break;
case GL_UNIFORM_BUFFER_SIZE: case GL_UNIFORM_BUFFER_SIZE:
ASSERT(static_cast<size_t>(index) < mUniformBuffers.size()); ASSERT(static_cast<size_t>(index) < mUniformBuffers.size());
*data = mUniformBuffers[index].getSize(); *data = mUniformBuffers[index].getSize();
break; break;
case GL_ATOMIC_COUNTER_BUFFER_START: case GL_ATOMIC_COUNTER_BUFFER_START:
ASSERT(static_cast<size_t>(index) < mAtomicCounterBuffers.size()); ASSERT(static_cast<size_t>(index) < mAtomicCounterBuffers.size());
*data = mAtomicCounterBuffers[index].getOffset(); *data = mAtomicCounterBuffers[index].getOffset();
break; break;
case GL_ATOMIC_COUNTER_BUFFER_SIZE: case GL_ATOMIC_COUNTER_BUFFER_SIZE:
ASSERT(static_cast<size_t>(index) < mAtomicCounterBuffers.size()); ASSERT(static_cast<size_t>(index) < mAtomicCounterBuffers.size());
*data = mAtomicCounterBuffers[index].getSize(); *data = mAtomicCounterBuffers[index].getSize();
break; break;
case GL_SHADER_STORAGE_BUFFER_START: case GL_SHADER_STORAGE_BUFFER_START:
ASSERT(static_cast<size_t>(index) < mShaderStorageBuffers.size()); ASSERT(static_cast<size_t>(index) < mShaderStorageBuffers.size());
*data = mShaderStorageBuffers[index].getOffset(); *data = mShaderStorageBuffers[index].getOffset();
break; break;
case GL_SHADER_STORAGE_BUFFER_SIZE: case GL_SHADER_STORAGE_BUFFER_SIZE:
ASSERT(static_cast<size_t>(index) < mShaderStorageBuffers.size()); ASSERT(static_cast<size_t>(index) < mShaderStorageBuffers.size());
*data = mShaderStorageBuffers[index].getSize(); *data = mShaderStorageBuffers[index].getSize();
break; break;
default: default:
UNREACHABLE(); UNREACHABLE();
break; break;
} }
} }
...@@ -2274,7 +2420,7 @@ bool State::hasMappedBuffer(BufferBinding target) const ...@@ -2274,7 +2420,7 @@ bool State::hasMappedBuffer(BufferBinding target) const
if (target == BufferBinding::Array) if (target == BufferBinding::Array)
{ {
const VertexArray *vao = getVertexArray(); const VertexArray *vao = getVertexArray();
const auto &vertexAttribs = vao->getVertexAttributes(); const auto &vertexAttribs = vao->getVertexAttributes();
const auto &vertexBindings = vao->getVertexBindings(); const auto &vertexBindings = vao->getVertexBindings();
for (size_t attribIndex : vao->getEnabledAttributesMask()) for (size_t attribIndex : vao->getEnabledAttributesMask())
{ {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment