diff --git a/examples/PoolBox/application/Makefile b/examples/PoolBox/application/Makefile index a35a6de4..efce152f 100644 --- a/examples/PoolBox/application/Makefile +++ b/examples/PoolBox/application/Makefile @@ -7,6 +7,7 @@ include $(JABY_ENGINE_DIR)/lib/Wildcard.mk SRCS = $(call rwildcard, src, c cpp) INCLUDES += -I$(JABY_ENGINE_DIR)/include +#CCFLAGS += -save-temps=obj include $(JABY_ENGINE_DIR)/lib/Makefile include $(JABY_ENGINE_DIR)/lib/PSEXETarget.mk diff --git a/examples/PoolBox/application/src/main.cpp b/examples/PoolBox/application/src/main.cpp index 4737a380..7739b392 100644 --- a/examples/PoolBox/application/src/main.cpp +++ b/examples/PoolBox/application/src/main.cpp @@ -11,6 +11,71 @@ enum LBA { __jabyengine_end_lba_request }; +// Some default values for the objects +static constexpr auto TriangleColor = JabyEngine::GPU::Color24(0x0, 0xFF, 0xFF); +static constexpr auto TriangleArea = JabyEngine::GPU::AreaI16({0, 0}, {64, 64}); +static constexpr auto TriangleTPage = JabyEngine::GPU::TPage(320, 0, JabyEngine::GPU::SemiTransparency::B_Half_add_F_Half, JabyEngine::GPU::TexturePageColor::$4bit); +static constexpr auto TriangleClut = JabyEngine::GPU::PageClut(320, 511); + +static constexpr auto RectangleColor = JabyEngine::GPU::Color24(0x80, 0x80, 0xFF); +static constexpr auto RectangleArea = JabyEngine::GPU::AreaI16({0, TriangleArea.size.height}, {80, 80}); +static constexpr auto RectangleTPage = JabyEngine::GPU::TPage(320, 256, JabyEngine::GPU::SemiTransparency::B_Half_add_F_Half, JabyEngine::GPU::TexturePageColor::$4bit); +static constexpr auto RectangleClut = JabyEngine::GPU::PageClut(320, 510); + +static constexpr const JabyEngine::GPU::POLY_F3 triangle1({ + {TriangleArea.position.x, TriangleArea.position.y}, + {TriangleArea.size.width, TriangleArea.size.height}, + {TriangleArea.position.x, TriangleArea.size.height}}, + TriangleColor +); +static constexpr const JabyEngine::GPU::POLY_FT3 triangle2({ + {TriangleArea.position.x, TriangleArea.position.y}, + {TriangleArea.size.width, TriangleArea.position.y}, + {TriangleArea.size.width, TriangleArea.size.height}},{ + // Texture + {TriangleArea.position.x, TriangleArea.position.y}, + {TriangleArea.size.width, TriangleArea.position.y}, + {TriangleArea.size.width, TriangleArea.size.height}}, + TriangleTPage, + TriangleClut, + JabyEngine::GPU::Color24::Grey() +); +static constexpr const JabyEngine::GPU::POLY_G3 triangle3({ + {triangle1.vertex0.move(TriangleArea.size.width, 0), JabyEngine::GPU::Color24::Red()}, + {triangle1.vertex1.move(TriangleArea.size.width, 0), JabyEngine::GPU::Color24::Green()}, + {triangle1.vertex2.move(TriangleArea.size.width, 0), JabyEngine::GPU::Color24::Blue()}} +); +static constexpr const JabyEngine::GPU::POLY_GT3 triangle4({ + {triangle2.vertex0.move(TriangleArea.size.width, 0), triangle2.page0, JabyEngine::GPU::Color24::Red()}, + {triangle2.vertex1.move(TriangleArea.size.width, 0), triangle2.page1, JabyEngine::GPU::Color24::Blue()}, + {triangle2.vertex2.move(TriangleArea.size.width, 0), triangle2.page2, JabyEngine::GPU::Color24::Green()}}, + TriangleTPage, + TriangleClut +); + +static constexpr const JabyEngine::GPU::POLY_F4 rectangle1(RectangleArea, RectangleColor); +static constexpr const JabyEngine::GPU::POLY_FT4 rectangle2({ + RectangleArea.position.move(RectangleArea.size.width, 0), RectangleArea.size}, {0, 0}, + RectangleTPage, + RectangleClut, + JabyEngine::GPU::Color24::Grey() +); +static constexpr const JabyEngine::GPU::POLY_G4 rectangle3( + {RectangleArea.position.move(RectangleArea.size.width*2, 0), RectangleArea.size}, { + JabyEngine::GPU::Color24::Red(), + JabyEngine::GPU::Color24::Blue(), + JabyEngine::GPU::Color24::Green(), + JabyEngine::GPU::Color24::White()}); +static constexpr 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()} +); + static void load_assets() { static const JabyEngine::CDFile Assets[] = { JabyEngine::CDFileBuilder::simple_tim(LBA::FONT, JabyEngine::SimpleTIM(320, 0, 320, 511)), @@ -41,70 +106,6 @@ static void load_assets() { } void main() { - static constexpr auto TriangleColor = JabyEngine::GPU::Color24(0x0, 0xFF, 0xFF); - static constexpr auto TriangleArea = JabyEngine::GPU::AreaI16({0, 0}, {64, 64}); - static constexpr auto TriangleTPage = JabyEngine::GPU::TPage(320, 0, JabyEngine::GPU::SemiTransparency::B_Half_add_F_Half, JabyEngine::GPU::TexturePageColor::$4bit); - static constexpr auto TriangleClut = JabyEngine::GPU::PageClut(320, 511); - - static constexpr auto RectangleColor = JabyEngine::GPU::Color24(0x80, 0x80, 0xFF); - static constexpr auto RectangleArea = JabyEngine::GPU::AreaI16({0, TriangleArea.size.height}, {80, 80}); - static constexpr auto RectangleTPage = JabyEngine::GPU::TPage(320, 256, JabyEngine::GPU::SemiTransparency::B_Half_add_F_Half, JabyEngine::GPU::TexturePageColor::$4bit); - static constexpr auto RectangleClut = JabyEngine::GPU::PageClut(320, 510); - - const JabyEngine::GPU::POLY_F3 triangle1({ - {TriangleArea.position.x, TriangleArea.position.y}, - {TriangleArea.size.width, TriangleArea.size.height}, - {TriangleArea.position.x, TriangleArea.size.height}}, - TriangleColor - ); - const JabyEngine::GPU::POLY_FT3 triangle2({ - {TriangleArea.position.x, TriangleArea.position.y}, - {TriangleArea.size.width, TriangleArea.position.y}, - {TriangleArea.size.width, TriangleArea.size.height}},{ - // Texture - {TriangleArea.position.x, TriangleArea.position.y}, - {TriangleArea.size.width, TriangleArea.position.y}, - {TriangleArea.size.width, TriangleArea.size.height}}, - TriangleTPage, - TriangleClut, - JabyEngine::GPU::Color24::Grey() - ); - const JabyEngine::GPU::POLY_G3 triangle3({ - {triangle1.vertex0.move(TriangleArea.size.width, 0), JabyEngine::GPU::Color24::Red()}, - {triangle1.vertex1.move(TriangleArea.size.width, 0), JabyEngine::GPU::Color24::Green()}, - {triangle1.vertex2.move(TriangleArea.size.width, 0), JabyEngine::GPU::Color24::Blue()}} - ); - const JabyEngine::GPU::POLY_GT3 triangle4({ - {triangle2.vertex0.move(TriangleArea.size.width, 0), triangle2.page0, JabyEngine::GPU::Color24::Red()}, - {triangle2.vertex1.move(TriangleArea.size.width, 0), triangle2.page1, JabyEngine::GPU::Color24::Blue()}, - {triangle2.vertex2.move(TriangleArea.size.width, 0), triangle2.page2, JabyEngine::GPU::Color24::Green()}}, - TriangleTPage, - TriangleClut - ); - - const JabyEngine::GPU::POLY_F4 rectangle1(RectangleArea, RectangleColor); - const JabyEngine::GPU::POLY_FT4 rectangle2({ - RectangleArea.position.move(RectangleArea.size.width, 0), RectangleArea.size}, {0, 0}, - RectangleTPage, - RectangleClut, - JabyEngine::GPU::Color24::Grey() - ); - const JabyEngine::GPU::POLY_G4 rectangle3( - {RectangleArea.position.move(RectangleArea.size.width*2, 0), RectangleArea.size}, { - JabyEngine::GPU::Color24::Red(), - 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(); while(true) { diff --git a/include/PSX/GPU/gpu_primitives.hpp b/include/PSX/GPU/gpu_primitives.hpp index 7192a811..91850805 100644 --- a/include/PSX/GPU/gpu_primitives.hpp +++ b/include/PSX/GPU/gpu_primitives.hpp @@ -145,16 +145,15 @@ namespace JabyEngine { uint16_t padded2; // g constexpr POLY_FT3() = default; - constexpr POLY_FT3(const Vertex (&verticies)[3], const PagePosition (&page_pos)[3], TPage tpage, PageClut clut, Color24 color = Color24::Grey()) : - color(color), code(IdentityCode), - vertex0(verticies[0]), page0(page_pos[0]), page_clut(clut), - vertex1(verticies[1]), page1(page_pos[1]), tpage(tpage), - vertex2(verticies[2]), page2(page_pos[2]) {} + constexpr POLY_FT3(const Vertex (&verticies)[3], const PagePosition (&page_pos)[3], TPage tpage, PageClut clut, Color24 color = Color24::Grey()) : POLY_FT3({ + {verticies[0], page_pos[0]}, + {verticies[1], page_pos[1]}, + {verticies[2], page_pos[2]}}, tpage, clut, color) {} constexpr POLY_FT3(const VertexEx (&vertices_ex)[3], TPage tpage, PageClut clut, Color24 color) : color(color), code(IdentityCode), vertex0(vertices_ex[0].position), page0(vertices_ex[0].page), page_clut(clut), vertex1(vertices_ex[1].position), page1(vertices_ex[1].page), tpage(tpage), - vertex2(vertices_ex[2].position), page2(vertices_ex[2].page) {} + vertex2(vertices_ex[2].position), page2(vertices_ex[2].page), padded2(0) {} }; struct POLY_G3 : public internal::IsPrimitive, public internal::CodeInterface { @@ -175,14 +174,14 @@ namespace JabyEngine { Vertex vertex2; // f constexpr POLY_G3() = default; - constexpr POLY_G3(const Vertex (&verticies)[3], const Color24 (&color)[3]) : - color0(color[0]), code(IdentityCode), vertex0(verticies[0]), - color1(color[1]), vertex1(verticies[1]), - color2(color[2]), vertex2(verticies[2]) {} + constexpr POLY_G3(const Vertex (&verticies)[3], const Color24 (&color)[3]) : POLY_G3({ + {verticies[0], color[0]}, + {verticies[1], color[1]}, + {verticies[2], color[2]}}) {} constexpr POLY_G3(const VertexEx (&verticies_ex)[3]) : color0(verticies_ex[0].color), code(IdentityCode), vertex0(verticies_ex[0].position), - color1(verticies_ex[1].color), vertex1(verticies_ex[1].position), - color2(verticies_ex[2].color), vertex2(verticies_ex[2].position) {} + color1(verticies_ex[1].color), pad1(0), vertex1(verticies_ex[1].position), + color2(verticies_ex[2].color), pad2(0), vertex2(verticies_ex[2].position) {} }; struct POLY_GT3 : public internal::IsPrimitive, public internal::CodeInterface { @@ -199,25 +198,25 @@ namespace JabyEngine { PagePosition page0; // c PageClut page_clut; // c Color24 color1; // d - uint8_t padded1; // d + uint8_t pad1; // d Vertex vertex1; // e PagePosition page1; // f TPage tpage; // f Color24 color2; // g - uint8_t padded2; // g + uint8_t pad2; // g Vertex vertex2; // h PagePosition page2; // i - uint16_t padded3; // i + uint16_t pad3; // i constexpr POLY_GT3() = default; - constexpr POLY_GT3(const Vertex (&verticies)[3], const PagePosition (&page_pos)[3], const Color24 (&color)[3], 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]) {} + constexpr POLY_GT3(const Vertex (&verticies)[3], const PagePosition (&page_pos)[3], const Color24 (&color)[3], TPage tpage, PageClut clut) : POLY_GT3({ + {verticies[0], page_pos[0], color[0]}, + {verticies[1], page_pos[1], color[1]}, + {verticies[2], page_pos[2], color[2]}}, tpage, clut) {} constexpr POLY_GT3(const VertexEx (&verticies_ex)[3], 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) {} + color1(verticies_ex[1].color), pad1(0), vertex1(verticies_ex[1].position), page1(verticies_ex[1].page), tpage(tpage), + color2(verticies_ex[2].color), pad2(0), vertex2(verticies_ex[2].position), page2(verticies_ex[2].page), pad3(0) {} }; @@ -266,24 +265,23 @@ namespace JabyEngine { TPage tpage; // e Vertex vertex2; // f PagePosition page2; // g - uint16_t padded2; // g + uint16_t pad2; // g Vertex vertex3; // h PagePosition page3; // i - uint16_t padded3; // i + uint16_t pad3; // i constexpr POLY_FT4() = default; - constexpr POLY_FT4(const Vertex (&verticies)[4], const PagePosition (&page_pos)[4], TPage tpage, PageClut clut, Color24 color) : - color(color), code(IdentityCode), - vertex0(verticies[0]), page0(page_pos[0]), page_clut(clut), - vertex1(verticies[1]), page1(page_pos[1]), tpage(tpage), - vertex2(verticies[2]), page2(page_pos[2]), - vertex3(verticies[3]), page3(page_pos[3]) {} + constexpr POLY_FT4(const Vertex (&verticies)[4], const PagePosition (&page_pos)[4], TPage tpage, PageClut clut, Color24 color) : POLY_FT4({ + {verticies[0], page_pos[0]}, + {verticies[1], page_pos[1]}, + {verticies[2], page_pos[2]}, + {verticies[3], page_pos[3]}}, tpage, clut, color) {} constexpr POLY_FT4(const VertexEx (&vertices_ex)[4], TPage tpage, PageClut clut, Color24 color = Color24::Grey()) : color(color), code(IdentityCode), vertex0(vertices_ex[0].position), page0(vertices_ex[0].page), page_clut(clut), vertex1(vertices_ex[1].position), page1(vertices_ex[1].page), tpage(tpage), - vertex2(vertices_ex[2].position), page2(vertices_ex[2].page), - vertex3(vertices_ex[3].position), page3(vertices_ex[3].page) {} + vertex2(vertices_ex[2].position), page2(vertices_ex[2].page), pad2(0), + vertex3(vertices_ex[3].position), page3(vertices_ex[3].page), pad3(0) {} constexpr POLY_FT4(const AreaI16& area, const PagePosition& texture_pos, TPage tpage, PageClut clut, Color24 color) : POLY_FT4({ {area.position, texture_pos}, {area.position.move(area.size.width, 0), texture_pos.move(area.size.width, 0)}, @@ -311,16 +309,17 @@ namespace JabyEngine { Vertex vertex3; // h constexpr POLY_G4() = default; - constexpr POLY_G4(const Vertex (&verticies)[4], const Color24 (&color)[4]) : - color0(color[0]), code(IdentityCode), vertex0(verticies[0]), - color1(color[1]), vertex1(verticies[1]), - color2(color[2]), vertex2(verticies[2]), - color3(color[3]), vertex3(verticies[3]) {} + constexpr POLY_G4(const Vertex (&verticies)[4], const Color24 (&color)[4]) : POLY_G4({ + {verticies[0], color[0]}, + {verticies[1], color[1]}, + {verticies[2], color[2]}, + {verticies[3], color[3]} + }) {} constexpr POLY_G4(const VertexEx (&verticies_ex)[4]) : color0(verticies_ex[0].color), code(IdentityCode), vertex0(verticies_ex[0].position), - color1(verticies_ex[1].color), vertex1(verticies_ex[1].position), - color2(verticies_ex[2].color), vertex2(verticies_ex[2].position), - color3(verticies_ex[3].color), vertex3(verticies_ex[3].position) {} + color1(verticies_ex[1].color), pad1(0), vertex1(verticies_ex[1].position), + color2(verticies_ex[2].color), pad2(0), vertex2(verticies_ex[2].position), + color3(verticies_ex[3].color), pad3(0), vertex3(verticies_ex[3].position) {} constexpr POLY_G4(const AreaI16& area, const Color24 (&color)[4]) : POLY_G4({ {area.position, color[0]}, {area.position.move(area.size.width, 0), color[1]}, @@ -339,32 +338,33 @@ namespace JabyEngine { PagePosition page0; // c PageClut page_clut; // c Color24 color1; // d - uint8_t padded1; // d + uint8_t pad1; // d Vertex vertex1; // e PagePosition page1; // f TPage tpage; // f Color24 color2; // g - uint8_t padded2; // g + uint8_t pad2; // g Vertex vertex2; // h PagePosition page2; // i - uint16_t padded3; // i + uint16_t pad3; // i Color24 color3; // j - uint8_t padded4; // j + uint8_t pad4; // j Vertex vertex3; // k PagePosition page3; // l - uint16_t padded5; // l + uint16_t pad5; // 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 Vertex (&verticies)[4], const PagePosition (&page_pos)[4], const Color24 (&color)[4], TPage tpage, PageClut clut) : POLY_GT4({ + {verticies[0], page_pos[0], color[0]}, + {verticies[1], page_pos[1], color[1]}, + {verticies[2], page_pos[2], color[2]}, + {verticies[3], page_pos[3], color[3]}, + }, tpage, clut) {} 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) {} + color1(verticies_ex[1].color), pad1(0), vertex1(verticies_ex[1].position), page1(verticies_ex[1].page), tpage(tpage), + color2(verticies_ex[2].color), pad2(0), vertex2(verticies_ex[2].position), page2(verticies_ex[2].page), pad3(0), + color3(verticies_ex[3].color), pad4(0), vertex3(verticies_ex[3].position), page3(verticies_ex[3].page), pad5(0) {} 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]}, diff --git a/include/PSX/GPU/gpu_types.hpp b/include/PSX/GPU/gpu_types.hpp index c03cc3c9..c1caeb13 100644 --- a/include/PSX/GPU/gpu_types.hpp +++ b/include/PSX/GPU/gpu_types.hpp @@ -139,16 +139,17 @@ namespace JabyEngine { // Type used for primitives struct PagePosition : public internal::XYMovement { union { - uint8_t u = 0; - uint8_t x; + uint8_t x = 0; + uint8_t u; }; + union { - uint8_t v = 0; - uint8_t y; + uint8_t y = 0; + uint8_t v; }; constexpr PagePosition() = default; - constexpr PagePosition(uint8_t u, uint8_t v) : u(u), v(v) { + constexpr PagePosition(uint8_t u, uint8_t v) : x(u), y(v) { //< Activate x and y to use XYMovement during constexpr } };