diff options
author | 2014-09-23 09:50:21 -0700 | |
---|---|---|
committer | 2014-09-23 09:50:21 -0700 | |
commit | b0a8a377f832c59cee939ad721e1f87d378b7142 (patch) | |
tree | 7edeac33c817af28d73f3fbe1b31776ac34e8773 /src/core/SkXfermode.cpp | |
parent | e51ac563de24ed4b25fde97c225580a30a55e9ca (diff) |
Patch to create a distinct geometry processor. The vast majority of this patch
is just a rename. The meat is in GrGeometryProcessor, GrProcessor,
GrGL*Processor, GrProcessorStage, Gr*BackendProcessorFactory,
GrProcessUnitTestFactory, and the builders
BUG=skia:
R=bsalomon@google.com
Author: joshualitt@chromium.org
Review URL: https://codereview.chromium.org/582963002
Diffstat (limited to 'src/core/SkXfermode.cpp')
-rw-r--r-- | src/core/SkXfermode.cpp | 78 |
1 files changed, 38 insertions, 40 deletions
diff --git a/src/core/SkXfermode.cpp b/src/core/SkXfermode.cpp index d7f5a7c22b..443aa19405 100644 --- a/src/core/SkXfermode.cpp +++ b/src/core/SkXfermode.cpp @@ -676,21 +676,18 @@ bool SkXfermode::asMode(Mode* mode) const { return false; } -bool SkXfermode::asNewEffect(GrEffect** effect, GrTexture* background) const { +bool SkXfermode::asFragmentProcessor(GrFragmentProcessor**, GrTexture*) const { return false; } -bool SkXfermode::AsNewEffectOrCoeff(SkXfermode* xfermode, - GrEffect** effect, - Coeff* src, - Coeff* dst, - GrTexture* background) { +bool SkXfermode::asFragmentProcessorOrCoeff(SkXfermode* xfermode, GrFragmentProcessor** fp, + Coeff* src, Coeff* dst, GrTexture* background) { if (NULL == xfermode) { return ModeAsCoeff(kSrcOver_Mode, src, dst); } else if (xfermode->asCoeff(src, dst)) { return true; } else { - return xfermode->asNewEffect(effect, background); + return xfermode->asFragmentProcessor(fp, background); } } @@ -778,23 +775,23 @@ void SkXfermode::xferA8(SkAlpha* SK_RESTRICT dst, #if SK_SUPPORT_GPU -#include "GrEffect.h" +#include "GrProcessor.h" #include "GrCoordTransform.h" -#include "GrEffectUnitTest.h" -#include "GrTBackendEffectFactory.h" -#include "gl/GrGLEffect.h" +#include "GrProcessorUnitTest.h" +#include "GrTBackendProcessorFactory.h" +#include "gl/GrGLProcessor.h" #include "gl/builders/GrGLProgramBuilder.h" /** - * GrEffect that implements the all the separable xfer modes that cannot be expressed as Coeffs. + * GrProcessor that implements the all the separable xfer modes that cannot be expressed as Coeffs. */ -class XferEffect : public GrEffect { +class XferEffect : public GrFragmentProcessor { public: static bool IsSupportedMode(SkXfermode::Mode mode) { return mode > SkXfermode::kLastCoeffMode && mode <= SkXfermode::kLastMode; } - static GrEffect* Create(SkXfermode::Mode mode, GrTexture* background) { + static GrFragmentProcessor* Create(SkXfermode::Mode mode, GrTexture* background) { if (!IsSupportedMode(mode)) { return NULL; } else { @@ -807,8 +804,8 @@ public: *validFlags = 0; } - virtual const GrBackendEffectFactory& getFactory() const SK_OVERRIDE { - return GrTBackendEffectFactory<XferEffect>::getInstance(); + virtual const GrBackendFragmentProcessorFactory& getFactory() const SK_OVERRIDE { + return GrTBackendFragmentProcessorFactory<XferEffect>::getInstance(); } static const char* Name() { return "XferEffect"; } @@ -816,21 +813,21 @@ public: SkXfermode::Mode mode() const { return fMode; } const GrTextureAccess& backgroundAccess() const { return fBackgroundAccess; } - class GLEffect : public GrGLEffect { + class GLProcessor : public GrGLFragmentProcessor { public: - GLEffect(const GrBackendEffectFactory& factory, const GrEffect&) - : GrGLEffect(factory) { + GLProcessor(const GrBackendProcessorFactory& factory, const GrProcessor&) + : INHERITED(factory) { } virtual void emitCode(GrGLProgramBuilder* builder, - const GrEffect& effect, - const GrEffectKey& key, + const GrFragmentProcessor& fp, + const GrProcessorKey& key, const char* outputColor, const char* inputColor, const TransformedCoordsArray& coords, const TextureSamplerArray& samplers) SK_OVERRIDE { - SkXfermode::Mode mode = effect.cast<XferEffect>().mode(); + SkXfermode::Mode mode = fp.cast<XferEffect>().mode(); const GrTexture* backgroundTex = - effect.cast<XferEffect>().backgroundAccess().getTexture(); + fp.cast<XferEffect>().backgroundAccess().getTexture(); GrGLFragmentShaderBuilder* fsBuilder = builder->getFragmentShaderBuilder(); const char* dstColor; if (backgroundTex) { @@ -971,12 +968,12 @@ public: } } - static inline void GenKey(const GrEffect& effect, const GrGLCaps&, - GrEffectKeyBuilder* b) { + static inline void GenKey(const GrProcessor& proc, const GrGLCaps&, + GrProcessorKeyBuilder* b) { // The background may come from the dst or from a texture. - uint32_t key = effect.numTextures(); + uint32_t key = proc.numTextures(); SkASSERT(key <= 1); - key |= effect.cast<XferEffect>().mode() << 1; + key |= proc.cast<XferEffect>().mode() << 1; b->add32(key); } @@ -1197,10 +1194,10 @@ public: } - typedef GrGLEffect INHERITED; + typedef GrGLFragmentProcessor INHERITED; }; - GR_DECLARE_EFFECT_TEST; + GR_DECLARE_FRAGMENT_PROCESSOR_TEST; private: XferEffect(SkXfermode::Mode mode, GrTexture* background) @@ -1214,7 +1211,7 @@ private: this->setWillReadDstColor(); } } - virtual bool onIsEqual(const GrEffect& other) const SK_OVERRIDE { + virtual bool onIsEqual(const GrProcessor& other) const SK_OVERRIDE { const XferEffect& s = other.cast<XferEffect>(); return fMode == s.fMode && fBackgroundAccess.getTexture() == s.fBackgroundAccess.getTexture(); @@ -1224,14 +1221,14 @@ private: GrCoordTransform fBackgroundTransform; GrTextureAccess fBackgroundAccess; - typedef GrEffect INHERITED; + typedef GrFragmentProcessor INHERITED; }; -GR_DEFINE_EFFECT_TEST(XferEffect); -GrEffect* XferEffect::TestCreate(SkRandom* rand, - GrContext*, - const GrDrawTargetCaps&, - GrTexture*[]) { +GR_DEFINE_FRAGMENT_PROCESSOR_TEST(XferEffect); +GrFragmentProcessor* XferEffect::TestCreate(SkRandom* rand, + GrContext*, + const GrDrawTargetCaps&, + GrTexture*[]) { int mode = rand->nextRangeU(SkXfermode::kLastCoeffMode + 1, SkXfermode::kLastSeparableMode); return SkNEW_ARGS(XferEffect, (static_cast<SkXfermode::Mode>(mode), NULL)); @@ -1380,11 +1377,12 @@ void SkProcCoeffXfermode::xferA8(SkAlpha* SK_RESTRICT dst, } #if SK_SUPPORT_GPU -bool SkProcCoeffXfermode::asNewEffect(GrEffect** effect, GrTexture* background) const { +bool SkProcCoeffXfermode::asFragmentProcessor(GrFragmentProcessor** fp, + GrTexture* background) const { if (XferEffect::IsSupportedMode(fMode)) { - if (effect) { - *effect = XferEffect::Create(fMode, background); - SkASSERT(*effect); + if (fp) { + *fp = XferEffect::Create(fMode, background); + SkASSERT(*fp); } return true; } |