Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(240)

Unified Diff: include/gpu/GrEffectStage.h

Issue 12462008: Add GrEllipseEdgeEffect (Closed) Base URL: http://skia.googlecode.com/svn/trunk/
Patch Set: Add dynamic vertex attributes for Effects Created 7 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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;)
};

Powered by Google App Engine
This is Rietveld 408576698