Crappy Layout

This commit is contained in:
Jaby 2024-01-04 17:11:40 -06:00
parent 39d3070d0f
commit 256950b88b
5 changed files with 138 additions and 5 deletions

View File

@ -0,0 +1,36 @@
#include "include/controller_state.hpp"
#include <PSX/GPU/gpu.hpp>
namespace ControllerTest {
using namespace JabyEngine;
template<typename T>
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<typename T, size_t N>
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()]);
}
}

View File

@ -1,33 +1,42 @@
#include "../../../include/shared.hpp" #include "../../../include/shared.hpp"
#include "include/controller_state.hpp"
#include <PSX/Periphery/periphery.hpp> #include <PSX/Periphery/periphery.hpp>
#include <stdio.h> #include <stdio.h>
namespace ControllerTest { namespace ControllerTest {
using namespace JabyEngine; using namespace JabyEngine;
static auto controller_state = ControllerState::create();
static void setup() {
Shared::back_menu.reset();
controller_state.setup();
}
static bool update_or_exit() { static bool update_or_exit() {
Periphery::query_controller(); Periphery::query_controller();
if(Shared::back_menu.update(Make::PositionI16(0, GPU::Display::Height - 32))) { if(Shared::back_menu.update(Make::PositionI16(0, GPU::Display::Height - 32))) {
return true; return true;
} }
controller_state.update();
return false; return false;
} }
static void render() { static void render() {
controller_state.render();
Shared::back_menu.render(); Shared::back_menu.render();
} }
void main() { void main() {
printf("CONT: BlubbBlubbBlubb!!\n"); setup();
Shared::back_menu.reset();
while(true) { while(true) {
if(update_or_exit()) { if(update_or_exit()) {
break; break;
} }
GPU::swap_buffers_vsync(1); GPU::swap_buffers_vsync(1);
Shared::back_menu.render(); render();
} }
} }
} }

View File

@ -0,0 +1,55 @@
#pragma once
#include "controller_test_assets.hpp"
#include <PSX/GPU/make_gpu_primitives.hpp>
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();
};
}

BIN
examples/PoolBox/assets/Controller.png (Stored with Git LFS)

Binary file not shown.

View File

@ -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_F3 FlatTriangle;
typedef POLY_FT3 FlatTexturedTriangle; typedef POLY_FT3 FlatTexturedTriangle;
typedef POLY_G3 GouraudTriangle; typedef POLY_G3 GouraudTriangle;