#pragma once #include #include #include "../datatypes.cpp" #include "../helpers.cpp" #include "../buffer.cpp" #include "../shaders/shaders.h" namespace UwU { // trapezoid (horizontally constrained) class Trapezoid { public: 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; // Draw a horizontally bounded trapezoid // y1 >= y0 template void draw (Buffer buffer, ShaderBase& shader) { uint16_t height = 1 + y1 - y0; int16_t LeftBound[height]; int16_t RightBound[height]; Helpers::bresenham(0, xl0, y1 - y0, xl1, LeftBound); Helpers::bresenham(0, xr0, y1 - y0, xr1, RightBound); for (uint16_t i = 0; i < height; i++) { for (uint16_t x = LeftBound[i]; x <= RightBound[i]; x++) { buffer.drawPixel(x, i + y0, shader.shade(x, i + y0)); } } return; } }; }