From b7032c3b8eb5722045f9bc7c640e4b87768aac7f Mon Sep 17 00:00:00 2001 From: Annika Date: Wed, 8 Jul 2026 14:05:42 -0700 Subject: [PATCH] bit of code cleanup --- buffer.cpp | 6 +-- example | Bin 37032 -> 41128 bytes example.cpp | 62 +++++++++++++------------------ primatives/rectangle.cpp | 21 +---------- shaders/shader.cpp => shader.cpp | 6 +-- shaders/colorshader.cpp | 29 --------------- shaders/hgradientshader.cpp | 35 ----------------- shaders/vgradientshader.cpp | 35 ----------------- 8 files changed, 31 insertions(+), 163 deletions(-) rename shaders/shader.cpp => shader.cpp (94%) delete mode 100644 shaders/colorshader.cpp delete mode 100644 shaders/hgradientshader.cpp delete mode 100644 shaders/vgradientshader.cpp diff --git a/buffer.cpp b/buffer.cpp index a0f470f..d80d15e 100644 --- a/buffer.cpp +++ b/buffer.cpp @@ -4,11 +4,7 @@ #include "datatypes.cpp" #include "helpers.cpp" -#include "shaders/shader.cpp" -// #include "shaders/colorshader.cpp" -// #include "shaders/gradientshader.cpp" -// #include "shaders/hgradientshader.cpp" -// #include "shaders/vgradientshader.cpp" +#include "shader.cpp" namespace UwU { // Buffer object - can be a wayland surface or a virtual buffer diff --git a/example b/example index 71d098bbbf2b5f90018cf94bd8928081842912da..55e4408983dde06040e85f6cedf2fbf334964fd8 100755 GIT binary patch literal 41128 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 kJN9`iy-)5j>^DwW(gf>3EH8V@z8m!yi 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 Jrl7ILe*hL0osj?l diff --git a/example.cpp b/example.cpp index d4a2ac4..54e9d52 100644 --- a/example.cpp +++ b/example.cpp @@ -16,13 +16,7 @@ #include "primatives/rectangle.cpp" #include "primatives/trapezoid.cpp" #include "primatives/triangle.cpp" -// #include "draw.cpp" -#include "shaders/shader.cpp" -// #include "shaders/colorshader.cpp" -// #include "shaders/gradientshader.cpp" -// #include "shaders/hgradientshader.cpp" -// #include "shaders/vgradientshader.cpp" -// #include "mapper.cpp" +#include "shader.cpp" #include @@ -38,13 +32,8 @@ static void onKey(void *user, uint32_t keycode, uint32_t state) { int main(void) { uint16_t w = 800, h = 480; - // UwU::GradientShader fuchsia = UwU::GradientShader(UwU::Color(0xb00b69ff), UwU::Color(0xb00b6940)); - // UwU::ColorShader fuchsia = UwU::ColorShader(UwU::Color(0xb00b69ff)); UwU::Shader fuchsia = UwU::Shader(UwU::Direction::H, 69, 420, UwU::Color(0xb00b69ff), UwU::Color(0x00000000)); UwU::Shader warmup = UwU::Shader(UwU::Color(0xb00b69ff)); - // int32_t rectScale = (255 * 65536) / 351; - // rectScale = 41233; //-23806 - // UwU::Mapper rectMapper = UwU::Mapper(UwU::Vec2(0, 0), UwU::Vec2(0, 0), UwU::Matrix4(0, 0, 0, 0)); UwU::Color red = UwU::Color(0xff000080); UwU::Color green = UwU::Color(0x00ff00ff); UwU::Color blue = UwU::Color(0x0000ff80); @@ -54,34 +43,33 @@ int main(void) { // UwU::Buffer buffer = UwU::Buffer(surface.getWidth(), surface.getHeight()); UwU::Rectangle rectangle = UwU::Rectangle(69, 69, 420, 420); - // draw.rainbow(); - - - // draw.rectangleGradient(UwU::Coord2(200, 200), UwU::Coord2(600, 400), red, blue, alpha, red); + + // Benchmarking struct timespec start, end; -const int WARMUP = 100; -const int BATCH = 1000; -const int SAMPLES = 10; + const int WARMUP = 100; + const int BATCH = 1000; + const int SAMPLES = 10; -for (int i = 0; i < WARMUP; i++) { - UwU::Trapezoid trapezoid = UwU::Trapezoid(300, 400, 360, 380, 600, 480); -} -long times[SAMPLES]; -for (int s = 0; s < SAMPLES; s++) { - clock_gettime(CLOCK_MONOTONIC, &start); - for (int i = 0; i < BATCH; i++) rectangle.draw(surface.buffer, warmup); - UwU::Trapezoid trapezoid = UwU::Trapezoid(300, 400, 360, 380, 600, 480); - clock_gettime(CLOCK_MONOTONIC, &end); - times[s] = (end.tv_sec - start.tv_sec) * 1000000000L + (end.tv_nsec - start.tv_nsec); -} -long timeAvg = 0; -for (int i = 0; i < SAMPLES; i++) { - timeAvg += times[i]; -} -timeAvg /= SAMPLES; -timeAvg /= BATCH; -printf("Elapsed: %ld ns\n", timeAvg); + for (int i = 0; i < WARMUP; i++) { + rectangle.draw(surface.buffer, fuchsia); + } + long times[SAMPLES]; + for (int s = 0; s < SAMPLES; s++) { + clock_gettime(CLOCK_MONOTONIC, &start); + for (int i = 0; i < BATCH; i++) { + rectangle.draw(surface.buffer, fuchsia); + } + clock_gettime(CLOCK_MONOTONIC, &end); + times[s] = (end.tv_sec - start.tv_sec) * 1000000000L + (end.tv_nsec - start.tv_nsec); + } + long timeAvg = 0; + for (int i = 0; i < SAMPLES; i++) { + timeAvg += times[i]; + } + timeAvg /= SAMPLES; + timeAvg /= BATCH; + printf("Elapsed: %ld ns\n", timeAvg); UwU::Trapezoid trapezoid = UwU::Trapezoid(300, 400, 360, 380, 600, 480); trapezoid.draw(surface.buffer, red); diff --git a/primatives/rectangle.cpp b/primatives/rectangle.cpp index 01f782d..f80bab9 100644 --- a/primatives/rectangle.cpp +++ b/primatives/rectangle.cpp @@ -5,12 +5,7 @@ #include "../datatypes.cpp" #include "../helpers.cpp" #include "../buffer.cpp" -#include "../shaders/shader.cpp" -// #include "../shaders/colorshader.cpp" -// #include "../shaders/gradientshader.cpp" -// #include "../shaders/hgradientshader.cpp" -// #include "../shaders/vgradientshader.cpp" -// #include "../mapper.cpp" +#include "../shader.cpp" namespace UwU { // rectangle @@ -32,22 +27,10 @@ namespace UwU { void draw (Buffer buffer, Shader shader) { if (shader.shaderType == COLOR) { if (x0 > buffer.width || y0 > buffer.height || x1 > buffer.width || y1 > buffer.height) {return;}; - Color c = shader.c0; - uint8_t r = c.r; - uint8_t g = c.g; - uint8_t b = c.b; - size_t stride = buffer.stride; - size_t i = (size_t)y0 * buffer.stride + (size_t)x0 * 4; for (uint16_t y = y0; y < y1; y++) { for (uint16_t x = x0; x < x1; x++) { - // buffer.drawPixel(Coord2(x, y), shader.c0); - buffer.pixels[i + 0] = b; - buffer.pixels[i + 1] = g; - buffer.pixels[i + 2] = r; - buffer.pixels[i + 3] = 255; - i += 4; + buffer.drawPixel(Coord2(x, y), shader.c0); } - i += stride - ((x1 - x0) * 4); } return; diff --git a/shaders/shader.cpp b/shader.cpp similarity index 94% rename from shaders/shader.cpp rename to shader.cpp index aa61981..adb2bf1 100644 --- a/shaders/shader.cpp +++ b/shader.cpp @@ -2,9 +2,9 @@ #include -#include "../datatypes.cpp" -#include "../helpers.cpp" -#include "../buffer.cpp" +#include "datatypes.cpp" +#include "helpers.cpp" +#include "buffer.cpp" namespace UwU { // shader prototype diff --git a/shaders/colorshader.cpp b/shaders/colorshader.cpp deleted file mode 100644 index 47ef643..0000000 --- a/shaders/colorshader.cpp +++ /dev/null @@ -1,29 +0,0 @@ -#pragma once - -#include - -#include "../datatypes.cpp" -#include "../helpers.cpp" -#include "../buffer.cpp" -#include "shader.cpp" - -namespace UwU { - class ColorShader { - private: - - - public: - ColorShader(Color color) { - this->shaderType = COLORSHADER; - this->shaderColor = color; - } - ShaderType shaderType; - Color shaderColor; - - Color color(uint16_t u, uint16_t v) { - (void)u; - (void)v; - return shaderColor; - } - }; -} \ No newline at end of file diff --git a/shaders/hgradientshader.cpp b/shaders/hgradientshader.cpp deleted file mode 100644 index dca2094..0000000 --- a/shaders/hgradientshader.cpp +++ /dev/null @@ -1,35 +0,0 @@ -#pragma once - -#include - -#include "../datatypes.cpp" -#include "../helpers.cpp" -#include "../buffer.cpp" -#include "shader.cpp" - -namespace UwU { - class HGradientShader{ - public: - HGradientShader(uint16_t x0, Color color0, uint16_t x1, Color color1) { - this->shaderType = HGRADIENTSHADER; - this->x0 = x0; - this->shaderColor0 = color0; - this->scale = 0xffffffff / (1 + (uint32_t)x1 - (uint32_t)x0); - this->shaderColor1 = color1; - } - ShaderType shaderType; - uint16_t x0; - Color shaderColor0; - uint32_t scale; - Color shaderColor1; - - Color hGradient(uint16_t u, uint16_t v) { - (void)v; - uint32_t t = (((uint32_t)u - (uint32_t)x0) * scale) / 0x01000000; - // if (v == 42) { - // printf("(%u, %u)\n", u, t); - // } - return Helpers::lerpColor(shaderColor0, shaderColor1, (uint8_t)t); - } - }; -} \ No newline at end of file diff --git a/shaders/vgradientshader.cpp b/shaders/vgradientshader.cpp deleted file mode 100644 index 520cc86..0000000 --- a/shaders/vgradientshader.cpp +++ /dev/null @@ -1,35 +0,0 @@ -#pragma once - -#include - -#include "../datatypes.cpp" -#include "../helpers.cpp" -#include "../buffer.cpp" -#include "shader.cpp" - -namespace UwU { - class VGradientShader { - public: - VGradientShader(uint16_t y0, Color color0, uint16_t y1, Color color1) { - this->shaderType = VGRADIENTSHADER; - this->y0 = y0; - this->shaderColor0 = color0; - this->scale = 0xffffffff / (1 + (uint32_t)y1 - (uint32_t)y0); - this->shaderColor1 = color1; - } - ShaderType shaderType; - uint16_t y0; - Color shaderColor0; - uint32_t scale; - Color shaderColor1; - - Color vGradient(uint16_t u, uint16_t v) { - (void)u; - uint32_t t = (((uint32_t)v - (uint32_t)y0) * scale) / 0x01000000; - // if (v == 42) { - // printf("(%u, %u)\n", u, t); - // } - return Helpers::lerpColor(shaderColor0, shaderColor1, (uint8_t)t); - } - }; -} \ No newline at end of file