add shaderprocs for all-in-one special blits (matrix+sampler)
git-svn-id: http://skia.googlecode.com/svn/trunk@267 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/samplecode/SampleCircle.cpp b/samplecode/SampleCircle.cpp
index 3f39dbd..b250f29 100644
--- a/samplecode/SampleCircle.cpp
+++ b/samplecode/SampleCircle.cpp
@@ -26,6 +26,7 @@
CircleView() {
fDX = fDY = fRAD = 0;
+ fN = 3;
}
protected:
@@ -71,56 +72,75 @@
const SkBitmap& bm = device->accessBitmap(false);
canvas->drawBitmapRect(bm, &src, dst, NULL);
}
+
+ static void make_poly(SkPath* path, int n) {
+ if (n <= 0) {
+ return;
+ }
+ path->incReserve(n + 1);
+ path->moveTo(SK_Scalar1, 0);
+ SkScalar step = SK_ScalarPI * 2 / n;
+ SkScalar angle = 0;
+ for (int i = 1; i < n; i++) {
+ angle += step;
+ SkScalar c, s = SkScalarSinCos(angle, &c);
+ path->lineTo(c, s);
+ }
+ path->close();
+ }
+
+ static void rotate(SkCanvas* canvas, SkScalar angle, SkScalar px, SkScalar py) {
+ canvas->translate(-px, -py);
+ canvas->rotate(angle);
+ canvas->translate(px, py);
+ }
virtual void onDraw(SkCanvas* canvas) {
this->drawBG(canvas);
- test_circlebounds(canvas);
+ SkPaint paint;
+ paint.setAntiAlias(true);
+ paint.setStyle(SkPaint::kStroke_Style);
+// canvas->drawCircle(250, 250, 220, paint);
+ SkMatrix matrix;
+ matrix.setScale(SkIntToScalar(100), SkIntToScalar(100));
+ matrix.postTranslate(SkIntToScalar(200), SkIntToScalar(200));
+ canvas->concat(matrix);
+ for (int n = 3; n < 20; n++) {
+ SkPath path;
+ make_poly(&path, n);
+ SkAutoCanvasRestore acr(canvas, true);
+ canvas->rotate(SkIntToScalar(10) * (n - 3));
+ canvas->translate(-SK_Scalar1, 0);
+ canvas->drawPath(path, paint);
+ }
if (false) {
- // canvas->translate(SK_ScalarHalf, SK_ScalarHalf);
-
- SkPaint paint;
- paint.setAntiAlias(true);
- paint.setStyle(SkPaint::kStroke_Style);
- canvas->drawCircle(SkIntToScalar(10), SkIntToScalar(10), SkIntToScalar(2), paint);
+ test_circlebounds(canvas);
- SkIRect r;
- r.set(7, 7, 13, 13);
- SkRect dst;
- dst.set(SkIntToScalar(100), SkIntToScalar(10), SkIntToScalar(200), SkIntToScalar(110));
- blowup(canvas, r, dst);
- return;
- }
-
- // test that degenerate rects do nothing
- if (true) {
- SkScalar x = SkIntToScalar(30);
- SkRect r;
- r.set(x, x, x, x);
- SkPaint p;
- canvas->drawRect(r, p);
- p.setAntiAlias(true);
- canvas->drawRect(r, p);
- }
+ SkScalar dx = SkIntToScalar(32);
+ SkScalar dy = SkIntToScalar(32);
+
+ canvas->translate(dx + fDX, dy + fDY);
+ drawSix(canvas, dx, dy);
- SkScalar dx = SkIntToScalar(32);
- SkScalar dy = SkIntToScalar(32);
-
- canvas->translate(dx + fDX, dy + fDY);
- drawSix(canvas, dx, dy);
-
- canvas->translate(dx, 0);
- canvas->translate(SK_ScalarHalf, SK_ScalarHalf);
- drawSix(canvas, dx, dy);
+ canvas->translate(dx, 0);
+ canvas->translate(SK_ScalarHalf, SK_ScalarHalf);
+ drawSix(canvas, dx, dy);
+ }
fDX += ANIM_DX;
fDY += ANIM_DY;
fRAD += ANIM_RAD;
+ fN += 1;
+ if (fN > 40) {
+ fN = 3;
+ }
this->inval(NULL);
}
private:
+ int fN;
typedef SkView INHERITED;
};