| OLD | NEW |
| 1 | 1 |
| 2 /* | 2 /* |
| 3 * Copyright 2006 The Android Open Source Project | 3 * Copyright 2006 The Android Open Source Project |
| 4 * | 4 * |
| 5 * Use of this source code is governed by a BSD-style license that can be | 5 * Use of this source code is governed by a BSD-style license that can be |
| 6 * found in the LICENSE file. | 6 * found in the LICENSE file. |
| 7 */ | 7 */ |
| 8 | 8 |
| 9 | 9 |
| 10 #include "SkXfermode.h" | 10 #include "SkXfermode.h" |
| (...skipping 800 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 811 return GrTBackendEffectFactory<XferEffect>::getInstance(); | 811 return GrTBackendEffectFactory<XferEffect>::getInstance(); |
| 812 } | 812 } |
| 813 | 813 |
| 814 static const char* Name() { return "XferEffect"; } | 814 static const char* Name() { return "XferEffect"; } |
| 815 | 815 |
| 816 SkXfermode::Mode mode() const { return fMode; } | 816 SkXfermode::Mode mode() const { return fMode; } |
| 817 const GrTextureAccess& backgroundAccess() const { return fBackgroundAccess;
} | 817 const GrTextureAccess& backgroundAccess() const { return fBackgroundAccess;
} |
| 818 | 818 |
| 819 class GLEffect : public GrGLEffect { | 819 class GLEffect : public GrGLEffect { |
| 820 public: | 820 public: |
| 821 GLEffect(const GrBackendEffectFactory& factory, const GrEffect&) | 821 GLEffect(const GrBackendEffectFactory& factory, const GrDrawEffect&) |
| 822 : GrGLEffect(factory) { | 822 : GrGLEffect(factory) { |
| 823 } | 823 } |
| 824 virtual void emitCode(GrGLProgramBuilder* builder, | 824 virtual void emitCode(GrGLProgramBuilder* builder, |
| 825 const GrEffect& effect, | 825 const GrDrawEffect& drawEffect, |
| 826 const GrEffectKey& key, | 826 const GrEffectKey& key, |
| 827 const char* outputColor, | 827 const char* outputColor, |
| 828 const char* inputColor, | 828 const char* inputColor, |
| 829 const TransformedCoordsArray& coords, | 829 const TransformedCoordsArray& coords, |
| 830 const TextureSamplerArray& samplers) SK_OVERRIDE { | 830 const TextureSamplerArray& samplers) SK_OVERRIDE { |
| 831 SkXfermode::Mode mode = effect.cast<XferEffect>().mode(); | 831 SkXfermode::Mode mode = drawEffect.castEffect<XferEffect>().mode(); |
| 832 const GrTexture* backgroundTex = | 832 const GrTexture* backgroundTex = drawEffect.castEffect<XferEffect>()
.backgroundAccess().getTexture(); |
| 833 effect.cast<XferEffect>().backgroundAccess().getTexture(); | |
| 834 GrGLFragmentShaderBuilder* fsBuilder = builder->getFragmentShaderBui
lder(); | 833 GrGLFragmentShaderBuilder* fsBuilder = builder->getFragmentShaderBui
lder(); |
| 835 const char* dstColor; | 834 const char* dstColor; |
| 836 if (backgroundTex) { | 835 if (backgroundTex) { |
| 837 dstColor = "bgColor"; | 836 dstColor = "bgColor"; |
| 838 fsBuilder->codeAppendf("\t\tvec4 %s = ", dstColor); | 837 fsBuilder->codeAppendf("\t\tvec4 %s = ", dstColor); |
| 839 fsBuilder->appendTextureLookup(samplers[0], coords[0].c_str(), c
oords[0].type()); | 838 fsBuilder->appendTextureLookup(samplers[0], coords[0].c_str(), c
oords[0].type()); |
| 840 fsBuilder->codeAppendf(";\n"); | 839 fsBuilder->codeAppendf(";\n"); |
| 841 } else { | 840 } else { |
| 842 dstColor = fsBuilder->dstColor(); | 841 dstColor = fsBuilder->dstColor(); |
| 843 } | 842 } |
| (...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 964 fsBuilder->codeAppendf("\t\t%s.rgb += (1.0 - %s.a) * %s.rgb
+ (1.0 - %s.a) * %s.rgb;\n", | 963 fsBuilder->codeAppendf("\t\t%s.rgb += (1.0 - %s.a) * %s.rgb
+ (1.0 - %s.a) * %s.rgb;\n", |
| 965 outputColor, inputColor, dstColor, ds
tColor, inputColor); | 964 outputColor, inputColor, dstColor, ds
tColor, inputColor); |
| 966 break; | 965 break; |
| 967 } | 966 } |
| 968 default: | 967 default: |
| 969 SkFAIL("Unknown XferEffect mode."); | 968 SkFAIL("Unknown XferEffect mode."); |
| 970 break; | 969 break; |
| 971 } | 970 } |
| 972 } | 971 } |
| 973 | 972 |
| 974 static inline void GenKey(const GrEffect& effect, const GrGLCaps&, | 973 static inline void GenKey(const GrDrawEffect& drawEffect, const GrGLCaps
&, |
| 975 GrEffectKeyBuilder* b) { | 974 GrEffectKeyBuilder* b) { |
| 976 // The background may come from the dst or from a texture. | 975 // The background may come from the dst or from a texture. |
| 977 uint32_t key = effect.numTextures(); | 976 uint32_t key = drawEffect.effect()->numTextures(); |
| 978 SkASSERT(key <= 1); | 977 SkASSERT(key <= 1); |
| 979 key |= effect.cast<XferEffect>().mode() << 1; | 978 key |= drawEffect.castEffect<XferEffect>().mode() << 1; |
| 980 b->add32(key); | 979 b->add32(key); |
| 981 } | 980 } |
| 982 | 981 |
| 983 private: | 982 private: |
| 984 static void HardLight(GrGLFragmentShaderBuilder* fsBuilder, | 983 static void HardLight(GrGLFragmentShaderBuilder* fsBuilder, |
| 985 const char* final, | 984 const char* final, |
| 986 const char* src, | 985 const char* src, |
| 987 const char* dst) { | 986 const char* dst) { |
| 988 static const char kComponents[] = {'r', 'g', 'b'}; | 987 static const char kComponents[] = {'r', 'g', 'b'}; |
| 989 for (size_t i = 0; i < SK_ARRAY_COUNT(kComponents); ++i) { | 988 for (size_t i = 0; i < SK_ARRAY_COUNT(kComponents); ++i) { |
| (...skipping 218 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1208 if (background) { | 1207 if (background) { |
| 1209 fBackgroundTransform.reset(kLocal_GrCoordSet, background); | 1208 fBackgroundTransform.reset(kLocal_GrCoordSet, background); |
| 1210 this->addCoordTransform(&fBackgroundTransform); | 1209 this->addCoordTransform(&fBackgroundTransform); |
| 1211 fBackgroundAccess.reset(background); | 1210 fBackgroundAccess.reset(background); |
| 1212 this->addTextureAccess(&fBackgroundAccess); | 1211 this->addTextureAccess(&fBackgroundAccess); |
| 1213 } else { | 1212 } else { |
| 1214 this->setWillReadDstColor(); | 1213 this->setWillReadDstColor(); |
| 1215 } | 1214 } |
| 1216 } | 1215 } |
| 1217 virtual bool onIsEqual(const GrEffect& other) const SK_OVERRIDE { | 1216 virtual bool onIsEqual(const GrEffect& other) const SK_OVERRIDE { |
| 1218 const XferEffect& s = other.cast<XferEffect>(); | 1217 const XferEffect& s = CastEffect<XferEffect>(other); |
| 1219 return fMode == s.fMode && | 1218 return fMode == s.fMode && |
| 1220 fBackgroundAccess.getTexture() == s.fBackgroundAccess.getTexture(
); | 1219 fBackgroundAccess.getTexture() == s.fBackgroundAccess.getTexture(
); |
| 1221 } | 1220 } |
| 1222 | 1221 |
| 1223 SkXfermode::Mode fMode; | 1222 SkXfermode::Mode fMode; |
| 1224 GrCoordTransform fBackgroundTransform; | 1223 GrCoordTransform fBackgroundTransform; |
| 1225 GrTextureAccess fBackgroundAccess; | 1224 GrTextureAccess fBackgroundAccess; |
| 1226 | 1225 |
| 1227 typedef GrEffect INHERITED; | 1226 typedef GrEffect INHERITED; |
| 1228 }; | 1227 }; |
| (...skipping 728 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1957 } else { | 1956 } else { |
| 1958 proc16 = rec.fProc16_General; | 1957 proc16 = rec.fProc16_General; |
| 1959 } | 1958 } |
| 1960 } | 1959 } |
| 1961 return proc16; | 1960 return proc16; |
| 1962 } | 1961 } |
| 1963 | 1962 |
| 1964 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_START(SkXfermode) | 1963 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_START(SkXfermode) |
| 1965 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkProcCoeffXfermode) | 1964 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkProcCoeffXfermode) |
| 1966 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_END | 1965 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_END |
| OLD | NEW |