1ae59b77612c42ff6b793dc33e3d115e6a5db34ccbsalomon/* 2ae59b77612c42ff6b793dc33e3d115e6a5db34ccbsalomon * Copyright 2014 Google Inc. 3ae59b77612c42ff6b793dc33e3d115e6a5db34ccbsalomon * 4ae59b77612c42ff6b793dc33e3d115e6a5db34ccbsalomon * Use of this source code is governed by a BSD-style license that can be 5ae59b77612c42ff6b793dc33e3d115e6a5db34ccbsalomon * found in the LICENSE file. 6ae59b77612c42ff6b793dc33e3d115e6a5db34ccbsalomon */ 7ae59b77612c42ff6b793dc33e3d115e6a5db34ccbsalomon 8ae59b77612c42ff6b793dc33e3d115e6a5db34ccbsalomon#ifndef GrPendingProcessorStage_DEFINED 9ae59b77612c42ff6b793dc33e3d115e6a5db34ccbsalomon#define GrPendingProcessorStage_DEFINED 10ae59b77612c42ff6b793dc33e3d115e6a5db34ccbsalomon 11ae59b77612c42ff6b793dc33e3d115e6a5db34ccbsalomon#include "GrFragmentStage.h" 12ae59b77612c42ff6b793dc33e3d115e6a5db34ccbsalomon#include "GrCoordTransform.h" 13ae59b77612c42ff6b793dc33e3d115e6a5db34ccbsalomon#include "GrFragmentProcessor.h" 14ae59b77612c42ff6b793dc33e3d115e6a5db34ccbsalomon#include "GrPendingProgramElement.h" 15ae59b77612c42ff6b793dc33e3d115e6a5db34ccbsalomon 16ae59b77612c42ff6b793dc33e3d115e6a5db34ccbsalomon/** 17ae59b77612c42ff6b793dc33e3d115e6a5db34ccbsalomon * This a baked variant of GrFragmentStage, as recorded in GrOptDrawState. 18ae59b77612c42ff6b793dc33e3d115e6a5db34ccbsalomon */ 19ae59b77612c42ff6b793dc33e3d115e6a5db34ccbsalomonclass GrPendingFragmentStage { 20ae59b77612c42ff6b793dc33e3d115e6a5db34ccbsalomonpublic: 2140d4bd8dafe9ed844f29a3de3d8965672248ee73joshualitt GrPendingFragmentStage(const GrFragmentStage& stage) : fProc(stage.processor()) {} 22ae59b77612c42ff6b793dc33e3d115e6a5db34ccbsalomon 23ae59b77612c42ff6b793dc33e3d115e6a5db34ccbsalomon GrPendingFragmentStage(const GrPendingFragmentStage& that) { *this = that; } 24ae59b77612c42ff6b793dc33e3d115e6a5db34ccbsalomon 25ae59b77612c42ff6b793dc33e3d115e6a5db34ccbsalomon GrPendingFragmentStage& operator=(const GrPendingFragmentStage& that) { 26ae59b77612c42ff6b793dc33e3d115e6a5db34ccbsalomon fProc.reset(that.fProc.get()); 27ae59b77612c42ff6b793dc33e3d115e6a5db34ccbsalomon return *this; 28ae59b77612c42ff6b793dc33e3d115e6a5db34ccbsalomon } 29ae59b77612c42ff6b793dc33e3d115e6a5db34ccbsalomon 30ae59b77612c42ff6b793dc33e3d115e6a5db34ccbsalomon bool operator==(const GrPendingFragmentStage& that) const { 3140d4bd8dafe9ed844f29a3de3d8965672248ee73joshualitt return this->processor()->isEqual(*that.processor()); 32ae59b77612c42ff6b793dc33e3d115e6a5db34ccbsalomon } 33ae59b77612c42ff6b793dc33e3d115e6a5db34ccbsalomon 34ae59b77612c42ff6b793dc33e3d115e6a5db34ccbsalomon bool operator!=(const GrPendingFragmentStage& that) const { return !(*this == that); } 35ae59b77612c42ff6b793dc33e3d115e6a5db34ccbsalomon 36ae59b77612c42ff6b793dc33e3d115e6a5db34ccbsalomon /** 37ae59b77612c42ff6b793dc33e3d115e6a5db34ccbsalomon * For a coord transform on the fragment processor, does it or the coord change matrix (if 38ae59b77612c42ff6b793dc33e3d115e6a5db34ccbsalomon * relevant) contain perspective? 39ae59b77612c42ff6b793dc33e3d115e6a5db34ccbsalomon */ 40ae59b77612c42ff6b793dc33e3d115e6a5db34ccbsalomon bool isPerspectiveCoordTransform(int matrixIndex) const { 4140d4bd8dafe9ed844f29a3de3d8965672248ee73joshualitt const GrCoordTransform& coordTransform = this->processor()->coordTransform(matrixIndex); 42ae59b77612c42ff6b793dc33e3d115e6a5db34ccbsalomon uint32_t type = coordTransform.getMatrix().getType(); 43ae59b77612c42ff6b793dc33e3d115e6a5db34ccbsalomon return SkToBool(SkMatrix::kPerspective_Mask & type); 44ae59b77612c42ff6b793dc33e3d115e6a5db34ccbsalomon } 45ae59b77612c42ff6b793dc33e3d115e6a5db34ccbsalomon 46ae59b77612c42ff6b793dc33e3d115e6a5db34ccbsalomon const char* name() const { return fProc->name(); } 47ae59b77612c42ff6b793dc33e3d115e6a5db34ccbsalomon 4840d4bd8dafe9ed844f29a3de3d8965672248ee73joshualitt const GrFragmentProcessor* processor() const { return fProc.get(); } 49ae59b77612c42ff6b793dc33e3d115e6a5db34ccbsalomon 50ae59b77612c42ff6b793dc33e3d115e6a5db34ccbsalomonprotected: 51ae59b77612c42ff6b793dc33e3d115e6a5db34ccbsalomon GrPendingProgramElement<const GrFragmentProcessor> fProc; 52ae59b77612c42ff6b793dc33e3d115e6a5db34ccbsalomon}; 53ae59b77612c42ff6b793dc33e3d115e6a5db34ccbsalomon#endif 54