circular.ino 6.6 KB

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