| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright 2013 Google Inc. | 2 * Copyright 2013 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 "GrGLPathProcessor.h" | 8 #include "GrGLPathProcessor.h" |
| 9 | 9 |
| 10 #include "GrPathProcessor.h" | 10 #include "GrPathProcessor.h" |
| 11 #include "GrGLGpu.h" | 11 #include "GrGLGpu.h" |
| 12 #include "GrGLPathRendering.h" | 12 #include "GrGLPathRendering.h" |
| 13 | 13 |
| 14 GrGLPathProcessor::GrGLPathProcessor(const GrPathProcessor&, const GrBatchTracke
r&) | 14 GrGLPathProcessor::GrGLPathProcessor() |
| 15 : fColor(GrColor_ILLEGAL) {} | 15 : fColor(GrColor_ILLEGAL) {} |
| 16 | 16 |
| 17 void GrGLPathProcessor::emitCode(EmitArgs& args) { | 17 void GrGLPathProcessor::emitCode(EmitArgs& args) { |
| 18 GrGLGPBuilder* pb = args.fPB; | 18 GrGLGPBuilder* pb = args.fPB; |
| 19 GrGLFragmentBuilder* fs = args.fPB->getFragmentShaderBuilder(); | 19 GrGLFragmentBuilder* fs = args.fPB->getFragmentShaderBuilder(); |
| 20 const GrPathProcessor& pathProc = args.fGP.cast<GrPathProcessor>(); | 20 const GrPathProcessor& pathProc = args.fGP.cast<GrPathProcessor>(); |
| 21 | 21 |
| 22 // emit transforms | 22 // emit transforms |
| 23 this->emitTransforms(args.fPB, args.fTransformsIn, args.fTransformsOut); | 23 this->emitTransforms(args.fPB, args.fTransformsIn, args.fTransformsOut); |
| 24 | 24 |
| 25 // Setup uniform color | 25 // Setup uniform color |
| 26 if (pathProc.opts().readsColor()) { | 26 if (pathProc.opts().readsColor()) { |
| 27 const char* stagedLocalVarName; | 27 const char* stagedLocalVarName; |
| 28 fColorUniform = pb->addUniform(GrGLProgramBuilder::kFragment_Visibility, | 28 fColorUniform = pb->addUniform(GrGLProgramBuilder::kFragment_Visibility, |
| 29 kVec4f_GrSLType, | 29 kVec4f_GrSLType, |
| 30 kDefault_GrSLPrecision, | 30 kDefault_GrSLPrecision, |
| 31 "Color", | 31 "Color", |
| 32 &stagedLocalVarName); | 32 &stagedLocalVarName); |
| 33 fs->codeAppendf("%s = %s;", args.fOutputColor, stagedLocalVarName); | 33 fs->codeAppendf("%s = %s;", args.fOutputColor, stagedLocalVarName); |
| 34 } | 34 } |
| 35 | 35 |
| 36 // setup constant solid coverage | 36 // setup constant solid coverage |
| 37 if (pathProc.opts().readsCoverage()) { | 37 if (pathProc.opts().readsCoverage()) { |
| 38 fs->codeAppendf("%s = vec4(1);", args.fOutputCoverage); | 38 fs->codeAppendf("%s = vec4(1);", args.fOutputCoverage); |
| 39 } | 39 } |
| 40 } | 40 } |
| 41 | 41 |
| 42 void GrGLPathProcessor::GenKey(const GrPathProcessor& pathProc, | 42 void GrGLPathProcessor::GenKey(const GrPathProcessor& pathProc, |
| 43 const GrBatchTracker& bt, | |
| 44 const GrGLSLCaps&, | 43 const GrGLSLCaps&, |
| 45 GrProcessorKeyBuilder* b) { | 44 GrProcessorKeyBuilder* b) { |
| 46 b->add32(SkToInt(pathProc.opts().readsColor()) | | 45 b->add32(SkToInt(pathProc.opts().readsColor()) | |
| 47 SkToInt(pathProc.opts().readsCoverage()) << 16); | 46 SkToInt(pathProc.opts().readsCoverage()) << 16); |
| 48 } | 47 } |
| 49 | 48 |
| 50 void GrGLPathProcessor::setData(const GrGLProgramDataManager& pdman, | 49 void GrGLPathProcessor::setData(const GrGLProgramDataManager& pdman, |
| 51 const GrPrimitiveProcessor& primProc, | 50 const GrPrimitiveProcessor& primProc) { |
| 52 const GrBatchTracker& bt) { | |
| 53 const GrPathProcessor& pathProc = primProc.cast<GrPathProcessor>(); | 51 const GrPathProcessor& pathProc = primProc.cast<GrPathProcessor>(); |
| 54 if (pathProc.opts().readsColor() && pathProc.color() != fColor) { | 52 if (pathProc.opts().readsColor() && pathProc.color() != fColor) { |
| 55 GrGLfloat c[4]; | 53 GrGLfloat c[4]; |
| 56 GrColorToRGBAFloat(pathProc.color(), c); | 54 GrColorToRGBAFloat(pathProc.color(), c); |
| 57 pdman.set4fv(fColorUniform, 1, c); | 55 pdman.set4fv(fColorUniform, 1, c); |
| 58 fColor = pathProc.color(); | 56 fColor = pathProc.color(); |
| 59 } | 57 } |
| 60 } | 58 } |
| 61 | 59 |
| 62 void GrGLPathProcessor::emitTransforms(GrGLGPBuilder* pb, const TransformsIn& ti
n, | 60 void GrGLPathProcessor::emitTransforms(GrGLGPBuilder* pb, const TransformsIn& ti
n, |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 100 continue; | 98 continue; |
| 101 } | 99 } |
| 102 transforms[t].fCurrentValue = transform; | 100 transforms[t].fCurrentValue = transform; |
| 103 | 101 |
| 104 SkASSERT(transforms[t].fType == kVec2f_GrSLType || | 102 SkASSERT(transforms[t].fType == kVec2f_GrSLType || |
| 105 transforms[t].fType == kVec3f_GrSLType); | 103 transforms[t].fType == kVec3f_GrSLType); |
| 106 unsigned components = transforms[t].fType == kVec2f_GrSLType ? 2 : 3; | 104 unsigned components = transforms[t].fType == kVec2f_GrSLType ? 2 : 3; |
| 107 pdman.setPathFragmentInputTransform(transforms[t].fHandle.handle(), comp
onents, transform); | 105 pdman.setPathFragmentInputTransform(transforms[t].fHandle.handle(), comp
onents, transform); |
| 108 } | 106 } |
| 109 } | 107 } |
| OLD | NEW |