added stb, more binaryout changes"
[henge/apc.git] / stb / tests / herringbone_generator.c
diff --git a/stb/tests/herringbone_generator.c b/stb/tests/herringbone_generator.c
new file mode 100644 (file)
index 0000000..cf2a99e
--- /dev/null
@@ -0,0 +1,87 @@
+#define STB_HERRINGBONE_WANG_TILE_IMPLEMENTATION
+#include "stb_herringbone_wang_tile.h"
+
+#define STB_IMAGE_WRITE_IMPLEMENTATION
+#include "stb_image_write.h"
+
+//  e 12 1 1 1 1 1 1 4 4
+
+int main(int argc, char **argv)
+{
+   stbhw_config c = { 0 };
+   int w,h, num_colors,i;
+   unsigned char *data;
+
+   if (argc == 1)  goto usage;
+   if (argc  < 3)  goto error;
+
+   switch (argv[2][0]) {
+      case 'c':
+         if (argc <  8 || argc > 10)
+            goto error;
+         num_colors = 4;
+         c.is_corner = 1;
+         break;
+
+      case 'e':
+         if (argc < 10 || argc > 12)
+            goto error;
+         num_colors = 6;
+         c.is_corner = 0;
+         break;
+
+      default:
+         goto error;
+   }
+
+   c.short_side_len = atoi(argv[3]);
+   for (i=0; i < num_colors; ++i)
+      c.num_color[i] = atoi(argv[4+i]);
+
+   c.num_vary_x = 1;
+   c.num_vary_y = 1;
+
+   if (argc > 4+i)
+      c.num_vary_x = atoi(argv[4+i]);
+   if (argc > 5+i)
+      c.num_vary_y = atoi(argv[5+i]);
+
+   stbhw_get_template_size(&c, &w, &h);
+
+   data = (unsigned char *) malloc(w*h*3);
+
+   if (stbhw_make_template(&c, data, w, h, w*3))
+      stbi_write_png(argv[1], w, h, 3, data, w*3);
+   else
+      fprintf(stderr, "Error: %s\n", stbhw_get_last_error());
+   return 0;
+
+ error:
+   fputs("Invalid command-line arguments\n\n", stderr);
+ usage:
+   fputs("Usage (see source for corner & edge type definitions):\n\n", stderr);
+   fputs("herringbone_generator {outfile} c {sidelen} {c0} {c1} {c2} {c3} [{vx} {vy}]\n"
+         "     {outfile}  -- filename that template will be written to as PNG\n"
+         "     {sidelen}  -- length of short side of rectangle in pixels\n"
+         "     {c0}       -- number of colors for corner type 0\n"
+         "     {c1}       -- number of colors for corner type 1\n"
+         "     {c2}       -- number of colors for corner type 2\n"
+         "     {c3}       -- number of colors for corner type 3\n"
+         "     {vx}       -- number of color-duplicating variations horizontally in template\n"
+         "     {vy}       -- number of color-duplicating variations vertically in template\n"
+         "\n"
+         , stderr);
+   fputs("herringbone_generator {outfile} e {sidelen} {e0} {e1} {e2} {e3} {e4} {e5} [{vx} {vy}]\n"
+         "     {outfile}  -- filename that template will be written to as PNG\n"
+         "     {sidelen}  -- length of short side of rectangle in pixels\n"
+         "     {e0}       -- number of colors for edge type 0\n"
+         "     {e1}       -- number of colors for edge type 1\n"
+         "     {e2}       -- number of colors for edge type 2\n"
+         "     {e3}       -- number of colors for edge type 3\n"
+         "     {e4}       -- number of colors for edge type 4\n"
+         "     {e5}       -- number of colors for edge type 5\n"
+         "     {vx}       -- number of color-duplicating variations horizontally in template\n"
+         "     {vy}       -- number of color-duplicating variations vertically in template\n"
+         , stderr);
+   return 1;
+}