Chromium Code Reviews| Index: include/gpu/GrEffectStage.h |
| =================================================================== |
| --- include/gpu/GrEffectStage.h (revision 8019) |
| +++ include/gpu/GrEffectStage.h (working copy) |
| @@ -116,6 +116,7 @@ |
| stage.fEffectRef->get()->incDeferredRefCounts(); |
| fEffect = stage.fEffectRef->get(); |
| fCoordChangeMatrix = stage.fCoordChangeMatrix; |
| + fVertexAttribIndices = stage.fVertexAttribIndices; |
| } |
| SkDEBUGCODE(fInitialized = true;) |
| } |
| @@ -126,6 +127,7 @@ |
| if (NULL != fEffect) { |
| stage->fEffectRef = GrEffect::CreateEffectRef(fEffect); |
| stage->fCoordChangeMatrix = fCoordChangeMatrix; |
| + stage->fVertexAttribIndices = fVertexAttribIndices; |
| } else { |
| stage->fEffectRef = NULL; |
| } |
| @@ -139,6 +141,16 @@ |
| return false; |
| } |
| + int vertexAttribCount = fVertexAttribIndices.count(); |
|
bsalomon
2013/03/08 14:31:58
maybe we should add op== to SkTArray?
jvanverth1
2013/03/08 17:39:55
Done.
|
| + if (vertexAttribCount != stage.fVertexAttribIndices.count()) { |
| + return false; |
| + } |
| + for (int i = 0; i < vertexAttribCount; ++i) { |
| + if (fVertexAttribIndices[i] != stage.fVertexAttribIndices[i]) { |
| + return false; |
| + } |
| + } |
| + |
| if (!(*stage.getEffect())->isEqual(*fEffect)) { |
| return false; |
| } |
| @@ -149,6 +161,7 @@ |
| private: |
| const GrEffect* fEffect; |
| SkMatrix fCoordChangeMatrix; |
| + SkSTArray<2, int, true> fVertexAttribIndices; |
| SkDEBUGCODE(bool fInitialized;) |
| }; |
| @@ -162,18 +175,28 @@ |
| GrSafeSetNull(fEffectRef); |
| } |
| - const GrEffectRef* setEffect(const GrEffectRef* EffectRef) { |
| + const GrEffectRef* setEffect(const GrEffectRef* EffectRef, const int* indices = NULL) { |
|
bsalomon
2013/03/08 14:31:58
attributeIndices or attrIndices?
jvanverth1
2013/03/08 17:39:55
Done.
|
| GrAssert(0 == fSavedCoordChangeCnt); |
| GrSafeAssign(fEffectRef, EffectRef); |
| fCoordChangeMatrix.reset(); |
| + |
| + fVertexAttribIndices.reset(); |
| + int numVertexAttribs = (EffectRef == NULL) ? 0 : EffectRef->get()->numVertexAttribs(); |
| + GrAssert(numVertexAttribs == 0 || indices != NULL); |
| + fVertexAttribIndices.push_back_n(numVertexAttribs, indices); |
| + |
| return EffectRef; |
| } |
| const GrEffectRef* getEffect() const { return fEffectRef; } |
| + const int* getVertexAttribIndices() const { return fVertexAttribIndices.begin(); } |
| + int getVertexAttribIndexCount() const { return fVertexAttribIndices.count(); } |
| + |
| private: |
| - SkMatrix fCoordChangeMatrix; |
| - const GrEffectRef* fEffectRef; |
| + SkMatrix fCoordChangeMatrix; |
| + const GrEffectRef* fEffectRef; |
| + SkSTArray<2, int, true> fVertexAttribIndices; |
| GR_DEBUGCODE(mutable int fSavedCoordChangeCnt;) |
| }; |