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

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

Issue 979343002: handle null vertex or index buffers in batch (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: cleanup Created 5 years, 9 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/GrContext.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 * Copyright 2012 Google Inc. 2 * Copyright 2012 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 "GrAARectRenderer.h" 8 #include "GrAARectRenderer.h"
9 #include "GrBatch.h" 9 #include "GrBatch.h"
10 #include "GrBatchTarget.h" 10 #include "GrBatchTarget.h"
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after
127 int vertexCount = kVertsPerAAFillRect * instanceCount; 127 int vertexCount = kVertsPerAAFillRect * instanceCount;
128 128
129 const GrVertexBuffer* vertexBuffer; 129 const GrVertexBuffer* vertexBuffer;
130 int firstVertex; 130 int firstVertex;
131 131
132 void* vertices = batchTarget->vertexPool()->makeSpace(vertexStride, 132 void* vertices = batchTarget->vertexPool()->makeSpace(vertexStride,
133 vertexCount, 133 vertexCount,
134 &vertexBuffer, 134 &vertexBuffer,
135 &firstVertex); 135 &firstVertex);
136 136
137 if (!vertices) {
138 SkDebugf("Could not allocate vertices\n");
139 return;
140 }
141
137 for (int i = 0; i < instanceCount; i++) { 142 for (int i = 0; i < instanceCount; i++) {
138 const Geometry& args = fGeoData[i]; 143 const Geometry& args = fGeoData[i];
139 this->generateAAFillRectGeometry(vertices, 144 this->generateAAFillRectGeometry(vertices,
140 i * kVertsPerAAFillRect * vertexStr ide, 145 i * kVertsPerAAFillRect * vertexStr ide,
141 vertexStride, 146 vertexStride,
142 args.fColor, 147 args.fColor,
143 args.fViewMatrix, 148 args.fViewMatrix,
144 args.fRect, 149 args.fRect,
145 args.fDevRect, 150 args.fDevRect,
146 canTweakAlphaForCoverage); 151 canTweakAlphaForCoverage);
(...skipping 291 matching lines...) Expand 10 before | Expand all | Expand 10 after
438 return fAABevelStrokeRectIndexBuffer; 443 return fAABevelStrokeRectIndexBuffer;
439 } 444 }
440 } 445 }
441 446
442 void GrAARectRenderer::geometryFillAARect(GrDrawTarget* target, 447 void GrAARectRenderer::geometryFillAARect(GrDrawTarget* target,
443 GrPipelineBuilder* pipelineBuilder, 448 GrPipelineBuilder* pipelineBuilder,
444 GrColor color, 449 GrColor color,
445 const SkMatrix& viewMatrix, 450 const SkMatrix& viewMatrix,
446 const SkRect& rect, 451 const SkRect& rect,
447 const SkRect& devRect) { 452 const SkRect& devRect) {
448 if (NULL == fAAFillRectIndexBuffer) { 453 if (!fAAFillRectIndexBuffer) {
449 fAAFillRectIndexBuffer = fGpu->createInstancedIndexBuffer(gFillAARectIdx , 454 fAAFillRectIndexBuffer = fGpu->createInstancedIndexBuffer(gFillAARectIdx ,
450 kIndicesPerAAF illRect, 455 kIndicesPerAAF illRect,
451 kNumAAFillRect sInIndexBuffer, 456 kNumAAFillRect sInIndexBuffer,
452 kVertsPerAAFil lRect); 457 kVertsPerAAFil lRect);
453 } 458 }
454 459
460 if (!fAAFillRectIndexBuffer) {
461 SkDebugf("Unable to create index buffer\n");
462 return;
463 }
464
455 AAFillRectBatch::Geometry geometry; 465 AAFillRectBatch::Geometry geometry;
456 geometry.fRect = rect; 466 geometry.fRect = rect;
457 geometry.fViewMatrix = viewMatrix; 467 geometry.fViewMatrix = viewMatrix;
458 geometry.fDevRect = devRect; 468 geometry.fDevRect = devRect;
459 geometry.fColor = color; 469 geometry.fColor = color;
460 470
461 SkAutoTUnref<GrBatch> batch(AAFillRectBatch::Create(geometry, fAAFillRectInd exBuffer)); 471 SkAutoTUnref<GrBatch> batch(AAFillRectBatch::Create(geometry, fAAFillRectInd exBuffer));
462 target->drawBatch(pipelineBuilder, batch, &devRect); 472 target->drawBatch(pipelineBuilder, batch, &devRect);
463 } 473 }
464 474
(...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after
616 int vertexCount = totalVertexNum * instanceCount; 626 int vertexCount = totalVertexNum * instanceCount;
617 627
618 const GrVertexBuffer* vertexBuffer; 628 const GrVertexBuffer* vertexBuffer;
619 int firstVertex; 629 int firstVertex;
620 630
621 void* vertices = batchTarget->vertexPool()->makeSpace(vertexStride, 631 void* vertices = batchTarget->vertexPool()->makeSpace(vertexStride,
622 vertexCount, 632 vertexCount,
623 &vertexBuffer, 633 &vertexBuffer,
624 &firstVertex); 634 &firstVertex);
625 635
636 if (!vertices) {
637 SkDebugf("Could not allocate vertices\n");
638 return;
639 }
640
626 for (int i = 0; i < instanceCount; i++) { 641 for (int i = 0; i < instanceCount; i++) {
627 const Geometry& args = fGeoData[i]; 642 const Geometry& args = fGeoData[i];
628 this->generateAAStrokeRectGeometry(vertices, 643 this->generateAAStrokeRectGeometry(vertices,
629 i * totalVertexNum * vertexStride , 644 i * totalVertexNum * vertexStride ,
630 vertexStride, 645 vertexStride,
631 outerVertexNum, 646 outerVertexNum,
632 innerVertexNum, 647 innerVertexNum,
633 args.fColor, 648 args.fColor,
634 args.fDevOutside, 649 args.fDevOutside,
635 args.fDevOutsideAssist, 650 args.fDevOutsideAssist,
(...skipping 203 matching lines...) Expand 10 before | Expand all | Expand 10 after
839 854
840 void GrAARectRenderer::geometryStrokeAARect(GrDrawTarget* target, 855 void GrAARectRenderer::geometryStrokeAARect(GrDrawTarget* target,
841 GrPipelineBuilder* pipelineBuilder, 856 GrPipelineBuilder* pipelineBuilder,
842 GrColor color, 857 GrColor color,
843 const SkMatrix& viewMatrix, 858 const SkMatrix& viewMatrix,
844 const SkRect& devOutside, 859 const SkRect& devOutside,
845 const SkRect& devOutsideAssist, 860 const SkRect& devOutsideAssist,
846 const SkRect& devInside, 861 const SkRect& devInside,
847 bool miterStroke) { 862 bool miterStroke) {
848 GrIndexBuffer* indexBuffer = this->aaStrokeRectIndexBuffer(miterStroke); 863 GrIndexBuffer* indexBuffer = this->aaStrokeRectIndexBuffer(miterStroke);
849 if (NULL == indexBuffer) { 864 if (!indexBuffer) {
850 SkDebugf("Failed to create index buffer!\n"); 865 SkDebugf("Failed to create index buffer!\n");
851 return; 866 return;
852 } 867 }
853 868
854 AAStrokeRectBatch::Geometry geometry; 869 AAStrokeRectBatch::Geometry geometry;
855 geometry.fColor = color; 870 geometry.fColor = color;
856 geometry.fDevOutside = devOutside; 871 geometry.fDevOutside = devOutside;
857 geometry.fDevOutsideAssist = devOutsideAssist; 872 geometry.fDevOutsideAssist = devOutsideAssist;
858 geometry.fDevInside = devInside; 873 geometry.fDevInside = devInside;
859 geometry.fMiterStroke = miterStroke; 874 geometry.fMiterStroke = miterStroke;
(...skipping 16 matching lines...) Expand all
876 viewMatrix.mapPoints((SkPoint*)&devInside, (const SkPoint*)&rects[1], 2); 891 viewMatrix.mapPoints((SkPoint*)&devInside, (const SkPoint*)&rects[1], 2);
877 892
878 if (devInside.isEmpty()) { 893 if (devInside.isEmpty()) {
879 this->fillAARect(target, pipelineBuilder, color, viewMatrix, devOutside, devOutside); 894 this->fillAARect(target, pipelineBuilder, color, viewMatrix, devOutside, devOutside);
880 return; 895 return;
881 } 896 }
882 897
883 this->geometryStrokeAARect(target, pipelineBuilder, color, viewMatrix, devOu tside, 898 this->geometryStrokeAARect(target, pipelineBuilder, color, viewMatrix, devOu tside,
884 devOutsideAssist, devInside, true); 899 devOutsideAssist, devInside, true);
885 } 900 }
OLDNEW
« no previous file with comments | « src/gpu/GrAAHairLinePathRenderer.cpp ('k') | src/gpu/GrContext.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698