Browse Source

Circular gradients example

James Bowman 6 years ago
parent
commit
5eaac5d8a9
4 changed files with 255 additions and 0 deletions
  1. 169 0
      circular.ino
  2. 86 0
      converted-assets/circular_assets.h
  3. BIN
      converted-assets/gauss.png
  4. BIN
      converted-assets/pythag.png

+ 169 - 0
circular.ino

@@ -0,0 +1,169 @@
+#include <EEPROM.h>
+#include <SPI.h>
+#include <GD2.h>
+
+#define PYTHAG_HANDLE 0
+#define GAUSS_HANDLE 1
+#define ASSETS_END 1024UL
+
+static const PROGMEM uint8_t __assets[927] = {
+0, 0, 0, 5, 0, 0, 0, 1, 1, 0, 0, 8, 1, 0, 28, 7, 1, 0, 0, 5, 0, 2, 0,
+1, 1, 0, 0, 8, 1, 0, 28, 7, 34, 255, 255, 255, 0, 0, 0, 0, 120, 218,
+99, 96, 96, 100, 98, 102, 97, 101, 99, 231, 224, 228, 226, 230, 225,
+229, 227, 23, 16, 20, 18, 22, 17, 21, 21, 19, 151, 144, 148, 146, 150,
+145, 149, 149, 147, 87, 80, 84, 82, 86, 86, 81, 85, 83, 215, 208, 208,
+212, 210, 214, 209, 213, 213, 211, 55, 48, 48, 52, 50, 54, 49, 49, 53,
+51, 55, 183, 176, 180, 178, 178, 182, 177, 181, 181, 179, 183, 119,
+112, 116, 116, 114, 118, 113, 113, 117, 115, 115, 247, 240, 240, 244,
+242, 242, 246, 246, 241, 245, 245, 243, 247, 15, 8, 8, 12, 10, 10, 14,
+14, 9, 13, 13, 11, 11, 15, 143, 136, 136, 140, 138, 138, 142, 142,
+137, 137, 141, 141, 139, 139, 143, 79, 72, 72, 76, 76, 74, 74, 78, 78,
+73, 73, 73, 77, 77, 75, 75, 79, 207, 200, 200, 200, 204, 204, 202,
+202, 202, 206, 206, 201, 201, 201, 205, 205, 203, 203, 203, 207, 207,
+47, 40, 40, 40, 44, 44, 44, 42, 42, 42, 46, 46, 46, 1, 130, 210, 210,
+210, 50, 32, 40, 7, 130, 10, 32, 168, 4, 129, 42, 16, 168, 6, 131, 26,
+48, 168, 133, 130, 58, 36, 80, 79, 0, 32, 171, 133, 233, 135, 152, 6,
+49, 25, 108, 9, 216, 58, 144, 189, 32, 251, 65, 238, 0, 58, 7, 228,
+42, 160, 227, 128, 78, 4, 58, 20, 232, 92, 160, 163, 129, 78, 207,
+205, 5, 122, 34, 59, 27, 232, 157, 204, 76, 160, 199, 210, 211, 211,
+210, 82, 83, 129, 94, 77, 78, 78, 74, 74, 76, 76, 72, 136, 143, 143,
+139, 139, 141, 141, 137, 137, 142, 142, 138, 138, 140, 136, 8, 15, 15,
+11, 11, 13, 13, 9, 14, 14, 10, 10, 12, 8, 240, 247, 247, 243, 245,
+245, 241, 246, 246, 242, 242, 244, 240, 112, 119, 115, 115, 117, 113,
+113, 118, 114, 116, 116, 176, 183, 183, 179, 181, 181, 177, 182, 178,
+178, 180, 48, 55, 55, 51, 53, 49, 49, 54, 50, 52, 48, 208, 215, 211,
+213, 213, 209, 214, 210, 212, 208, 80, 87, 83, 85, 81, 86, 86, 82, 84,
+144, 151, 147, 149, 149, 145, 150, 146, 148, 16, 23, 19, 21, 21, 17,
+22, 18, 20, 224, 231, 227, 229, 225, 230, 226, 228, 96, 103, 99, 101,
+97, 102, 98, 100, 96, 136, 141, 3, 197, 0, 40, 252, 65, 129, 15, 10,
+249, 108, 80, 160, 231, 3, 131, 187, 168, 24, 24, 204, 101, 229, 192,
+192, 173, 170, 174, 1, 6, 98, 125, 67, 99, 83, 115, 115, 75, 107, 91,
+123, 71, 71, 103, 87, 119, 79, 111, 111, 95, 255, 132, 137, 147, 38,
+79, 158, 50, 117, 218, 244, 25, 51, 103, 206, 154, 61, 103, 238, 188,
+249, 243, 23, 44, 92, 180, 120, 201, 210, 165, 203, 150, 175, 88, 185,
+106, 245, 234, 53, 107, 215, 173, 223, 176, 97, 227, 166, 205, 91,
+182, 110, 221, 182, 125, 199, 206, 93, 187, 118, 239, 217, 187, 111,
+223, 254, 3, 7, 15, 29, 58, 124, 228, 232, 177, 99, 199, 79, 156, 60,
+121, 234, 244, 153, 51, 103, 207, 157, 63, 127, 225, 226, 165, 75,
+151, 175, 92, 185, 122, 237, 250, 245, 27, 55, 111, 222, 186, 125,
+251, 206, 221, 187, 247, 238, 223, 127, 240, 224, 225, 163, 71, 143,
+31, 63, 121, 250, 244, 217, 179, 231, 47, 94, 188, 124, 249, 234, 213,
+235, 215, 111, 222, 188, 125, 251, 238, 221, 251, 247, 31, 62, 124,
+252, 248, 241, 211, 167, 207, 159, 191, 124, 249, 242, 245, 235, 215,
+111, 223, 190, 127, 255, 254, 3, 8, 126, 254, 252, 249, 11, 8, 126, 3,
+193, 31, 16, 248, 11, 1, 255, 80, 193, 255, 255, 104, 2, 80, 101, 96,
+45, 32, 189, 32, 51, 128, 70, 129, 76, 4, 26, 252, 237, 27, 208, 10,
+160, 69, 159, 63, 127, 250, 4, 180, 246, 195, 135, 247, 239, 223, 189,
+123, 251, 246, 205, 155, 215, 175, 95, 189, 122, 249, 242, 197, 139,
+231, 207, 158, 61, 125, 250, 228, 241, 227, 71, 143, 30, 62, 120, 112,
+255, 254, 189, 187, 119, 239, 220, 190, 125, 235, 230, 205, 27, 215,
+175, 95, 187, 122, 229, 202, 229, 75, 151, 46, 94, 56, 127, 254, 220,
+217, 51, 103, 78, 159, 58, 121, 242, 196, 241, 99, 199, 142, 30, 57,
+124, 232, 208, 193, 3, 251, 247, 237, 219, 187, 103, 247, 174, 93, 59,
+119, 108, 223, 182, 117, 235, 150, 205, 155, 54, 110, 216, 176, 126,
+221, 218, 53, 171, 87, 175, 90, 185, 98, 249, 178, 165, 75, 151, 44,
+94, 180, 112, 193, 252, 249, 243, 230, 206, 153, 61, 107, 230, 204,
+25, 211, 167, 77, 157, 50, 121, 242, 164, 137, 19, 250, 251, 122, 123,
+123, 186, 187, 58, 59, 58, 218, 219, 90, 91, 154, 155, 155, 26, 27,
+128, 137, 184, 182, 166, 26, 152, 74, 43, 202, 129, 41, 179, 164, 24,
+152, 34, 11, 242, 65, 73, 49, 27, 148, 10, 65, 73, 16, 148, 254, 64,
+169, 47, 46, 22, 0, 212, 3, 36, 81
+};
+#define LOAD_ASSETS()  (GD.copy(__assets, sizeof(__assets)), GD.loadptr = ASSETS_END)
+
+void setup()
+{
+  Serial.begin(1000000); // JCB
+  GD.begin();
+  LOAD_ASSETS();
+  GD.BitmapHandle(PYTHAG_HANDLE);
+  GD.BitmapSize(BILINEAR, REPEAT, REPEAT, GD.w, GD.h);
+  GD.BitmapHandle(GAUSS_HANDLE);
+  GD.BitmapSize(BILINEAR, REPEAT, REPEAT, GD.w, GD.h);
+}
+
+// Set the bitmap transform for horizonal (dir=0) or vertical (dir=1)
+
+void align(int dir, int w, int h)
+{
+  GD.cmd32(0xffffff21UL); // bitmap transform
+  GD.cmd32(        0); GD.cmd32(        0);
+  GD.cmd32(        w); GD.cmd32(        0);
+  GD.cmd32(        0); GD.cmd32(        h);
+
+  GD.cmd32(0); GD.cmd32(0);
+  if (dir == 0) {
+    GD.cmd32(511); GD.cmd32(0);
+    GD.cmd32(0); GD.cmd32(511);
+  } else {
+    GD.cmd32(0); GD.cmd32(511);
+    GD.cmd32(511); GD.cmd32(0);
+  }
+  GD.cmd32(0);
+}
+
+void circular(int x0, int y0,
+              int x1, int y1,
+              uint32_t c0, uint32_t c1)
+{
+  int handle = GAUSS_HANDLE;
+
+  GD.SaveContext();
+  GD.Begin(BITMAPS);
+
+  int w = x1 - x0;
+  int h = y1 - y0;
+
+  GD.ScissorXY(x0, y0);
+  GD.ScissorSize(w, h);
+
+  GD.ColorMask(0, 0, 0, 1);         // Only touch the alpha channel
+  GD.BitmapHandle(handle);
+
+  GD.BlendFunc(ONE, ZERO);          // Draw the X bitmap into alpha
+  align(0, w, h);
+  GD.Vertex2f(PIXELS(x0), PIXELS(y0));
+  if (handle == PYTHAG_HANDLE)
+    GD.BlendFunc(ONE, ONE);         // For pythagorean, want alpha addition
+  else
+    GD.BlendFunc(DST_ALPHA, ZERO);  // But for Gaussian, multiplication
+  align(1, w, h);                   // Blend the Y bitmap into alpha
+  GD.Vertex2f(PIXELS(x0), PIXELS(y0));
+
+  GD.ColorMask(1, 1, 1, 0);         // Now use the alpha buffer
+  GD.Begin(RECTS);
+
+  GD.ColorRGB(c0);
+  GD.BlendFunc(ONE, ZERO);
+  GD.Vertex2f(PIXELS(x0), PIXELS(y0));
+  GD.Vertex2f(PIXELS(x1), PIXELS(y1));
+
+  GD.ColorRGB(c1);
+  GD.BlendFunc(DST_ALPHA, ONE_MINUS_DST_ALPHA);
+  GD.Vertex2f(PIXELS(x0), PIXELS(y0));
+  GD.Vertex2f(PIXELS(x1), PIXELS(y1));
+  GD.RestoreContext();
+}
+
+uint32_t rand32()
+{
+  return ((uint32_t)GD.random() << 16) ^ GD.random();
+}
+
+void loop1()
+{
+  GD.Clear();
+  for (int y = 0; y < GD.h; y += 55)
+    for (int x = 0; x < GD.w; x += 96)
+      circular(x, y, x + 90, y + 50, rand32(), rand32());
+  GD.swap();
+}
+
+void loop2()
+{
+  circular(0, 0, GD.w, GD.h, 0x772b55, 0xef8619);
+  GD.cmd_text(GD.w / 2, GD.h / 2, 31, OPT_CENTER, "Hello world");
+  GD.swap();
+}
+
+void loop() { loop2(); }

+ 86 - 0
converted-assets/circular_assets.h

@@ -0,0 +1,86 @@
+// This file was generated with the command-line:
+//    /usr/local/bin/gd3asset -o circular_assets.h pythag.png,format=L8 gauss.png,format=L8
+
+#define PYTHAG_HANDLE 0
+#define PYTHAG_WIDTH 512
+#define PYTHAG_HEIGHT 1
+#define PYTHAG_CELLS 1
+#define GAUSS_HANDLE 1
+#define GAUSS_WIDTH 512
+#define GAUSS_HEIGHT 1
+#define GAUSS_CELLS 1
+#define ASSETS_END 1024UL
+static const PROGMEM uint8_t __assets[927] = {
+0, 0, 0, 5, 0, 0, 0, 1, 1, 0, 0, 8, 1, 0, 28, 7, 1, 0, 0, 5, 0, 2, 0,
+1, 1, 0, 0, 8, 1, 0, 28, 7, 34, 255, 255, 255, 0, 0, 0, 0, 120, 218,
+99, 96, 96, 100, 98, 102, 97, 101, 99, 231, 224, 228, 226, 230, 225,
+229, 227, 23, 16, 20, 18, 22, 17, 21, 21, 19, 151, 144, 148, 146, 150,
+145, 149, 149, 147, 87, 80, 84, 82, 86, 86, 81, 85, 83, 215, 208, 208,
+212, 210, 214, 209, 213, 213, 211, 55, 48, 48, 52, 50, 54, 49, 49, 53,
+51, 55, 183, 176, 180, 178, 178, 182, 177, 181, 181, 179, 183, 119,
+112, 116, 116, 114, 118, 113, 113, 117, 115, 115, 247, 240, 240, 244,
+242, 242, 246, 246, 241, 245, 245, 243, 247, 15, 8, 8, 12, 10, 10, 14,
+14, 9, 13, 13, 11, 11, 15, 143, 136, 136, 140, 138, 138, 142, 142,
+137, 137, 141, 141, 139, 139, 143, 79, 72, 72, 76, 76, 74, 74, 78, 78,
+73, 73, 73, 77, 77, 75, 75, 79, 207, 200, 200, 200, 204, 204, 202,
+202, 202, 206, 206, 201, 201, 201, 205, 205, 203, 203, 203, 207, 207,
+47, 40, 40, 40, 44, 44, 44, 42, 42, 42, 46, 46, 46, 1, 130, 210, 210,
+210, 50, 32, 40, 7, 130, 10, 32, 168, 4, 129, 42, 16, 168, 6, 131, 26,
+48, 168, 133, 130, 58, 36, 80, 79, 0, 32, 171, 133, 233, 135, 152, 6,
+49, 25, 108, 9, 216, 58, 144, 189, 32, 251, 65, 238, 0, 58, 7, 228,
+42, 160, 227, 128, 78, 4, 58, 20, 232, 92, 160, 163, 129, 78, 207,
+205, 5, 122, 34, 59, 27, 232, 157, 204, 76, 160, 199, 210, 211, 211,
+210, 82, 83, 129, 94, 77, 78, 78, 74, 74, 76, 76, 72, 136, 143, 143,
+139, 139, 141, 141, 137, 137, 142, 142, 138, 138, 140, 136, 8, 15, 15,
+11, 11, 13, 13, 9, 14, 14, 10, 10, 12, 8, 240, 247, 247, 243, 245,
+245, 241, 246, 246, 242, 242, 244, 240, 112, 119, 115, 115, 117, 113,
+113, 118, 114, 116, 116, 176, 183, 183, 179, 181, 181, 177, 182, 178,
+178, 180, 48, 55, 55, 51, 53, 49, 49, 54, 50, 52, 48, 208, 215, 211,
+213, 213, 209, 214, 210, 212, 208, 80, 87, 83, 85, 81, 86, 86, 82, 84,
+144, 151, 147, 149, 149, 145, 150, 146, 148, 16, 23, 19, 21, 21, 17,
+22, 18, 20, 224, 231, 227, 229, 225, 230, 226, 228, 96, 103, 99, 101,
+97, 102, 98, 100, 96, 136, 141, 3, 197, 0, 40, 252, 65, 129, 15, 10,
+249, 108, 80, 160, 231, 3, 131, 187, 168, 24, 24, 204, 101, 229, 192,
+192, 173, 170, 174, 1, 6, 98, 125, 67, 99, 83, 115, 115, 75, 107, 91,
+123, 71, 71, 103, 87, 119, 79, 111, 111, 95, 255, 132, 137, 147, 38,
+79, 158, 50, 117, 218, 244, 25, 51, 103, 206, 154, 61, 103, 238, 188,
+249, 243, 23, 44, 92, 180, 120, 201, 210, 165, 203, 150, 175, 88, 185,
+106, 245, 234, 53, 107, 215, 173, 223, 176, 97, 227, 166, 205, 91,
+182, 110, 221, 182, 125, 199, 206, 93, 187, 118, 239, 217, 187, 111,
+223, 254, 3, 7, 15, 29, 58, 124, 228, 232, 177, 99, 199, 79, 156, 60,
+121, 234, 244, 153, 51, 103, 207, 157, 63, 127, 225, 226, 165, 75,
+151, 175, 92, 185, 122, 237, 250, 245, 27, 55, 111, 222, 186, 125,
+251, 206, 221, 187, 247, 238, 223, 127, 240, 224, 225, 163, 71, 143,
+31, 63, 121, 250, 244, 217, 179, 231, 47, 94, 188, 124, 249, 234, 213,
+235, 215, 111, 222, 188, 125, 251, 238, 221, 251, 247, 31, 62, 124,
+252, 248, 241, 211, 167, 207, 159, 191, 124, 249, 242, 245, 235, 215,
+111, 223, 190, 127, 255, 254, 3, 8, 126, 254, 252, 249, 11, 8, 126, 3,
+193, 31, 16, 248, 11, 1, 255, 80, 193, 255, 255, 104, 2, 80, 101, 96,
+45, 32, 189, 32, 51, 128, 70, 129, 76, 4, 26, 252, 237, 27, 208, 10,
+160, 69, 159, 63, 127, 250, 4, 180, 246, 195, 135, 247, 239, 223, 189,
+123, 251, 246, 205, 155, 215, 175, 95, 189, 122, 249, 242, 197, 139,
+231, 207, 158, 61, 125, 250, 228, 241, 227, 71, 143, 30, 62, 120, 112,
+255, 254, 189, 187, 119, 239, 220, 190, 125, 235, 230, 205, 27, 215,
+175, 95, 187, 122, 229, 202, 229, 75, 151, 46, 94, 56, 127, 254, 220,
+217, 51, 103, 78, 159, 58, 121, 242, 196, 241, 99, 199, 142, 30, 57,
+124, 232, 208, 193, 3, 251, 247, 237, 219, 187, 103, 247, 174, 93, 59,
+119, 108, 223, 182, 117, 235, 150, 205, 155, 54, 110, 216, 176, 126,
+221, 218, 53, 171, 87, 175, 90, 185, 98, 249, 178, 165, 75, 151, 44,
+94, 180, 112, 193, 252, 249, 243, 230, 206, 153, 61, 107, 230, 204,
+25, 211, 167, 77, 157, 50, 121, 242, 164, 137, 19, 250, 251, 122, 123,
+123, 186, 187, 58, 59, 58, 218, 219, 90, 91, 154, 155, 155, 26, 27,
+128, 137, 184, 182, 166, 26, 152, 74, 43, 202, 129, 41, 179, 164, 24,
+152, 34, 11, 242, 65, 73, 49, 27, 148, 10, 65, 73, 16, 148, 254, 64,
+169, 47, 46, 22, 0, 212, 3, 36, 81
+};
+#define LOAD_ASSETS()  (GD.copy(__assets, sizeof(__assets)), GD.loadptr = ASSETS_END)
+
+static const shape_t PYTHAG_SHAPE = {0, 512, 1, 0};
+static const shape_t GAUSS_SHAPE = {1, 512, 1, 0};
+struct {
+  Bitmap pythag;
+  Bitmap gauss;
+} bitmaps = {
+ /*           pythag */  {{512,   1}, {256,   0},      0x0UL,  3,  0},
+ /*            gauss */  {{512,   1}, {256,   0},    0x200UL,  3,  1}
+};

BIN
converted-assets/gauss.png


BIN
converted-assets/pythag.png