| /* |
| * Copyright 2015 Google Inc. |
| * |
| * Use of this source code is governed by a BSD-style license that can be |
| * found in the LICENSE file. |
| */ |
| |
| #include "src/gpu/glsl/GrGLSLBlend.h" |
| #include "src/gpu/glsl/GrGLSLFragmentShaderBuilder.h" |
| #include "src/gpu/glsl/GrGLSLProgramBuilder.h" |
| |
| namespace GrGLSLBlend { |
| |
| const char* BlendFuncName(SkBlendMode mode) { |
| switch (mode) { |
| case SkBlendMode::kClear: return "blend_clear"; |
| case SkBlendMode::kSrc: return "blend_src"; |
| case SkBlendMode::kDst: return "blend_dst"; |
| case SkBlendMode::kSrcOver: return "blend_src_over"; |
| case SkBlendMode::kDstOver: return "blend_dst_over"; |
| case SkBlendMode::kSrcIn: return "blend_src_in"; |
| case SkBlendMode::kDstIn: return "blend_dst_in"; |
| case SkBlendMode::kSrcOut: return "blend_src_out"; |
| case SkBlendMode::kDstOut: return "blend_dst_out"; |
| case SkBlendMode::kSrcATop: return "blend_src_atop"; |
| case SkBlendMode::kDstATop: return "blend_dst_atop"; |
| case SkBlendMode::kXor: return "blend_xor"; |
| case SkBlendMode::kPlus: return "blend_plus"; |
| case SkBlendMode::kModulate: return "blend_modulate"; |
| case SkBlendMode::kScreen: return "blend_screen"; |
| case SkBlendMode::kOverlay: return "blend_overlay"; |
| case SkBlendMode::kDarken: return "blend_darken"; |
| case SkBlendMode::kLighten: return "blend_lighten"; |
| case SkBlendMode::kColorDodge: return "blend_color_dodge"; |
| case SkBlendMode::kColorBurn: return "blend_color_burn"; |
| case SkBlendMode::kHardLight: return "blend_hard_light"; |
| case SkBlendMode::kSoftLight: return "blend_soft_light"; |
| case SkBlendMode::kDifference: return "blend_difference"; |
| case SkBlendMode::kExclusion: return "blend_exclusion"; |
| case SkBlendMode::kMultiply: return "blend_multiply"; |
| case SkBlendMode::kHue: return "blend_hue"; |
| case SkBlendMode::kSaturation: return "blend_saturation"; |
| case SkBlendMode::kColor: return "blend_color"; |
| case SkBlendMode::kLuminosity: return "blend_luminosity"; |
| } |
| SkUNREACHABLE; |
| } |
| |
| void AppendMode(GrGLSLShaderBuilder* fsBuilder, |
| const char* srcColor, |
| const char* dstColor, |
| const char* outColor, |
| SkBlendMode mode) { |
| fsBuilder->codeAppendf("%s = %s(%s, %s);", outColor, BlendFuncName(mode), srcColor, dstColor); |
| } |
| |
| } // namespace GrGLSLBlend |