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 |