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

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

Issue 1275083002: Don't pass pipeline to GrBatch::generateGeometry() (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Created 5 years, 4 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/GrAAHairLinePathRenderer.cpp ('k') | src/gpu/GrAARectRenderer.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 2015 Google Inc. 3 * Copyright 2015 Google Inc.
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 #include "GrAALinearizingConvexPathRenderer.h" 9 #include "GrAALinearizingConvexPathRenderer.h"
10 10
(...skipping 166 matching lines...) Expand 10 before | Expand all | Expand 10 after
177 if (!idxs) { 177 if (!idxs) {
178 SkDebugf("Could not allocate indices\n"); 178 SkDebugf("Could not allocate indices\n");
179 return; 179 return;
180 } 180 }
181 memcpy(idxs, indices, indexCount * sizeof(uint16_t)); 181 memcpy(idxs, indices, indexCount * sizeof(uint16_t));
182 info.initIndexed(kTriangles_GrPrimitiveType, vertexBuffer, indexBuffer, firstVertex, 182 info.initIndexed(kTriangles_GrPrimitiveType, vertexBuffer, indexBuffer, firstVertex,
183 firstIndex, vertexCount, indexCount); 183 firstIndex, vertexCount, indexCount);
184 batchTarget->draw(info); 184 batchTarget->draw(info);
185 } 185 }
186 186
187 void generateGeometry(GrBatchTarget* batchTarget, const GrPipeline* pipeline ) override { 187 void generateGeometry(GrBatchTarget* batchTarget) override {
188 bool canTweakAlphaForCoverage = this->canTweakAlphaForCoverage(); 188 bool canTweakAlphaForCoverage = this->canTweakAlphaForCoverage();
189 189
190 // Setup GrGeometryProcessor 190 // Setup GrGeometryProcessor
191 SkAutoTUnref<const GrGeometryProcessor> gp(create_fill_gp(canTweakAlphaF orCoverage, 191 SkAutoTUnref<const GrGeometryProcessor> gp(create_fill_gp(canTweakAlphaF orCoverage,
192 this->viewMatr ix(), 192 this->viewMatr ix(),
193 this->usesLoca lCoords(), 193 this->usesLoca lCoords(),
194 this->coverage Ignored())); 194 this->coverage Ignored()));
195 if (!gp) { 195 if (!gp) {
196 SkDebugf("Couldn't create a GrGeometryProcessor\n"); 196 SkDebugf("Couldn't create a GrGeometryProcessor\n");
197 return; 197 return;
198 } 198 }
199 199
200 batchTarget->initDraw(gp, pipeline); 200 batchTarget->initDraw(gp, this->pipeline());
201 201
202 size_t vertexStride = gp->getVertexStride(); 202 size_t vertexStride = gp->getVertexStride();
203 203
204 SkASSERT(canTweakAlphaForCoverage ? 204 SkASSERT(canTweakAlphaForCoverage ?
205 vertexStride == sizeof(GrDefaultGeoProcFactory::PositionColorAt tr) : 205 vertexStride == sizeof(GrDefaultGeoProcFactory::PositionColorAt tr) :
206 vertexStride == sizeof(GrDefaultGeoProcFactory::PositionColorCo verageAttr)); 206 vertexStride == sizeof(GrDefaultGeoProcFactory::PositionColorCo verageAttr));
207 207
208 int instanceCount = fGeoData.count(); 208 int instanceCount = fGeoData.count();
209 209
210 int vertexCount = 0; 210 int vertexCount = 0;
211 int indexCount = 0; 211 int indexCount = 0;
212 int maxVertices = DEFAULT_BUFFER_SIZE; 212 int maxVertices = DEFAULT_BUFFER_SIZE;
213 int maxIndices = DEFAULT_BUFFER_SIZE; 213 int maxIndices = DEFAULT_BUFFER_SIZE;
214 uint8_t* vertices = (uint8_t*) malloc(maxVertices * vertexStride); 214 uint8_t* vertices = (uint8_t*) malloc(maxVertices * vertexStride);
215 uint16_t* indices = (uint16_t*) malloc(maxIndices * sizeof(uint16_t)); 215 uint16_t* indices = (uint16_t*) malloc(maxIndices * sizeof(uint16_t));
216 for (int i = 0; i < instanceCount; i++) { 216 for (int i = 0; i < instanceCount; i++) {
217 Geometry& args = fGeoData[i]; 217 Geometry& args = fGeoData[i];
218 GrAAConvexTessellator tess(args.fStrokeWidth, args.fJoin, args.fMite rLimit); 218 GrAAConvexTessellator tess(args.fStrokeWidth, args.fJoin, args.fMite rLimit);
219 219
220 if (!tess.tessellate(args.fViewMatrix, args.fPath)) { 220 if (!tess.tessellate(args.fViewMatrix, args.fPath)) {
221 continue; 221 continue;
222 } 222 }
223 223
224 int currentIndices = tess.numIndices(); 224 int currentIndices = tess.numIndices();
225 SkASSERT(currentIndices <= UINT16_MAX); 225 SkASSERT(currentIndices <= UINT16_MAX);
226 if (indexCount + currentIndices > UINT16_MAX) { 226 if (indexCount + currentIndices > UINT16_MAX) {
227 // if we added the current instance, we would overflow the indic es we can store in a 227 // if we added the current instance, we would overflow the indic es we can store in a
228 // uint16_t. Draw what we've got so far and reset. 228 // uint16_t. Draw what we've got so far and reset.
229 draw(batchTarget, pipeline, vertexCount, vertexStride, vertices, indexCount, 229 draw(batchTarget, this->pipeline(), vertexCount, vertexStride, v ertices, indexCount,
230 indices); 230 indices);
231 vertexCount = 0; 231 vertexCount = 0;
232 indexCount = 0; 232 indexCount = 0;
233 } 233 }
234 int currentVertices = tess.numPts(); 234 int currentVertices = tess.numPts();
235 if (vertexCount + currentVertices > maxVertices) { 235 if (vertexCount + currentVertices > maxVertices) {
236 maxVertices = SkTMax(vertexCount + currentVertices, maxVertices * 2); 236 maxVertices = SkTMax(vertexCount + currentVertices, maxVertices * 2);
237 vertices = (uint8_t*) realloc(vertices, maxVertices * vertexStri de); 237 vertices = (uint8_t*) realloc(vertices, maxVertices * vertexStri de);
238 } 238 }
239 if (indexCount + currentIndices > maxIndices) { 239 if (indexCount + currentIndices > maxIndices) {
240 maxIndices = SkTMax(indexCount + currentIndices, maxIndices * 2) ; 240 maxIndices = SkTMax(indexCount + currentIndices, maxIndices * 2) ;
241 indices = (uint16_t*) realloc(indices, maxIndices * sizeof(uint1 6_t)); 241 indices = (uint16_t*) realloc(indices, maxIndices * sizeof(uint1 6_t));
242 } 242 }
243 243
244 extract_verts(tess, vertices + vertexStride * vertexCount, vertexStr ide, args.fColor, 244 extract_verts(tess, vertices + vertexStride * vertexCount, vertexStr ide, args.fColor,
245 vertexCount, indices + indexCount, canTweakAlphaForCoverage) ; 245 vertexCount, indices + indexCount, canTweakAlphaForCoverage) ;
246 vertexCount += currentVertices; 246 vertexCount += currentVertices;
247 indexCount += currentIndices; 247 indexCount += currentIndices;
248 } 248 }
249 draw(batchTarget, pipeline, vertexCount, vertexStride, vertices, indexCo unt, indices); 249 draw(batchTarget, this->pipeline(), vertexCount, vertexStride, vertices, indexCount,
250 indices);
250 free(vertices); 251 free(vertices);
251 free(indices); 252 free(indices);
252 } 253 }
253 254
254 SkSTArray<1, Geometry, true>* geoData() { return &fGeoData; } 255 SkSTArray<1, Geometry, true>* geoData() { return &fGeoData; }
255 256
256 private: 257 private:
257 AAFlatteningConvexPathBatch(const Geometry& geometry) { 258 AAFlatteningConvexPathBatch(const Geometry& geometry) {
258 this->initClassID<AAFlatteningConvexPathBatch>(); 259 this->initClassID<AAFlatteningConvexPathBatch>();
259 fGeoData.push_back(geometry); 260 fGeoData.push_back(geometry);
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
332 BATCH_TEST_DEFINE(AAFlatteningConvexPathBatch) { 333 BATCH_TEST_DEFINE(AAFlatteningConvexPathBatch) {
333 AAFlatteningConvexPathBatch::Geometry geometry; 334 AAFlatteningConvexPathBatch::Geometry geometry;
334 geometry.fColor = GrRandomColor(random); 335 geometry.fColor = GrRandomColor(random);
335 geometry.fViewMatrix = GrTest::TestMatrixInvertible(random); 336 geometry.fViewMatrix = GrTest::TestMatrixInvertible(random);
336 geometry.fPath = GrTest::TestPathConvex(random); 337 geometry.fPath = GrTest::TestPathConvex(random);
337 338
338 return AAFlatteningConvexPathBatch::Create(geometry); 339 return AAFlatteningConvexPathBatch::Create(geometry);
339 } 340 }
340 341
341 #endif 342 #endif
OLDNEW
« no previous file with comments | « src/gpu/GrAAHairLinePathRenderer.cpp ('k') | src/gpu/GrAARectRenderer.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698