| Index: src/gpu/gl/GrGLGpu.cpp
|
| diff --git a/src/gpu/gl/GrGLGpu.cpp b/src/gpu/gl/GrGLGpu.cpp
|
| index 8c5951dbdcdd6fcd6626b7966047fd40fc093cae..40d0e488d5cb1528217a30646ae50889fc35eae5 100644
|
| --- a/src/gpu/gl/GrGLGpu.cpp
|
| +++ b/src/gpu/gl/GrGLGpu.cpp
|
| @@ -2869,38 +2869,40 @@
|
|
|
|
|
| GrGLenum gr_to_gl_stencil_op(GrStencilOp op) {
|
| - static const GrGLenum gTable[kGrStencilOpCount] = {
|
| - GR_GL_KEEP, // kKeep
|
| - GR_GL_ZERO, // kZero
|
| - GR_GL_REPLACE, // kReplace
|
| - GR_GL_INVERT, // kInvert
|
| - GR_GL_INCR_WRAP, // kIncWrap
|
| - GR_GL_DECR_WRAP, // kDecWrap
|
| - GR_GL_INCR, // kIncClamp
|
| - GR_GL_DECR, // kDecClamp
|
| + static const GrGLenum gTable[] = {
|
| + GR_GL_KEEP, // kKeep_StencilOp
|
| + GR_GL_REPLACE, // kReplace_StencilOp
|
| + GR_GL_INCR_WRAP, // kIncWrap_StencilOp
|
| + GR_GL_INCR, // kIncClamp_StencilOp
|
| + GR_GL_DECR_WRAP, // kDecWrap_StencilOp
|
| + GR_GL_DECR, // kDecClamp_StencilOp
|
| + GR_GL_ZERO, // kZero_StencilOp
|
| + GR_GL_INVERT, // kInvert_StencilOp
|
| };
|
| - GR_STATIC_ASSERT(0 == (int)GrStencilOp::kKeep);
|
| - GR_STATIC_ASSERT(1 == (int)GrStencilOp::kZero);
|
| - GR_STATIC_ASSERT(2 == (int)GrStencilOp::kReplace);
|
| - GR_STATIC_ASSERT(3 == (int)GrStencilOp::kInvert);
|
| - GR_STATIC_ASSERT(4 == (int)GrStencilOp::kIncWrap);
|
| - GR_STATIC_ASSERT(5 == (int)GrStencilOp::kDecWrap);
|
| - GR_STATIC_ASSERT(6 == (int)GrStencilOp::kIncClamp);
|
| - GR_STATIC_ASSERT(7 == (int)GrStencilOp::kDecClamp);
|
| - SkASSERT(op < (GrStencilOp)kGrStencilOpCount);
|
| - return gTable[(int)op];
|
| + GR_STATIC_ASSERT(SK_ARRAY_COUNT(gTable) == kStencilOpCnt);
|
| + GR_STATIC_ASSERT(0 == kKeep_StencilOp);
|
| + GR_STATIC_ASSERT(1 == kReplace_StencilOp);
|
| + GR_STATIC_ASSERT(2 == kIncWrap_StencilOp);
|
| + GR_STATIC_ASSERT(3 == kIncClamp_StencilOp);
|
| + GR_STATIC_ASSERT(4 == kDecWrap_StencilOp);
|
| + GR_STATIC_ASSERT(5 == kDecClamp_StencilOp);
|
| + GR_STATIC_ASSERT(6 == kZero_StencilOp);
|
| + GR_STATIC_ASSERT(7 == kInvert_StencilOp);
|
| + SkASSERT((unsigned) op < kStencilOpCnt);
|
| + return gTable[op];
|
| }
|
|
|
| void set_gl_stencil(const GrGLInterface* gl,
|
| - const GrStencilSettings::Face& face,
|
| - GrGLenum glFace) {
|
| - GrGLenum glFunc = GrToGLStencilFunc(face.fTest);
|
| - GrGLenum glFailOp = gr_to_gl_stencil_op(face.fFailOp);
|
| - GrGLenum glPassOp = gr_to_gl_stencil_op(face.fPassOp);
|
| -
|
| - GrGLint ref = face.fRef;
|
| - GrGLint mask = face.fTestMask;
|
| - GrGLint writeMask = face.fWriteMask;
|
| + const GrStencilSettings& settings,
|
| + GrGLenum glFace,
|
| + GrStencilSettings::Face grFace) {
|
| + GrGLenum glFunc = GrToGLStencilFunc(settings.func(grFace));
|
| + GrGLenum glFailOp = gr_to_gl_stencil_op(settings.failOp(grFace));
|
| + GrGLenum glPassOp = gr_to_gl_stencil_op(settings.passOp(grFace));
|
| +
|
| + GrGLint ref = settings.funcRef(grFace);
|
| + GrGLint mask = settings.funcMask(grFace);
|
| + GrGLint writeMask = settings.writeMask(grFace);
|
|
|
| if (GR_GL_FRONT_AND_BACK == glFace) {
|
| // we call the combined func just in case separate stencil is not
|
| @@ -2930,18 +2932,20 @@
|
| }
|
| }
|
| if (!stencilSettings.isDisabled()) {
|
| - if (stencilSettings.isTwoSided()) {
|
| - SkASSERT(this->caps()->twoSidedStencilSupport());
|
| + if (this->caps()->twoSidedStencilSupport()) {
|
| set_gl_stencil(this->glInterface(),
|
| - stencilSettings.front(),
|
| - GR_GL_FRONT);
|
| + stencilSettings,
|
| + GR_GL_FRONT,
|
| + GrStencilSettings::kFront_Face);
|
| set_gl_stencil(this->glInterface(),
|
| - stencilSettings.back(),
|
| - GR_GL_BACK);
|
| + stencilSettings,
|
| + GR_GL_BACK,
|
| + GrStencilSettings::kBack_Face);
|
| } else {
|
| set_gl_stencil(this->glInterface(),
|
| - stencilSettings.front(),
|
| - GR_GL_FRONT_AND_BACK);
|
| + stencilSettings,
|
| + GR_GL_FRONT_AND_BACK,
|
| + GrStencilSettings::kFront_Face);
|
| }
|
| }
|
| fHWStencilSettings = stencilSettings;
|
|
|