blobs is a sketching demonstration, as you paint on the touch screen a trail of circles follows.
The background is a repeated seamless texture ( thanks to Patrick Hoesly).
The code keeps a history of the last 128 touch positions, and draws the transparent, randomly colored circles.
#include <EEPROM.h>
#include <SPI.h>
#include <GD2.h>
#define NBLOBS      128
#define OFFSCREEN   -16384
struct xy {
  int x, y;
};
byte blob_i;
struct xy blobs[NBLOBS];
#include "blobs_assets.h"
void setup()
{
  GD.begin();
  LOAD_ASSETS();
  for (int i = 0; i < NBLOBS; i++) {
    blobs[i].x = OFFSCREEN;
    blobs[i].y = OFFSCREEN;
  }
}
void loop()
{
  GD.get_inputs();
  
  if (GD.inputs.x != -32768) {
    blobs[blob_i].x = GD.inputs.x << 4;
    blobs[blob_i].y = GD.inputs.y << 4;
  } else {
    blobs[blob_i].x = OFFSCREEN;
    blobs[blob_i].y = OFFSCREEN;
  }
  blob_i = (blob_i + 1) & (NBLOBS - 1);
  GD.ClearColorRGB(0xd0d0c0);
  GD.Clear();
  GD.Begin(BITMAPS);
  GD.BitmapSize(NEAREST, REPEAT, REPEAT, 480, 272);
  GD.Vertex2ii(0, 0);
  // Draw the blobs from oldest to youngest
  GD.Begin(POINTS);
  for (int i = 0; i < NBLOBS; i++) {
    // Blobs fade away and swell as they age
    GD.ColorA(i << 1);
    GD.PointSize((1024 + 16) - (i << 3));
    // Random color for each blob
    uint8_t j = (blob_i + i) & (NBLOBS - 1);
    byte r = j * 17;
    byte g = j * 23;
    byte b = j * 147;
    GD.ColorRGB(r, g, b);
    // Draw it!
    GD.Vertex2f(blobs[j].x, blobs[j].y);
  }
  GD.swap();
}