Support all primitives

This commit is contained in:
2023-06-05 22:44:45 +02:00
parent d99b7445be
commit fd9e352355
7 changed files with 92 additions and 46 deletions

View File

@@ -0,0 +1,21 @@
#ifndef __JABYENGINE_PRIMITIVE_GPU_COMMANDS_HPP__
#define __JABYENGINE_PRIMITIVE_GPU_COMMANDS_HPP__
#include "../../System/IOPorts/gpu_io.hpp"
#include "primitive_support_types.hpp"
namespace JabyEngine {
namespace GPU {
struct TexPage {
GPU_IO::GP0_t value;
constexpr TexPage(const PositionU16& tex_pos, TexturePageColor tex_color, SemiTransparency transparency = SemiTransparency::B_Half_add_F_Half, bool dither = false) : value{
GPU_IO::Command::TexPage(tex_pos, transparency, tex_color, dither, false)} {}
};
namespace internal {
__jaby_engine_declare_render_primitive(TexPage);
}
}
}
#endif // !__JABYENGINE_PRIMITIVE_GPU_COMMANDS_HPP__

View File

@@ -4,6 +4,11 @@
namespace JabyEngine {
namespace GPU {
struct PagePositionClut {
PagePosition page;
PageClut clut;
};
namespace internal {
struct RectCode : public CodeBase<RectCode> {
enum struct Size : uint8_t {
@@ -37,7 +42,7 @@ namespace JabyEngine {
Vertex position;
constexpr RECT_F() = default;
constexpr RECT_F(const Color24& color, const Vertex& position) : color(color), code(IdentityCode), position(position) {
constexpr RECT_F(const Vertex& position, const Color24& color) : color(color), code(IdentityCode), position(position) {
}
};
@@ -50,45 +55,46 @@ namespace JabyEngine {
Code code;
Vertex position;
PagePosition page;
PageClut clut;
constexpr RECT_T() = default;
constexpr RECT_T(const Color24& color, const Vertex& position, const PagePosition& page) : color(color), code(IdentityCode), position(position), page(page) {
constexpr RECT_T(const Vertex& position, const PagePositionClut& page, const Color24& color = Color24::Grey()) : color(color), code(IdentityCode), position(position), page(page.page), clut(page.clut) {
}
};
}
typedef internal::RECT_F<internal::RectCode::Size::Pixel1x1> RECT_F1;
typedef internal::RECT_F<internal::RectCode::Size::Sprite8x8> RECT_F8;
typedef internal::RECT_F<internal::RectCode::Size::Sprite16x16> RECT_F16;
struct RECT_FVAR : public internal::RECT_F<internal::RectCode::Size::Variable> {
typedef internal::RECT_F<internal::RectCode::Size::Pixel1x1> TILE_1;
typedef internal::RECT_F<internal::RectCode::Size::Sprite8x8> TILE_8;
typedef internal::RECT_F<internal::RectCode::Size::Sprite16x16> TILE_16;
struct TILE : public internal::RECT_F<internal::RectCode::Size::Variable> {
Vertex position_bottom_right;
constexpr RECT_FVAR() = default;
constexpr RECT_FVAR(const Color24& color, const AreaI16& area) : RECT_F(color, area.position), position_bottom_right(area.get_bottom_left()) {
constexpr TILE() = default;
constexpr TILE(const AreaI16& area, const Color24& color) : RECT_F(area.position, color), position_bottom_right(area.get_bottom_left()) {
}
};
typedef internal::RECT_T<internal::RectCode::Size::Pixel1x1> RECT_T1;
typedef internal::RECT_T<internal::RectCode::Size::Sprite8x8> RECT_T8;
typedef internal::RECT_T<internal::RectCode::Size::Sprite16x16> RECT_T16;
struct RECT_TVAR : public internal::RECT_T<internal::RectCode::Size::Variable> {
typedef internal::RECT_T<internal::RectCode::Size::Pixel1x1> SPRT_1;
typedef internal::RECT_T<internal::RectCode::Size::Sprite8x8> SPRT_8;
typedef internal::RECT_T<internal::RectCode::Size::Sprite16x16> SPRT_16;
struct SPRT : public internal::RECT_T<internal::RectCode::Size::Variable> {
Vertex position_bottom_right;
constexpr RECT_TVAR() = default;
constexpr RECT_TVAR(const Color24& color, const AreaI16& area, const PagePosition& page) : RECT_T(color, area.position, page), position_bottom_right(area.get_bottom_left()) {
constexpr SPRT() = default;
constexpr SPRT(const AreaI16& area, const PagePositionClut& page, const Color24& color = Color24::Grey()) : RECT_T(area.position, page, color), position_bottom_right(area.get_bottom_left()) {
}
};
namespace internal {
__jaby_engine_declare_render_primitive(RECT_F1);
__jaby_engine_declare_render_primitive(RECT_F8);
__jaby_engine_declare_render_primitive(RECT_F16);
__jaby_engine_declare_render_primitive(RECT_FVAR);
__jaby_engine_declare_render_primitive(TILE_1);
__jaby_engine_declare_render_primitive(TILE_8);
__jaby_engine_declare_render_primitive(TILE_16);
__jaby_engine_declare_render_primitive(TILE);
__jaby_engine_declare_render_primitive(RECT_T1);
__jaby_engine_declare_render_primitive(RECT_T8);
__jaby_engine_declare_render_primitive(RECT_T16);
__jaby_engine_declare_render_primitive(RECT_TVAR);
__jaby_engine_declare_render_primitive(SPRT_1);
__jaby_engine_declare_render_primitive(SPRT_8);
__jaby_engine_declare_render_primitive(SPRT_16);
__jaby_engine_declare_render_primitive(SPRT);
}
}
}

View File

@@ -71,10 +71,6 @@ namespace JabyEngine {
}
}
// Reexport for easier use
typedef JabyEngine::GPU_IO::SemiTransparency SemiTransparency;
typedef JabyEngine::GPU_IO::TexturePageColor TexturePageColor;
struct PageClut {
uint16_t value = 0;

View File

@@ -1,5 +1,6 @@
#ifndef __JABYENGINE_GPU_PRIMITIVES_HPP__
#define __JABYENGINE_GPU_PRIMITIVES_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"

View File

@@ -32,6 +32,19 @@ namespace JabyEngine {
};
}
enum struct SemiTransparency {
B_Half_add_F_Half = 0,
B_add_F = 1,
B_sub_F = 2,
B_add_F_Quarter = 3,
};
enum struct TexturePageColor {
$4bit = 0,
$8bit = 1,
$15bit = 2,
};
struct Color24 {
uint8_t red = 0;
uint8_t green = 0;