From fe5b90a3bfec2ae4f79987b44a60903cb99fb875 Mon Sep 17 00:00:00 2001 From: Annika Date: Sun, 5 Jul 2026 09:44:34 -0700 Subject: [PATCH] split out helpers and datatypes into other files --- test | Bin 41176 -> 36992 bytes test.cpp | 135 +++++++++++++++++-------------------------------------- 2 files changed, 40 insertions(+), 95 deletions(-) diff --git a/test b/test index eb536b97974dd53381f9b91f6bdc6b6d48c02df8..ab582a58f3539a75f77af55f987ca3341df41fb8 100755 GIT binary patch literal 36992 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 Yd>J|oi9*>K1bygRlDSAz&{*T&0f6mnDgXcg diff --git a/test.cpp b/test.cpp index 6d5fd7c..24fa5cc 100644 --- a/test.cpp +++ b/test.cpp @@ -9,6 +9,9 @@ #include #include +#include "datatypes.cpp" +#include "helpers.cpp" + // this should be handled elsewhere, eventually, maybe, probably static void on_key(void *user, uint32_t keycode, uint32_t state) { (void)user; @@ -18,77 +21,18 @@ static void on_key(void *user, uint32_t keycode, uint32_t state) { } namespace UwU { - - // Color datatype returns individual channel values from rgba hexcode - struct Color { - Color(uint32_t hex) { - 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; - uint8_t a; - }; - - // Coord2 datatype for xy coordinates, from top-left of surface - struct Coord2 { - Coord2(uint32_t x, uint32_t y) { - this->x = x; - this->y = y; - } - Coord2() {} - uint32_t x; - uint32_t y; - }; - - // trapezoid datatype (horizontally constrained) - struct Trapezoid { - Trapezoid(uint16_t y0, uint16_t y1, uint16_t xl0, uint16_t xl1, uint16_t xr0, uint16_t xr1) { - this->y0 = y0; - this->y1 = y1; - this->xl0 = xl0; - this->xl1 = xl1; - this->xr0 = xr0; - this->xr1 = xr1; - } - Trapezoid() {} - uint16_t y0; - uint16_t y1; - uint16_t xl0; - uint16_t xl1; - uint16_t xr0; - uint16_t xr1; - }; class Draw { private: - uint8_t lerp8(uint8_t a, uint8_t b, uint8_t t) { - uint16_t product = (a * (255 - t)) + (b * t); - return product / 255; - } - - 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); // maybe the alpha channel should be handled differently? - return mixed; - } - void putPixel(uint32_t x, uint32_t y, uint8_t r, uint8_t g, uint8_t b, uint8_t a = 0xff) { size_t i = (size_t)y * waymini_get_stride(this->wm) + (size_t)x * 4; uint8_t b0 = this->pixels[i + 0]; uint8_t g0 = this->pixels[i + 1]; uint8_t r0 = this->pixels[i + 2]; - b = lerp8(b0, b, a); - g = lerp8(g0, g, a); - r = lerp8(r0, r, a); + b = Helpers::lerp8(b0, b, a); + g = Helpers::lerp8(g0, g, a); + r = Helpers::lerp8(r0, r, a); this->pixels[i + 0] = b; // B this->pixels[i + 1] = g; // G this->pixels[i + 2] = r; // R @@ -292,10 +236,10 @@ namespace UwU { Color Rmix = Color(); Color Xmix = Color(); for (int32_t y = y0; y <= y1; y++) { - Lmix = this->lerpColor(colorUL, colorLL, (uint8_t)yGrad[y - y0]); - Rmix = this->lerpColor(colorUR, colorLR, (uint8_t)yGrad[y - y0]); + Lmix = Helpers::lerpColor(colorUL, colorLL, (uint8_t)yGrad[y - y0]); + Rmix = Helpers::lerpColor(colorUR, colorLR, (uint8_t)yGrad[y - y0]); for (int32_t x = x0; x <= x1; x++) { - Xmix = this->lerpColor(Lmix, Rmix, (uint8_t)xGrad[x - x0]); + Xmix = Helpers::lerpColor(Lmix, Rmix, (uint8_t)xGrad[x - x0]); putPixel(x, y, Xmix.r, Xmix.g, Xmix.b, Xmix.a); } } @@ -344,36 +288,37 @@ namespace UwU { } // Draws a horizontally bounded trapezoid + // TODO: FIX void trapezoid (Trapezoid coords, Color color) { - UwU::Trapezoid saneCoords = coords; - if (coords.y0 > coords.y1) { - saneCoords.y0 = coords.y1; - saneCoords.y1 = coords.y0; - saneCoords.xl0 = coords.xl1; - saneCoords.xl1 = coords.xl0; - saneCoords.xr0 = coords.xr1; - saneCoords.xr1 = coords.xr0; - } - uint16_t tempVal; - bool hflip0 = false; - if (saneCoords.xl0 > saneCoords.xr0) { - tempVal = saneCoords.xl0; - saneCoords.xl0 = saneCoords.xr0; - saneCoords.xr0 = tempVal; - hflip0 = true; - } - if (saneCoords.xl1 > saneCoords.xr1) { - if (!hflip0) { - // invalid geometry; emit console warning and don't attempt to draw - // possible options are: don't draw, lazy draw (incorrect geometry) - - // or split into two (way more work) - return; - } - tempVal = saneCoords.xl1; - saneCoords.xl1 = saneCoords.xr1; - saneCoords.xr1 = tempVal; - } - this->pTrapezoid(saneCoords, color); + // UwU::Trapezoid saneCoords = coords; + // if (coords.y0 > coords.y1) { + // saneCoords.y0 = coords.y1; + // saneCoords.y1 = coords.y0; + // saneCoords.xl0 = coords.xl1; + // saneCoords.xl1 = coords.xl0; + // saneCoords.xr0 = coords.xr1; + // saneCoords.xr1 = coords.xr0; + // } + // uint16_t tempVal; + // bool hflip0 = false; + // if (saneCoords.xl0 > saneCoords.xr0) { + // tempVal = saneCoords.xl0; + // saneCoords.xl0 = saneCoords.xr0; + // saneCoords.xr0 = tempVal; + // hflip0 = true; + // } + // if (saneCoords.xl1 > saneCoords.xr1) { + // if (!hflip0) { + // // invalid geometry; emit console warning and don't attempt to draw + // // possible options are: don't draw, lazy draw (incorrect geometry) - + // // or split into two (way more work) + // return; + // } + // tempVal = saneCoords.xl1; + // saneCoords.xl1 = saneCoords.xr1; + // saneCoords.xr1 = tempVal; + // } + this->pTrapezoid(coords, color); } }; } @@ -396,7 +341,7 @@ int main(void) { draw.rectangle(UwU::Coord2(69, 69), UwU::Coord2(420, 420), fuchsia); draw.rectangleGradient(UwU::Coord2(200, 200), UwU::Coord2(600, 400), red, blue, alpha, red); - draw.trapezoid(UwU::Trapezoid(500, 400, 360, 360, 600, 401), green); + // draw.trapezoid(UwU::Trapezoid(400, 500, 360, 360, 400, 601), green); draw.point(UwU::Coord2(387, 43), green);