From 256950b88b46e019913471cf916a92b8d8209bc0 Mon Sep 17 00:00:00 2001 From: Jaby Date: Thu, 4 Jan 2024 17:11:40 -0600 Subject: [PATCH] Crappy Layout --- .../ControllerTest/controller_state.cpp | 36 ++++++++++++ .../ControllerTest/controller_test.cpp | 15 ++++- .../include/controller_state.hpp | 55 +++++++++++++++++++ examples/PoolBox/assets/Controller.png | 4 +- .../GPU/Primitives/primitive_poly_types.hpp | 33 +++++++++++ 5 files changed, 138 insertions(+), 5 deletions(-) create mode 100644 examples/PoolBox/application/src/Overlay/ControllerTest/controller_state.cpp create mode 100644 examples/PoolBox/application/src/Overlay/ControllerTest/include/controller_state.hpp diff --git a/examples/PoolBox/application/src/Overlay/ControllerTest/controller_state.cpp b/examples/PoolBox/application/src/Overlay/ControllerTest/controller_state.cpp new file mode 100644 index 00000000..7275ca60 --- /dev/null +++ b/examples/PoolBox/application/src/Overlay/ControllerTest/controller_state.cpp @@ -0,0 +1,36 @@ +#include "include/controller_state.hpp" +#include + +namespace ControllerTest { + using namespace JabyEngine; + + template + static GPU::Link* link_array(GPU::Link* last_prim, T* elements, size_t length) { + for(size_t n = 0; n < length; n++) { + last_prim->concat(elements[n]); + last_prim = &elements[n]; + } + + last_prim->terminate(); + return last_prim; + } + + template + static GPU::Link* link_array(GPU::Link* last_prim, T(&elements)[N]) { + return link_array(last_prim, elements, N); + } + + void ControllerState :: setup() { + for(size_t n = 0; n < 2; n++) { + link_array(link_array(&this->tex_page[n], this->buttons[n]), this->arrows[n]); + } + } + + void ControllerState :: update() { + + } + + void ControllerState :: render() { + GPU::render(this->tex_page[GPU::render_id()]); + } +} \ No newline at end of file diff --git a/examples/PoolBox/application/src/Overlay/ControllerTest/controller_test.cpp b/examples/PoolBox/application/src/Overlay/ControllerTest/controller_test.cpp index 17c6e234..3e8f5cdc 100644 --- a/examples/PoolBox/application/src/Overlay/ControllerTest/controller_test.cpp +++ b/examples/PoolBox/application/src/Overlay/ControllerTest/controller_test.cpp @@ -1,33 +1,42 @@ #include "../../../include/shared.hpp" +#include "include/controller_state.hpp" #include #include namespace ControllerTest { using namespace JabyEngine; + static auto controller_state = ControllerState::create(); + + static void setup() { + Shared::back_menu.reset(); + controller_state.setup(); + } + static bool update_or_exit() { Periphery::query_controller(); if(Shared::back_menu.update(Make::PositionI16(0, GPU::Display::Height - 32))) { return true; } + controller_state.update(); return false; } static void render() { + controller_state.render(); Shared::back_menu.render(); } void main() { - printf("CONT: BlubbBlubbBlubb!!\n"); - Shared::back_menu.reset(); + setup(); while(true) { if(update_or_exit()) { break; } GPU::swap_buffers_vsync(1); - Shared::back_menu.render(); + render(); } } } \ No newline at end of file diff --git a/examples/PoolBox/application/src/Overlay/ControllerTest/include/controller_state.hpp b/examples/PoolBox/application/src/Overlay/ControllerTest/include/controller_state.hpp new file mode 100644 index 00000000..a67d94b0 --- /dev/null +++ b/examples/PoolBox/application/src/Overlay/ControllerTest/include/controller_state.hpp @@ -0,0 +1,55 @@ +#pragma once +#include "controller_test_assets.hpp" +#include + +namespace ControllerTest { + using namespace JabyEngine; + + class ControllerState { + private: + GPU::TexPage::Linked tex_page[2]; + GPU::SPRT_16::Linked buttons[2][10]; + GPU::POLY_FT4::Linked arrows[2][4]; + + public: + static constexpr ControllerState create() { + ControllerState state; + + for(auto& tex_page : state.tex_page) { + tex_page = Make::TexPage(ControllerButtonTIM.get_texture_position(), GPU::TexturePageColor::$4bit).linked(); + } + + for(auto& buttons : state.buttons) { + constexpr auto Offset = Make::PositionI16(80, 0); + + buttons[0] = Make::SPRT_16(Make::Vertex(1*16, 0*16).move(Offset.x, Offset.y+32), Make::OffsetPageWithClut(GPU::PageOffset::from_tile_id16(0, Make::SizeI16(16, 16)), Make::PageClut(ControllerButtonTIM.get_clut_position()))).linked(); + buttons[1] = Make::SPRT_16(Make::Vertex(2*16, 1*16).move(Offset.x, Offset.y+32), Make::OffsetPageWithClut(GPU::PageOffset::from_tile_id16(1, Make::SizeI16(16, 16)), Make::PageClut(ControllerButtonTIM.get_clut_position()))).linked(); + buttons[2] = Make::SPRT_16(Make::Vertex(1*16, 2*16).move(Offset.x, Offset.y+32), Make::OffsetPageWithClut(GPU::PageOffset::from_tile_id16(2, Make::SizeI16(16, 16)), Make::PageClut(ControllerButtonTIM.get_clut_position()))).linked(); + buttons[3] = Make::SPRT_16(Make::Vertex(0*16, 1*16).move(Offset.x, Offset.y+32), Make::OffsetPageWithClut(GPU::PageOffset::from_tile_id16(3, Make::SizeI16(16, 16)), Make::PageClut(ControllerButtonTIM.get_clut_position()))).linked(); + + buttons[4] = Make::SPRT_16(Make::Vertex(-40, 32).move(Offset.x, Offset.y+32), Make::OffsetPageWithClut(GPU::PageOffset::from_tile_id16(5, Make::SizeI16(16, 16)), Make::PageClut(ControllerButtonTIM.get_clut_position()))).linked(); + buttons[5] = Make::SPRT_16(Make::Vertex(-24, 32).move(Offset.x, Offset.y+32), Make::OffsetPageWithClut(GPU::PageOffset::from_tile_id16(4, Make::SizeI16(16, 16)), Make::PageClut(ControllerButtonTIM.get_clut_position()))).linked(); + + buttons[6] = Make::SPRT_16(Make::Vertex(-64, 0).move(Offset.x, Offset.y), Make::OffsetPageWithClut(GPU::PageOffset::from_tile_id16(7, Make::SizeI16(16, 16)), Make::PageClut(ControllerButtonTIM.get_clut_position()))).linked(); + buttons[7] = Make::SPRT_16(Make::Vertex(-64, 16).move(Offset.x, Offset.y), Make::OffsetPageWithClut(GPU::PageOffset::from_tile_id16(8, Make::SizeI16(16, 16)), Make::PageClut(ControllerButtonTIM.get_clut_position()))).linked(); + buttons[8] = Make::SPRT_16(Make::Vertex(16, 0).move(Offset.x, Offset.y), Make::OffsetPageWithClut(GPU::PageOffset::from_tile_id16(7, Make::SizeI16(16, 16)), Make::PageClut(ControllerButtonTIM.get_clut_position()))).linked(); + buttons[9] = Make::SPRT_16(Make::Vertex(16, 16).move(Offset.x, Offset.y), Make::OffsetPageWithClut(GPU::PageOffset::from_tile_id16(8, Make::SizeI16(16, 16)), Make::PageClut(ControllerButtonTIM.get_clut_position()))).linked(); + } + + for(auto& arrows : state.arrows) { + constexpr auto Offset = Make::PositionI16(0, 8); + + arrows[0] = Make::POLY_FT4(__jabyengine_polyFT4_vertex_rect( Make::AreaI16(Make::PositionI16(1*12, 0*12).move(Offset.x, Offset.y), Make::SizeI16(16, 16)), Make::PositionI16(6*16, 0)), Make::TPage(ControllerButtonTIM.get_texture_position(), GPU::SemiTransparency::B_Half_add_F_Half, GPU::TexturePageColor::$4bit), Make::PageClut(ControllerButtonTIM.get_clut_position())).linked(); + arrows[1] = Make::POLY_FT4(__jabyengine_polyFT4_vertex_rect270(Make::AreaI16(Make::PositionI16(2*12, 1*12).move(Offset.x, Offset.y), Make::SizeI16(16, 16)), Make::PositionI16(6*16, 0)), Make::TPage(ControllerButtonTIM.get_texture_position(), GPU::SemiTransparency::B_Half_add_F_Half, GPU::TexturePageColor::$4bit), Make::PageClut(ControllerButtonTIM.get_clut_position())).linked(); + arrows[2] = Make::POLY_FT4(__jabyengine_polyFT4_vertex_rect180(Make::AreaI16(Make::PositionI16(1*12, 2*12).move(Offset.x, Offset.y), Make::SizeI16(16, 16)), Make::PositionI16(6*16, 0)), Make::TPage(ControllerButtonTIM.get_texture_position(), GPU::SemiTransparency::B_Half_add_F_Half, GPU::TexturePageColor::$4bit), Make::PageClut(ControllerButtonTIM.get_clut_position())).linked(); + arrows[3] = Make::POLY_FT4(__jabyengine_polyFT4_vertex_rect90( Make::AreaI16(Make::PositionI16(0*12, 1*12).move(Offset.x, Offset.y), Make::SizeI16(16, 16)), Make::PositionI16(6*16, 0)), Make::TPage(ControllerButtonTIM.get_texture_position(), GPU::SemiTransparency::B_Half_add_F_Half, GPU::TexturePageColor::$4bit), Make::PageClut(ControllerButtonTIM.get_clut_position())).linked(); + } + + return state; + } + + void setup(); + void update(); + void render(); + }; +} \ No newline at end of file diff --git a/examples/PoolBox/assets/Controller.png b/examples/PoolBox/assets/Controller.png index 21394a06..b3304041 100644 --- a/examples/PoolBox/assets/Controller.png +++ b/examples/PoolBox/assets/Controller.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c23c3da333a9f2a313afe8408dc244dbf1ec3cd1163c5ba990445e41e39776fd -size 4951 +oid sha256:6170f80192bb45829ad6b240428dbe15d73ddbb71006d018fc501b05657cb89b +size 5081 diff --git a/include/PSX/GPU/Primitives/primitive_poly_types.hpp b/include/PSX/GPU/Primitives/primitive_poly_types.hpp index 066dea61..945a9c2b 100644 --- a/include/PSX/GPU/Primitives/primitive_poly_types.hpp +++ b/include/PSX/GPU/Primitives/primitive_poly_types.hpp @@ -345,6 +345,39 @@ namespace JabyEngine { } }; + #define __jabyengine_poly_top_left(x, y, w, h) x, y + #define __jabyengine_poly_top_right(x, y, w, h) (x + w), y + #define __jabyengine_poly_bottom_left(x, y, w, h) x, (y + h) + #define __jabyengine_poly_bottom_right(x, y, w, h) (x + w), (y + h) + + #define __jabyengine_polyFT4_vertex_rect(area, tex_off) { \ + JabyEngine::GPU::POLY_FT4::VertexEx{JabyEngine::GPU::Vertex::create(__jabyengine_poly_top_left(area.position.x, area.position.y, area.size.width, area.size.height)), JabyEngine::GPU::PageOffset::create(__jabyengine_poly_top_left(tex_off.x, tex_off.y, area.size.width, area.size.height))}, \ + JabyEngine::GPU::POLY_FT4::VertexEx{JabyEngine::GPU::Vertex::create(__jabyengine_poly_top_right(area.position.x, area.position.y, area.size.width, area.size.height)), JabyEngine::GPU::PageOffset::create(__jabyengine_poly_top_right(tex_off.x, tex_off.y, area.size.width, area.size.height))}, \ + JabyEngine::GPU::POLY_FT4::VertexEx{JabyEngine::GPU::Vertex::create(__jabyengine_poly_bottom_left(area.position.x, area.position.y, area.size.width, area.size.height)), JabyEngine::GPU::PageOffset::create(__jabyengine_poly_bottom_left(tex_off.x, tex_off.y, area.size.width, area.size.height))}, \ + JabyEngine::GPU::POLY_FT4::VertexEx{JabyEngine::GPU::Vertex::create(__jabyengine_poly_bottom_right(area.position.x, area.position.y, area.size.width, area.size.height)), JabyEngine::GPU::PageOffset::create(__jabyengine_poly_bottom_right(tex_off.x, tex_off.y, area.size.width, area.size.height))}, \ + } + + #define __jabyengine_polyFT4_vertex_rect90(area, tex_off) { \ + JabyEngine::GPU::POLY_FT4::VertexEx{JabyEngine::GPU::Vertex::create(__jabyengine_poly_bottom_left(area.position.x, area.position.y, area.size.width, area.size.height)), JabyEngine::GPU::PageOffset::create(__jabyengine_poly_top_left(tex_off.x, tex_off.y, area.size.width, area.size.height))}, \ + JabyEngine::GPU::POLY_FT4::VertexEx{JabyEngine::GPU::Vertex::create(__jabyengine_poly_top_left(area.position.x, area.position.y, area.size.width, area.size.height)), JabyEngine::GPU::PageOffset::create(__jabyengine_poly_top_right(tex_off.x, tex_off.y, area.size.width, area.size.height))}, \ + JabyEngine::GPU::POLY_FT4::VertexEx{JabyEngine::GPU::Vertex::create(__jabyengine_poly_bottom_right(area.position.x, area.position.y, area.size.width, area.size.height)), JabyEngine::GPU::PageOffset::create(__jabyengine_poly_bottom_left(tex_off.x, tex_off.y, area.size.width, area.size.height))}, \ + JabyEngine::GPU::POLY_FT4::VertexEx{JabyEngine::GPU::Vertex::create(__jabyengine_poly_top_right(area.position.x, area.position.y, area.size.width, area.size.height)), JabyEngine::GPU::PageOffset::create(__jabyengine_poly_bottom_right(tex_off.x, tex_off.y, area.size.width, area.size.height))}, \ + } + + #define __jabyengine_polyFT4_vertex_rect180(area, tex_off) { \ + JabyEngine::GPU::POLY_FT4::VertexEx{JabyEngine::GPU::Vertex::create(__jabyengine_poly_bottom_right(area.position.x, area.position.y, area.size.width, area.size.height)), JabyEngine::GPU::PageOffset::create(__jabyengine_poly_top_left(tex_off.x, tex_off.y, area.size.width, area.size.height))}, \ + JabyEngine::GPU::POLY_FT4::VertexEx{JabyEngine::GPU::Vertex::create(__jabyengine_poly_bottom_left(area.position.x, area.position.y, area.size.width, area.size.height)), JabyEngine::GPU::PageOffset::create(__jabyengine_poly_top_right(tex_off.x, tex_off.y, area.size.width, area.size.height))}, \ + JabyEngine::GPU::POLY_FT4::VertexEx{JabyEngine::GPU::Vertex::create(__jabyengine_poly_top_right(area.position.x, area.position.y, area.size.width, area.size.height)), JabyEngine::GPU::PageOffset::create(__jabyengine_poly_bottom_left(tex_off.x, tex_off.y, area.size.width, area.size.height))}, \ + JabyEngine::GPU::POLY_FT4::VertexEx{JabyEngine::GPU::Vertex::create(__jabyengine_poly_top_left(area.position.x, area.position.y, area.size.width, area.size.height)), JabyEngine::GPU::PageOffset::create(__jabyengine_poly_bottom_right(tex_off.x, tex_off.y, area.size.width, area.size.height))}, \ + } + + #define __jabyengine_polyFT4_vertex_rect270(area, tex_off) { \ + JabyEngine::GPU::POLY_FT4::VertexEx{JabyEngine::GPU::Vertex::create(__jabyengine_poly_top_right(area.position.x, area.position.y, area.size.width, area.size.height)), JabyEngine::GPU::PageOffset::create(__jabyengine_poly_top_left(tex_off.x, tex_off.y, area.size.width, area.size.height))}, \ + JabyEngine::GPU::POLY_FT4::VertexEx{JabyEngine::GPU::Vertex::create(__jabyengine_poly_bottom_right(area.position.x, area.position.y, area.size.width, area.size.height)), JabyEngine::GPU::PageOffset::create(__jabyengine_poly_top_right(tex_off.x, tex_off.y, area.size.width, area.size.height))}, \ + JabyEngine::GPU::POLY_FT4::VertexEx{JabyEngine::GPU::Vertex::create(__jabyengine_poly_top_left(area.position.x, area.position.y, area.size.width, area.size.height)), JabyEngine::GPU::PageOffset::create(__jabyengine_poly_bottom_left(tex_off.x, tex_off.y, area.size.width, area.size.height))}, \ + JabyEngine::GPU::POLY_FT4::VertexEx{JabyEngine::GPU::Vertex::create(__jabyengine_poly_bottom_left(area.position.x, area.position.y, area.size.width, area.size.height)), JabyEngine::GPU::PageOffset::create(__jabyengine_poly_bottom_right(tex_off.x, tex_off.y, area.size.width, area.size.height))}, \ + } + typedef POLY_F3 FlatTriangle; typedef POLY_FT3 FlatTexturedTriangle; typedef POLY_G3 GouraudTriangle;