| Index: src/gpu/gl/GrGLProgram.cpp
|
| diff --git a/src/gpu/gl/GrGLProgram.cpp b/src/gpu/gl/GrGLProgram.cpp
|
| index 96c5367c6a19c39008e24a1230d2559096297a8b..916c31ccbe7e4092146f1f6a362df59e526c1358 100644
|
| --- a/src/gpu/gl/GrGLProgram.cpp
|
| +++ b/src/gpu/gl/GrGLProgram.cpp
|
| @@ -4,6 +4,7 @@
|
| * Use of this source code is governed by a BSD-style license that can be
|
| * found in the LICENSE file.
|
| */
|
| +
|
| #include "GrGLProgram.h"
|
|
|
| #include "GrAllocator.h"
|
| @@ -15,7 +16,6 @@
|
| #include "GrGLPathRendering.h"
|
| #include "GrGLShaderVar.h"
|
| #include "GrGLSL.h"
|
| -#include "GrOptDrawState.h"
|
| #include "SkXfermode.h"
|
|
|
| #define GL_CALL(X) GR_GL_CALL(fGpu->glInterface(), X)
|
| @@ -109,19 +109,31 @@
|
|
|
| ///////////////////////////////////////////////////////////////////////////////
|
|
|
| -void GrGLProgram::setData(const GrOptDrawState& optState,
|
| - GrGpu::DrawType drawType,
|
| +void GrGLProgram::setData(GrGpu::DrawType drawType,
|
| + GrDrawState::BlendOptFlags blendOpts,
|
| const GrEffectStage* geometryProcessor,
|
| const GrEffectStage* colorStages[],
|
| const GrEffectStage* coverageStages[],
|
| const GrDeviceCoordTexture* dstCopy,
|
| SharedGLState* sharedState) {
|
| - GrColor color = optState.getColor();
|
| - GrColor coverage = optState.getCoverageColor();
|
| -
|
| - this->setColor(optState, color, sharedState);
|
| - this->setCoverage(optState, coverage, sharedState);
|
| - this->setMatrixAndRenderTargetHeight(drawType, optState);
|
| + const GrDrawState& drawState = fGpu->getDrawState();
|
| +
|
| + GrColor color;
|
| + GrColor coverage;
|
| + if (blendOpts & GrDrawState::kEmitTransBlack_BlendOptFlag) {
|
| + color = 0;
|
| + coverage = 0;
|
| + } else if (blendOpts & GrDrawState::kEmitCoverage_BlendOptFlag) {
|
| + color = 0xffffffff;
|
| + coverage = drawState.getCoverageColor();
|
| + } else {
|
| + color = drawState.getColor();
|
| + coverage = drawState.getCoverageColor();
|
| + }
|
| +
|
| + this->setColor(drawState, color, sharedState);
|
| + this->setCoverage(drawState, coverage, sharedState);
|
| + this->setMatrixAndRenderTargetHeight(drawType, drawState);
|
|
|
| if (dstCopy) {
|
| if (fBuiltinUniformHandles.fDstCopyTopLeftUni.isValid()) {
|
| @@ -159,11 +171,11 @@
|
| }
|
| }
|
|
|
| -void GrGLProgram::setColor(const GrOptDrawState& optState,
|
| +void GrGLProgram::setColor(const GrDrawState& drawState,
|
| GrColor color,
|
| SharedGLState* sharedState) {
|
| const GrGLProgramDesc::KeyHeader& header = fDesc.getHeader();
|
| - if (!optState.hasColorVertexAttribute()) {
|
| + if (!drawState.hasColorVertexAttribute() || drawState.canIgnoreColorAttribute()) {
|
| switch (header.fColorInput) {
|
| case GrGLProgramDesc::kAttribute_ColorInput:
|
| SkASSERT(-1 != header.fColorAttributeIndex);
|
| @@ -198,11 +210,11 @@
|
| }
|
| }
|
|
|
| -void GrGLProgram::setCoverage(const GrOptDrawState& optState,
|
| +void GrGLProgram::setCoverage(const GrDrawState& drawState,
|
| GrColor coverage,
|
| SharedGLState* sharedState) {
|
| const GrGLProgramDesc::KeyHeader& header = fDesc.getHeader();
|
| - if (!optState.hasCoverageVertexAttribute()) {
|
| + if (!drawState.hasCoverageVertexAttribute()) {
|
| switch (header.fCoverageInput) {
|
| case GrGLProgramDesc::kAttribute_ColorInput:
|
| if (sharedState->fConstAttribCoverage != coverage ||
|
| @@ -237,8 +249,8 @@
|
| }
|
|
|
| void GrGLProgram::setMatrixAndRenderTargetHeight(GrGpu::DrawType drawType,
|
| - const GrOptDrawState& optState) {
|
| - const GrRenderTarget* rt = optState.getRenderTarget();
|
| + const GrDrawState& drawState) {
|
| + const GrRenderTarget* rt = drawState.getRenderTarget();
|
| SkISize size;
|
| size.set(rt->width(), rt->height());
|
|
|
| @@ -250,13 +262,13 @@
|
| }
|
|
|
| if (GrGpu::IsPathRenderingDrawType(drawType)) {
|
| - fGpu->glPathRendering()->setProjectionMatrix(optState.getViewMatrix(), size, rt->origin());
|
| + fGpu->glPathRendering()->setProjectionMatrix(drawState.getViewMatrix(), size, rt->origin());
|
| } else if (fMatrixState.fRenderTargetOrigin != rt->origin() ||
|
| fMatrixState.fRenderTargetSize != size ||
|
| - !fMatrixState.fViewMatrix.cheapEqualTo(optState.getViewMatrix())) {
|
| + !fMatrixState.fViewMatrix.cheapEqualTo(drawState.getViewMatrix())) {
|
| SkASSERT(fBuiltinUniformHandles.fViewMatrixUni.isValid());
|
|
|
| - fMatrixState.fViewMatrix = optState.getViewMatrix();
|
| + fMatrixState.fViewMatrix = drawState.getViewMatrix();
|
| fMatrixState.fRenderTargetSize = size;
|
| fMatrixState.fRenderTargetOrigin = rt->origin();
|
|
|
|
|