| Index: src/gpu/GrGeometryProcessor.h
|
| diff --git a/src/gpu/GrGeometryProcessor.h b/src/gpu/GrGeometryProcessor.h
|
| index 9e621d82a04a66e603976c7305745bd2da34c742..57ac2deaaef8a8190c2d430f30dbdfd653fe0a14 100644
|
| --- a/src/gpu/GrGeometryProcessor.h
|
| +++ b/src/gpu/GrGeometryProcessor.h
|
| @@ -20,18 +20,18 @@ class GrBatchTracker {
|
| public:
|
| template <typename T> const T& cast() const {
|
| SkASSERT(sizeof(T) <= kMaxSize);
|
| - return *reinterpret_cast<const T*>(fData);
|
| + return *reinterpret_cast<const T*>(fData.get());
|
| }
|
|
|
| template <typename T> T* cast() {
|
| SkASSERT(sizeof(T) <= kMaxSize);
|
| - return reinterpret_cast<T*>(fData);
|
| + return reinterpret_cast<T*>(fData.get());
|
| }
|
|
|
| static const size_t kMaxSize = 32;
|
|
|
| private:
|
| - uint8_t fData[kMaxSize];
|
| + mutable SkAlignedSStorage<kMaxSize> fData;
|
| };
|
|
|
| class GrGLCaps;
|
| @@ -51,7 +51,7 @@ class GrOptDrawState;
|
| class GrGeometryProcessor : public GrProcessor {
|
| public:
|
| GrGeometryProcessor()
|
| - : fVertexStride(0)
|
| + : /*TODO HACK*/fNewStyle(false), fVertexStride(0)
|
| , fWillUseGeoShader(false)
|
| , fHasVertexColor(false)
|
| , fHasVertexCoverage(false)
|
| @@ -110,22 +110,55 @@ public:
|
| return this->onIsEqual(that);
|
| }
|
|
|
| + /*
|
| + * This struct allows the optstate to communicate requirements to the GP.
|
| + * TODO when the GP can encapsulate draw information in bundles, we can refactor this struct.
|
| + * Ultimately, when setColor and setCoverage live on the GP, this struct can be replaced with
|
| + * a simple override color passed into initBatchTracker
|
| + */
|
| struct InitBT {
|
| bool fOutputColor;
|
| bool fOutputCoverage;
|
| + bool fRemoveColorAttr;
|
| + bool fRemoveCoverageAttr;
|
| GrColor fColor;
|
| GrColor fCoverage;
|
| };
|
|
|
| virtual void initBatchTracker(GrBatchTracker*, const InitBT&) const {}
|
|
|
| + // TODO this call is temporary. Once we have deferred geometry, GPs can always make themselves
|
| + // equal
|
| + virtual bool canBatch(const GrBatchTracker&, const GrBatchTracker&) const { SkFAIL("s"); return false; }
|
| +
|
| // TODO this is a total hack until the gp can own whether or not it uses uniform
|
| // color / coverage
|
| bool hasVertexColor() const { return fHasVertexColor; }
|
| bool hasVertexCoverage() const { return fHasVertexCoverage; }
|
| bool hasLocalCoords() const { return fHasLocalCoords; }
|
|
|
| + // TODO hack
|
| + bool fNewStyle;
|
| +
|
| protected:
|
| + enum Output {
|
| + kAllOnes_Output,
|
| + kAttribute_Output,
|
| + kUniform_Output,
|
| + };
|
| +
|
| + static Output GetColorOutputType(const InitBT& init, bool hasVertexColor) {
|
| + bool hasUniformColor = (init.fOutputColor && !hasVertexColor) || init.fRemoveColorAttr;
|
| + if (!init.fOutputColor) {
|
| + return kAllOnes_Output;
|
| + } else if (hasUniformColor) {
|
| + return kUniform_Output;
|
| + } else {
|
| + SkASSERT(hasVertexColor);
|
| + return kAttribute_Output;
|
| + }
|
| + }
|
| +
|
| /**
|
| * Subclasses call this from their constructor to register vertex attributes. Attributes
|
| * will be padded to the nearest 4 bytes for performance reasons.
|
|
|