| Index: src/gpu/GrPrimitiveProcessor.h
|
| diff --git a/src/gpu/GrGeometryProcessor.h b/src/gpu/GrPrimitiveProcessor.h
|
| similarity index 51%
|
| copy from src/gpu/GrGeometryProcessor.h
|
| copy to src/gpu/GrPrimitiveProcessor.h
|
| index a7fea765ab6cdc9d104f2f3fa093651f98a00e03..a088d38b611dbd248ac8918dc202cf6cbd156d74 100644
|
| --- a/src/gpu/GrGeometryProcessor.h
|
| +++ b/src/gpu/GrPrimitiveProcessor.h
|
| @@ -5,8 +5,8 @@
|
| * found in the LICENSE file.
|
| */
|
|
|
| -#ifndef GrGeometryProcessor_DEFINED
|
| -#define GrGeometryProcessor_DEFINED
|
| +#ifndef GrPrimitiveProcessor_DEFINED
|
| +#define GrPrimitiveProcessor_DEFINED
|
|
|
| #include "GrColor.h"
|
| #include "GrProcessor.h"
|
| @@ -227,192 +227,4 @@ private:
|
| typedef GrProcessor INHERITED;
|
| };
|
|
|
| -/**
|
| - * A GrGeometryProcessor is a flexible method for rendering a primitive. The GrGeometryProcessor
|
| - * has complete control over vertex attributes and uniforms(aside from the render target) but it
|
| - * must obey the same contract as any GrPrimitiveProcessor, specifically it must emit a color and
|
| - * coverage into the fragment shader. Where this color and coverage come from is completely the
|
| - * responsibility of the GrGeometryProcessor.
|
| - */
|
| -class GrGeometryProcessor : public GrPrimitiveProcessor {
|
| -public:
|
| - // TODO the Hint can be handled in a much more clean way when we have deferred geometry or
|
| - // atleast bundles
|
| - GrGeometryProcessor(GrColor color,
|
| - const SkMatrix& viewMatrix = SkMatrix::I(),
|
| - const SkMatrix& localMatrix = SkMatrix::I(),
|
| - bool opaqueVertexColors = false)
|
| - : INHERITED(viewMatrix, localMatrix, false)
|
| - , fColor(color)
|
| - , fOpaqueVertexColors(opaqueVertexColors)
|
| - , fWillUseGeoShader(false)
|
| - , fHasVertexColor(false)
|
| - , fHasLocalCoords(false) {}
|
| -
|
| - bool willUseGeoShader() const { return fWillUseGeoShader; }
|
| -
|
| - /*
|
| - * In an ideal world, two GrGeometryProcessors with the same class id and texture accesses
|
| - * would ALWAYS be able to batch together. If two GrGeometryProcesosrs are the same then we
|
| - * will only keep one of them. The remaining GrGeometryProcessor then updates its
|
| - * GrBatchTracker to incorporate the draw information from the GrGeometryProcessor we discard.
|
| - * Any bundles associated with the discarded GrGeometryProcessor will be attached to the
|
| - * remaining GrGeometryProcessor.
|
| - */
|
| - bool canMakeEqual(const GrBatchTracker& mine,
|
| - const GrPrimitiveProcessor& that,
|
| - const GrBatchTracker& theirs) const SK_OVERRIDE {
|
| - if (this->classID() != that.classID() || !this->hasSameTextureAccesses(that)) {
|
| - return false;
|
| - }
|
| -
|
| - // TODO let the GPs decide this
|
| - if (!this->viewMatrix().cheapEqualTo(that.viewMatrix())) {
|
| - return false;
|
| - }
|
| -
|
| - // TODO remove the hint
|
| - const GrGeometryProcessor& other = that.cast<GrGeometryProcessor>();
|
| - if (fHasVertexColor && fOpaqueVertexColors != other.fOpaqueVertexColors) {
|
| - return false;
|
| - }
|
| -
|
| - // TODO this equality test should really be broken up, some of this can live on the batch
|
| - // tracker test and some of this should be in bundles
|
| - if (!this->onIsEqual(other)) {
|
| - return false;
|
| - }
|
| -
|
| - return this->onCanMakeEqual(mine, other, theirs);
|
| - }
|
| -
|
| - // TODO we can remove color from the GrGeometryProcessor base class once we have bundles of
|
| - // primitive data
|
| - GrColor color() const { return fColor; }
|
| -
|
| - // TODO this is a total hack until the gp can do deferred geometry
|
| - bool hasVertexColor() const { return fHasVertexColor; }
|
| -
|
| - void getInvariantOutputColor(GrInitInvariantOutput* out) const SK_OVERRIDE;
|
| - void getInvariantOutputCoverage(GrInitInvariantOutput* out) const SK_OVERRIDE;
|
| -
|
| -protected:
|
| - /*
|
| - * An optional simple helper function to determine by what means the GrGeometryProcessor should
|
| - * use to provide color. If we are given an override color(ie the given overridecolor is NOT
|
| - * GrColor_ILLEGAL) then we must always emit that color(currently overrides are only supported
|
| - * via uniform, but with deferred Geometry we could use attributes). Otherwise, if our color is
|
| - * ignored then we should not emit a color. Lastly, if we don't have vertex colors then we must
|
| - * emit a color via uniform
|
| - * TODO this function changes quite a bit with deferred geometry. There the GrGeometryProcessor
|
| - * can upload a new color via attribute if needed.
|
| - */
|
| - static GrGPInput GetColorInputType(GrColor* color, GrColor primitiveColor,
|
| - const GrPipelineInfo& init,
|
| - bool hasVertexColor) {
|
| - if (init.fColorIgnored) {
|
| - *color = GrColor_ILLEGAL;
|
| - return kIgnored_GrGPInput;
|
| - } else if (GrColor_ILLEGAL != init.fOverrideColor) {
|
| - *color = init.fOverrideColor;
|
| - return kUniform_GrGPInput;
|
| - }
|
| -
|
| - *color = primitiveColor;
|
| - if (hasVertexColor) {
|
| - return kAttribute_GrGPInput;
|
| - } else {
|
| - return kUniform_GrGPInput;
|
| - }
|
| - }
|
| -
|
| - /**
|
| - * Subclasses call this from their constructor to register vertex attributes. Attributes
|
| - * will be padded to the nearest 4 bytes for performance reasons.
|
| - * TODO After deferred geometry, we should do all of this inline in GenerateGeometry alongside
|
| - * the struct used to actually populate the attributes. This is all extremely fragile, vertex
|
| - * attributes have to be added in the order they will appear in the struct which maps memory.
|
| - * The processor key should reflect the vertex attributes, or there lack thereof in the
|
| - * GrGeometryProcessor.
|
| - */
|
| - const Attribute& addVertexAttrib(const Attribute& attribute) {
|
| - SkASSERT(fNumAttribs < kMaxVertexAttribs);
|
| - fVertexStride += attribute.fOffset;
|
| - fAttribs[fNumAttribs] = attribute;
|
| - return fAttribs[fNumAttribs++];
|
| - }
|
| -
|
| - void setWillUseGeoShader() { fWillUseGeoShader = true; }
|
| -
|
| - // TODO hack see above
|
| - void setHasVertexColor() { fHasVertexColor = true; }
|
| - void setHasLocalCoords() { fHasLocalCoords = true; }
|
| -
|
| - virtual void onGetInvariantOutputColor(GrInitInvariantOutput*) const {}
|
| - virtual void onGetInvariantOutputCoverage(GrInitInvariantOutput*) const = 0;
|
| -
|
| -private:
|
| - virtual bool onCanMakeEqual(const GrBatchTracker& mine,
|
| - const GrGeometryProcessor& that,
|
| - const GrBatchTracker& theirs) const = 0;
|
| -
|
| - // TODO delete this when we have more advanced equality testing via bundles and the BT
|
| - virtual bool onIsEqual(const GrGeometryProcessor&) const = 0;
|
| -
|
| - bool hasExplicitLocalCoords() const SK_OVERRIDE { return fHasLocalCoords; }
|
| -
|
| - GrColor fColor;
|
| - bool fOpaqueVertexColors;
|
| - bool fWillUseGeoShader;
|
| - bool fHasVertexColor;
|
| - bool fHasLocalCoords;
|
| -
|
| - typedef GrPrimitiveProcessor INHERITED;
|
| -};
|
| -
|
| -/*
|
| - * The path equivalent of the GP. For now this just manages color. In the long term we plan on
|
| - * extending this class to handle all nvpr uniform / varying / program work.
|
| - */
|
| -class GrPathProcessor : public GrPrimitiveProcessor {
|
| -public:
|
| - static GrPathProcessor* Create(GrColor color,
|
| - const SkMatrix& viewMatrix = SkMatrix::I(),
|
| - const SkMatrix& localMatrix = SkMatrix::I()) {
|
| - return SkNEW_ARGS(GrPathProcessor, (color, viewMatrix, localMatrix));
|
| - }
|
| -
|
| - void initBatchTracker(GrBatchTracker*, const GrPipelineInfo&) const SK_OVERRIDE;
|
| -
|
| - bool canMakeEqual(const GrBatchTracker& mine,
|
| - const GrPrimitiveProcessor& that,
|
| - const GrBatchTracker& theirs) const SK_OVERRIDE;
|
| -
|
| - const char* name() const SK_OVERRIDE { return "PathProcessor"; }
|
| -
|
| - GrColor color() const { return fColor; }
|
| -
|
| - 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;
|
| -
|
| - virtual GrGLPrimitiveProcessor* createGLInstance(const GrBatchTracker& bt,
|
| - const GrGLCaps& caps) const SK_OVERRIDE;
|
| -
|
| -protected:
|
| - GrPathProcessor(GrColor color, const SkMatrix& viewMatrix, const SkMatrix& localMatrix);
|
| -
|
| -private:
|
| - bool hasExplicitLocalCoords() const SK_OVERRIDE { return false; }
|
| -
|
| - GrColor fColor;
|
| -
|
| - typedef GrPrimitiveProcessor INHERITED;
|
| -};
|
| -
|
| #endif
|
|
|