Index: src/gpu/gl/GrGLProgram.h |
diff --git a/src/gpu/gl/GrGLProgram.h b/src/gpu/gl/GrGLProgram.h |
index ca75e206f121bcd9c3badb90489de0cc431ca516..e8aef35f1decd9e26885dde35d303ada4d564b30 100644 |
--- a/src/gpu/gl/GrGLProgram.h |
+++ b/src/gpu/gl/GrGLProgram.h |
@@ -58,6 +58,27 @@ |
* The base class always has a vertex shader, only the NVPR variants may omit a vertex shader |
*/ |
virtual bool hasVertexShader() const { return true; } |
+ |
+ /** |
+ * Some GL state that is relevant to programs is not stored per-program. In particular color |
+ * and coverage attributes can be global state. This struct is read and updated by |
+ * GrGLProgram::setColor and GrGLProgram::setCoverage to allow us to avoid setting this state |
+ * redundantly. |
+ */ |
+ struct SharedGLState { |
+ GrColor fConstAttribColor; |
+ int fConstAttribColorIndex; |
+ GrColor fConstAttribCoverage; |
+ int fConstAttribCoverageIndex; |
+ |
+ SharedGLState() { this->invalidate(); } |
+ void invalidate() { |
+ fConstAttribColor = GrColor_ILLEGAL; |
+ fConstAttribColorIndex = -1; |
+ fConstAttribCoverage = GrColor_ILLEGAL; |
+ fConstAttribCoverageIndex = -1; |
+ } |
+ }; |
/** |
* The GrDrawState's view matrix along with the aspects of the render target determine the |
@@ -131,7 +152,8 @@ |
*/ |
void setData(const GrOptDrawState&, |
GrGpu::DrawType, |
- const GrDeviceCoordTexture* dstCopy /* can be NULL*/); |
+ const GrDeviceCoordTexture* dstCopy, // can be NULL |
+ SharedGLState*); |
protected: |
typedef GrGLProgramDataManager::UniformHandle UniformHandle; |
@@ -151,11 +173,11 @@ |
// Helper for setData(). Makes GL calls to specify the initial color when there is not |
// per-vertex colors. |
- void setColor(const GrOptDrawState&, GrColor color); |
+ void setColor(const GrOptDrawState&, GrColor color, SharedGLState*); |
// Helper for setData(). Makes GL calls to specify the initial coverage when there is not |
// per-vertex coverages. |
- void setCoverage(const GrOptDrawState&, GrColor coverage); |
+ void setCoverage(const GrOptDrawState&, GrColor coverage, SharedGLState*); |
// A templated helper to loop over effects, set the transforms(via subclass) and bind textures |
void setFragmentData(const GrOptDrawState&); |