OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2014 Google Inc. | 2 * Copyright 2014 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 "GrDefaultGeoProcFactory.h" | 8 #include "GrDefaultGeoProcFactory.h" |
9 | 9 |
10 #include "GrDrawState.h" | 10 #include "GrDrawState.h" |
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
76 theirs.fInputColorType, theirs.fColor) && | 76 theirs.fInputColorType, theirs.fColor) && |
77 CanCombineOutput(mine.fInputCoverageType, mine.fCoverage, | 77 CanCombineOutput(mine.fInputCoverageType, mine.fCoverage, |
78 theirs.fInputCoverageType, theirs.fCoverage); | 78 theirs.fInputCoverageType, theirs.fCoverage); |
79 } | 79 } |
80 | 80 |
81 class GLProcessor : public GrGLGeometryProcessor { | 81 class GLProcessor : public GrGLGeometryProcessor { |
82 public: | 82 public: |
83 GLProcessor(const GrGeometryProcessor& gp, const GrBatchTracker&) | 83 GLProcessor(const GrGeometryProcessor& gp, const GrBatchTracker&) |
84 : fColor(GrColor_ILLEGAL), fCoverage(0xff) {} | 84 : fColor(GrColor_ILLEGAL), fCoverage(0xff) {} |
85 | 85 |
86 void emitCode(const EmitArgs& args) SK_OVERRIDE { | 86 void onEmitCode(EmitArgs& args) SK_OVERRIDE { |
87 const DefaultGeoProc& gp = args.fGP.cast<DefaultGeoProc>(); | 87 const DefaultGeoProc& gp = args.fGP.cast<DefaultGeoProc>(); |
88 GrGLGPBuilder* pb = args.fPB; | 88 GrGLGPBuilder* pb = args.fPB; |
89 GrGLVertexBuilder* vs = pb->getVertexShaderBuilder(); | 89 GrGLVertexBuilder* vs = pb->getVertexShaderBuilder(); |
90 GrGLGPFragmentBuilder* fs = args.fPB->getFragmentShaderBuilder(); | 90 GrGLGPFragmentBuilder* fs = args.fPB->getFragmentShaderBuilder(); |
91 const BatchTracker& local = args.fBT.cast<BatchTracker>(); | 91 const BatchTracker& local = args.fBT.cast<BatchTracker>(); |
92 | 92 |
93 vs->codeAppendf("%s = %s;", vs->positionCoords(), gp.inPosition()->f
Name); | 93 // emit attributes |
| 94 vs->emitAttributes(gp); |
94 | 95 |
95 // Setup pass through color | 96 // Setup pass through color |
96 this->setupColorPassThrough(pb, local.fInputColorType, args.fOutputC
olor, gp.inColor(), | 97 this->setupColorPassThrough(pb, local.fInputColorType, args.fOutputC
olor, gp.inColor(), |
97 &fColorUniform); | 98 &fColorUniform); |
98 | 99 |
99 // Setup local coords if needed | |
100 if (gp.inLocalCoords()) { | |
101 vs->codeAppendf("%s = %s;", vs->localCoords(), gp.inLocalCoords(
)->fName); | |
102 } else { | |
103 vs->codeAppendf("%s = %s;", vs->localCoords(), gp.inPosition()->
fName); | |
104 } | |
105 | |
106 // setup uniform viewMatrix | 100 // setup uniform viewMatrix |
107 this->addUniformViewMatrix(pb); | 101 this->addUniformViewMatrix(pb); |
108 | 102 |
109 // setup position varying | 103 // Setup position |
110 vs->codeAppendf("%s = %s * vec3(%s, 1);", vs->glPosition(), this->uV
iewM(), | 104 vs->codeAppendf("%s = %s * vec3(%s, 1);", this->position(), this->u
ViewM(), |
111 gp.inPosition()->fName); | 105 gp.inPosition()->fName); |
112 | 106 |
| 107 if (gp.inLocalCoords()) { |
| 108 // emit transforms with explicit local coords |
| 109 this->emitTransforms(pb, this->position(), gp.inLocalCoords()->
fName, |
| 110 gp.localMatrix(), args.fTransformsIn, args.
fTransformsOut); |
| 111 } else { |
| 112 // emit transforms with position |
| 113 this->emitTransforms(pb, this->position(), gp.inPosition()->fNa
me, |
| 114 gp.localMatrix(), args.fTransformsIn, args.
fTransformsOut); |
| 115 } |
| 116 |
113 // Setup coverage as pass through | 117 // Setup coverage as pass through |
114 if (kUniform_GrGPInput == local.fInputCoverageType) { | 118 if (kUniform_GrGPInput == local.fInputCoverageType) { |
115 const char* fragCoverage; | 119 const char* fragCoverage; |
116 fCoverageUniform = pb->addUniform(GrGLProgramBuilder::kFragment_
Visibility, | 120 fCoverageUniform = pb->addUniform(GrGLProgramBuilder::kFragment_
Visibility, |
117 kFloat_GrSLType, | 121 kFloat_GrSLType, |
118 kDefault_GrSLPrecision, | 122 kDefault_GrSLPrecision, |
119 "Coverage", | 123 "Coverage", |
120 &fragCoverage); | 124 &fragCoverage); |
121 fs->codeAppendf("%s = vec4(%s);", args.fOutputCoverage, fragCove
rage); | 125 fs->codeAppendf("%s = vec4(%s);", args.fOutputCoverage, fragCove
rage); |
122 } else if (kAttribute_GrGPInput == local.fInputCoverageType) { | 126 } else if (kAttribute_GrGPInput == local.fInputCoverageType) { |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
167 | 171 |
168 typedef GrGLGeometryProcessor INHERITED; | 172 typedef GrGLGeometryProcessor INHERITED; |
169 }; | 173 }; |
170 | 174 |
171 virtual void getGLProcessorKey(const GrBatchTracker& bt, | 175 virtual void getGLProcessorKey(const GrBatchTracker& bt, |
172 const GrGLCaps& caps, | 176 const GrGLCaps& caps, |
173 GrProcessorKeyBuilder* b) const SK_OVERRIDE { | 177 GrProcessorKeyBuilder* b) const SK_OVERRIDE { |
174 GLProcessor::GenKey(*this, bt, caps, b); | 178 GLProcessor::GenKey(*this, bt, caps, b); |
175 } | 179 } |
176 | 180 |
177 GrGLGeometryProcessor* createGLInstance(const GrBatchTracker& bt) const SK_O
VERRIDE { | 181 virtual GrGLPrimitiveProcessor* createGLInstance(const GrBatchTracker& bt, |
| 182 const GrGLCaps&) const SK_O
VERRIDE { |
178 return SkNEW_ARGS(GLProcessor, (*this, bt)); | 183 return SkNEW_ARGS(GLProcessor, (*this, bt)); |
179 } | 184 } |
180 | 185 |
181 private: | 186 private: |
182 DefaultGeoProc(uint32_t gpTypeFlags, | 187 DefaultGeoProc(uint32_t gpTypeFlags, |
183 GrColor color, | 188 GrColor color, |
184 const SkMatrix& viewMatrix, | 189 const SkMatrix& viewMatrix, |
185 const SkMatrix& localMatrix, | 190 const SkMatrix& localMatrix, |
186 bool opaqueVertexColors, | 191 bool opaqueVertexColors, |
187 uint8_t coverage) | 192 uint8_t coverage) |
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
277 const SkMatrix& local
Matrix, | 282 const SkMatrix& local
Matrix, |
278 bool opaqueVertexColo
rs, | 283 bool opaqueVertexColo
rs, |
279 uint8_t coverage) { | 284 uint8_t coverage) { |
280 return DefaultGeoProc::Create(gpTypeFlags, | 285 return DefaultGeoProc::Create(gpTypeFlags, |
281 color, | 286 color, |
282 viewMatrix, | 287 viewMatrix, |
283 localMatrix, | 288 localMatrix, |
284 opaqueVertexColors, | 289 opaqueVertexColors, |
285 coverage); | 290 coverage); |
286 } | 291 } |
OLD | NEW |