aboutsummaryrefslogtreecommitdiffhomepage
path: root/gm/patch.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'gm/patch.cpp')
-rw-r--r--gm/patch.cpp114
1 files changed, 114 insertions, 0 deletions
diff --git a/gm/patch.cpp b/gm/patch.cpp
new file mode 100644
index 0000000000..eb99944c0b
--- /dev/null
+++ b/gm/patch.cpp
@@ -0,0 +1,114 @@
+
+/*
+ * Copyright 2014 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+// This test only works with the GPU backend.
+
+#include "gm.h"
+
+#if SK_SUPPORT_GPU
+
+#include "GrContext.h"
+#include "GrTest.h"
+
+#include "SkPatch.h"
+
+namespace skiagm {
+/**
+ * This GM draws a SkPatch.
+ */
+class SkPatchGM : public GM {
+public:
+ SkPatchGM() {
+ this->setBGColor(0xFFFFFFFF);
+ }
+
+protected:
+ virtual SkString onShortName() SK_OVERRIDE {
+ return SkString("patch_primitive");
+ }
+
+ virtual SkISize onISize() SK_OVERRIDE {
+ return SkISize::Make(800, 800);
+ }
+
+ virtual uint32_t onGetFlags() const SK_OVERRIDE {
+ return kGPUOnly_Flag;
+ }
+
+
+ virtual void onDraw(SkCanvas* canvas) SK_OVERRIDE {
+
+ SkPaint paint;
+ SkColor colors[4] = {
+ SK_ColorRED, SK_ColorGREEN, SK_ColorBLUE, SK_ColorCYAN
+ };
+ SkPoint points[] = {
+ {100,100},{130,50},{500,70}, {650,60},
+ {350,125},{490,555},{600,700},
+ {515,595},{140,550},{110,590},
+ {125,400},{70,150}
+
+ };
+
+ SkPatch coons(points, colors);
+
+ SkPatch::VertexData data;
+ coons.getVertexData(&data, 10);
+
+ canvas->drawVertices(SkCanvas::kTriangles_VertexMode,data.fVertexCount,
+ data.fPoints, data.fTexCoords, data.fColors, NULL, data.fIndices,
+ data.fIndexCount, paint);
+
+ //draw control points
+ SkPoint bottom[4];
+ coons.getBottomPoints(bottom);
+ SkPoint top[4];
+ coons.getTopPoints(top);
+ SkPoint left[4];
+ coons.getLeftPoints(left);
+ SkPoint right[4];
+ coons.getRightPoints(right);
+
+ SkPoint corners[4] = { bottom[0], bottom[3], top[0], top[3] };
+ canvas->drawPoints(SkCanvas::kLines_PointMode, 4, bottom, paint);
+ canvas->drawPoints(SkCanvas::kLines_PointMode, 2, bottom+1, paint);
+ canvas->drawPoints(SkCanvas::kLines_PointMode, 4, top, paint);
+ canvas->drawPoints(SkCanvas::kLines_PointMode, 4, left, paint);
+ canvas->drawPoints(SkCanvas::kLines_PointMode, 4, right, paint);
+
+ canvas->drawPoints(SkCanvas::kLines_PointMode, 2, top+1, paint);
+ canvas->drawPoints(SkCanvas::kLines_PointMode, 2, left+1, paint);
+ canvas->drawPoints(SkCanvas::kLines_PointMode, 2, right+1, paint);
+
+ paint.setStrokeWidth(10);
+
+ paint.setColor(SK_ColorRED);
+ canvas->drawPoints(SkCanvas::kPoints_PointMode, 4, corners, paint);
+
+ paint.setColor(SK_ColorBLUE);
+ canvas->drawPoints(SkCanvas::kPoints_PointMode, 2, bottom+1, paint);
+
+ paint.setColor(SK_ColorCYAN);
+ canvas->drawPoints(SkCanvas::kPoints_PointMode, 2, top+1, paint);
+
+ paint.setColor(SK_ColorYELLOW);
+ canvas->drawPoints(SkCanvas::kPoints_PointMode, 2, left+1, paint);
+
+ paint.setColor(SK_ColorGREEN);
+ canvas->drawPoints(SkCanvas::kPoints_PointMode, 2, right+1, paint);
+ }
+
+private:
+ typedef GM INHERITED;
+};
+
+DEF_GM( return SkNEW(SkPatchGM); )
+
+}
+
+#endif