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

Side by Side Diff: src/gpu/batches/GrAAConvexPathRenderer.cpp

Issue 1835283002: Simplify GrDrawBatch uploads and token uage. (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: comments updated Created 4 years, 8 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
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 "GrAAConvexPathRenderer.h" 8 #include "GrAAConvexPathRenderer.h"
9 9
10 #include "GrAAConvexTessellator.h" 10 #include "GrAAConvexTessellator.h"
(...skipping 774 matching lines...) Expand 10 before | Expand all | Expand 10 after
785 // Setup GrGeometryProcessor 785 // Setup GrGeometryProcessor
786 SkAutoTUnref<const GrGeometryProcessor> gp(create_fill_gp(canTweakAlphaF orCoverage, 786 SkAutoTUnref<const GrGeometryProcessor> gp(create_fill_gp(canTweakAlphaF orCoverage,
787 this->viewMatr ix(), 787 this->viewMatr ix(),
788 this->usesLoca lCoords(), 788 this->usesLoca lCoords(),
789 this->coverage Ignored())); 789 this->coverage Ignored()));
790 if (!gp) { 790 if (!gp) {
791 SkDebugf("Could not create GrGeometryProcessor\n"); 791 SkDebugf("Could not create GrGeometryProcessor\n");
792 return; 792 return;
793 } 793 }
794 794
795 target->initDraw(gp);
796
797 size_t vertexStride = gp->getVertexStride(); 795 size_t vertexStride = gp->getVertexStride();
798 796
799 SkASSERT(canTweakAlphaForCoverage ? 797 SkASSERT(canTweakAlphaForCoverage ?
800 vertexStride == sizeof(GrDefaultGeoProcFactory::PositionColorAt tr) : 798 vertexStride == sizeof(GrDefaultGeoProcFactory::PositionColorAt tr) :
801 vertexStride == sizeof(GrDefaultGeoProcFactory::PositionColorCo verageAttr)); 799 vertexStride == sizeof(GrDefaultGeoProcFactory::PositionColorCo verageAttr));
802 800
803 GrAAConvexTessellator tess; 801 GrAAConvexTessellator tess;
804 802
805 int instanceCount = fGeoData.count(); 803 int instanceCount = fGeoData.count();
806 804
(...skipping 25 matching lines...) Expand all
832 return; 830 return;
833 } 831 }
834 832
835 extract_verts(tess, verts, vertexStride, args.fColor, idxs, canTweak AlphaForCoverage); 833 extract_verts(tess, verts, vertexStride, args.fColor, idxs, canTweak AlphaForCoverage);
836 834
837 GrMesh mesh; 835 GrMesh mesh;
838 mesh.initIndexed(kTriangles_GrPrimitiveType, 836 mesh.initIndexed(kTriangles_GrPrimitiveType,
839 vertexBuffer, indexBuffer, 837 vertexBuffer, indexBuffer,
840 firstVertex, firstIndex, 838 firstVertex, firstIndex,
841 tess.numPts(), tess.numIndices()); 839 tess.numPts(), tess.numIndices());
842 target->draw(mesh); 840 target->draw(gp, mesh);
843 } 841 }
844 } 842 }
845 843
846 void onPrepareDraws(Target* target) const override { 844 void onPrepareDraws(Target* target) const override {
847 #ifndef SK_IGNORE_LINEONLY_AA_CONVEX_PATH_OPTS 845 #ifndef SK_IGNORE_LINEONLY_AA_CONVEX_PATH_OPTS
848 if (this->linesOnly()) { 846 if (this->linesOnly()) {
849 this->prepareLinesOnlyDraws(target); 847 this->prepareLinesOnlyDraws(target);
850 return; 848 return;
851 } 849 }
852 #endif 850 #endif
853 851
854 int instanceCount = fGeoData.count(); 852 int instanceCount = fGeoData.count();
855 853
856 SkMatrix invert; 854 SkMatrix invert;
857 if (this->usesLocalCoords() && !this->viewMatrix().invert(&invert)) { 855 if (this->usesLocalCoords() && !this->viewMatrix().invert(&invert)) {
858 SkDebugf("Could not invert viewmatrix\n"); 856 SkDebugf("Could not invert viewmatrix\n");
859 return; 857 return;
860 } 858 }
861 859
862 // Setup GrGeometryProcessor 860 // Setup GrGeometryProcessor
863 SkAutoTUnref<GrGeometryProcessor> quadProcessor( 861 SkAutoTUnref<GrGeometryProcessor> quadProcessor(
864 QuadEdgeEffect::Create(this->color(), invert, this->usesLocalCoo rds())); 862 QuadEdgeEffect::Create(this->color(), invert, this->usesLocalCoo rds()));
865 863
866 target->initDraw(quadProcessor);
867
868 // TODO generate all segments for all paths and use one vertex buffer 864 // TODO generate all segments for all paths and use one vertex buffer
869 for (int i = 0; i < instanceCount; i++) { 865 for (int i = 0; i < instanceCount; i++) {
870 const Geometry& args = fGeoData[i]; 866 const Geometry& args = fGeoData[i];
871 867
872 // We use the fact that SkPath::transform path does subdivision base d on 868 // We use the fact that SkPath::transform path does subdivision base d on
873 // perspective. Otherwise, we apply the view matrix when copying to the 869 // perspective. Otherwise, we apply the view matrix when copying to the
874 // segment representation. 870 // segment representation.
875 const SkMatrix* viewMatrix = &args.fViewMatrix; 871 const SkMatrix* viewMatrix = &args.fViewMatrix;
876 872
877 // We avoid initializing the path unless we have to 873 // We avoid initializing the path unless we have to
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
922 918
923 SkSTArray<kPreallocDrawCnt, Draw, true> draws; 919 SkSTArray<kPreallocDrawCnt, Draw, true> draws;
924 create_vertices(segments, fanPt, &draws, verts, idxs); 920 create_vertices(segments, fanPt, &draws, verts, idxs);
925 921
926 GrMesh mesh; 922 GrMesh mesh;
927 923
928 for (int j = 0; j < draws.count(); ++j) { 924 for (int j = 0; j < draws.count(); ++j) {
929 const Draw& draw = draws[j]; 925 const Draw& draw = draws[j];
930 mesh.initIndexed(kTriangles_GrPrimitiveType, vertexBuffer, index Buffer, 926 mesh.initIndexed(kTriangles_GrPrimitiveType, vertexBuffer, index Buffer,
931 firstVertex, firstIndex, draw.fVertexCnt, draw. fIndexCnt); 927 firstVertex, firstIndex, draw.fVertexCnt, draw. fIndexCnt);
932 target->draw(mesh); 928 target->draw(quadProcessor, mesh);
933 firstVertex += draw.fVertexCnt; 929 firstVertex += draw.fVertexCnt;
934 firstIndex += draw.fIndexCnt; 930 firstIndex += draw.fIndexCnt;
935 } 931 }
936 } 932 }
937 } 933 }
938 934
939 SkSTArray<1, Geometry, true>* geoData() { return &fGeoData; } 935 SkSTArray<1, Geometry, true>* geoData() { return &fGeoData; }
940 936
941 AAConvexPathBatch(const Geometry& geometry) : INHERITED(ClassID()) { 937 AAConvexPathBatch(const Geometry& geometry) : INHERITED(ClassID()) {
942 fGeoData.push_back(geometry); 938 fGeoData.push_back(geometry);
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
1024 DRAW_BATCH_TEST_DEFINE(AAConvexPathBatch) { 1020 DRAW_BATCH_TEST_DEFINE(AAConvexPathBatch) {
1025 AAConvexPathBatch::Geometry geometry; 1021 AAConvexPathBatch::Geometry geometry;
1026 geometry.fColor = GrRandomColor(random); 1022 geometry.fColor = GrRandomColor(random);
1027 geometry.fViewMatrix = GrTest::TestMatrixInvertible(random); 1023 geometry.fViewMatrix = GrTest::TestMatrixInvertible(random);
1028 geometry.fPath = GrTest::TestPathConvex(random); 1024 geometry.fPath = GrTest::TestPathConvex(random);
1029 1025
1030 return AAConvexPathBatch::Create(geometry); 1026 return AAConvexPathBatch::Create(geometry);
1031 } 1027 }
1032 1028
1033 #endif 1029 #endif
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698