bsalomon | ae4738f | 2015-09-15 15:33:27 -0700 | [diff] [blame] | 1 | /* |
| 2 | * Copyright 2015 Google Inc. |
| 3 | * |
| 4 | * Use of this source code is governed by a BSD-style license that can be |
| 5 | * found in the LICENSE file. |
| 6 | */ |
Mike Reed | d470673 | 2016-11-15 16:44:34 -0500 | [diff] [blame] | 7 | |
Mike Klein | c0bd9f9 | 2019-04-23 12:05:21 -0500 | [diff] [blame] | 8 | #include "src/gpu/glsl/GrGLSLBlend.h" |
| 9 | #include "src/gpu/glsl/GrGLSLFragmentShaderBuilder.h" |
| 10 | #include "src/gpu/glsl/GrGLSLProgramBuilder.h" |
bsalomon | ae4738f | 2015-09-15 15:33:27 -0700 | [diff] [blame] | 11 | |
egdaniel | 2d721d3 | 2015-11-11 13:06:05 -0800 | [diff] [blame] | 12 | void GrGLSLBlend::AppendMode(GrGLSLFragmentBuilder* fsBuilder, const char* srcColor, |
bsalomon | ae4738f | 2015-09-15 15:33:27 -0700 | [diff] [blame] | 13 | const char* dstColor, const char* outColor, |
Mike Reed | 7d954ad | 2016-10-28 15:42:34 -0400 | [diff] [blame] | 14 | SkBlendMode mode) { |
Brian Salomon | f8c187c | 2019-12-19 14:41:57 -0500 | [diff] [blame] | 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; |
| 18 | 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; |
bsalomon | ae4738f | 2015-09-15 15:33:27 -0700 | [diff] [blame] | 48 | } |
Brian Salomon | f8c187c | 2019-12-19 14:41:57 -0500 | [diff] [blame] | 49 | fsBuilder->codeAppendf("%s = blend_%s(%s, %s);", outColor, name, srcColor, dstColor); |
egdaniel | f34b293 | 2015-12-01 13:54:06 -0800 | [diff] [blame] | 50 | } |