diff --git a/example.cpp b/example.cpp index 6c6297d..9d0a81c 100644 --- a/example.cpp +++ b/example.cpp @@ -38,16 +38,16 @@ int main(void) { UwU::Surface surface = UwU::Surface(w, h, onKey); - UwU::Color fuchsia = UwU::Color(0xb00b69ff); + // UwU::Color fuchsia = UwU::Color(0xb00b69ff); UwU::Color red = UwU::Color(0xff0000ff); UwU::Color green = UwU::Color(0x00ff00ff); UwU::Color blue = UwU::Color(0x0000ffff); // UwU::ColorShader fuchsia = UwU::ColorShader(UwU::Color(0xb00b69ff)); UwU::VGradientShader bisexual = UwU::VGradientShader(0, 351, red, blue); - UwU::OffsetMapper rectMapper = UwU::OffsetMapper(69, 69); + UwU::OffsetMapper offsetMapper = UwU::OffsetMapper(); UwU::Rectangle rectangle = UwU::Rectangle(69, 69, 420, 420); - rectangle.draw(surface.buffer, rectMapper, bisexual); + rectangle.draw(surface.buffer, offsetMapper, bisexual); UwU::ColorShader greenShader = UwU::ColorShader(green); UwU::NullMapper nullMapper = UwU::NullMapper(); diff --git a/mappers/mapperbase.cpp b/mappers/mapperbase.cpp index 24caf45..a41729e 100644 --- a/mappers/mapperbase.cpp +++ b/mappers/mapperbase.cpp @@ -9,8 +9,8 @@ namespace UwU { template class MapperBase { public: - Coord2 map(uint16_t x, uint16_t y) { - return static_cast(this)->map(x, y); + Coord2 map(uint16_t x0, uint16_t y0, uint16_t x, uint16_t y) { + return static_cast(this)->map(x0, y0, x, y); } }; } \ No newline at end of file diff --git a/mappers/nullmapper.cpp b/mappers/nullmapper.cpp index 417726e..1a55ecb 100644 --- a/mappers/nullmapper.cpp +++ b/mappers/nullmapper.cpp @@ -11,7 +11,9 @@ namespace UwU { public: NullMapper() {} - Coord2 map(uint16_t x, uint16_t y) { + Coord2 map(uint16_t x0, uint16_t y0, uint16_t x, uint16_t y) { + (void)x0; + (void)y0; return Coord2(x, y); } }; diff --git a/mappers/offsetmapper.cpp b/mappers/offsetmapper.cpp index d77eeb0..a9833e7 100644 --- a/mappers/offsetmapper.cpp +++ b/mappers/offsetmapper.cpp @@ -9,13 +9,9 @@ namespace UwU { class OffsetMapper : public MapperBase { public: - OffsetMapper(uint16_t x0, uint16_t y0) { - this->x0 = x0; - this->y0 = y0; - } - uint16_t x0, y0; + OffsetMapper() {} - Coord2 map(uint16_t x, uint16_t y) { + Coord2 map(uint16_t x0, uint16_t y0, uint16_t x, uint16_t y) { uint16_t u = x -x0; uint16_t v = y -y0; return Coord2(u, v); diff --git a/mappers/tilemapper.cpp b/mappers/tilemapper.cpp index b5dca69..b86df29 100644 --- a/mappers/tilemapper.cpp +++ b/mappers/tilemapper.cpp @@ -9,13 +9,9 @@ namespace UwU { class TileMapper : public MapperBase { // not actually tilemapping yet public: - TileMapper(uint16_t x0, uint16_t y0) { - this->x0 = x0; - this->y0 = y0; - } - uint16_t x0, y0; + TileMapper() {} - Coord2 map(uint16_t x, uint16_t y) { + Coord2 map(uint16_t x0, uint16_t y0, uint16_t x, uint16_t y) { uint16_t u = x -x0; uint16_t v = y -y0; return Coord2(u, v); diff --git a/primatives/line.cpp b/primatives/line.cpp index d6ddfec..69cfb61 100644 --- a/primatives/line.cpp +++ b/primatives/line.cpp @@ -28,7 +28,7 @@ namespace UwU { Coord2 uv; for (int16_t x = ix0; x < ix1; x++) { - uv = mapper.map(x, y); + uv = mapper.map(ix0, iy0, x, y); buffer.drawPixel((uint16_t)x, (uint16_t)y, shader.shade(uv.x, uv.y)); if (d > 0) { y += yi; @@ -56,7 +56,7 @@ namespace UwU { Coord2 uv; for (int16_t y = iy0; y < iy1; y++) { - uv = mapper.map(x, y); + uv = mapper.map(ix0, iy0, x, y); buffer.drawPixel((uint16_t)x, (uint16_t)y, shader.shade(uv.x, uv.y)); if (d > 0) { x += xi; diff --git a/primatives/point.cpp b/primatives/point.cpp index 0fc84fe..54fbc0b 100644 --- a/primatives/point.cpp +++ b/primatives/point.cpp @@ -24,7 +24,7 @@ namespace UwU { template void draw (Buffer buffer, MapperBase& mapper, ShaderBase& shader) { if (x > buffer.width || y > buffer.height) {return;}; - Coord2 uv = mapper.map(x, y); + Coord2 uv = mapper.map(x, y, x, y); buffer.drawPixel(x, y, shader.shade(uv.x, uv.y)); return; } diff --git a/primatives/rectangle.cpp b/primatives/rectangle.cpp index 677a6ed..e7d5c66 100644 --- a/primatives/rectangle.cpp +++ b/primatives/rectangle.cpp @@ -30,7 +30,7 @@ namespace UwU { if (x0 > buffer.width || y0 > buffer.height || x1 > buffer.width || y1 > buffer.height) {return;}; for (uint16_t y = y0; y <= y1; y++) { for (uint16_t x = x0; x <= x1; x++) { - Coord2 uv = mapper.map(x, y); + Coord2 uv = mapper.map(x0, y0, x, y); buffer.drawPixel(x, y, shader.shade(uv.x, uv.y)); } } diff --git a/primatives/trapezoid.cpp b/primatives/trapezoid.cpp index 256c2db..ab268bb 100644 --- a/primatives/trapezoid.cpp +++ b/primatives/trapezoid.cpp @@ -39,10 +39,12 @@ namespace UwU { Helpers::bresenham(0, xl0, y1 - y0, xl1, LeftBound); Helpers::bresenham(0, xr0, y1 - y0, xr1, RightBound); + + uint16_t x0 = std::min(xl0, xl1); for (uint16_t i = 0; i < height; i++) { for (uint16_t x = LeftBound[i]; x <= RightBound[i]; x++) { - Coord2 uv = mapper.map(x, i + y0); + Coord2 uv = mapper.map(x0, y0, x, i + y0); buffer.drawPixel(x, i + y0, shader.shade(uv.x, uv.y)); } } diff --git a/primatives/triangle.cpp b/primatives/triangle.cpp index 6d98652..6d2c07f 100644 --- a/primatives/triangle.cpp +++ b/primatives/triangle.cpp @@ -91,13 +91,15 @@ namespace UwU { // Calculate LUT for short two lines Helpers::bresenham(0, topX, midY - topY, midX, splitBound); Helpers::bresenham(midY - topY, midX, height - 1, btmX, splitBound); + Coord2 uv; + uint16_t leftX = std::min(topX, std::min(midX, btmX)); // Left-handed triangle case (midpoint is left of triangle) if ((int16_t)midX < longBound[midY - topY]) { for (uint16_t i = 0; i < height; i++) { for (uint16_t x = (uint16_t)splitBound[i]; x <= (uint16_t)longBound[i]; x++) { - uv = mapper.map(x, i + (uint16_t)topY); + uv = mapper.map(leftX, topY, x, i + (uint16_t)topY); buffer.drawPixel(x, i + (uint16_t)topY, shader.shade(uv.x, uv.y)); } } @@ -105,7 +107,7 @@ namespace UwU { } else { for (uint16_t i = 0; i < height; i++) { for (uint16_t x = (uint16_t)longBound[i]; x <= (uint16_t)splitBound[i]; x++) { - uv = mapper.map(x, i + (uint16_t)topY); + uv = mapper.map(leftX, topY, x, i + (uint16_t)topY); buffer.drawPixel(x, i + (uint16_t)topY, shader.shade(uv.x, uv.y)); } }