Commit 0f55e3e5 by Alexey Knyazev Committed by Commit Bot

Reland "Remove redundant BlendStateArray tracking"

Rebase the original CL and update capture/replay state serialization Original CL reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2169093 Bug: angleproject:4394 Bug: chromium:1085996 Bug: chromium:1086582 Bug: chromium:1086585 Bug: chromium:1086586 Change-Id: If0fba8b6e185540aed57d22eaf0ff79ec142209e Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2404442 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: 's avatarJamie Madill <jmadill@chromium.org> Reviewed-by: 's avatarGeoff Lang <geofflang@chromium.org>
parent 30d067cf
...@@ -264,10 +264,10 @@ bool IsClearBufferEnabled(const FramebufferState &mState, GLenum buffer, GLint d ...@@ -264,10 +264,10 @@ bool IsClearBufferEnabled(const FramebufferState &mState, GLenum buffer, GLint d
return buffer != GL_COLOR || mState.getEnabledDrawBuffers()[drawbuffer]; return buffer != GL_COLOR || mState.getEnabledDrawBuffers()[drawbuffer];
} }
bool IsColorMaskedOut(const BlendState &blend) bool IsColorMaskedOut(const BlendStateExt &blendStateExt, const GLint drawbuffer)
{ {
return (!blend.colorMaskRed && !blend.colorMaskGreen && !blend.colorMaskBlue && ASSERT(static_cast<size_t>(drawbuffer) < blendStateExt.mMaxDrawBuffers);
!blend.colorMaskAlpha); return blendStateExt.getColorMaskIndexed(static_cast<size_t>(drawbuffer)) == 0;
} }
} // anonymous namespace } // anonymous namespace
...@@ -3816,8 +3816,7 @@ bool Context::isClearBufferMaskedOut(GLenum buffer, GLint drawbuffer) const ...@@ -3816,8 +3816,7 @@ bool Context::isClearBufferMaskedOut(GLenum buffer, GLint drawbuffer) const
switch (buffer) switch (buffer)
{ {
case GL_COLOR: case GL_COLOR:
ASSERT(static_cast<size_t>(drawbuffer) < mState.getBlendStateArray().size()); return IsColorMaskedOut(mState.getBlendStateExt(), drawbuffer);
return IsColorMaskedOut(mState.getBlendStateArray()[drawbuffer]);
case GL_DEPTH: case GL_DEPTH:
return mState.getDepthStencilState().isDepthMaskedOut(); return mState.getDepthStencilState().isDepthMaskedOut();
case GL_STENCIL: case GL_STENCIL:
......
...@@ -698,13 +698,10 @@ void State::setStencilClearValue(int stencil) ...@@ -698,13 +698,10 @@ 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)
{ {
for (BlendState &blendState : mBlendStateArray) mBlendState.colorMaskRed = red;
{ mBlendState.colorMaskGreen = green;
blendState.colorMaskRed = red; mBlendState.colorMaskBlue = blue;
blendState.colorMaskGreen = green; mBlendState.colorMaskAlpha = alpha;
blendState.colorMaskBlue = blue;
blendState.colorMaskAlpha = alpha;
}
mBlendStateExt.setColorMask(red, green, blue, alpha); mBlendStateExt.setColorMask(red, green, blue, alpha);
mDirtyBits.set(DIRTY_BIT_COLOR_MASK); mDirtyBits.set(DIRTY_BIT_COLOR_MASK);
...@@ -712,42 +709,24 @@ void State::setColorMask(bool red, bool green, bool blue, bool alpha) ...@@ -712,42 +709,24 @@ void State::setColorMask(bool red, bool green, bool blue, bool alpha)
void State::setColorMaskIndexed(bool red, bool green, bool blue, bool alpha, GLuint index) void State::setColorMaskIndexed(bool red, bool green, bool blue, bool alpha, GLuint index)
{ {
ASSERT(index < mBlendStateArray.size());
mBlendStateArray[index].colorMaskRed = red;
mBlendStateArray[index].colorMaskGreen = green;
mBlendStateArray[index].colorMaskBlue = blue;
mBlendStateArray[index].colorMaskAlpha = alpha;
mBlendStateExt.setColorMaskIndexed(index, red, green, blue, alpha); mBlendStateExt.setColorMaskIndexed(index, red, green, blue, alpha);
mDirtyBits.set(DIRTY_BIT_COLOR_MASK); mDirtyBits.set(DIRTY_BIT_COLOR_MASK);
} }
bool State::allActiveDrawBufferChannelsMasked() const bool State::allActiveDrawBufferChannelsMasked() const
{ {
for (size_t drawBufferIndex : mDrawFramebuffer->getDrawBufferMask()) // Compare current color mask with all-disabled color mask, while ignoring disabled draw
{ // buffers.
const BlendState &blendState = mBlendStateArray[drawBufferIndex]; return (mBlendStateExt.compareColorMask(0) & mDrawFramebuffer->getDrawBufferMask()).none();
if (blendState.colorMaskRed || blendState.colorMaskGreen || blendState.colorMaskBlue ||
blendState.colorMaskAlpha)
{
return false;
}
}
return true;
} }
bool State::anyActiveDrawBufferChannelMasked() const bool State::anyActiveDrawBufferChannelMasked() const
{ {
for (size_t drawBufferIndex : mDrawFramebuffer->getDrawBufferMask()) // Compare current color mask with all-enabled color mask, while ignoring disabled draw
{ // buffers.
const BlendState &blendState = mBlendStateArray[drawBufferIndex]; return (mBlendStateExt.compareColorMask(mBlendStateExt.mMaxColorMask) &
if (!(blendState.colorMaskRed && blendState.colorMaskGreen && blendState.colorMaskBlue && mDrawFramebuffer->getDrawBufferMask())
blendState.colorMaskAlpha)) .any();
{
return true;
}
}
return false;
} }
void State::setDepthMask(bool mask) void State::setDepthMask(bool mask)
...@@ -813,31 +792,25 @@ void State::setDepthRange(float zNear, float zFar) ...@@ -813,31 +792,25 @@ void State::setDepthRange(float zNear, float zFar)
void State::setBlend(bool enabled) void State::setBlend(bool enabled)
{ {
for (BlendState &blendState : mBlendStateArray) mBlendState.blend = enabled;
{
blendState.blend = enabled;
}
mBlendStateExt.setEnabled(enabled); mBlendStateExt.setEnabled(enabled);
mDirtyBits.set(DIRTY_BIT_BLEND_ENABLED); mDirtyBits.set(DIRTY_BIT_BLEND_ENABLED);
} }
void State::setBlendIndexed(bool enabled, GLuint index) void State::setBlendIndexed(bool enabled, GLuint index)
{ {
ASSERT(index < mBlendStateArray.size());
mBlendStateArray[index].blend = enabled;
mBlendStateExt.setEnabledIndexed(index, enabled); mBlendStateExt.setEnabledIndexed(index, enabled);
mDirtyBits.set(DIRTY_BIT_BLEND_ENABLED); mDirtyBits.set(DIRTY_BIT_BLEND_ENABLED);
} }
void State::setBlendFactors(GLenum sourceRGB, GLenum destRGB, GLenum sourceAlpha, GLenum destAlpha) void State::setBlendFactors(GLenum sourceRGB, GLenum destRGB, GLenum sourceAlpha, GLenum destAlpha)
{ {
for (BlendState &blendState : mBlendStateArray)
{ mBlendState.sourceBlendRGB = sourceRGB;
blendState.sourceBlendRGB = sourceRGB; mBlendState.destBlendRGB = destRGB;
blendState.destBlendRGB = destRGB; mBlendState.sourceBlendAlpha = sourceAlpha;
blendState.sourceBlendAlpha = sourceAlpha; mBlendState.destBlendAlpha = destAlpha;
blendState.destBlendAlpha = destAlpha;
}
if (mNoSimultaneousConstantColorAndAlphaBlendFunc) if (mNoSimultaneousConstantColorAndAlphaBlendFunc)
{ {
...@@ -870,12 +843,6 @@ void State::setBlendFactorsIndexed(GLenum sourceRGB, ...@@ -870,12 +843,6 @@ void State::setBlendFactorsIndexed(GLenum sourceRGB,
GLenum destAlpha, GLenum destAlpha,
GLuint index) GLuint index)
{ {
ASSERT(index < mBlendStateArray.size());
mBlendStateArray[index].sourceBlendRGB = sourceRGB;
mBlendStateArray[index].destBlendRGB = destRGB;
mBlendStateArray[index].sourceBlendAlpha = sourceAlpha;
mBlendStateArray[index].destBlendAlpha = destAlpha;
if (mNoSimultaneousConstantColorAndAlphaBlendFunc) if (mNoSimultaneousConstantColorAndAlphaBlendFunc)
{ {
mBlendFuncConstantColorDrawBuffers.set(index, hasConstantColor(sourceRGB, destRGB)); mBlendFuncConstantColorDrawBuffers.set(index, hasConstantColor(sourceRGB, destRGB));
...@@ -911,11 +878,8 @@ void State::setBlendColor(float red, float green, float blue, float alpha) ...@@ -911,11 +878,8 @@ void State::setBlendColor(float red, float green, float blue, float alpha)
void State::setBlendEquation(GLenum rgbEquation, GLenum alphaEquation) void State::setBlendEquation(GLenum rgbEquation, GLenum alphaEquation)
{ {
for (BlendState &blendState : mBlendStateArray) mBlendState.blendEquationRGB = rgbEquation;
{ mBlendState.blendEquationAlpha = alphaEquation;
blendState.blendEquationRGB = rgbEquation;
blendState.blendEquationAlpha = alphaEquation;
}
mBlendStateExt.setEquations(rgbEquation, alphaEquation); mBlendStateExt.setEquations(rgbEquation, alphaEquation);
mDirtyBits.set(DIRTY_BIT_BLEND_EQUATIONS); mDirtyBits.set(DIRTY_BIT_BLEND_EQUATIONS);
...@@ -923,10 +887,6 @@ void State::setBlendEquation(GLenum rgbEquation, GLenum alphaEquation) ...@@ -923,10 +887,6 @@ void State::setBlendEquation(GLenum rgbEquation, GLenum alphaEquation)
void State::setBlendEquationIndexed(GLenum rgbEquation, GLenum alphaEquation, GLuint index) void State::setBlendEquationIndexed(GLenum rgbEquation, GLenum alphaEquation, GLuint index)
{ {
ASSERT(index < mBlendStateArray.size());
mBlendStateArray[index].blendEquationRGB = rgbEquation;
mBlendStateArray[index].blendEquationAlpha = alphaEquation;
mBlendStateExt.setEquationsIndexed(index, rgbEquation, alphaEquation); mBlendStateExt.setEquationsIndexed(index, rgbEquation, alphaEquation);
mDirtyBits.set(DIRTY_BIT_BLEND_EQUATIONS); mDirtyBits.set(DIRTY_BIT_BLEND_EQUATIONS);
} }
...@@ -2232,12 +2192,16 @@ void State::getBooleanv(GLenum pname, GLboolean *params) const ...@@ -2232,12 +2192,16 @@ void State::getBooleanv(GLenum pname, GLboolean *params) const
*params = mDepthStencil.depthMask; *params = mDepthStencil.depthMask;
break; break;
case GL_COLOR_WRITEMASK: case GL_COLOR_WRITEMASK:
{
// non-indexed get returns the state of draw buffer zero // non-indexed get returns the state of draw buffer zero
params[0] = mBlendStateArray[0].colorMaskRed; bool r, g, b, a;
params[1] = mBlendStateArray[0].colorMaskGreen; mBlendStateExt.getColorMaskIndexed(0, &r, &g, &b, &a);
params[2] = mBlendStateArray[0].colorMaskBlue; params[0] = r;
params[3] = mBlendStateArray[0].colorMaskAlpha; params[1] = g;
params[2] = b;
params[3] = a;
break; break;
}
case GL_CULL_FACE: case GL_CULL_FACE:
*params = mRasterizer.cullFace; *params = mRasterizer.cullFace;
break; break;
...@@ -2264,7 +2228,7 @@ void State::getBooleanv(GLenum pname, GLboolean *params) const ...@@ -2264,7 +2228,7 @@ void State::getBooleanv(GLenum pname, GLboolean *params) const
break; break;
case GL_BLEND: case GL_BLEND:
// non-indexed get returns the state of draw buffer zero // non-indexed get returns the state of draw buffer zero
*params = mBlendStateArray[0].blend; *params = mBlendStateExt.mEnabledMask.test(0);
break; break;
case GL_DITHER: case GL_DITHER:
*params = mRasterizer.dither; *params = mRasterizer.dither;
...@@ -2579,22 +2543,22 @@ angle::Result State::getIntegerv(const Context *context, GLenum pname, GLint *pa ...@@ -2579,22 +2543,22 @@ angle::Result State::getIntegerv(const Context *context, GLenum pname, GLint *pa
break; break;
case GL_BLEND_SRC_RGB: case GL_BLEND_SRC_RGB:
// non-indexed get returns the state of draw buffer zero // non-indexed get returns the state of draw buffer zero
*params = mBlendStateArray[0].sourceBlendRGB; *params = mBlendStateExt.getSrcColorIndexed(0);
break; break;
case GL_BLEND_SRC_ALPHA: case GL_BLEND_SRC_ALPHA:
*params = mBlendStateArray[0].sourceBlendAlpha; *params = mBlendStateExt.getSrcAlphaIndexed(0);
break; break;
case GL_BLEND_DST_RGB: case GL_BLEND_DST_RGB:
*params = mBlendStateArray[0].destBlendRGB; *params = mBlendStateExt.getDstColorIndexed(0);
break; break;
case GL_BLEND_DST_ALPHA: case GL_BLEND_DST_ALPHA:
*params = mBlendStateArray[0].destBlendAlpha; *params = mBlendStateExt.getDstAlphaIndexed(0);
break; break;
case GL_BLEND_EQUATION_RGB: case GL_BLEND_EQUATION_RGB:
*params = mBlendStateArray[0].blendEquationRGB; *params = mBlendStateExt.getEquationColorIndexed(0);
break; break;
case GL_BLEND_EQUATION_ALPHA: case GL_BLEND_EQUATION_ALPHA:
*params = mBlendStateArray[0].blendEquationAlpha; *params = mBlendStateExt.getEquationAlphaIndexed(0);
break; break;
case GL_STENCIL_WRITEMASK: case GL_STENCIL_WRITEMASK:
*params = CastMaskValue(mDepthStencil.stencilWritemask); *params = CastMaskValue(mDepthStencil.stencilWritemask);
...@@ -2852,10 +2816,10 @@ angle::Result State::getIntegerv(const Context *context, GLenum pname, GLint *pa ...@@ -2852,10 +2816,10 @@ angle::Result State::getIntegerv(const Context *context, GLenum pname, GLint *pa
break; break;
case GL_BLEND_SRC: case GL_BLEND_SRC:
// non-indexed get returns the state of draw buffer zero // non-indexed get returns the state of draw buffer zero
*params = mBlendStateArray[0].sourceBlendRGB; *params = mBlendStateExt.getSrcColorIndexed(0);
break; break;
case GL_BLEND_DST: case GL_BLEND_DST:
*params = mBlendStateArray[0].destBlendRGB; *params = mBlendStateExt.getDstColorIndexed(0);
break; break;
case GL_PERSPECTIVE_CORRECTION_HINT: case GL_PERSPECTIVE_CORRECTION_HINT:
case GL_POINT_SMOOTH_HINT: case GL_POINT_SMOOTH_HINT:
...@@ -2921,28 +2885,28 @@ void State::getIntegeri_v(GLenum target, GLuint index, GLint *data) const ...@@ -2921,28 +2885,28 @@ void State::getIntegeri_v(GLenum target, GLuint index, GLint *data) const
switch (target) switch (target)
{ {
case GL_BLEND_SRC_RGB: case GL_BLEND_SRC_RGB:
ASSERT(static_cast<size_t>(index) < mBlendStateArray.size()); ASSERT(static_cast<size_t>(index) < mBlendStateExt.mMaxDrawBuffers);
*data = mBlendStateArray[index].sourceBlendRGB; *data = mBlendStateExt.getSrcColorIndexed(index);
break; break;
case GL_BLEND_SRC_ALPHA: case GL_BLEND_SRC_ALPHA:
ASSERT(static_cast<size_t>(index) < mBlendStateArray.size()); ASSERT(static_cast<size_t>(index) < mBlendStateExt.mMaxDrawBuffers);
*data = mBlendStateArray[index].sourceBlendAlpha; *data = mBlendStateExt.getSrcAlphaIndexed(index);
break; break;
case GL_BLEND_DST_RGB: case GL_BLEND_DST_RGB:
ASSERT(static_cast<size_t>(index) < mBlendStateArray.size()); ASSERT(static_cast<size_t>(index) < mBlendStateExt.mMaxDrawBuffers);
*data = mBlendStateArray[index].destBlendRGB; *data = mBlendStateExt.getDstColorIndexed(index);
break; break;
case GL_BLEND_DST_ALPHA: case GL_BLEND_DST_ALPHA:
ASSERT(static_cast<size_t>(index) < mBlendStateArray.size()); ASSERT(static_cast<size_t>(index) < mBlendStateExt.mMaxDrawBuffers);
*data = mBlendStateArray[index].destBlendAlpha; *data = mBlendStateExt.getDstAlphaIndexed(index);
break; break;
case GL_BLEND_EQUATION_RGB: case GL_BLEND_EQUATION_RGB:
ASSERT(static_cast<size_t>(index) < mBlendStateArray.size()); ASSERT(static_cast<size_t>(index) < mBlendStateExt.mMaxDrawBuffers);
*data = mBlendStateArray[index].blendEquationRGB; *data = mBlendStateExt.getEquationColorIndexed(index);
break; break;
case GL_BLEND_EQUATION_ALPHA: case GL_BLEND_EQUATION_ALPHA:
ASSERT(static_cast<size_t>(index) < mBlendStateArray.size()); ASSERT(static_cast<size_t>(index) < mBlendStateExt.mMaxDrawBuffers);
*data = mBlendStateArray[index].blendEquationAlpha; *data = mBlendStateExt.getEquationAlphaIndexed(index);
break; break;
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());
...@@ -3053,12 +3017,16 @@ void State::getBooleani_v(GLenum target, GLuint index, GLboolean *data) const ...@@ -3053,12 +3017,16 @@ void State::getBooleani_v(GLenum target, GLuint index, GLboolean *data) const
switch (target) switch (target)
{ {
case GL_COLOR_WRITEMASK: case GL_COLOR_WRITEMASK:
ASSERT(static_cast<size_t>(index) < mBlendStateArray.size()); {
data[0] = mBlendStateArray[index].colorMaskRed; ASSERT(static_cast<size_t>(index) < mBlendStateExt.mMaxDrawBuffers);
data[1] = mBlendStateArray[index].colorMaskGreen; bool r, g, b, a;
data[2] = mBlendStateArray[index].colorMaskBlue; mBlendStateExt.getColorMaskIndexed(index, &r, &g, &b, &a);
data[3] = mBlendStateArray[index].colorMaskAlpha; data[0] = r;
data[1] = g;
data[2] = b;
data[3] = a;
break; break;
}
case GL_IMAGE_BINDING_LAYERED: case GL_IMAGE_BINDING_LAYERED:
ASSERT(static_cast<size_t>(index) < mImageUnits.size()); ASSERT(static_cast<size_t>(index) < mImageUnits.size());
*data = mImageUnits[index].layered; *data = mImageUnits[index].layered;
......
...@@ -134,8 +134,8 @@ class State : angle::NonCopyable ...@@ -134,8 +134,8 @@ class State : angle::NonCopyable
bool allActiveDrawBufferChannelsMasked() const; bool allActiveDrawBufferChannelsMasked() const;
bool anyActiveDrawBufferChannelMasked() const; bool anyActiveDrawBufferChannelMasked() const;
const RasterizerState &getRasterizerState() const; const RasterizerState &getRasterizerState() const;
const BlendState &getBlendState() const { return mBlendStateArray[0]; } const BlendState &getBlendState() const { return mBlendState; }
const BlendStateArray &getBlendStateArray() const { return mBlendStateArray; } const BlendStateExt &getBlendStateExt() const { return mBlendStateExt; }
const DepthStencilState &getDepthStencilState() const; const DepthStencilState &getDepthStencilState() const;
// Clear behavior setters & state parameter block generation function // Clear behavior setters & state parameter block generation function
...@@ -176,11 +176,11 @@ class State : angle::NonCopyable ...@@ -176,11 +176,11 @@ class State : angle::NonCopyable
float getFarPlane() const { return mFarZ; } float getFarPlane() const { return mFarZ; }
// Blend state manipulation // Blend state manipulation
bool isBlendEnabled() const { return mBlendStateArray[0].blend; } bool isBlendEnabled() const { return mBlendStateExt.mEnabledMask.test(0); }
bool isBlendEnabledIndexed(GLuint index) const bool isBlendEnabledIndexed(GLuint index) const
{ {
ASSERT(index < mBlendStateArray.size()); ASSERT(static_cast<size_t>(index) < mBlendStateExt.mMaxDrawBuffers);
return mBlendStateArray[index].blend; return mBlendStateExt.mEnabledMask.test(index);
} }
DrawBufferMask getBlendEnabledDrawBufferMask() const { return mBlendStateExt.mEnabledMask; } DrawBufferMask getBlendEnabledDrawBufferMask() const { return mBlendStateExt.mEnabledMask; }
void setBlend(bool enabled); void setBlend(bool enabled);
...@@ -858,8 +858,6 @@ class State : angle::NonCopyable ...@@ -858,8 +858,6 @@ class State : angle::NonCopyable
const std::vector<ImageUnit> getImageUnits() const { return mImageUnits; } const std::vector<ImageUnit> getImageUnits() const { return mImageUnits; }
const BlendStateExt &getBlendStateExt() const { return mBlendStateExt; }
private: private:
friend class Context; friend class Context;
...@@ -957,7 +955,7 @@ class State : angle::NonCopyable ...@@ -957,7 +955,7 @@ class State : angle::NonCopyable
bool mScissorTest; bool mScissorTest;
Rectangle mScissor; Rectangle mScissor;
BlendStateArray mBlendStateArray; BlendState mBlendState; // Buffer zero blend state legacy struct
BlendStateExt mBlendStateExt; BlendStateExt mBlendStateExt;
ColorF mBlendColor; ColorF mBlendColor;
bool mSampleAlphaToCoverage; bool mSampleAlphaToCoverage;
......
...@@ -189,8 +189,6 @@ struct BlendState final ...@@ -189,8 +189,6 @@ struct BlendState final
bool operator==(const BlendState &a, const BlendState &b); bool operator==(const BlendState &a, const BlendState &b);
bool operator!=(const BlendState &a, const BlendState &b); bool operator!=(const BlendState &a, const BlendState &b);
using BlendStateArray = std::array<BlendState, IMPLEMENTATION_MAX_DRAW_BUFFERS>;
struct DepthStencilState final struct DepthStencilState final
{ {
// This will zero-initialize the struct, including padding. // This will zero-initialize the struct, including padding.
......
...@@ -235,19 +235,16 @@ void SerializeRectangle(gl::BinaryOutputStream *bos, const gl::Rectangle &rectan ...@@ -235,19 +235,16 @@ void SerializeRectangle(gl::BinaryOutputStream *bos, const gl::Rectangle &rectan
bos->writeInt(rectangle.height); bos->writeInt(rectangle.height);
} }
void SerializeBlendState(gl::BinaryOutputStream *bos, const gl::BlendState &blendState) void SerializeBlendStateExt(gl::BinaryOutputStream *bos, const gl::BlendStateExt &blendStateExt)
{ {
bos->writeInt(blendState.blend); bos->writeInt(blendStateExt.mEnabledMask.bits());
bos->writeInt(blendState.sourceBlendRGB); bos->writeInt(blendStateExt.mDstColor);
bos->writeInt(blendState.destBlendRGB); bos->writeInt(blendStateExt.mDstAlpha);
bos->writeInt(blendState.sourceBlendAlpha); bos->writeInt(blendStateExt.mSrcColor);
bos->writeInt(blendState.destBlendAlpha); bos->writeInt(blendStateExt.mSrcAlpha);
bos->writeInt(blendState.blendEquationRGB); bos->writeInt(blendStateExt.mEquationColor);
bos->writeInt(blendState.blendEquationAlpha); bos->writeInt(blendStateExt.mEquationAlpha);
bos->writeInt(blendState.colorMaskRed); bos->writeInt(blendStateExt.mColorMask);
bos->writeInt(blendState.colorMaskGreen);
bos->writeInt(blendState.colorMaskBlue);
bos->writeInt(blendState.colorMaskAlpha);
} }
void SerializeDepthStencilState(gl::BinaryOutputStream *bos, void SerializeDepthStencilState(gl::BinaryOutputStream *bos,
...@@ -346,11 +343,7 @@ void SerializeGLContextStates(gl::BinaryOutputStream *bos, const gl::State &stat ...@@ -346,11 +343,7 @@ void SerializeGLContextStates(gl::BinaryOutputStream *bos, const gl::State &stat
SerializeRasterizerState(bos, state.getRasterizerState()); SerializeRasterizerState(bos, state.getRasterizerState());
bos->writeInt(state.isScissorTestEnabled()); bos->writeInt(state.isScissorTestEnabled());
SerializeRectangle(bos, state.getScissor()); SerializeRectangle(bos, state.getScissor());
const gl::BlendStateArray &blendStateArray = state.getBlendStateArray(); SerializeBlendStateExt(bos, state.getBlendStateExt());
for (size_t i = 0; i < blendStateArray.size(); i++)
{
SerializeBlendState(bos, blendStateArray[i]);
}
SerializeColor(bos, state.getBlendColor()); SerializeColor(bos, state.getBlendColor());
bos->writeInt(state.isSampleAlphaToCoverageEnabled()); bos->writeInt(state.isSampleAlphaToCoverageEnabled());
bos->writeInt(state.isSampleCoverageEnabled()); bos->writeInt(state.isSampleCoverageEnabled());
......
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