From 06ebf4c01a569603388035f4a214324d95308ffc Mon Sep 17 00:00:00 2001 From: Jaby Date: Tue, 3 Oct 2023 20:31:17 +0200 Subject: [PATCH] Extend make functions for POLY --- .../src/Overlay/GPUTests/gpu_tests.cpp | 18 ++-- include/PSX/GPU/gpu_primitives.hpp | 91 +++++++++++++++---- 2 files changed, 83 insertions(+), 26 deletions(-) diff --git a/examples/PoolBox/application/src/Overlay/GPUTests/gpu_tests.cpp b/examples/PoolBox/application/src/Overlay/GPUTests/gpu_tests.cpp index f7603b45..ca846b6e 100644 --- a/examples/PoolBox/application/src/Overlay/GPUTests/gpu_tests.cpp +++ b/examples/PoolBox/application/src/Overlay/GPUTests/gpu_tests.cpp @@ -26,13 +26,13 @@ static constexpr auto RectangleClut = Make::PageClut(320, 510); static constexpr auto LineColor = GPU::Color24::from_rgb(0xFF, 0x0, 0x0); -static constexpr const auto triangle1 = GPU::POLY_F3::create({ +static constexpr const auto triangle1 = Make::POLY_F3({ Make::Vertex(TriangleArea.position.x, TriangleArea.position.y), Make::Vertex(TriangleArea.size.width, TriangleArea.size.height), Make::Vertex(TriangleArea.position.x, TriangleArea.size.height) }, TriangleColor ); -static constexpr const auto triangle2 = GPU::POLY_FT3::create({ +static constexpr const auto triangle2 = Make::POLY_FT3({ Make::Vertex(TriangleArea.position.x, TriangleArea.position.y), Make::Vertex(TriangleArea.size.width, TriangleArea.position.y), Make::Vertex(TriangleArea.size.width, TriangleArea.size.height) @@ -43,12 +43,12 @@ static constexpr const auto triangle2 = GPU::POLY_FT3::create({ Make::PagePosition(TriangleArea.size.width, TriangleArea.size.height) }, TriangleTPage, TriangleClut, GPU::Color24::Grey() ); -static constexpr const auto triangle3 = GPU::POLY_G3::create({ +static constexpr const auto triangle3 = Make::POLY_G3({ {triangle1.vertex0.move(TriangleArea.size.width, 0), GPU::Color24::Red()}, {triangle1.vertex1.move(TriangleArea.size.width, 0), GPU::Color24::Green()}, {triangle1.vertex2.move(TriangleArea.size.width, 0), GPU::Color24::Blue()}} ); -static constexpr const auto triangle4 = GPU::POLY_GT3::create({ +static constexpr const auto triangle4 = Make::POLY_GT3({ {triangle2.vertex0.move(TriangleArea.size.width, 0), triangle2.page0, GPU::Color24::Red()}, {triangle2.vertex1.move(TriangleArea.size.width, 0), triangle2.page1, GPU::Color24::Blue()}, {triangle2.vertex2.move(TriangleArea.size.width, 0), triangle2.page2, GPU::Color24::Green()}}, @@ -56,20 +56,20 @@ static constexpr const auto triangle4 = GPU::POLY_GT3::create({ TriangleClut ); -static constexpr const auto rectangle1 = GPU::POLY_F4::create(RectangleArea, RectangleColor); -static constexpr const auto rectangle2 = GPU::POLY_FT4::create(Make::AreaI16( +static constexpr const auto rectangle1 = Make::POLY_F4(RectangleArea, RectangleColor); +static constexpr const auto rectangle2 = Make::POLY_FT4(Make::AreaI16( RectangleArea.position.move(RectangleArea.size.width, 0), RectangleArea.size), Make::PagePosition(0, 0), RectangleTPage, RectangleClut, GPU::Color24::Grey() ); -static constexpr const auto rectangle3 = GPU::POLY_G4::create( +static constexpr const auto rectangle3 = Make::POLY_G4( {RectangleArea.position.move(RectangleArea.size.width*2, 0), RectangleArea.size}, { GPU::Color24::Red(), GPU::Color24::Blue(), GPU::Color24::Green(), GPU::Color24::White()}); -static constexpr const auto rectangle4 = GPU::POLY_GT4::create(Make::AreaI16( +static constexpr const auto rectangle4 = Make::POLY_GT4(Make::AreaI16( RectangleArea.position.move(RectangleArea.size.width*3, 0), RectangleArea.size), Make::PagePosition(0, 0), RectangleTPage, RectangleClut, { @@ -78,7 +78,7 @@ static constexpr const auto rectangle4 = GPU::POLY_GT4::create(Make::AreaI16( GPU::Color24::Green(), GPU::Color24::White()} ); -static constexpr const auto rectangle5 = GPU::POLY_GT4::create(Make::AreaI16( +static constexpr const auto rectangle5 = Make::POLY_GT4(Make::AreaI16( RectangleArea.position.move(0, RectangleArea.size.height), RectangleArea.size), Make::PagePosition(0, 0), RectangleTPage, RectangleClut, { diff --git a/include/PSX/GPU/gpu_primitives.hpp b/include/PSX/GPU/gpu_primitives.hpp index bd585985..c079715b 100644 --- a/include/PSX/GPU/gpu_primitives.hpp +++ b/include/PSX/GPU/gpu_primitives.hpp @@ -12,7 +12,7 @@ namespace JabyEngine { using JabyEngine::operator""_u16; template - static constexpr T creator_template(ARGS...args) { + static constexpr T creator_template(const ARGS&...args) { return T::create(args...); } @@ -21,7 +21,6 @@ namespace JabyEngine { static constexpr GPU::SizeI16 SizeI16() { return creator_template(0_i16, 0_i16); } - static constexpr GPU::SizeI16 SizeI16(int16_t x, int16_t y) { return creator_template(x, y); } @@ -31,7 +30,6 @@ namespace JabyEngine { static constexpr GPU::SizeU16 SizeU16() { return creator_template(0_u16, 0_u16); } - static constexpr GPU::SizeU16 SizeU16(uint16_t x, uint16_t y) { return creator_template(x, y); } @@ -41,7 +39,6 @@ namespace JabyEngine { static constexpr GPU::PositionI16 PositionI16() { return creator_template(0_i16, 0_i16); } - static constexpr GPU::PositionI16 PositionI16(int16_t x, int16_t y) { return creator_template(x, y); } @@ -51,7 +48,6 @@ namespace JabyEngine { static constexpr GPU::PositionU16 PositionU16() { return creator_template(0_u16, 0_u16); } - static constexpr GPU::PositionU16 PositionU16(uint16_t x, uint16_t y) { return creator_template(x, y); } @@ -61,7 +57,6 @@ namespace JabyEngine { static constexpr GPU::Vertex Vertex() { return creator_template(0_i16, 0_i16); } - static constexpr GPU::Vertex Vertex(int16_t x, int16_t y) { return creator_template(x, y); } @@ -71,11 +66,9 @@ namespace JabyEngine { static constexpr GPU::AreaI16 AreaI16() { return creator_template(0, 0, 0, 0); } - static constexpr GPU::AreaI16 AreaI16(int16_t x, int16_t y, int16_t w, int16_t h) { return creator_template(x, y, w, h); } - static constexpr GPU::AreaI16 AreaI16(GPU::PositionI16 pos, GPU::SizeI16 size) { return creator_template(pos, size); } @@ -85,11 +78,9 @@ namespace JabyEngine { static constexpr GPU::AreaU16 AreaU16() { return creator_template(0, 0, 0, 0); } - static constexpr GPU::AreaU16 AreaU16(uint16_t x, uint16_t y, uint16_t w, uint16_t h) { return creator_template(x, y, w, h); } - static constexpr GPU::AreaU16 AreaU16(GPU::PositionU16 pos, GPU::SizeU16 size) { return creator_template(pos, size); } @@ -99,7 +90,6 @@ namespace JabyEngine { static constexpr GPU::PagePosition PagePosition() { return creator_template(0_u8, 0_u8); } - static constexpr GPU::PagePosition PagePosition(uint8_t u, uint8_t v) { return creator_template(u, v); } @@ -109,7 +99,6 @@ namespace JabyEngine { static constexpr GPU::PageClut PageClut() { return creator_template(0_u16, 0_u16); } - static constexpr GPU::PageClut PageClut(uint16_t x, uint16_t y) { return creator_template(x, y); } @@ -119,7 +108,6 @@ namespace JabyEngine { static constexpr GPU::TPage TPage() { return creator_template(0_u16, 0_u16, GPU::SemiTransparency::B_add_F, GPU::TexturePageColor::$4bit); } - static constexpr GPU::TPage TPage(uint16_t x, uint16_t y, GPU::SemiTransparency transparency, GPU::TexturePageColor clut_color) { return creator_template(x, y, transparency, clut_color); } @@ -129,7 +117,6 @@ namespace JabyEngine { static constexpr GPU::TexPage TexPage() { return creator_template(PositionU16(), GPU::TexturePageColor::$4bit, GPU::SemiTransparency::B_Half_add_F_Half, false); } - static constexpr GPU::TexPage TexPage(const GPU::PositionU16& tex_pos, GPU::TexturePageColor tex_color, GPU::SemiTransparency transparency = GPU::SemiTransparency::B_Half_add_F_Half, bool dither = false) { return creator_template(tex_pos, tex_color, transparency, dither); } @@ -139,7 +126,6 @@ namespace JabyEngine { static constexpr GPU::PagePositionClut PagePositionClut() { return creator_template(PagePosition(), PageClut()); } - static constexpr GPU::PagePositionClut PagePositionClut(GPU::PagePosition page, GPU::PageClut clut) { return creator_template(page, clut); } @@ -149,7 +135,6 @@ namespace JabyEngine { static constexpr GPU::VertexColor VertexColor() { return creator_template(Vertex(), GPU::Color24::Black()); } - static constexpr GPU::VertexColor VertexColor(GPU::Vertex pos, GPU::Color24 color) { return creator_template(pos, color); } @@ -159,7 +144,6 @@ namespace JabyEngine { static constexpr GPU::ColorVertex ColorVertex() { return creator_template(GPU::Color24::Black(), Vertex()); } - static constexpr GPU::ColorVertex ColorVertex(GPU::Color24 color, GPU::Vertex pos) { return creator_template(color, pos); } @@ -168,6 +152,79 @@ namespace JabyEngine { // ################################################################### // ################################################################### // ################################################################### + + static constexpr GPU::POLY_F3 POLY_F3(const GPU::Vertex (&verticies)[3], GPU::Color24 color) { + return creator_template(verticies, color); + } + + static constexpr GPU::POLY_FT3 POLY_FT3(const GPU::Vertex (&verticies)[3], const GPU::PagePosition (&page_pos)[3], GPU::TPage tpage, GPU::PageClut clut, GPU::Color24 color = GPU::Color24::Grey()) { + return creator_template(verticies, page_pos, tpage, clut, color); + } + + static constexpr GPU::POLY_FT3 POLY_FT3(const GPU::POLY_FT3::VertexEx (&vertices_ex)[3], GPU::TPage tpage, GPU::PageClut clut, GPU::Color24 color) { + return creator_template(vertices_ex, tpage, clut, color); + } + + static constexpr GPU::POLY_G3 POLY_G3(const GPU::Vertex (&verticies)[3], const GPU::Color24 (&color)[3]) { + return creator_template(verticies, color); + } + + static constexpr GPU::POLY_G3 POLY_G3(const GPU::VertexColor (&verticies_ex)[3]) { + return creator_template(verticies_ex); + } + + static constexpr GPU::POLY_GT3 POLY_GT3(const GPU::Vertex (&verticies)[3], const GPU::PagePosition (&page_pos)[3], const GPU::Color24 (&color)[3], GPU::TPage tpage, GPU::PageClut clut) { + return creator_template(verticies, page_pos, color, tpage, clut); + } + + static constexpr GPU::POLY_GT3 POLY_GT3(const GPU::POLY_GT3::VertexEx (&verticies_ex)[3], GPU::TPage tpage, GPU::PageClut clut) { + return creator_template(verticies_ex, tpage, clut); + } + + static constexpr GPU::POLY_F4 POLY_F4(const GPU::Vertex (&verticies)[4], GPU::Color24 color) { + return creator_template(verticies, color); + } + + static constexpr GPU::POLY_F4 POLY_F4(const GPU::AreaI16& area, GPU::Color24 color) { + return creator_template(area, color); + } + + static constexpr GPU::POLY_FT4 POLY_FT4(const GPU::Vertex (&verticies)[4], const GPU::PagePosition (&page_pos)[4], GPU::TPage tpage, GPU::PageClut clut, GPU::Color24 color) { + return creator_template(verticies, page_pos, tpage, clut, color); + } + + static constexpr GPU::POLY_FT4 POLY_FT4(const GPU::POLY_FT4::VertexEx (&vertices_ex)[4], GPU::TPage tpage, GPU::PageClut clut, GPU::Color24 color = GPU::Color24::Grey()) { + return creator_template(vertices_ex, tpage, clut, color); + } + + static constexpr GPU::POLY_FT4 POLY_FT4(const GPU::AreaI16& area, const GPU::PagePosition& texture_pos, GPU::TPage tpage, GPU::PageClut clut, GPU::Color24 color) { + return creator_template(area, texture_pos, tpage, clut, color); + } + + static constexpr GPU::POLY_G4 POLY_G4(const GPU::Vertex (&verticies)[4], const GPU::Color24 (&color)[4]) { + return creator_template(verticies, color); + } + + static constexpr GPU::POLY_G4 POLY_G4(const GPU::VertexColor (&verticies_ex)[4]) { + return creator_template(verticies_ex); + } + + static constexpr GPU::POLY_G4 POLY_G4(const GPU::AreaI16& area, const GPU::Color24 (&color)[4]) { + return creator_template(area, color); + } + + static constexpr GPU::POLY_GT4 POLY_GT4(const GPU::Vertex (&verticies)[4], const GPU::PagePosition (&page_pos)[4], const GPU::Color24 (&color)[4], GPU::TPage tpage, GPU::PageClut clut) { + return creator_template(verticies, page_pos, color, tpage, clut); + } + + static constexpr GPU::POLY_GT4 POLY_GT4(const GPU::POLY_GT4::VertexEx (&verticies_ex)[4], GPU::TPage tpage, GPU::PageClut clut) { + return creator_template(verticies_ex, tpage, clut); + } + + static constexpr GPU::POLY_GT4 POLY_GT4(const GPU::AreaI16& area, const GPU::PagePosition& texture_pos, GPU::TPage tpage, GPU::PageClut clut, const GPU::Color24 (&color)[4]) { + return creator_template(area, texture_pos, tpage, clut, color); + } + // ################################################################### static constexpr GPU::TILE_1 TILE_1() {