Introduction
Introduction Statistics Contact Development Disclaimer Help
Add blind-rectangle-tessellation, blind-triangle-tessellation, and blind-hexago…
git clone git://git.suckless.org/blind
Log
Files
Refs
README
LICENSE
---
commit ab3fc0fa703bc112938360c77200bd4ecb6bd503
parent 9e9a962e2f115d0df0599cb84bdbc5009ea7de12
Author: Mattias Andrée <[email protected]>
Date: Thu, 13 Jul 2017 04:50:57 +0200
Add blind-rectangle-tessellation, blind-triangle-tessellation, and blind-hexago…
Signed-off-by: Mattias Andrée <[email protected]>
Diffstat:
M Makefile | 3 +++
A src/blind-hexagon-tessellation.c | 108 +++++++++++++++++++++++++++++…
A src/blind-rectangle-tessellation.c | 72 +++++++++++++++++++++++++++++…
A src/blind-triangle-tessellation.c | 93 +++++++++++++++++++++++++++++…
4 files changed, 276 insertions(+), 0 deletions(-)
---
diff --git a/Makefile b/Makefile
@@ -36,6 +36,7 @@ BIN =\
blind-from-video\
blind-gauss-blur\
blind-get-colours\
+ blind-hexagon-tessellation\
blind-interleave\
blind-invert-luma\
blind-linear-gradient\
@@ -46,6 +47,7 @@ BIN =\
blind-premultiply\
blind-radial-gradient\
blind-read-head\
+ blind-rectangle-tessellation\
blind-repeat\
blind-repeat-tessellation\
blind-reverse\
@@ -76,6 +78,7 @@ BIN =\
blind-to-video\
blind-translate\
blind-transpose\
+ blind-triangle-tessellation\
blind-unpremultiply\
blind-vector-projection\
blind-write-head\
diff --git a/src/blind-hexagon-tessellation.c b/src/blind-hexagon-tessellation.c
@@ -0,0 +1,108 @@
+/* See LICENSE file for copyright and license details. */
+#include "common.h"
+
+USAGE("[-F pixel-format] block-diameter")
+
+#define SET_XYZA(TYPE)\
+ (pixwidth *= sizeof(double),\
+ colours = alloca(4 * pixwidth),\
+ ((TYPE *)colours)[ 0] = (TYPE)(0.0000 * D65_XYZ_X),\
+ ((TYPE *)colours)[ 1] = (TYPE)(0.0000),\
+ ((TYPE *)colours)[ 2] = (TYPE)(0.0000 * D65_XYZ_Z),\
+ ((TYPE *)colours)[ 3] = (TYPE)1,\
+ ((TYPE *)colours)[ 4] = (TYPE)(0.3333 * D65_XYZ_X),\
+ ((TYPE *)colours)[ 5] = (TYPE)(0.3333),\
+ ((TYPE *)colours)[ 6] = (TYPE)(0.3333 * D65_XYZ_Z),\
+ ((TYPE *)colours)[ 7] = (TYPE)1,\
+ ((TYPE *)colours)[ 8] = (TYPE)(0.6667 * D65_XYZ_X),\
+ ((TYPE *)colours)[ 9] = (TYPE)(0.6667),\
+ ((TYPE *)colours)[10] = (TYPE)(0.6667 * D65_XYZ_Z),\
+ ((TYPE *)colours)[11] = (TYPE)1,\
+ ((TYPE *)colours)[12] = (TYPE)(1.0000 * D65_XYZ_X),\
+ ((TYPE *)colours)[13] = (TYPE)(1.0000),\
+ ((TYPE *)colours)[14] = (TYPE)(1.0000 * D65_XYZ_Z),\
+ ((TYPE *)colours)[15] = (TYPE)1)
+
+static struct stream stream = { .width = 0, .height = 0, .frames = 1 };
+
+int
+main(int argc, char *argv[])
+{
+ size_t diameter;
+ const char *pixfmt = "xyza";
+ size_t pixwidth = 4;
+ char *colours;
+ size_t x, y, y2;
+ int k;
+
+ ARGBEGIN {
+ case 'F':
+ pixfmt = UARGF();
+ break;
+ default:
+ usage();
+ } ARGEND;
+
+ if (argc != 1)
+ usage();
+
+ diameter = etozu_arg("block-diameter", argv[0], 1, SIZE_MAX);
+
+ pixfmt = get_pixel_format(pixfmt, "xyza");
+ if (!strcmp(pixfmt, "xyza"))
+ SET_XYZA(double);
+ else if (!strcmp(pixfmt, "xyza f"))
+ SET_XYZA(float);
+ else
+ eprintf("pixel format %s is not supported, try xyza\n", pixfmt…
+
+ strcpy(stream.pixfmt, pixfmt);
+ stream.width = (size_t)(diameter * sqrt(3.));
+ stream.height = diameter * 3 / 2;
+ fprint_stream_head(stdout, &stream);
+ efflush(stdout, "<stdout>");
+
+ for (y = 0; y < stream.height; y++) {
+ for (x = 0; x < stream.width; x++) {
+ if (y * 4 < diameter) {
+ switch (x * 4 / stream.width) {
+ case 0:
+ k = 2 * (4 * x * diameter < stream.wid…
+ break;
+ case 1:
+ k = 3 * (4 * x * diameter - stream.wid…
+ break;
+ case 2:
+ k = 1 + 2 * (3 * diameter * stream.wid…
+ break;
+ default:
+ k = 1 + (4 * x * diameter - 3 * stream…
+ break;
+ }
+ } else if (y * 4 < diameter * 3) {
+ k = (x * 2 >= stream.width);
+ } else if (y < diameter) {
+ y2 = diameter - y;
+ switch (x * 4 / stream.width) {
+ case 0:
+ k = 2 * (4 * x * diameter < stream.wid…
+ break;
+ case 1:
+ k = 3 * (4 * x * diameter - stream.wid…
+ break;
+ case 2:
+ k = 1 + 2 * (3 * diameter * stream.wid…
+ break;
+ default:
+ k = 1 + (4 * x * diameter - 3 * stream…
+ break;
+ }
+ } else {
+ k = (stream.width <= x * 4 && x * 4 < stream.w…
+ }
+ ewriteall(STDOUT_FILENO, colours + k * pixwidth, pixwi…
+ }
+ }
+
+ return 0;
+}
diff --git a/src/blind-rectangle-tessellation.c b/src/blind-rectangle-tessellat…
@@ -0,0 +1,72 @@
+/* See LICENSE file for copyright and license details. */
+#include "common.h"
+
+USAGE("[-F pixel-format] block-width block-height")
+
+#define SET_XYZA(TYPE)\
+ (pixwidth *= sizeof(double),\
+ colours = alloca(4 * pixwidth),\
+ ((TYPE *)colours)[ 0] = (TYPE)(0.0000 * D65_XYZ_X),\
+ ((TYPE *)colours)[ 1] = (TYPE)(0.0000),\
+ ((TYPE *)colours)[ 2] = (TYPE)(0.0000 * D65_XYZ_Z),\
+ ((TYPE *)colours)[ 3] = (TYPE)1,\
+ ((TYPE *)colours)[ 4] = (TYPE)(0.3333 * D65_XYZ_X),\
+ ((TYPE *)colours)[ 5] = (TYPE)(0.3333),\
+ ((TYPE *)colours)[ 6] = (TYPE)(0.3333 * D65_XYZ_Z),\
+ ((TYPE *)colours)[ 7] = (TYPE)1,\
+ ((TYPE *)colours)[ 8] = (TYPE)(0.6667 * D65_XYZ_X),\
+ ((TYPE *)colours)[ 9] = (TYPE)(0.6667),\
+ ((TYPE *)colours)[10] = (TYPE)(0.6667 * D65_XYZ_Z),\
+ ((TYPE *)colours)[11] = (TYPE)1,\
+ ((TYPE *)colours)[12] = (TYPE)(1.0000 * D65_XYZ_X),\
+ ((TYPE *)colours)[13] = (TYPE)(1.0000),\
+ ((TYPE *)colours)[14] = (TYPE)(1.0000 * D65_XYZ_Z),\
+ ((TYPE *)colours)[15] = (TYPE)1)
+
+static struct stream stream = { .width = 0, .height = 0, .frames = 1 };
+
+int
+main(int argc, char *argv[])
+{
+ size_t width, height;
+ const char *pixfmt = "xyza";
+ size_t pixwidth = 4;
+ char *colours;
+ size_t x1, y1, x2, y2;
+
+ ARGBEGIN {
+ case 'F':
+ pixfmt = UARGF();
+ break;
+ default:
+ usage();
+ } ARGEND;
+
+ if (argc != 2)
+ usage();
+
+ width = etozu_arg("block-width", argv[0], 1, SIZE_MAX);
+ height = etozu_arg("block-height", argv[1], 1, SIZE_MAX);
+
+ pixfmt = get_pixel_format(pixfmt, "xyza");
+ if (!strcmp(pixfmt, "xyza"))
+ SET_XYZA(double);
+ else if (!strcmp(pixfmt, "xyza f"))
+ SET_XYZA(float);
+ else
+ eprintf("pixel format %s is not supported, try xyza\n", pixfmt…
+
+ strcpy(stream.pixfmt, pixfmt);
+ stream.width = 2 * width;
+ stream.height = 2 * height;
+ fprint_stream_head(stdout, &stream);
+ efflush(stdout, "<stdout>");
+
+ for (y1 = 0; y1 < 2; y1++)
+ for (y2 = 0; y2 < height; y2++)
+ for (x1 = 0; x1 < 2; x1++)
+ for (x2 = 0; x2 < width; x2++)
+ ewriteall(STDOUT_FILENO, colours + (y1…
+
+ return 0;
+}
diff --git a/src/blind-triangle-tessellation.c b/src/blind-triangle-tessellatio…
@@ -0,0 +1,93 @@
+/* See LICENSE file for copyright and license details. */
+#include "common.h"
+
+USAGE("[-F pixel-format] block-width block-height")
+
+#define SET_XYZA(TYPE)\
+ (pixwidth *= sizeof(double),\
+ colours = alloca(8 * pixwidth),\
+ ((TYPE *)colours)[ 0] = (TYPE)0.412457445582367600,\
+ ((TYPE *)colours)[ 1] = (TYPE)0.212673370378408280,\
+ ((TYPE *)colours)[ 2] = (TYPE)0.019333942761673460,\
+ ((TYPE *)colours)[ 3] = (TYPE)1,\
+ ((TYPE *)colours)[ 4] = (TYPE)0.206228722791183800,\
+ ((TYPE *)colours)[ 5] = (TYPE)0.106336685189204140,\
+ ((TYPE *)colours)[ 6] = (TYPE)0.009666971380836730,\
+ ((TYPE *)colours)[ 7] = (TYPE)1,\
+ ((TYPE *)colours)[ 8] = (TYPE)0.770033310827883400,\
+ ((TYPE *)colours)[ 9] = (TYPE)0.927825100869440000,\
+ ((TYPE *)colours)[10] = (TYPE)0.138525897843512050,\
+ ((TYPE *)colours)[11] = (TYPE)1,\
+ ((TYPE *)colours)[12] = (TYPE)0.385016655413941700,\
+ ((TYPE *)colours)[13] = (TYPE)0.463912550434720000,\
+ ((TYPE *)colours)[14] = (TYPE)0.069262948921756020,\
+ ((TYPE *)colours)[15] = (TYPE)1,\
+ ((TYPE *)colours)[16] = (TYPE)0.357575865245515900,\
+ ((TYPE *)colours)[17] = (TYPE)0.715151730491031800,\
+ ((TYPE *)colours)[18] = (TYPE)0.119191955081838600,\
+ ((TYPE *)colours)[19] = (TYPE)1,\
+ ((TYPE *)colours)[20] = (TYPE)0.178787932622757940,\
+ ((TYPE *)colours)[21] = (TYPE)0.357575865245515900,\
+ ((TYPE *)colours)[22] = (TYPE)0.059595977540919300,\
+ ((TYPE *)colours)[23] = (TYPE)1,\
+ ((TYPE *)colours)[24] = (TYPE)(1.0 * D65_XYZ_X),\
+ ((TYPE *)colours)[25] = (TYPE)(1.0),\
+ ((TYPE *)colours)[26] = (TYPE)(1.0 * D65_XYZ_Z),\
+ ((TYPE *)colours)[27] = (TYPE)1,\
+ ((TYPE *)colours)[28] = (TYPE)(0.5 * D65_XYZ_X),\
+ ((TYPE *)colours)[29] = (TYPE)(0.5),\
+ ((TYPE *)colours)[30] = (TYPE)(0.5 * D65_XYZ_Z),\
+ ((TYPE *)colours)[31] = (TYPE)1)
+
+static struct stream stream = { .width = 0, .height = 0, .frames = 1 };
+
+int
+main(int argc, char *argv[])
+{
+ size_t width, height;
+ const char *pixfmt = "xyza";
+ size_t pixwidth = 4;
+ char *colours;
+ size_t x1, y1, x2, y2, k;
+
+ ARGBEGIN {
+ case 'F':
+ pixfmt = UARGF();
+ break;
+ default:
+ usage();
+ } ARGEND;
+
+ if (argc != 2)
+ usage();
+
+ width = etozu_arg("block-width", argv[0], 1, SIZE_MAX);
+ height = etozu_arg("block-height", argv[1], 1, SIZE_MAX);
+
+ pixfmt = get_pixel_format(pixfmt, "xyza");
+ if (!strcmp(pixfmt, "xyza"))
+ SET_XYZA(double);
+ else if (!strcmp(pixfmt, "xyza f"))
+ SET_XYZA(float);
+ else
+ eprintf("pixel format %s is not supported, try xyza\n", pixfmt…
+
+ strcpy(stream.pixfmt, pixfmt);
+ stream.width = 2 * width;
+ stream.height = 2 * height;
+ fprint_stream_head(stdout, &stream);
+ efflush(stdout, "<stdout>");
+
+ for (y1 = 0; y1 < 2; y1++) {
+ for (y2 = 0; y2 < height; y2++) {
+ for (x1 = 0; x1 < 2; x1++) {
+ for (x2 = 0; x2 < width; x2++) {
+ k = y1 * 4 + x1 * 2 + (x2 * height > y…
+ ewriteall(STDOUT_FILENO, colours + k *…
+ }
+ }
+ }
+ }
+
+ return 0;
+}
You are viewing proxied material from suckless.org. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.