| Index: src/gpu/GrDrawState.cpp
|
| diff --git a/src/gpu/GrDrawState.cpp b/src/gpu/GrDrawState.cpp
|
| deleted file mode 100644
|
| index db703935ca7105515c5367c4eccc188435db8d8f..0000000000000000000000000000000000000000
|
| --- a/src/gpu/GrDrawState.cpp
|
| +++ /dev/null
|
| @@ -1,198 +0,0 @@
|
| -/*
|
| - * Copyright 2012 Google Inc.
|
| - *
|
| - * Use of this source code is governed by a BSD-style license that can be
|
| - * found in the LICENSE file.
|
| - */
|
| -
|
| -#include "GrDrawState.h"
|
| -
|
| -#include "GrBlend.h"
|
| -#include "GrOptDrawState.h"
|
| -#include "GrPaint.h"
|
| -#include "GrProcOptInfo.h"
|
| -#include "GrXferProcessor.h"
|
| -#include "effects/GrPorterDuffXferProcessor.h"
|
| -
|
| -GrDrawState::GrDrawState()
|
| - : fFlagBits(0x0)
|
| - , fDrawFace(kBoth_DrawFace)
|
| - , fColorProcInfoValid(false)
|
| - , fCoverageProcInfoValid(false)
|
| - , fColorCache(GrColor_ILLEGAL)
|
| - , fCoverageCache(GrColor_ILLEGAL)
|
| - , fColorPrimProc(NULL)
|
| - , fCoveragePrimProc(NULL) {
|
| - SkDEBUGCODE(fBlockEffectRemovalCnt = 0;)
|
| -}
|
| -
|
| -GrDrawState& GrDrawState::operator=(const GrDrawState& that) {
|
| - fRenderTarget.reset(SkSafeRef(that.fRenderTarget.get()));
|
| - fFlagBits = that.fFlagBits;
|
| - fStencilSettings = that.fStencilSettings;
|
| - fDrawFace = that.fDrawFace;
|
| - fXPFactory.reset(SkRef(that.getXPFactory()));
|
| - fColorStages = that.fColorStages;
|
| - fCoverageStages = that.fCoverageStages;
|
| -
|
| - fColorProcInfoValid = that.fColorProcInfoValid;
|
| - fCoverageProcInfoValid = that.fCoverageProcInfoValid;
|
| - fColorCache = that.fColorCache;
|
| - fCoverageCache = that.fCoverageCache;
|
| - fColorPrimProc = that.fColorPrimProc;
|
| - fCoveragePrimProc = that.fCoveragePrimProc;
|
| - if (fColorProcInfoValid) {
|
| - fColorProcInfo = that.fColorProcInfo;
|
| - }
|
| - if (fCoverageProcInfoValid) {
|
| - fCoverageProcInfo = that.fCoverageProcInfo;
|
| - }
|
| - return *this;
|
| -}
|
| -
|
| -void GrDrawState::setFromPaint(const GrPaint& paint, GrRenderTarget* rt) {
|
| - SkASSERT(0 == fBlockEffectRemovalCnt || 0 == this->numFragmentStages());
|
| -
|
| - fColorStages.reset();
|
| - fCoverageStages.reset();
|
| -
|
| - for (int i = 0; i < paint.numColorStages(); ++i) {
|
| - fColorStages.push_back(paint.getColorStage(i));
|
| - }
|
| -
|
| - for (int i = 0; i < paint.numCoverageStages(); ++i) {
|
| - fCoverageStages.push_back(paint.getCoverageStage(i));
|
| - }
|
| -
|
| - fXPFactory.reset(SkRef(paint.getXPFactory()));
|
| -
|
| - this->setRenderTarget(rt);
|
| -
|
| - // These have no equivalent in GrPaint, set them to defaults
|
| - fDrawFace = kBoth_DrawFace;
|
| - fStencilSettings.setDisabled();
|
| - fFlagBits = 0;
|
| -
|
| - // Enable the clip bit
|
| - this->enableState(GrDrawState::kClip_StateBit);
|
| -
|
| - this->setState(GrDrawState::kDither_StateBit, paint.isDither());
|
| - this->setState(GrDrawState::kHWAntialias_StateBit, paint.isAntiAlias());
|
| -
|
| - fColorProcInfoValid = false;
|
| - fCoverageProcInfoValid = false;
|
| -
|
| - fColorCache = GrColor_ILLEGAL;
|
| - fCoverageCache = GrColor_ILLEGAL;
|
| -
|
| - fColorPrimProc = NULL;
|
| - fCoveragePrimProc = NULL;
|
| -}
|
| -
|
| -////////////////////////////////////////////////////////////////////////////////
|
| -
|
| -bool GrDrawState::canUseFracCoveragePrimProc(GrColor color, const GrDrawTargetCaps& caps) const {
|
| - if (caps.dualSourceBlendingSupport()) {
|
| - return true;
|
| - }
|
| -
|
| - this->calcColorInvariantOutput(color);
|
| -
|
| - // The coverage isn't actually white, its unknown, but this will produce the same effect
|
| - // TODO we want to cache the result of this call, but we can probably clean up the interface
|
| - // so we don't have to pass in a seemingly known coverage
|
| - this->calcCoverageInvariantOutput(GrColor_WHITE);
|
| - return this->getXPFactory()->canApplyCoverage(fColorProcInfo, fCoverageProcInfo);
|
| -}
|
| -
|
| -//////////////////////////////////////////////////////////////////////////////s
|
| -
|
| -bool GrDrawState::willEffectReadDstColor() const {
|
| - return this->getXPFactory()->willReadDst();
|
| -}
|
| -
|
| -void GrDrawState::AutoRestoreEffects::set(GrDrawState* ds) {
|
| - if (fDrawState) {
|
| - int m = fDrawState->numColorStages() - fColorEffectCnt;
|
| - SkASSERT(m >= 0);
|
| - fDrawState->fColorStages.pop_back_n(m);
|
| -
|
| - int n = fDrawState->numCoverageStages() - fCoverageEffectCnt;
|
| - SkASSERT(n >= 0);
|
| - fDrawState->fCoverageStages.pop_back_n(n);
|
| - if (m + n > 0) {
|
| - fDrawState->fColorProcInfoValid = false;
|
| - fDrawState->fCoverageProcInfoValid = false;
|
| - }
|
| - SkDEBUGCODE(--fDrawState->fBlockEffectRemovalCnt;)
|
| - }
|
| - fDrawState = ds;
|
| - if (NULL != ds) {
|
| - fColorEffectCnt = ds->numColorStages();
|
| - fCoverageEffectCnt = ds->numCoverageStages();
|
| - SkDEBUGCODE(++ds->fBlockEffectRemovalCnt;)
|
| - }
|
| -}
|
| -
|
| -////////////////////////////////////////////////////////////////////////////////
|
| -
|
| -// Some blend modes allow folding a fractional coverage value into the color's alpha channel, while
|
| -// others will blend incorrectly.
|
| -bool GrDrawState::canTweakAlphaForCoverage() const {
|
| - return this->getXPFactory()->canTweakAlphaForCoverage();
|
| -}
|
| -
|
| -////////////////////////////////////////////////////////////////////////////////
|
| -
|
| -GrDrawState::~GrDrawState() {
|
| - SkASSERT(0 == fBlockEffectRemovalCnt);
|
| -}
|
| -
|
| -////////////////////////////////////////////////////////////////////////////////
|
| -
|
| -bool GrDrawState::willBlendWithDst(const GrPrimitiveProcessor* pp) const {
|
| - this->calcColorInvariantOutput(pp);
|
| - this->calcCoverageInvariantOutput(pp);
|
| -
|
| - GrXPFactory::InvariantOutput output;
|
| - fXPFactory->getInvariantOutput(fColorProcInfo, fCoverageProcInfo, &output);
|
| - return output.fWillBlendWithDst;
|
| -}
|
| -
|
| -void GrDrawState::calcColorInvariantOutput(const GrPrimitiveProcessor* pp) const {
|
| - if (!fColorProcInfoValid || fColorPrimProc != pp) {
|
| - fColorProcInfo.calcColorWithPrimProc(pp, fColorStages.begin(), this->numColorStages());
|
| - fColorProcInfoValid = true;
|
| - fColorPrimProc = pp;
|
| - }
|
| -}
|
| -
|
| -void GrDrawState::calcCoverageInvariantOutput(const GrPrimitiveProcessor* pp) const {
|
| - if (!fCoverageProcInfoValid || fCoveragePrimProc != pp) {
|
| - fCoverageProcInfo.calcCoverageWithPrimProc(pp, fCoverageStages.begin(),
|
| - this->numCoverageStages());
|
| - fCoverageProcInfoValid = true;
|
| - fCoveragePrimProc = pp;
|
| - }
|
| -}
|
| -
|
| -void GrDrawState::calcColorInvariantOutput(GrColor color) const {
|
| - if (!fColorProcInfoValid || color != fColorCache) {
|
| - GrColorComponentFlags flags = kRGBA_GrColorComponentFlags;
|
| - fColorProcInfo.calcWithInitialValues(fColorStages.begin(), this->numColorStages(), color,
|
| - flags, false);
|
| - fColorProcInfoValid = true;
|
| - fColorCache = color;
|
| - }
|
| -}
|
| -
|
| -void GrDrawState::calcCoverageInvariantOutput(GrColor coverage) const {
|
| - if (!fCoverageProcInfoValid || coverage != fCoverageCache) {
|
| - GrColorComponentFlags flags = kRGBA_GrColorComponentFlags;
|
| - fCoverageProcInfo.calcWithInitialValues(fCoverageStages.begin(),
|
| - this->numCoverageStages(), coverage, flags,
|
| - true);
|
| - fCoverageProcInfoValid = true;
|
| - fCoverageCache = coverage;
|
| - }
|
| -}
|
|
|