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

Side by Side Diff: src/gpu/GrDefaultGeoProcFactory.cpp

Issue 822423004: Move most of the transform logic into the primitive processors (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: cleanup Created 5 years, 11 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 | « src/gpu/GrAAConvexPathRenderer.cpp ('k') | src/gpu/GrGeometryProcessor.h » ('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 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
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
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
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 }
OLDNEW
« no previous file with comments | « src/gpu/GrAAConvexPathRenderer.cpp ('k') | src/gpu/GrGeometryProcessor.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698