|
9 | 9 | #include "src/gpu/glsl/GrGLSLFragmentShaderBuilder.h"
|
10 | 10 | #include "src/gpu/glsl/GrGLSLProgramBuilder.h"
|
11 | 11 |
|
12 |
| -void GrGLSLBlend::AppendMode(GrGLSLFragmentBuilder* fsBuilder, const char* srcColor, |
13 |
| - const char* dstColor, const char* outColor, |
14 |
| - SkBlendMode mode) { |
15 |
| - // When and if the SkSL compiler supports inlining we could replace this with |
16 |
| - // out = blend(mode, src, dst) where mode is a literal. |
17 |
| - const char* name; |
| 12 | +namespace GrGLSLBlend { |
| 13 | + |
| 14 | +const char* BlendFuncName(SkBlendMode mode) { |
18 | 15 | switch (mode) {
|
19 |
| - case SkBlendMode::kClear: name = "clear"; break; |
20 |
| - case SkBlendMode::kSrc: name = "src"; break; |
21 |
| - case SkBlendMode::kDst: name = "dst"; break; |
22 |
| - case SkBlendMode::kSrcOver: name = "src_over"; break; |
23 |
| - case SkBlendMode::kDstOver: name = "dst_over"; break; |
24 |
| - case SkBlendMode::kSrcIn: name = "src_in"; break; |
25 |
| - case SkBlendMode::kDstIn: name = "dst_in"; break; |
26 |
| - case SkBlendMode::kSrcOut: name = "src_out"; break; |
27 |
| - case SkBlendMode::kDstOut: name = "dst_out"; break; |
28 |
| - case SkBlendMode::kSrcATop: name = "src_atop"; break; |
29 |
| - case SkBlendMode::kDstATop: name = "dst_atop"; break; |
30 |
| - case SkBlendMode::kXor: name = "xor"; break; |
31 |
| - case SkBlendMode::kPlus: name = "plus"; break; |
32 |
| - case SkBlendMode::kModulate: name = "modulate"; break; |
33 |
| - case SkBlendMode::kScreen: name = "screen"; break; |
34 |
| - case SkBlendMode::kOverlay: name = "overlay"; break; |
35 |
| - case SkBlendMode::kDarken: name = "darken"; break; |
36 |
| - case SkBlendMode::kLighten: name = "lighten"; break; |
37 |
| - case SkBlendMode::kColorDodge: name = "color_dodge"; break; |
38 |
| - case SkBlendMode::kColorBurn: name = "color_burn"; break; |
39 |
| - case SkBlendMode::kHardLight: name = "hard_light"; break; |
40 |
| - case SkBlendMode::kSoftLight: name = "soft_light"; break; |
41 |
| - case SkBlendMode::kDifference: name = "difference"; break; |
42 |
| - case SkBlendMode::kExclusion: name = "exclusion"; break; |
43 |
| - case SkBlendMode::kMultiply: name = "multiply"; break; |
44 |
| - case SkBlendMode::kHue: name = "hue"; break; |
45 |
| - case SkBlendMode::kSaturation: name = "saturation"; break; |
46 |
| - case SkBlendMode::kColor: name = "color"; break; |
47 |
| - case SkBlendMode::kLuminosity: name = "luminosity"; break; |
| 16 | + case SkBlendMode::kClear: return "blend_clear"; |
| 17 | + case SkBlendMode::kSrc: return "blend_src"; |
| 18 | + case SkBlendMode::kDst: return "blend_dst"; |
| 19 | + case SkBlendMode::kSrcOver: return "blend_src_over"; |
| 20 | + case SkBlendMode::kDstOver: return "blend_dst_over"; |
| 21 | + case SkBlendMode::kSrcIn: return "blend_src_in"; |
| 22 | + case SkBlendMode::kDstIn: return "blend_dst_in"; |
| 23 | + case SkBlendMode::kSrcOut: return "blend_src_out"; |
| 24 | + case SkBlendMode::kDstOut: return "blend_dst_out"; |
| 25 | + case SkBlendMode::kSrcATop: return "blend_src_atop"; |
| 26 | + case SkBlendMode::kDstATop: return "blend_dst_atop"; |
| 27 | + case SkBlendMode::kXor: return "blend_xor"; |
| 28 | + case SkBlendMode::kPlus: return "blend_plus"; |
| 29 | + case SkBlendMode::kModulate: return "blend_modulate"; |
| 30 | + case SkBlendMode::kScreen: return "blend_screen"; |
| 31 | + case SkBlendMode::kOverlay: return "blend_overlay"; |
| 32 | + case SkBlendMode::kDarken: return "blend_darken"; |
| 33 | + case SkBlendMode::kLighten: return "blend_lighten"; |
| 34 | + case SkBlendMode::kColorDodge: return "blend_color_dodge"; |
| 35 | + case SkBlendMode::kColorBurn: return "blend_color_burn"; |
| 36 | + case SkBlendMode::kHardLight: return "blend_hard_light"; |
| 37 | + case SkBlendMode::kSoftLight: return "blend_soft_light"; |
| 38 | + case SkBlendMode::kDifference: return "blend_difference"; |
| 39 | + case SkBlendMode::kExclusion: return "blend_exclusion"; |
| 40 | + case SkBlendMode::kMultiply: return "blend_multiply"; |
| 41 | + case SkBlendMode::kHue: return "blend_hue"; |
| 42 | + case SkBlendMode::kSaturation: return "blend_saturation"; |
| 43 | + case SkBlendMode::kColor: return "blend_color"; |
| 44 | + case SkBlendMode::kLuminosity: return "blend_luminosity"; |
48 | 45 | }
|
49 |
| - fsBuilder->codeAppendf("%s = blend_%s(%s, %s);", outColor, name, srcColor, dstColor); |
| 46 | + SkUNREACHABLE; |
| 47 | +} |
| 48 | + |
| 49 | +void AppendMode(GrGLSLFragmentBuilder* fsBuilder, |
| 50 | + const char* srcColor, |
| 51 | + const char* dstColor, |
| 52 | + const char* outColor, |
| 53 | + SkBlendMode mode) { |
| 54 | + fsBuilder->codeAppendf("%s = %s(%s, %s);", outColor, BlendFuncName(mode), srcColor, dstColor); |
50 | 55 | }
|
| 56 | + |
| 57 | +} // namespace GrGLSLBlend |
0 commit comments