#ifndef __JABYENGINE_GPU_PRIMITIVES_HPP__ #define __JABYENGINE_GPU_PRIMITIVES_HPP__ #include "../Auxiliary/literals.hpp" #include "Primitives/primitive_gpu_commands.hpp" #include "Primitives/primitive_line_types.hpp" #include "Primitives/primitive_rectangle_types.hpp" #include "Primitives/primitive_poly_types.hpp" namespace JabyEngine { namespace Make { using JabyEngine::operator""_i16; using JabyEngine::operator""_u16; template static constexpr T creator_template(ARGS...args) { return T::create(args...); } // ################################################################### 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); } // ################################################################### 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); } // ################################################################### 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); } // ################################################################### 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); } // ################################################################### 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); } // ################################################################### 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); } // ################################################################### 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); } // ################################################################### 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); } // ################################################################### 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); } // ################################################################### 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); } // ################################################################### 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); } // ################################################################### 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); } // ################################################################### 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); } // ################################################################### 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); } // ################################################################### // ################################################################### // ################################################################### // ################################################################### // ################################################################### static constexpr GPU::TILE_1 TILE_1() { return creator_template(Vertex(), GPU::Color24::Black()); } static constexpr GPU::TILE_1 TILE_1(const GPU::Vertex& position, const GPU::Color24& color) { return creator_template(position, color); } static constexpr GPU::TILE_8 TILE_8() { return creator_template(Vertex(), GPU::Color24::Black()); } static constexpr GPU::TILE_8 TILE_8(const GPU::Vertex& position, const GPU::Color24& color) { return creator_template(position, color); } static constexpr GPU::TILE_16 TILE_16() { return creator_template(Vertex(), GPU::Color24::Black()); } static constexpr GPU::TILE_16 TILE_16(const GPU::Vertex& position, const GPU::Color24& color) { return creator_template(position, color); } static constexpr GPU::TILE TILE() { return creator_template(AreaI16(), GPU::Color24::Black()); } static constexpr GPU::TILE TILE(const GPU::AreaI16& area, const GPU::Color24& color) { return creator_template(area, color); } // ################################################################### static constexpr GPU::SPRT_1 SPRT_1() { return creator_template(Vertex(), PagePositionClut(), GPU::Color24::Black()); } static constexpr GPU::SPRT_1 SPRT_1(const GPU::Vertex& position, const GPU::PagePositionClut& page, const GPU::Color24& color = GPU::Color24::Grey()) { return creator_template(position, page, color); } static constexpr GPU::SPRT_8 SPRT_8() { return creator_template(Vertex(), PagePositionClut(), GPU::Color24::Black()); } static constexpr GPU::SPRT_8 SPRT_8(const GPU::Vertex& position, const GPU::PagePositionClut& page, const GPU::Color24& color = GPU::Color24::Grey()) { return creator_template(position, page, color); } static constexpr GPU::SPRT_16 SPRT_16() { return creator_template(Vertex(), PagePositionClut(), GPU::Color24::Black()); } static constexpr GPU::SPRT_16 SPRT_16(const GPU::Vertex& position, const GPU::PagePositionClut& page, const GPU::Color24& color = GPU::Color24::Grey()) { return creator_template(position, page, color); } static constexpr GPU::SPRT SPRT() { return creator_template(AreaI16(), PagePositionClut(), GPU::Color24::Black()); } static constexpr GPU::SPRT SPRT(const GPU::AreaI16& area, const GPU::PagePositionClut& page, const GPU::Color24& color = GPU::Color24::Grey()) { return creator_template(area, page, color); } } } #endif // !__JABYENGINE_GPU_PRIMITIVES_HPP__