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

Side by Side Diff: src/core/SkComposeShader.cpp

Issue 1321253003: emitChild() takes an outputColor instead of generating one (Closed) Base URL: https://skia.googlesource.com/skia@cs3_composeshader2
Patch Set: rebase Created 5 years, 3 months 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 | « no previous file | src/gpu/effects/GrExtractAlphaFragmentProcessor.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 /* 2 /*
3 * Copyright 2006 The Android Open Source Project 3 * Copyright 2006 The Android Open Source Project
4 * 4 *
5 * Use of this source code is governed by a BSD-style license that can be 5 * Use of this source code is governed by a BSD-style license that can be
6 * found in the LICENSE file. 6 * found in the LICENSE file.
7 */ 7 */
8 8
9 9
10 #include "SkComposeShader.h" 10 #include "SkComposeShader.h"
(...skipping 265 matching lines...) Expand 10 before | Expand all | Expand 10 after
276 276
277 // Store alpha of input color and un-premultiply the input color by its alph a. We will 277 // Store alpha of input color and un-premultiply the input color by its alph a. We will
278 // re-multiply by this alpha after blending the output colors of the two chi ld procs. 278 // re-multiply by this alpha after blending the output colors of the two chi ld procs.
279 // This is because we don't want the paint's alpha to affect either child pr oc's output 279 // This is because we don't want the paint's alpha to affect either child pr oc's output
280 // before the blend; we want to apply the paint's alpha AFTER the blend. Thi s mirrors the 280 // before the blend; we want to apply the paint's alpha AFTER the blend. Thi s mirrors the
281 // software implementation of SkComposeShader. 281 // software implementation of SkComposeShader.
282 SkString inputAlpha("inputAlpha"); 282 SkString inputAlpha("inputAlpha");
283 fsBuilder->codeAppendf("float %s = %s.a;", inputAlpha.c_str(), args.fInputCo lor); 283 fsBuilder->codeAppendf("float %s = %s.a;", inputAlpha.c_str(), args.fInputCo lor);
284 fsBuilder->codeAppendf("%s /= %s.a;", args.fInputColor, args.fInputColor); 284 fsBuilder->codeAppendf("%s /= %s.a;", args.fInputColor, args.fInputColor);
285 285
286 // emit the code of the two child shaders 286 // declare outputColor and emit the code for each of the two children
287 SkString mangledOutputColorA; 287 SkString outputColorA(args.fOutputColor);
288 this->emitChild(0, args.fInputColor, &mangledOutputColorA, args); 288 outputColorA.append("_dst");
289 SkString mangledOutputColorB; 289 fsBuilder->codeAppendf("vec4 %s;\n", outputColorA.c_str());
290 this->emitChild(1, args.fInputColor, &mangledOutputColorB, args); 290 this->emitChild(0, args.fInputColor, outputColorA.c_str(), args);
291
292 SkString outputColorB(args.fOutputColor);
293 outputColorB.append("_src");
294 fsBuilder->codeAppendf("vec4 %s;\n", outputColorB.c_str());
295 this->emitChild(1, args.fInputColor, outputColorB.c_str(), args);
291 296
292 // emit blend code 297 // emit blend code
293 SkXfermode::Mode mode = cs.getMode(); 298 SkXfermode::Mode mode = cs.getMode();
294 fsBuilder->codeAppend("{"); 299 fsBuilder->codeAppend("{");
295 fsBuilder->codeAppendf("// Compose Xfer Mode: %s\n", SkXfermode::ModeName(mo de)); 300 fsBuilder->codeAppendf("// Compose Xfer Mode: %s\n", SkXfermode::ModeName(mo de));
296 GrGLBlend::AppendPorterDuffBlend(fsBuilder, mangledOutputColorB.c_str(), 301 GrGLBlend::AppendPorterDuffBlend(fsBuilder, outputColorB.c_str(),
297 mangledOutputColorA.c_str(), args.fOutputCo lor, mode); 302 outputColorA.c_str(), args.fOutputColor, mo de);
298 fsBuilder->codeAppend("}"); 303 fsBuilder->codeAppend("}");
299 304
300 // re-multiply the output color by the input color's alpha 305 // re-multiply the output color by the input color's alpha
301 fsBuilder->codeAppendf("%s *= %s;", args.fOutputColor, inputAlpha.c_str()); 306 fsBuilder->codeAppendf("%s *= %s;", args.fOutputColor, inputAlpha.c_str());
302 } 307 }
303 308
304 ///////////////////////////////////////////////////////////////////// 309 /////////////////////////////////////////////////////////////////////
305 310
306 const GrFragmentProcessor* SkComposeShader::asFragmentProcessor(GrContext* conte xt, 311 const GrFragmentProcessor* SkComposeShader::asFragmentProcessor(GrContext* conte xt,
307 const SkMatrix& view M, 312 const SkMatrix& view M,
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
355 if (fMode) { 360 if (fMode) {
356 str->append(" Xfermode: "); 361 str->append(" Xfermode: ");
357 fMode->toString(str); 362 fMode->toString(str);
358 } 363 }
359 364
360 this->INHERITED::toString(str); 365 this->INHERITED::toString(str);
361 366
362 str->append(")"); 367 str->append(")");
363 } 368 }
364 #endif 369 #endif
OLDNEW
« no previous file with comments | « no previous file | src/gpu/effects/GrExtractAlphaFragmentProcessor.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698