1*c8dee2aaSAndroid Build Coastguard Worker /* 2*c8dee2aaSAndroid Build Coastguard Worker * Copyright 2021 Google LLC. 3*c8dee2aaSAndroid Build Coastguard Worker * 4*c8dee2aaSAndroid Build Coastguard Worker * Use of this source code is governed by a BSD-style license that can be 5*c8dee2aaSAndroid Build Coastguard Worker * found in the LICENSE file. 6*c8dee2aaSAndroid Build Coastguard Worker */ 7*c8dee2aaSAndroid Build Coastguard Worker 8*c8dee2aaSAndroid Build Coastguard Worker #include "gm/gm.h" 9*c8dee2aaSAndroid Build Coastguard Worker 10*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkCanvas.h" 11*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkPaint.h" 12*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkPath.h" 13*c8dee2aaSAndroid Build Coastguard Worker #include "include/gpu/ganesh/GrContextOptions.h" 14*c8dee2aaSAndroid Build Coastguard Worker 15*c8dee2aaSAndroid Build Coastguard Worker namespace skiagm { 16*c8dee2aaSAndroid Build Coastguard Worker 17*c8dee2aaSAndroid Build Coastguard Worker class BatchedConvexPathsGM : public GM { 18*c8dee2aaSAndroid Build Coastguard Worker private: getName() const19*c8dee2aaSAndroid Build Coastguard Worker SkString getName() const override { return SkString("batchedconvexpaths"); } getISize()20*c8dee2aaSAndroid Build Coastguard Worker SkISize getISize() override { return SkISize::Make(512, 512); } 21*c8dee2aaSAndroid Build Coastguard Worker modifyGrContextOptions(GrContextOptions * ctxOptions)22*c8dee2aaSAndroid Build Coastguard Worker void modifyGrContextOptions(GrContextOptions* ctxOptions) override { 23*c8dee2aaSAndroid Build Coastguard Worker // Ensure our paths don't go through the atlas path renderer. 24*c8dee2aaSAndroid Build Coastguard Worker ctxOptions->fGpuPathRenderers &= ~GpuPathRenderers::kAtlas; 25*c8dee2aaSAndroid Build Coastguard Worker } 26*c8dee2aaSAndroid Build Coastguard Worker onDraw(SkCanvas * canvas,SkString * errorMsg)27*c8dee2aaSAndroid Build Coastguard Worker DrawResult onDraw(SkCanvas* canvas, SkString* errorMsg) override { 28*c8dee2aaSAndroid Build Coastguard Worker canvas->clear(SK_ColorBLACK); 29*c8dee2aaSAndroid Build Coastguard Worker for (uint32_t i = 0; i < 10; ++i) { 30*c8dee2aaSAndroid Build Coastguard Worker SkAutoCanvasRestore acr(canvas, true); 31*c8dee2aaSAndroid Build Coastguard Worker 32*c8dee2aaSAndroid Build Coastguard Worker int numPoints = (i + 3) * 3; 33*c8dee2aaSAndroid Build Coastguard Worker SkPath path; 34*c8dee2aaSAndroid Build Coastguard Worker path.moveTo(1, 0); 35*c8dee2aaSAndroid Build Coastguard Worker for (float j = 1; j < numPoints; j += 3) { 36*c8dee2aaSAndroid Build Coastguard Worker constexpr float k2PI = SK_ScalarPI * 2; 37*c8dee2aaSAndroid Build Coastguard Worker path.cubicTo(cosf(j/numPoints * k2PI), sinf(j/numPoints * k2PI), 38*c8dee2aaSAndroid Build Coastguard Worker cosf((j+1)/numPoints * k2PI), sinf((j+1)/numPoints * k2PI), 39*c8dee2aaSAndroid Build Coastguard Worker j+2 == numPoints ? 1 : cosf((j+2)/numPoints * k2PI), 40*c8dee2aaSAndroid Build Coastguard Worker j+2 == numPoints ? 0 : sinf((j+2)/numPoints * k2PI)); 41*c8dee2aaSAndroid Build Coastguard Worker } 42*c8dee2aaSAndroid Build Coastguard Worker float scale = 256 - i*24; 43*c8dee2aaSAndroid Build Coastguard Worker canvas->translate(scale + (256 - scale) * .33f, scale + (256 - scale) * .33f); 44*c8dee2aaSAndroid Build Coastguard Worker canvas->scale(scale, scale); 45*c8dee2aaSAndroid Build Coastguard Worker 46*c8dee2aaSAndroid Build Coastguard Worker SkPaint paint; 47*c8dee2aaSAndroid Build Coastguard Worker paint.setColor(((i + 123458383u) * 285018463u) | 0xff808080); 48*c8dee2aaSAndroid Build Coastguard Worker paint.setAlphaf(0.3f); 49*c8dee2aaSAndroid Build Coastguard Worker paint.setAntiAlias(true); 50*c8dee2aaSAndroid Build Coastguard Worker 51*c8dee2aaSAndroid Build Coastguard Worker canvas->drawPath(path, paint); 52*c8dee2aaSAndroid Build Coastguard Worker } 53*c8dee2aaSAndroid Build Coastguard Worker return DrawResult::kOk; 54*c8dee2aaSAndroid Build Coastguard Worker } 55*c8dee2aaSAndroid Build Coastguard Worker }; 56*c8dee2aaSAndroid Build Coastguard Worker 57*c8dee2aaSAndroid Build Coastguard Worker DEF_GM( return new BatchedConvexPathsGM; ) 58*c8dee2aaSAndroid Build Coastguard Worker 59*c8dee2aaSAndroid Build Coastguard Worker } // namespace skiagm 60