Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(4)

Side by Side Diff: src/gpu/effects/GrXfermodeFragmentProcessor.cpp

Issue 1457543003: Add ShaderBuilders to EmitArgs and remove gettings from ProgBuilder. (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Created 5 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/gpu/effects/GrTextureDomain.cpp ('k') | src/gpu/effects/GrYUVtoRGBEffect.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright 2015 Google Inc. 2 * Copyright 2015 Google Inc.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license that can be 4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file. 5 * found in the LICENSE file.
6 */ 6 */
7 7
8 #include "effects/GrXfermodeFragmentProcessor.h" 8 #include "effects/GrXfermodeFragmentProcessor.h"
9 9
10 #include "GrFragmentProcessor.h" 10 #include "GrFragmentProcessor.h"
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
82 } 82 }
83 83
84 GrGLSLFragmentProcessor* ComposeTwoFragmentProcessor::onCreateGLSLInstance() con st{ 84 GrGLSLFragmentProcessor* ComposeTwoFragmentProcessor::onCreateGLSLInstance() con st{
85 return new GLComposeTwoFragmentProcessor(*this); 85 return new GLComposeTwoFragmentProcessor(*this);
86 } 86 }
87 87
88 ///////////////////////////////////////////////////////////////////// 88 /////////////////////////////////////////////////////////////////////
89 89
90 void GLComposeTwoFragmentProcessor::emitCode(EmitArgs& args) { 90 void GLComposeTwoFragmentProcessor::emitCode(EmitArgs& args) {
91 91
92 GrGLSLFragmentBuilder* fsBuilder = args.fBuilder->getFragmentShaderBuilder() ; 92 GrGLSLFragmentBuilder* fragBuilder = args.fFragBuilder;
93 const ComposeTwoFragmentProcessor& cs = args.fFp.cast<ComposeTwoFragmentProc essor>(); 93 const ComposeTwoFragmentProcessor& cs = args.fFp.cast<ComposeTwoFragmentProc essor>();
94 94
95 const char* inputColor = nullptr; 95 const char* inputColor = nullptr;
96 if (args.fInputColor) { 96 if (args.fInputColor) {
97 inputColor = "inputColor"; 97 inputColor = "inputColor";
98 fsBuilder->codeAppendf("vec4 inputColor = vec4(%s.rgb, 1.0);", args.fInp utColor); 98 fragBuilder->codeAppendf("vec4 inputColor = vec4(%s.rgb, 1.0);", args.fI nputColor);
99 } 99 }
100 100
101 // declare outputColor and emit the code for each of the two children 101 // declare outputColor and emit the code for each of the two children
102 SkString srcColor("src"); 102 SkString srcColor("src");
103 this->emitChild(0, inputColor, &srcColor, args); 103 this->emitChild(0, inputColor, &srcColor, args);
104 104
105 SkString dstColor("dst"); 105 SkString dstColor("dst");
106 this->emitChild(1, inputColor, &dstColor, args); 106 this->emitChild(1, inputColor, &dstColor, args);
107 107
108 // emit blend code 108 // emit blend code
109 SkXfermode::Mode mode = cs.getMode(); 109 SkXfermode::Mode mode = cs.getMode();
110 fsBuilder->codeAppendf("// Compose Xfer Mode: %s\n", SkXfermode::ModeName(mo de)); 110 fragBuilder->codeAppendf("// Compose Xfer Mode: %s\n", SkXfermode::ModeName( mode));
111 GrGLSLBlend::AppendMode(fsBuilder, srcColor.c_str(), dstColor.c_str(), args. fOutputColor, mode); 111 GrGLSLBlend::AppendMode(fragBuilder,
112 srcColor.c_str(),
113 dstColor.c_str(),
114 args.fOutputColor,
115 mode);
112 116
113 // re-multiply the output color by the input color's alpha 117 // re-multiply the output color by the input color's alpha
114 if (args.fInputColor) { 118 if (args.fInputColor) {
115 fsBuilder->codeAppendf("%s *= %s.a;", args.fOutputColor, args.fInputColo r); 119 fragBuilder->codeAppendf("%s *= %s.a;", args.fOutputColor, args.fInputCo lor);
116 } 120 }
117 } 121 }
118 122
119 const GrFragmentProcessor* GrXfermodeFragmentProcessor::CreateFromTwoProcessors( 123 const GrFragmentProcessor* GrXfermodeFragmentProcessor::CreateFromTwoProcessors(
120 const GrFragmentProcessor* src, const GrFragmentProcessor* dst, SkXferm ode::Mode mode) { 124 const GrFragmentProcessor* src, const GrFragmentProcessor* dst, SkXferm ode::Mode mode) {
121 switch (mode) { 125 switch (mode) {
122 case SkXfermode::kClear_Mode: 126 case SkXfermode::kClear_Mode:
123 return GrConstColorProcessor::Create(GrColor_TRANSPARENT_BLACK, 127 return GrConstColorProcessor::Create(GrColor_TRANSPARENT_BLACK,
124 GrConstColorProcessor::kIgnore_ InputMode); 128 GrConstColorProcessor::kIgnore_ InputMode);
125 case SkXfermode::kSrc_Mode: 129 case SkXfermode::kSrc_Mode:
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after
212 typedef GrFragmentProcessor INHERITED; 216 typedef GrFragmentProcessor INHERITED;
213 }; 217 };
214 218
215 ////////////////////////////////////////////////////////////////////////////// 219 //////////////////////////////////////////////////////////////////////////////
216 220
217 class GLComposeOneFragmentProcessor : public GrGLSLFragmentProcessor { 221 class GLComposeOneFragmentProcessor : public GrGLSLFragmentProcessor {
218 public: 222 public:
219 GLComposeOneFragmentProcessor(const GrProcessor& processor) {} 223 GLComposeOneFragmentProcessor(const GrProcessor& processor) {}
220 224
221 void emitCode(EmitArgs& args) override { 225 void emitCode(EmitArgs& args) override {
222 GrGLSLFragmentBuilder* fsBuilder = args.fBuilder->getFragmentShaderBuild er(); 226 GrGLSLFragmentBuilder* fragBuilder = args.fFragBuilder;
223 SkXfermode::Mode mode = args.fFp.cast<ComposeOneFragmentProcessor>().mod e(); 227 SkXfermode::Mode mode = args.fFp.cast<ComposeOneFragmentProcessor>().mod e();
224 ComposeOneFragmentProcessor::Child child = 228 ComposeOneFragmentProcessor::Child child =
225 args.fFp.cast<ComposeOneFragmentProcessor>().child(); 229 args.fFp.cast<ComposeOneFragmentProcessor>().child();
226 SkString childColor("child"); 230 SkString childColor("child");
227 this->emitChild(0, nullptr, &childColor, args); 231 this->emitChild(0, nullptr, &childColor, args);
228 232
229 const char* inputColor = args.fInputColor; 233 const char* inputColor = args.fInputColor;
230 // We don't try to optimize for this case at all 234 // We don't try to optimize for this case at all
231 if (!inputColor) { 235 if (!inputColor) {
232 fsBuilder->codeAppendf("const vec4 ones = vec4(1);"); 236 fragBuilder->codeAppendf("const vec4 ones = vec4(1);");
233 inputColor = "ones"; 237 inputColor = "ones";
234 } 238 }
235 239
236 // emit blend code 240 // emit blend code
237 fsBuilder->codeAppendf("// Compose Xfer Mode: %s\n", SkXfermode::ModeNam e(mode)); 241 fragBuilder->codeAppendf("// Compose Xfer Mode: %s\n", SkXfermode::ModeN ame(mode));
238 const char* childStr = childColor.c_str(); 242 const char* childStr = childColor.c_str();
239 if (ComposeOneFragmentProcessor::kDst_Child == child) { 243 if (ComposeOneFragmentProcessor::kDst_Child == child) {
240 GrGLSLBlend::AppendMode(fsBuilder, inputColor, childStr, args.fOutpu tColor, mode); 244 GrGLSLBlend::AppendMode(fragBuilder, inputColor, childStr, args.fOut putColor, mode);
241 } else { 245 } else {
242 GrGLSLBlend::AppendMode(fsBuilder, childStr, inputColor, args.fOutpu tColor, mode); 246 GrGLSLBlend::AppendMode(fragBuilder, childStr, inputColor, args.fOut putColor, mode);
243 } 247 }
244 } 248 }
245 249
246 private: 250 private:
247 typedef GrGLSLFragmentProcessor INHERITED; 251 typedef GrGLSLFragmentProcessor INHERITED;
248 }; 252 };
249 253
250 ///////////////////////////////////////////////////////////////////// 254 /////////////////////////////////////////////////////////////////////
251 255
252 GR_DEFINE_FRAGMENT_PROCESSOR_TEST(ComposeOneFragmentProcessor); 256 GR_DEFINE_FRAGMENT_PROCESSOR_TEST(ComposeOneFragmentProcessor);
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
290 case SkXfermode::kClear_Mode: 294 case SkXfermode::kClear_Mode:
291 return GrConstColorProcessor::Create(GrColor_TRANSPARENT_BLACK, 295 return GrConstColorProcessor::Create(GrColor_TRANSPARENT_BLACK,
292 GrConstColorProcessor::kIgnore_ InputMode); 296 GrConstColorProcessor::kIgnore_ InputMode);
293 case SkXfermode::kDst_Mode: 297 case SkXfermode::kDst_Mode:
294 return nullptr; 298 return nullptr;
295 default: 299 default:
296 return new ComposeOneFragmentProcessor(src, mode, 300 return new ComposeOneFragmentProcessor(src, mode,
297 ComposeOneFragmentProcessor:: kSrc_Child); 301 ComposeOneFragmentProcessor:: kSrc_Child);
298 } 302 }
299 } 303 }
OLDNEW
« no previous file with comments | « src/gpu/effects/GrTextureDomain.cpp ('k') | src/gpu/effects/GrYUVtoRGBEffect.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698