From 12d03c73b47c23af6700339ec3e52278ba5ff443 Mon Sep 17 00:00:00 2001 From: Annika Date: Sat, 4 Jul 2026 08:31:39 -0700 Subject: [PATCH] added gradients to rectangle --- test | Bin 36992 -> 41216 bytes test.cpp | 133 +++++++++++++++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 129 insertions(+), 4 deletions(-) diff --git a/test b/test index 4f0a237ac7d1651da054f89f4758143bba8ef61b..eefd6f04693c04bad67ffd81b8d441e3cfb945bb 100755 GIT binary patch literal 41216 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 z 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 RcLqV1-6@%wnu5j}{|AFiD!~8% diff --git a/test.cpp b/test.cpp index db3e5ab..d5775a3 100644 --- a/test.cpp +++ b/test.cpp @@ -22,11 +22,12 @@ namespace UwU { // Color datatype returns individual channel values from rgba hexcode struct Color { Color(uint32_t hex) { - this->a = hex & 0x000000ff; + this->a = hex & 0x000000ff; this->b = (hex & 0x0000ff00) >> 8; this->g = (hex & 0x00ff0000) >> 16; this->r = (hex & 0xff000000) >> 24; } + Color() {} uint8_t r; uint8_t g; uint8_t b; @@ -49,6 +50,16 @@ namespace UwU { uint8_t lerp8(uint8_t a, uint8_t b, uint8_t t) { uint16_t product = (a * (255 - t)) + (b * t); return product / 255; + // return b; + } + + Color lerpColor(Color a, Color b, uint8_t t) { + Color mixed = Color(); + mixed.r = this->lerp8(a.r, b.r, t); + mixed.g = this->lerp8(a.g, b.g, t); + mixed.b = this->lerp8(a.b, b.b, t); + mixed.a = this->lerp8(a.a, b.a, t); + return mixed; } void putPixel(uint32_t x, uint32_t y, uint8_t r, uint8_t g, uint8_t b, uint8_t a = 0xff) { @@ -110,6 +121,44 @@ namespace UwU { } return; } + + // plot gradients' lerp t value if m <= 1 + void gradLow(int32_t x1, uint8_t* gradLut) { + int32_t dx = x1; + int32_t dy = 256; + int32_t d = (2 * dy) - dx; + int32_t y = 0; + for (int32_t x = 0; x < x1; x++) { + gradLut[x] = (uint8_t)y; + // gradLut[x] = 240; + if (d > 0) { + y++; + d += (2 * (dy -dx)); + } else { + d += (2 * dy); + } + } + return; + } + + // plot gradients' lerp t value if m >1 + void gradHigh(int32_t x1, uint8_t* gradLut) { + int32_t dx = x1; + int32_t dy = 256; + int32_t d = (2 * dx) - dy; + int32_t x = 0; + for (int32_t y = 0; y < 256; y++) { + gradLut[x] = (uint8_t)y; + // gradLut[x] = 69; + if (d > 0) { + x++; + d += (2 * (dx -dy)); + } else { + d += (2 * dx); + } + } + return; + } public: struct waymini* wm; @@ -144,6 +193,73 @@ namespace UwU { } return; } + + // Draws a rectangle with a 4-point color gradient + void rectangleGradient(Coord2 point0, Coord2 point1, Color colorUL, Color colorUR, Color colorLL, Color colorLR) { + // void rectangleGradient(Coord2 point0, Coord2 point1) { + // convert to int32_t and ensure x1>x0 && y1>y0 + int32_t x0, y0, x1, y1; + if (point0.x > point1.x) { + x0 = (int32_t)point1.x; + x1 = (int32_t)point0.x; + } else { + x0 = (int32_t)point0.x; + x1 = (int32_t)point1.x; + } + if (point0.y > point1.y) { + y0 = (int32_t)point1.y; + y1 = (int32_t)point0.y; + } else { + y0 = (int32_t)point0.y; + y1 = (int32_t)point1.y; + } + + // setup gradient coefficient arrays + int32_t w = x1 - x0; + int32_t h = y1 - y0; + uint8_t xGrad[w]; + uint8_t yGrad[h]; + + // determine m and calculate horizontal gradient coefficient + if (w < 256) { + this->gradHigh(w, xGrad); + } else { + this->gradLow(w, xGrad); + } + + printf("horizontal LUT\n"); + for (uint16_t i = 0; i < w; i++) { + printf("(%u, %u)\n", i, xGrad[i]); + } + + // determine m and calculate vertical gradient coefficient + if (h < 256) { + this->gradHigh(h, yGrad); + } else { + this->gradLow(h, yGrad); + } + + printf("vertical LUT\n"); + for (uint16_t i = 0; i < h; i++) { + printf("(%u, %u)\n", i, yGrad[i]); + } + + // for each point calculate, alpha blend and print color + Color Lmix = Color(); + Color Rmix = Color(); + Color Xmix = Color(); + for (int32_t y = y0; y < y1; y++) { + Lmix = this->lerpColor(colorUL, colorLL, yGrad[y - y0]); + Rmix = this->lerpColor(colorUR, colorLR, yGrad[y - y0]); + for (int32_t x = x0; x < x1; x++) { + Xmix = this->lerpColor(Lmix, Rmix, xGrad[x - x0]); + putPixel(x, y, Xmix.r, Xmix.g, Xmix.b, Xmix.a); + } + } + + + return; + } // Fill a simple gradient. Each row is stride bytes. void rainbow() { @@ -190,8 +306,11 @@ namespace UwU { int main(void) { uint32_t w = 800, h = 480; - UwU::Color fuchsia = UwU::Color(0xb00b6980); - UwU::Color green = UwU::Color(0x00ff0060); + UwU::Color fuchsia = UwU::Color(0xb00b6940); + UwU::Color red = UwU::Color(0xff0000ff); + UwU::Color green = UwU::Color(0x00ff00ff); + UwU::Color blue = UwU::Color(0x0000ffff); + UwU::Color alpha = UwU::Color(0xffffff00); printf("r: %u, g:%u, b:%u, a:%u\n", fuchsia.r, fuchsia.g, fuchsia.b, fuchsia.a); // struct waymini *wm = waymini_create(w, h, on_key, NULL); @@ -199,8 +318,13 @@ int main(void) { draw.rainbow(); - waymini_present(draw.wm); + draw.rectangle(UwU::Coord2(69, 69), UwU::Coord2(420, 420), fuchsia); + draw.rectangleGradient(UwU::Coord2(200, 200), UwU::Coord2(600, 400), alpha, blue, green, red); + + + + draw.point(UwU::Coord2(387, 43), green); draw.line(UwU::Coord2(300, 100), UwU::Coord2(250, 469), green); draw.line(UwU::Coord2(250, 100), UwU::Coord2(300, 469), green); @@ -210,6 +334,7 @@ int main(void) { draw.line(UwU::Coord2(250, 300), UwU::Coord2(100, 469), green); draw.line(UwU::Coord2(100, 300), UwU::Coord2(469, 250), green); draw.line(UwU::Coord2(469, 300), UwU::Coord2(100, 250), green); + waymini_present(draw.wm); while (!waymini_should_close(draw.wm)) { if (waymini_dispatch(draw.wm) < 0) break;