From a16f12a5ce9ee8cf261736bb70149bb99ad44279 Mon Sep 17 00:00:00 2001 From: jaby Date: Tue, 23 May 2023 21:11:01 +0200 Subject: [PATCH] Support POLY_GT4 --- examples/PoolBox/application/src/main.cpp | 10 +++++ include/PSX/GPU/gpu_primitives.hpp | 46 +++++++++++++++++++++++ 2 files changed, 56 insertions(+) diff --git a/examples/PoolBox/application/src/main.cpp b/examples/PoolBox/application/src/main.cpp index 4f843be5..4737a380 100644 --- a/examples/PoolBox/application/src/main.cpp +++ b/examples/PoolBox/application/src/main.cpp @@ -95,6 +95,15 @@ void main() { JabyEngine::GPU::Color24::Blue(), JabyEngine::GPU::Color24::Green(), JabyEngine::GPU::Color24::White()}); + const JabyEngine::GPU::POLY_GT4 rectangle4( + {RectangleArea.position.move(RectangleArea.size.width*3, 0), RectangleArea.size}, {0, 0}, + RectangleTPage, + RectangleClut, { + JabyEngine::GPU::Color24::Red(), + JabyEngine::GPU::Color24::Blue(), + JabyEngine::GPU::Color24::Green(), + JabyEngine::GPU::Color24::White()} + ); load_assets(); @@ -107,6 +116,7 @@ void main() { JabyEngine::GPU::render(rectangle1); JabyEngine::GPU::render(rectangle2); JabyEngine::GPU::render(rectangle3); + JabyEngine::GPU::render(rectangle4); JabyEngine::GPU::swap_buffers_vsync(2); } diff --git a/include/PSX/GPU/gpu_primitives.hpp b/include/PSX/GPU/gpu_primitives.hpp index dc2c3fbd..7192a811 100644 --- a/include/PSX/GPU/gpu_primitives.hpp +++ b/include/PSX/GPU/gpu_primitives.hpp @@ -329,6 +329,50 @@ namespace JabyEngine { ) {} }; + struct POLY_GT4 : public internal::IsPrimitive, public internal::CodeInterface { + typedef POLY_GT3::VertexEx VertexEx; + static constexpr auto IdentityCode = Code(POLY_GT3::IdentityCode).set(Code::QuadVertics); + + Color24 color0; // a + Code code = IdentityCode; // a + Vertex vertex0; // b + PagePosition page0; // c + PageClut page_clut; // c + Color24 color1; // d + uint8_t padded1; // d + Vertex vertex1; // e + PagePosition page1; // f + TPage tpage; // f + Color24 color2; // g + uint8_t padded2; // g + Vertex vertex2; // h + PagePosition page2; // i + uint16_t padded3; // i + Color24 color3; // j + uint8_t padded4; // j + Vertex vertex3; // k + PagePosition page3; // l + uint16_t padded5; // l + + constexpr POLY_GT4() = default; + constexpr POLY_GT4(const Vertex (&verticies)[4], const PagePosition (&page_pos)[4], const Color24 (&color)[4], TPage tpage, PageClut clut) : + color0(color[0]), code(IdentityCode), vertex0(verticies[0]), page0(page_pos[0]), page_clut(clut), + color1(color[1]), vertex1(verticies[1]), page1(page_pos[1]), tpage(tpage), + color2(color[2]), vertex2(verticies[2]), page2(page_pos[2]), + color3(color[3]), vertex3(verticies[3]), page3(page_pos[3]) {} + constexpr POLY_GT4(const VertexEx (&verticies_ex)[4], TPage tpage, PageClut clut) : + color0(verticies_ex[0].color), code(IdentityCode), vertex0(verticies_ex[0].position), page0(verticies_ex[0].page), page_clut(clut), + color1(verticies_ex[1].color), vertex1(verticies_ex[1].position), page1(verticies_ex[1].page), tpage(tpage), + color2(verticies_ex[2].color), vertex2(verticies_ex[2].position), page2(verticies_ex[2].page), + color3(verticies_ex[3].color), vertex3(verticies_ex[3].position), page3(verticies_ex[3].page) {} + constexpr POLY_GT4(const AreaI16& area, const PagePosition& texture_pos, TPage tpage, PageClut clut, const Color24 (&color)[4]) : POLY_GT4({ + {area.position, texture_pos, color[0]}, + {area.position.move(area.size.width, 0), texture_pos.move(area.size.width, 0), color[1]}, + {area.position.move(0, area.size.height), texture_pos.move(0, area.size.height), color[2]}, + {area.position.move(area.size.width, area.size.height), texture_pos.move(area.size.width, area.size.height), color[3]} + }, tpage, clut) {} + }; + typedef POLY_F3 FlatTriangle; typedef POLY_FT3 FlatTexturedTriangle; typedef POLY_G3 GouraudTriangle; @@ -337,6 +381,7 @@ namespace JabyEngine { typedef POLY_F4 FlatRectangle; typedef POLY_FT4 FlatTexturedRectangle; typedef POLY_G4 GouraudRectangle; + typedef POLY_GT4 GouraudTexturedRectangle; static_assert(sizeof(POLY_F3) == 16); static_assert(sizeof(POLY_FT3) == 28); @@ -346,6 +391,7 @@ namespace JabyEngine { static_assert(sizeof(POLY_F4) == 20); static_assert(sizeof(POLY_FT4) == 36); static_assert(sizeof(POLY_G4) == 32); + static_assert(sizeof(POLY_GT4) == 48); } }