blob: 0bf984ab7d68ced7be7fdc79637ac6201372a822 [file] [log] [blame]
/*
* Copyright 2014 Google Inc.
*
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
#ifndef GrPendingProcessorStage_DEFINED
#define GrPendingProcessorStage_DEFINED
#include "GrFragmentStage.h"
#include "GrCoordTransform.h"
#include "GrFragmentProcessor.h"
#include "GrPendingProgramElement.h"
/**
* This a baked variant of GrFragmentStage, as recorded in GrOptDrawState.
*/
class GrPendingFragmentStage {
public:
GrPendingFragmentStage(const GrFragmentStage& stage) : fProc(stage.processor()) {}
GrPendingFragmentStage(const GrPendingFragmentStage& that) { *this = that; }
GrPendingFragmentStage& operator=(const GrPendingFragmentStage& that) {
fProc.reset(that.fProc.get());
return *this;
}
bool operator==(const GrPendingFragmentStage& that) const {
return this->processor()->isEqual(*that.processor());
}
bool operator!=(const GrPendingFragmentStage& that) const { return !(*this == that); }
/**
* For a coord transform on the fragment processor, does it or the coord change matrix (if
* relevant) contain perspective?
*/
bool isPerspectiveCoordTransform(int matrixIndex) const {
const GrCoordTransform& coordTransform = this->processor()->coordTransform(matrixIndex);
uint32_t type = coordTransform.getMatrix().getType();
return SkToBool(SkMatrix::kPerspective_Mask & type);
}
const char* name() const { return fProc->name(); }
const GrFragmentProcessor* processor() const { return fProc.get(); }
protected:
GrPendingProgramElement<const GrFragmentProcessor> fProc;
};
#endif