| OLD | NEW | 
|---|
| 1 /* | 1 /* | 
| 2  * Copyright 2015 Google Inc. | 2  * Copyright 2015 Google Inc. | 
| 3  * | 3  * | 
| 4  * Use of this source code is governed by a BSD-style license that can be | 4  * Use of this source code is governed by a BSD-style license that can be | 
| 5  * found in the LICENSE file. | 5  * found in the LICENSE file. | 
| 6  */ | 6  */ | 
| 7 | 7 | 
| 8 #ifndef GrTestBatch_DEFINED | 8 #ifndef GrTestBatch_DEFINED | 
| 9 #define GrTestBatch_DEFINED | 9 #define GrTestBatch_DEFINED | 
| 10 | 10 | 
| 11 #include "GrBatch.h" | 11 #include "GrBatch.h" | 
| 12 | 12 | 
| 13 /* | 13 /* | 
| 14  * A simple batch only for testing purposes which actually doesn't batch at all,
     but can fit into | 14  * A simple batch only for testing purposes which actually doesn't batch at all,
     but can fit into | 
| 15  * the batch pipeline and generate arbitrary geometry | 15  * the batch pipeline and generate arbitrary geometry | 
| 16  */ | 16  */ | 
| 17 class GrTestBatch : public GrBatch { | 17 class GrTestBatch : public GrBatch { | 
| 18 public: | 18 public: | 
| 19     struct Geometry { | 19     struct Geometry { | 
| 20         GrColor fColor; | 20         GrColor fColor; | 
| 21     }; | 21     }; | 
| 22 | 22 | 
| 23     virtual const char* name() const SK_OVERRIDE = 0; | 23     virtual const char* name() const override = 0; | 
| 24 | 24 | 
| 25     void getInvariantOutputColor(GrInitInvariantOutput* out) const SK_OVERRIDE { | 25     void getInvariantOutputColor(GrInitInvariantOutput* out) const override { | 
| 26         // When this is called on a batch, there is only one geometry bundle | 26         // When this is called on a batch, there is only one geometry bundle | 
| 27         if (fGeometryProcessor->hasVertexColor()) { | 27         if (fGeometryProcessor->hasVertexColor()) { | 
| 28             out->setUnknownFourComponents(); | 28             out->setUnknownFourComponents(); | 
| 29         } else { | 29         } else { | 
| 30             out->setKnownFourComponents(fGeometryProcessor->color()); | 30             out->setKnownFourComponents(fGeometryProcessor->color()); | 
| 31         } | 31         } | 
| 32     } | 32     } | 
| 33 | 33 | 
| 34     void getInvariantOutputCoverage(GrInitInvariantOutput* out) const SK_OVERRID
    E { | 34     void getInvariantOutputCoverage(GrInitInvariantOutput* out) const override { | 
| 35         out->setUnknownSingleComponent(); | 35         out->setUnknownSingleComponent(); | 
| 36     } | 36     } | 
| 37 | 37 | 
| 38     void initBatchTracker(const GrPipelineInfo& init) SK_OVERRIDE { | 38     void initBatchTracker(const GrPipelineInfo& init) override { | 
| 39         // Handle any color overrides | 39         // Handle any color overrides | 
| 40         if (init.fColorIgnored) { | 40         if (init.fColorIgnored) { | 
| 41             this->geoData(0)->fColor = GrColor_ILLEGAL; | 41             this->geoData(0)->fColor = GrColor_ILLEGAL; | 
| 42         } else if (GrColor_ILLEGAL != init.fOverrideColor) { | 42         } else if (GrColor_ILLEGAL != init.fOverrideColor) { | 
| 43             this->geoData(0)->fColor = init.fOverrideColor; | 43             this->geoData(0)->fColor = init.fOverrideColor; | 
| 44         } | 44         } | 
| 45 | 45 | 
| 46         // setup batch properties | 46         // setup batch properties | 
| 47         fBatch.fColorIgnored = init.fColorIgnored; | 47         fBatch.fColorIgnored = init.fColorIgnored; | 
| 48         fBatch.fColor = this->geoData(0)->fColor; | 48         fBatch.fColor = this->geoData(0)->fColor; | 
| 49         fBatch.fUsesLocalCoords = init.fUsesLocalCoords; | 49         fBatch.fUsesLocalCoords = init.fUsesLocalCoords; | 
| 50         fBatch.fCoverageIgnored = init.fCoverageIgnored; | 50         fBatch.fCoverageIgnored = init.fCoverageIgnored; | 
| 51     } | 51     } | 
| 52 | 52 | 
| 53     void generateGeometry(GrBatchTarget* batchTarget, const GrPipeline* pipeline
    ) SK_OVERRIDE { | 53     void generateGeometry(GrBatchTarget* batchTarget, const GrPipeline* pipeline
    ) override { | 
| 54         batchTarget->initDraw(fGeometryProcessor, pipeline); | 54         batchTarget->initDraw(fGeometryProcessor, pipeline); | 
| 55 | 55 | 
| 56         // TODO this is hacky, but the only way we have to initialize the GP is 
    to use the | 56         // TODO this is hacky, but the only way we have to initialize the GP is 
    to use the | 
| 57         // GrPipelineInfo struct so we can generate the correct shader.  Once we
     have GrBatch | 57         // GrPipelineInfo struct so we can generate the correct shader.  Once we
     have GrBatch | 
| 58         // everywhere we can remove this nastiness | 58         // everywhere we can remove this nastiness | 
| 59         GrPipelineInfo init; | 59         GrPipelineInfo init; | 
| 60         init.fColorIgnored = fBatch.fColorIgnored; | 60         init.fColorIgnored = fBatch.fColorIgnored; | 
| 61         init.fOverrideColor = GrColor_ILLEGAL; | 61         init.fOverrideColor = GrColor_ILLEGAL; | 
| 62         init.fCoverageIgnored = fBatch.fCoverageIgnored; | 62         init.fCoverageIgnored = fBatch.fCoverageIgnored; | 
| 63         init.fUsesLocalCoords = fBatch.fUsesLocalCoords; | 63         init.fUsesLocalCoords = fBatch.fUsesLocalCoords; | 
| 64         fGeometryProcessor->initBatchTracker(batchTarget->currentBatchTracker(),
     init); | 64         fGeometryProcessor->initBatchTracker(batchTarget->currentBatchTracker(),
     init); | 
| 65 | 65 | 
| 66         this->onGenerateGeometry(batchTarget, pipeline); | 66         this->onGenerateGeometry(batchTarget, pipeline); | 
| 67     } | 67     } | 
| 68 | 68 | 
| 69 protected: | 69 protected: | 
| 70     GrTestBatch(const GrGeometryProcessor* gp) { | 70     GrTestBatch(const GrGeometryProcessor* gp) { | 
| 71         fGeometryProcessor.reset(SkRef(gp)); | 71         fGeometryProcessor.reset(SkRef(gp)); | 
| 72     } | 72     } | 
| 73 | 73 | 
| 74     const GrGeometryProcessor* geometryProcessor() const { return fGeometryProce
    ssor; } | 74     const GrGeometryProcessor* geometryProcessor() const { return fGeometryProce
    ssor; } | 
| 75 | 75 | 
| 76 private: | 76 private: | 
| 77     virtual Geometry* geoData(int index) = 0; | 77     virtual Geometry* geoData(int index) = 0; | 
| 78 | 78 | 
| 79     bool onCombineIfPossible(GrBatch* t) SK_OVERRIDE { | 79     bool onCombineIfPossible(GrBatch* t) override { | 
| 80         return false; | 80         return false; | 
| 81     } | 81     } | 
| 82 | 82 | 
| 83     virtual void onGenerateGeometry(GrBatchTarget* batchTarget, const GrPipeline
    * pipeline) = 0; | 83     virtual void onGenerateGeometry(GrBatchTarget* batchTarget, const GrPipeline
    * pipeline) = 0; | 
| 84 | 84 | 
| 85     struct BatchTracker { | 85     struct BatchTracker { | 
| 86         GrColor fColor; | 86         GrColor fColor; | 
| 87         bool fUsesLocalCoords; | 87         bool fUsesLocalCoords; | 
| 88         bool fColorIgnored; | 88         bool fColorIgnored; | 
| 89         bool fCoverageIgnored; | 89         bool fCoverageIgnored; | 
| 90     }; | 90     }; | 
| 91 | 91 | 
| 92     SkAutoTUnref<const GrGeometryProcessor> fGeometryProcessor; | 92     SkAutoTUnref<const GrGeometryProcessor> fGeometryProcessor; | 
| 93     BatchTracker fBatch; | 93     BatchTracker fBatch; | 
| 94 }; | 94 }; | 
| 95 | 95 | 
| 96 #endif | 96 #endif | 
| OLD | NEW | 
|---|