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

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

Issue 1109153004: Initial CL to create GrBatchTest infrastructure (Closed) Base URL: https://skia.googlesource.com/skia.git@rand-batch0
Patch Set: windows warnings Created 5 years, 7 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 "GrAARectRenderer.h" 8 #include "GrAARectRenderer.h"
9 #include "GrBatch.h" 9 #include "GrBatch.h"
10 #include "GrBatchTarget.h" 10 #include "GrBatchTarget.h"
11 #include "GrBatchTest.h"
11 #include "GrBufferAllocPool.h" 12 #include "GrBufferAllocPool.h"
13 #include "GrContext.h"
12 #include "GrDefaultGeoProcFactory.h" 14 #include "GrDefaultGeoProcFactory.h"
13 #include "GrGeometryProcessor.h" 15 #include "GrGeometryProcessor.h"
14 #include "GrGpu.h" 16 #include "GrGpu.h"
15 #include "GrInvariantOutput.h" 17 #include "GrInvariantOutput.h"
16 #include "GrVertexBuffer.h" 18 #include "GrVertexBuffer.h"
19 #include "GrTestUtils.h"
17 #include "SkColorPriv.h" 20 #include "SkColorPriv.h"
18 #include "gl/GrGLProcessor.h" 21 #include "gl/GrGLProcessor.h"
19 #include "gl/GrGLGeometryProcessor.h" 22 #include "gl/GrGLGeometryProcessor.h"
20 #include "gl/builders/GrGLProgramBuilder.h" 23 #include "gl/builders/GrGLProgramBuilder.h"
21 24
22 /////////////////////////////////////////////////////////////////////////////// 25 ///////////////////////////////////////////////////////////////////////////////
23 26
24 static void set_inset_fan(SkPoint* pts, size_t stride, 27 static void set_inset_fan(SkPoint* pts, size_t stride,
25 const SkRect& r, SkScalar dx, SkScalar dy) { 28 const SkRect& r, SkScalar dx, SkScalar dy) {
26 pts->setRectFan(r.fLeft + dx, r.fTop + dy, 29 pts->setRectFan(r.fLeft + dx, r.fTop + dy,
(...skipping 389 matching lines...) Expand 10 before | Expand all | Expand 10 after
416 419
417 static const int kIndicesPerBevelStrokeRect = SK_ARRAY_COUNT(gBevelStrokeAARectI dx); 420 static const int kIndicesPerBevelStrokeRect = SK_ARRAY_COUNT(gBevelStrokeAARectI dx);
418 static const int kVertsPerBevelStrokeRect = 24; 421 static const int kVertsPerBevelStrokeRect = 24;
419 static const int kNumBevelStrokeRectsInIndexBuffer = 256; 422 static const int kNumBevelStrokeRectsInIndexBuffer = 256;
420 423
421 static int aa_stroke_rect_index_count(bool miterStroke) { 424 static int aa_stroke_rect_index_count(bool miterStroke) {
422 return miterStroke ? SK_ARRAY_COUNT(gMiterStrokeAARectIdx) : 425 return miterStroke ? SK_ARRAY_COUNT(gMiterStrokeAARectIdx) :
423 SK_ARRAY_COUNT(gBevelStrokeAARectIdx); 426 SK_ARRAY_COUNT(gBevelStrokeAARectIdx);
424 } 427 }
425 428
426 GrIndexBuffer* GrAARectRenderer::aaStrokeRectIndexBuffer(bool miterStroke) { 429 static GrIndexBuffer* setup_aa_stroke_rect_indexbuffer(GrIndexBuffer** aaMiterSt rokeRectIndexBuffer,
430 GrIndexBuffer** aaBevelSt rokeRectIndexBuffer,
431 GrGpu* gpu,
432 bool miterStroke) {
427 if (miterStroke) { 433 if (miterStroke) {
428 if (NULL == fAAMiterStrokeRectIndexBuffer) { 434 if (!*aaMiterStrokeRectIndexBuffer) {
429 fAAMiterStrokeRectIndexBuffer = 435 *aaMiterStrokeRectIndexBuffer =
430 fGpu->createInstancedIndexBuffer(gMiterStrokeAARectIdx, 436 gpu->createInstancedIndexBuffer(gMiterStrokeAARectIdx,
431 kIndicesPerMiterStrokeRect, 437 kIndicesPerMiterStrokeRect,
432 kNumMiterStrokeRectsInIndex Buffer, 438 kNumMiterStrokeRectsInIndexB uffer,
433 kVertsPerMiterStrokeRect); 439 kVertsPerMiterStrokeRect);
434 } 440 }
435 return fAAMiterStrokeRectIndexBuffer; 441 return *aaMiterStrokeRectIndexBuffer;
436 } else { 442 } else {
437 if (NULL == fAABevelStrokeRectIndexBuffer) { 443 if (!*aaBevelStrokeRectIndexBuffer) {
438 fAABevelStrokeRectIndexBuffer = 444 *aaBevelStrokeRectIndexBuffer =
439 fGpu->createInstancedIndexBuffer(gBevelStrokeAARectIdx, 445 gpu->createInstancedIndexBuffer(gBevelStrokeAARectIdx,
440 kIndicesPerBevelStrokeRect, 446 kIndicesPerBevelStrokeRect,
441 kNumBevelStrokeRectsInIndex Buffer, 447 kNumBevelStrokeRectsInIndexB uffer,
442 kVertsPerBevelStrokeRect); 448 kVertsPerBevelStrokeRect);
443 } 449 }
444 return fAABevelStrokeRectIndexBuffer; 450 return *aaBevelStrokeRectIndexBuffer;
445 } 451 }
446 } 452 }
447 453
448 void GrAARectRenderer::geometryFillAARect(GrDrawTarget* target, 454 void GrAARectRenderer::geometryFillAARect(GrDrawTarget* target,
449 GrPipelineBuilder* pipelineBuilder, 455 GrPipelineBuilder* pipelineBuilder,
450 GrColor color, 456 GrColor color,
451 const SkMatrix& viewMatrix, 457 const SkMatrix& viewMatrix,
452 const SkRect& rect, 458 const SkRect& rect,
453 const SkRect& devRect) { 459 const SkRect& devRect) {
454 if (!fAAFillRectIndexBuffer) { 460 if (!fAAFillRectIndexBuffer) {
(...skipping 390 matching lines...) Expand 10 before | Expand all | Expand 10 after
845 bool fCoverageIgnored; 851 bool fCoverageIgnored;
846 bool fMiterStroke; 852 bool fMiterStroke;
847 bool fCanTweakAlphaForCoverage; 853 bool fCanTweakAlphaForCoverage;
848 }; 854 };
849 855
850 BatchTracker fBatch; 856 BatchTracker fBatch;
851 const GrIndexBuffer* fIndexBuffer; 857 const GrIndexBuffer* fIndexBuffer;
852 SkSTArray<1, Geometry, true> fGeoData; 858 SkSTArray<1, Geometry, true> fGeoData;
853 }; 859 };
854 860
855
856 void GrAARectRenderer::geometryStrokeAARect(GrDrawTarget* target, 861 void GrAARectRenderer::geometryStrokeAARect(GrDrawTarget* target,
857 GrPipelineBuilder* pipelineBuilder, 862 GrPipelineBuilder* pipelineBuilder,
858 GrColor color, 863 GrColor color,
859 const SkMatrix& viewMatrix, 864 const SkMatrix& viewMatrix,
860 const SkRect& devOutside, 865 const SkRect& devOutside,
861 const SkRect& devOutsideAssist, 866 const SkRect& devOutsideAssist,
862 const SkRect& devInside, 867 const SkRect& devInside,
863 bool miterStroke) { 868 bool miterStroke) {
864 GrIndexBuffer* indexBuffer = this->aaStrokeRectIndexBuffer(miterStroke); 869 GrIndexBuffer* indexBuffer = setup_aa_stroke_rect_indexbuffer(&fAAMiterStrok eRectIndexBuffer,
870 &fAABevelStrok eRectIndexBuffer,
871 fGpu,
872 miterStroke);
865 if (!indexBuffer) { 873 if (!indexBuffer) {
866 SkDebugf("Failed to create index buffer!\n"); 874 SkDebugf("Failed to create index buffer!\n");
867 return; 875 return;
868 } 876 }
869 877
870 AAStrokeRectBatch::Geometry geometry; 878 AAStrokeRectBatch::Geometry geometry;
871 geometry.fColor = color; 879 geometry.fColor = color;
872 geometry.fDevOutside = devOutside; 880 geometry.fDevOutside = devOutside;
873 geometry.fDevOutsideAssist = devOutsideAssist; 881 geometry.fDevOutsideAssist = devOutsideAssist;
874 geometry.fDevInside = devInside; 882 geometry.fDevInside = devInside;
(...skipping 17 matching lines...) Expand all
892 viewMatrix.mapPoints((SkPoint*)&devInside, (const SkPoint*)&rects[1], 2); 900 viewMatrix.mapPoints((SkPoint*)&devInside, (const SkPoint*)&rects[1], 2);
893 901
894 if (devInside.isEmpty()) { 902 if (devInside.isEmpty()) {
895 this->fillAARect(target, pipelineBuilder, color, viewMatrix, devOutside, devOutside); 903 this->fillAARect(target, pipelineBuilder, color, viewMatrix, devOutside, devOutside);
896 return; 904 return;
897 } 905 }
898 906
899 this->geometryStrokeAARect(target, pipelineBuilder, color, viewMatrix, devOu tside, 907 this->geometryStrokeAARect(target, pipelineBuilder, color, viewMatrix, devOu tside,
900 devOutsideAssist, devInside, true); 908 devOutsideAssist, devInside, true);
901 } 909 }
910
911 //////////////////////////////////////////////////////////////////////////////// ///////////////////
912
913 #ifdef GR_TEST_UTILS
914
915 BATCH_TEST_DEFINE(AAFillRectBatch) {
916 AAFillRectBatch::Geometry geo;
917 geo.fColor = GrRandomColor(random);
918 geo.fViewMatrix = GrTest::TestMatrix(random);
919 geo.fRect = GrTest::TestRect(random);
920 geo.fDevRect = GrTest::TestRect(random);
921
922 static GrIndexBuffer* aaFillRectIndexBuffer = NULL;
923 if (!aaFillRectIndexBuffer) {
924 aaFillRectIndexBuffer =
925 context->getGpu()->createInstancedIndexBuffer(gFillAARectIdx,
926 kIndicesPerAAFillR ect,
927 kNumAAFillRectsInI ndexBuffer,
928 kVertsPerAAFillRec t);
929 }
930
931 return AAFillRectBatch::Create(geo, aaFillRectIndexBuffer);
932 }
933
934 BATCH_TEST_DEFINE(AAStrokeRectBatch) {
935 static GrIndexBuffer* aaMiterStrokeRectIndexBuffer = NULL;
936 static GrIndexBuffer* aaBevelStrokeRectIndexBuffer = NULL;
937
938 bool miterStroke = random->nextBool();
939
940 GrIndexBuffer* indexBuffer = setup_aa_stroke_rect_indexbuffer(&aaMiterStroke RectIndexBuffer,
941 &aaBevelStroke RectIndexBuffer,
942 context->getGp u(),
943 miterStroke);
944
945 // Create mock stroke rect
946 SkRect outside = GrTest::TestRect(random);
947 SkScalar minDim = SkMinScalar(outside.width(), outside.height());
948 SkScalar strokeWidth = minDim * 0.1f;
949 SkRect outsideAssist = outside;
950 outsideAssist.outset(strokeWidth, strokeWidth);
951 SkRect inside = outside;
952 inside.inset(strokeWidth, strokeWidth);
953
954 AAStrokeRectBatch::Geometry geo;
955 geo.fColor = GrRandomColor(random);
956 geo.fDevOutside = outside;
957 geo.fDevOutsideAssist = outsideAssist;
958 geo.fDevInside = inside;
959 geo.fMiterStroke = miterStroke;
960
961 return AAStrokeRectBatch::Create(geo, GrTest::TestMatrix(random), indexBuffe r);
962 }
963
964 #endif
OLDNEW
« no previous file with comments | « src/gpu/GrAARectRenderer.h ('k') | src/gpu/GrBatchTest.h » ('j') | src/gpu/GrTestUtils.cpp » ('J')

Powered by Google App Engine
This is Rietveld 408576698