| 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 1117 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1128 return drawEffect.castEffect<XferEffect>().mode(); | 1128 return drawEffect.castEffect<XferEffect>().mode(); |
| 1129 } | 1129 } |
| 1130 | 1130 |
| 1131 virtual void setData(const GrGLUniformManager&, const GrDrawEffect&) SK_
OVERRIDE {} | 1131 virtual void setData(const GrGLUniformManager&, const GrDrawEffect&) SK_
OVERRIDE {} |
| 1132 | 1132 |
| 1133 private: | 1133 private: |
| 1134 static void HardLight(GrGLShaderBuilder* builder, | 1134 static void HardLight(GrGLShaderBuilder* builder, |
| 1135 const char* final, | 1135 const char* final, |
| 1136 const char* src, | 1136 const char* src, |
| 1137 const char* dst) { | 1137 const char* dst) { |
| 1138 builder->fsCodeAppendf("\t\t%s.rgb = mix(2.0 * %s.rgb * %s.rgb, ", | 1138 static const char kComponents[] = {'r', 'g', 'b'}; |
| 1139 final, src, dst); | 1139 for (size_t i = 0; i < SK_ARRAY_COUNT(kComponents); ++i) { |
| 1140 builder->fsCodeAppendf("%s.aaa * %s.aaa - 2.0 * (%s.aaa - %s.rgb) *
(%s.aaa - %s.rgb),", | 1140 char component = kComponents[i]; |
| 1141 src, dst, dst, dst, src, src); | 1141 builder->fsCodeAppendf("\t\tif (2.0 * %s.%c <= %s.a) {\n", src,
component, src); |
| 1142 builder->fsCodeAppendf("vec3(greaterThan(2.0 * %s.rgb, %s.aaa)));\n"
, | 1142 builder->fsCodeAppendf("\t\t\t%s.%c = 2.0 * %s.%c * %s.%c;\n", f
inal, component, src, component, dst, component); |
| 1143 src, src); | 1143 builder->fsCodeAppend("\t\t} else {\n"); |
| 1144 builder->fsCodeAppendf("\t\t\t%s.%c = %s.a * %s.a - 2.0 * (%s.a
- %s.%c) * (%s.a - %s.%c);\n", |
| 1145 final, component, src, dst, dst, dst, com
ponent, src, src, component); |
| 1146 builder->fsCodeAppend("\t\t}\n"); |
| 1147 } |
| 1144 builder->fsCodeAppendf("\t\t%s.rgb += %s.rgb * (1.0 - %s.a) + %s.rgb
* (1.0 - %s.a);\n", | 1148 builder->fsCodeAppendf("\t\t%s.rgb += %s.rgb * (1.0 - %s.a) + %s.rgb
* (1.0 - %s.a);\n", |
| 1145 final, src, dst, dst, src); | 1149 final, src, dst, dst, src); |
| 1146 } | 1150 } |
| 1147 | 1151 |
| 1148 // Does one component of color-dodge | 1152 // Does one component of color-dodge |
| 1149 static void ColorDodgeComponent(GrGLShaderBuilder* builder, | 1153 static void ColorDodgeComponent(GrGLShaderBuilder* builder, |
| 1150 const char* final, | 1154 const char* final, |
| 1151 const char* src, | 1155 const char* src, |
| 1152 const char* dst, | 1156 const char* dst, |
| 1153 const char component) { | 1157 const char component) { |
| (...skipping 205 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1359 SkXfermode::Mode fMode; | 1363 SkXfermode::Mode fMode; |
| 1360 | 1364 |
| 1361 typedef GrEffect INHERITED; | 1365 typedef GrEffect INHERITED; |
| 1362 }; | 1366 }; |
| 1363 | 1367 |
| 1364 GR_DEFINE_EFFECT_TEST(XferEffect); | 1368 GR_DEFINE_EFFECT_TEST(XferEffect); |
| 1365 GrEffectRef* XferEffect::TestCreate(SkMWCRandom* rand, | 1369 GrEffectRef* XferEffect::TestCreate(SkMWCRandom* rand, |
| 1366 GrContext*, | 1370 GrContext*, |
| 1367 const GrDrawTargetCaps&, | 1371 const GrDrawTargetCaps&, |
| 1368 GrTexture*[]) { | 1372 GrTexture*[]) { |
| 1369 int mode; | 1373 int mode = rand->nextRangeU(SkXfermode::kLastCoeffMode + 1, SkXfermode::kLas
tSeparableMode); |
| 1370 do { | |
| 1371 mode = rand->nextRangeU(SkXfermode::kLastCoeffMode + 1, SkXfermode::kLas
tSeparableMode); | |
| 1372 } while (mode == SkXfermode::kHardLight_Mode); | |
| 1373 | 1374 |
| 1374 static AutoEffectUnref gEffect(SkNEW_ARGS(XferEffect, (static_cast<SkXfermod
e::Mode>(mode)))); | 1375 static AutoEffectUnref gEffect(SkNEW_ARGS(XferEffect, (static_cast<SkXfermod
e::Mode>(mode)))); |
| 1375 return CreateEffectRef(gEffect); | 1376 return CreateEffectRef(gEffect); |
| 1376 } | 1377 } |
| 1377 | 1378 |
| 1378 #endif | 1379 #endif |
| 1379 | 1380 |
| 1380 /////////////////////////////////////////////////////////////////////////////// | 1381 /////////////////////////////////////////////////////////////////////////////// |
| 1381 /////////////////////////////////////////////////////////////////////////////// | 1382 /////////////////////////////////////////////////////////////////////////////// |
| 1382 | 1383 |
| (...skipping 585 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1968 return proc16; | 1969 return proc16; |
| 1969 } | 1970 } |
| 1970 | 1971 |
| 1971 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_START(SkXfermode) | 1972 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_START(SkXfermode) |
| 1972 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkProcCoeffXfermode) | 1973 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkProcCoeffXfermode) |
| 1973 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkClearXfermode) | 1974 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkClearXfermode) |
| 1974 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkSrcXfermode) | 1975 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkSrcXfermode) |
| 1975 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkDstInXfermode) | 1976 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkDstInXfermode) |
| 1976 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkDstOutXfermode) | 1977 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkDstOutXfermode) |
| 1977 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_END | 1978 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_END |
| OLD | NEW |