blob: a91bbb5fa9091a9c450ca6a993c6fce386828681 [file] [log] [blame]
bsalomonae4738f2015-09-15 15:33:27 -07001/*
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 Reedd4706732016-11-15 16:44:34 -05007
Mike Kleinc0bd9f92019-04-23 12:05:21 -05008#include "src/gpu/glsl/GrGLSLBlend.h"
9#include "src/gpu/glsl/GrGLSLFragmentShaderBuilder.h"
10#include "src/gpu/glsl/GrGLSLProgramBuilder.h"
bsalomonae4738f2015-09-15 15:33:27 -070011
egdaniel2d721d32015-11-11 13:06:05 -080012void GrGLSLBlend::AppendMode(GrGLSLFragmentBuilder* fsBuilder, const char* srcColor,
bsalomonae4738f2015-09-15 15:33:27 -070013 const char* dstColor, const char* outColor,
Mike Reed7d954ad2016-10-28 15:42:34 -040014 SkBlendMode mode) {
Brian Salomonf8c187c2019-12-19 14:41:57 -050015 // 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;
bsalomonae4738f2015-09-15 15:33:27 -070048 }
Brian Salomonf8c187c2019-12-19 14:41:57 -050049 fsBuilder->codeAppendf("%s = blend_%s(%s, %s);", outColor, name, srcColor, dstColor);
egdanielf34b2932015-12-01 13:54:06 -080050}