Index: src/gpu/GrPathProcessor.cpp |
diff --git a/src/gpu/GrPathProcessor.cpp b/src/gpu/GrPathProcessor.cpp |
new file mode 100644 |
index 0000000000000000000000000000000000000000..f6c164016e12fd698854ecf42a66c3f6cddcd186 |
--- /dev/null |
+++ b/src/gpu/GrPathProcessor.cpp |
@@ -0,0 +1,73 @@ |
+#include "GrPathProcessor.h" |
+ |
+#include "gl/GrGLPathProcessor.h" |
+#include "gl/GrGLGpu.h" |
+ |
+GrPathProcessor::GrPathProcessor(GrColor color, |
+ const SkMatrix& viewMatrix, |
+ const SkMatrix& localMatrix) |
+ : INHERITED(viewMatrix, localMatrix, true) |
+ , fColor(color) { |
+ this->initClassID<GrPathProcessor>(); |
+} |
+ |
+void GrPathProcessor::getInvariantOutputColor(GrInitInvariantOutput* out) const { |
+ out->setKnownFourComponents(fColor); |
+} |
+ |
+void GrPathProcessor::getInvariantOutputCoverage(GrInitInvariantOutput* out) const { |
+ out->setKnownSingleComponent(0xff); |
+} |
+ |
+void GrPathProcessor::initBatchTracker(GrBatchTracker* bt, const GrPipelineInfo& init) const { |
+ PathBatchTracker* local = bt->cast<PathBatchTracker>(); |
+ if (init.fColorIgnored) { |
+ local->fInputColorType = kIgnored_GrGPInput; |
+ local->fColor = GrColor_ILLEGAL; |
+ } else { |
+ local->fInputColorType = kUniform_GrGPInput; |
+ local->fColor = GrColor_ILLEGAL == init.fOverrideColor ? this->color() : |
+ init.fOverrideColor; |
+ } |
+ |
+ local->fInputCoverageType = init.fCoverageIgnored ? kIgnored_GrGPInput : kAllOnes_GrGPInput; |
+ local->fUsesLocalCoords = init.fUsesLocalCoords; |
+} |
+ |
+bool GrPathProcessor::canMakeEqual(const GrBatchTracker& m, |
+ const GrPrimitiveProcessor& that, |
+ const GrBatchTracker& t) const { |
+ if (this->classID() != that.classID() || !this->hasSameTextureAccesses(that)) { |
+ return false; |
+ } |
+ |
+ if (!this->viewMatrix().cheapEqualTo(that.viewMatrix())) { |
+ return false; |
+ } |
+ |
+ const PathBatchTracker& mine = m.cast<PathBatchTracker>(); |
+ const PathBatchTracker& theirs = t.cast<PathBatchTracker>(); |
+ return CanCombineLocalMatrices(*this, mine.fUsesLocalCoords, |
+ that, theirs.fUsesLocalCoords) && |
+ CanCombineOutput(mine.fInputColorType, mine.fColor, |
+ theirs.fInputColorType, theirs.fColor) && |
+ CanCombineOutput(mine.fInputCoverageType, 0xff, |
+ theirs.fInputCoverageType, 0xff); |
+} |
+ |
+void GrPathProcessor::getGLProcessorKey(const GrBatchTracker& bt, |
+ const GrGLCaps& caps, |
+ GrProcessorKeyBuilder* b) const { |
+ GrGLPathProcessor::GenKey(*this, bt, caps, b); |
+} |
+ |
+GrGLPrimitiveProcessor* GrPathProcessor::createGLInstance(const GrBatchTracker& bt, |
+ const GrGLCaps& caps) const { |
+ SkASSERT(caps.nvprSupport() != GrGLCaps::kNone_NvprSupport); |
+ if (caps.nvprSupport() == GrGLCaps::kLegacy_NvprSupport) { |
+ return SkNEW_ARGS(GrGLLegacyPathProcessor, (*this, bt, |
+ caps.maxFixedFunctionTextureCoords())); |
+ } else { |
+ return SkNEW_ARGS(GrGLNormalPathProcessor, (*this, bt)); |
+ } |
+} |