1cb93a386Sopenharmony_ci/* 2cb93a386Sopenharmony_ci * Copyright 2015 Google Inc. 3cb93a386Sopenharmony_ci * 4cb93a386Sopenharmony_ci * Use of this source code is governed by a BSD-style license that can be 5cb93a386Sopenharmony_ci * found in the LICENSE file. 6cb93a386Sopenharmony_ci */ 7cb93a386Sopenharmony_ci 8cb93a386Sopenharmony_ci#include "src/gpu/glsl/GrGLSLBlend.h" 9cb93a386Sopenharmony_ci#include "src/gpu/glsl/GrGLSLFragmentShaderBuilder.h" 10cb93a386Sopenharmony_ci#include "src/gpu/glsl/GrGLSLProgramBuilder.h" 11cb93a386Sopenharmony_ci 12cb93a386Sopenharmony_cinamespace GrGLSLBlend { 13cb93a386Sopenharmony_ci 14cb93a386Sopenharmony_ciconst char* BlendFuncName(SkBlendMode mode) { 15cb93a386Sopenharmony_ci switch (mode) { 16cb93a386Sopenharmony_ci case SkBlendMode::kClear: return "blend_clear"; 17cb93a386Sopenharmony_ci case SkBlendMode::kSrc: return "blend_src"; 18cb93a386Sopenharmony_ci case SkBlendMode::kDst: return "blend_dst"; 19cb93a386Sopenharmony_ci case SkBlendMode::kSrcOver: return "blend_src_over"; 20cb93a386Sopenharmony_ci case SkBlendMode::kDstOver: return "blend_dst_over"; 21cb93a386Sopenharmony_ci case SkBlendMode::kSrcIn: return "blend_src_in"; 22cb93a386Sopenharmony_ci case SkBlendMode::kDstIn: return "blend_dst_in"; 23cb93a386Sopenharmony_ci case SkBlendMode::kSrcOut: return "blend_src_out"; 24cb93a386Sopenharmony_ci case SkBlendMode::kDstOut: return "blend_dst_out"; 25cb93a386Sopenharmony_ci case SkBlendMode::kSrcATop: return "blend_src_atop"; 26cb93a386Sopenharmony_ci case SkBlendMode::kDstATop: return "blend_dst_atop"; 27cb93a386Sopenharmony_ci case SkBlendMode::kXor: return "blend_xor"; 28cb93a386Sopenharmony_ci case SkBlendMode::kPlus: return "blend_plus"; 29cb93a386Sopenharmony_ci case SkBlendMode::kModulate: return "blend_modulate"; 30cb93a386Sopenharmony_ci case SkBlendMode::kScreen: return "blend_screen"; 31cb93a386Sopenharmony_ci case SkBlendMode::kOverlay: return "blend_overlay"; 32cb93a386Sopenharmony_ci case SkBlendMode::kDarken: return "blend_darken"; 33cb93a386Sopenharmony_ci case SkBlendMode::kLighten: return "blend_lighten"; 34cb93a386Sopenharmony_ci case SkBlendMode::kColorDodge: return "blend_color_dodge"; 35cb93a386Sopenharmony_ci case SkBlendMode::kColorBurn: return "blend_color_burn"; 36cb93a386Sopenharmony_ci case SkBlendMode::kHardLight: return "blend_hard_light"; 37cb93a386Sopenharmony_ci case SkBlendMode::kSoftLight: return "blend_soft_light"; 38cb93a386Sopenharmony_ci case SkBlendMode::kDifference: return "blend_difference"; 39cb93a386Sopenharmony_ci case SkBlendMode::kExclusion: return "blend_exclusion"; 40cb93a386Sopenharmony_ci case SkBlendMode::kMultiply: return "blend_multiply"; 41cb93a386Sopenharmony_ci case SkBlendMode::kHue: return "blend_hue"; 42cb93a386Sopenharmony_ci case SkBlendMode::kSaturation: return "blend_saturation"; 43cb93a386Sopenharmony_ci case SkBlendMode::kColor: return "blend_color"; 44cb93a386Sopenharmony_ci case SkBlendMode::kLuminosity: return "blend_luminosity"; 45cb93a386Sopenharmony_ci } 46cb93a386Sopenharmony_ci SkUNREACHABLE; 47cb93a386Sopenharmony_ci} 48cb93a386Sopenharmony_ci 49cb93a386Sopenharmony_civoid AppendMode(GrGLSLShaderBuilder* fsBuilder, 50cb93a386Sopenharmony_ci const char* srcColor, 51cb93a386Sopenharmony_ci const char* dstColor, 52cb93a386Sopenharmony_ci const char* outColor, 53cb93a386Sopenharmony_ci SkBlendMode mode) { 54cb93a386Sopenharmony_ci fsBuilder->codeAppendf("%s = %s(%s, %s);", outColor, BlendFuncName(mode), srcColor, dstColor); 55cb93a386Sopenharmony_ci} 56cb93a386Sopenharmony_ci 57cb93a386Sopenharmony_ci} // namespace GrGLSLBlend 58