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

Unified Diff: src/gpu/GrGeometryProcessor.h

Issue 820783005: More changes to bring together path / geo procs (Closed) Base URL: https://skia.googlesource.com/skia.git@lc1
Patch Set: dm fix Created 5 years, 11 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
« no previous file with comments | « src/gpu/GrDefaultGeoProcFactory.cpp ('k') | src/gpu/GrGeometryProcessor.cpp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/gpu/GrGeometryProcessor.h
diff --git a/src/gpu/GrGeometryProcessor.h b/src/gpu/GrGeometryProcessor.h
index 074fffcfb08410e64ebe572a6506665ade05d611..43b6a7e31a4c4302f18eb21115056d3d1668189e 100644
--- a/src/gpu/GrGeometryProcessor.h
+++ b/src/gpu/GrGeometryProcessor.h
@@ -121,6 +121,41 @@ public:
virtual void getInvariantOutputColor(GrInitInvariantOutput* out) const = 0;
virtual void getInvariantOutputCoverage(GrInitInvariantOutput* out) const = 0;
+ // Only the GrGeometryProcessor subclass actually has a geo shader or vertex attributes, but
+ // we put these calls on the base class to prevent having to cast
+ virtual bool willUseGeoShader() const = 0;
+
+ /*
+ * This is a safeguard to prevent GrPrimitiveProcessor's from going beyond platform specific
+ * attribute limits. This number can almost certainly be raised if required.
+ */
+ static const int kMaxVertexAttribs = 6;
+
+ struct Attribute {
+ Attribute()
+ : fName(NULL)
+ , fType(kFloat_GrVertexAttribType)
+ , fOffset(0) {}
+ Attribute(const char* name, GrVertexAttribType type)
+ : fName(name)
+ , fType(type)
+ , fOffset(SkAlign4(GrVertexAttribTypeSize(type))) {}
+ const char* fName;
+ GrVertexAttribType fType;
+ size_t fOffset;
+ };
+
+ int numAttribs() const { return fNumAttribs; }
+ const Attribute& getAttrib(int index) const {
+ SkASSERT(index < fNumAttribs);
+ return fAttribs[index];
+ }
+
+ // Returns the vertex stride of the GP. A common use case is to request geometry from a
+ // drawtarget based off of the stride, and to populate this memory using an implicit array of
+ // structs. In this case, it is best to assert the vertexstride == sizeof(VertexStruct).
+ size_t getVertexStride() const { return fVertexStride; }
+
/**
* Gets a transformKey from an array of coord transforms
*/
@@ -143,7 +178,9 @@ public:
protected:
GrPrimitiveProcessor(const SkMatrix& viewMatrix, const SkMatrix& localMatrix)
- : fViewMatrix(viewMatrix)
+ : fNumAttribs(0)
+ , fVertexStride(0)
+ , fViewMatrix(viewMatrix)
, fLocalMatrix(localMatrix) {}
/*
@@ -176,6 +213,10 @@ protected:
return true;
}
+ Attribute fAttribs[kMaxVertexAttribs];
+ int fNumAttribs;
+ size_t fVertexStride;
+
private:
virtual bool hasExplicitLocalCoords() const = 0;
@@ -201,38 +242,12 @@ public:
const SkMatrix& localMatrix = SkMatrix::I(),
bool opaqueVertexColors = false)
: INHERITED(viewMatrix, localMatrix)
- , fVertexStride(0)
, fColor(color)
, fOpaqueVertexColors(opaqueVertexColors)
, fWillUseGeoShader(false)
, fHasVertexColor(false)
, fHasLocalCoords(false) {}
- /*
- * This is a safeguard to prevent GPs from going beyond platform specific attribute limits.
- * This number can almost certainly be raised if required.
- */
- static const int kMaxVertexAttribs = 6;
-
- struct GrAttribute {
- GrAttribute(const char* name, GrVertexAttribType type)
- : fName(name)
- , fType(type)
- , fOffset(SkAlign4(GrVertexAttribTypeSize(type))) {}
- const char* fName;
- GrVertexAttribType fType;
- size_t fOffset;
- };
-
- typedef SkTArray<GrAttribute, true> VertexAttribArray;
-
- const VertexAttribArray& getAttribs() const { return fAttribs; }
-
- // Returns the vertex stride of the GP. A common use case is to request geometry from a
- // drawtarget based off of the stride, and to populate this memory using an implicit array of
- // structs. In this case, it is best to assert the vertexstride == sizeof(VertexStruct).
- size_t getVertexStride() const { return fVertexStride; }
-
bool willUseGeoShader() const { return fWillUseGeoShader; }
/*
@@ -318,9 +333,11 @@ protected:
* The processor key should reflect the vertex attributes, or there lack thereof in the
* GrGeometryProcessor.
*/
- const GrAttribute& addVertexAttrib(const GrAttribute& attribute) {
+ const Attribute& addVertexAttrib(const Attribute& attribute) {
+ SkASSERT(fNumAttribs < kMaxVertexAttribs);
fVertexStride += attribute.fOffset;
- return fAttribs.push_back(attribute);
+ fAttribs[fNumAttribs] = attribute;
+ return fAttribs[fNumAttribs++];
}
void setWillUseGeoShader() { fWillUseGeoShader = true; }
@@ -342,8 +359,6 @@ private:
bool hasExplicitLocalCoords() const SK_OVERRIDE { return fHasLocalCoords; }
- SkSTArray<kMaxVertexAttribs, GrAttribute, true> fAttribs;
- size_t fVertexStride;
GrColor fColor;
bool fOpaqueVertexColors;
bool fWillUseGeoShader;
@@ -378,6 +393,8 @@ public:
void getInvariantOutputColor(GrInitInvariantOutput* out) const SK_OVERRIDE;
void getInvariantOutputCoverage(GrInitInvariantOutput* out) const SK_OVERRIDE;
+ bool willUseGeoShader() const SK_OVERRIDE { return false; }
+
virtual void getGLProcessorKey(const GrBatchTracker& bt,
const GrGLCaps& caps,
GrProcessorKeyBuilder* b) const SK_OVERRIDE;
« no previous file with comments | « src/gpu/GrDefaultGeoProcFactory.cpp ('k') | src/gpu/GrGeometryProcessor.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698