Sprite Draw batching overhaul

This commit is contained in:
korenkonder
2025-05-25 00:33:17 +03:00
parent 50926f86ae
commit abeaf8e8d4
5 changed files with 620 additions and 530 deletions
+3 -3
View File
@@ -141,11 +141,11 @@ void PrintWork::DrawLine(vec2 pos[2]) {
}
void PrintWork::DrawPolyLine(vec2* points, size_t count) {
spr::put_sprite_line_list(points, count, resolution_mode, prio, color, layer);
spr::put_sprite_poly_line(points, count, resolution_mode, prio, color, layer);
}
void PrintWork::DrawRectangle(rectangle rect) {
spr::put_sprite_multi(rect, resolution_mode, prio, color, layer);
spr::put_sprite_rect_draw(rect, resolution_mode, prio, color, layer);
}
void PrintWork::DrawTextMesh(app::text_flags flags, sprite_text_mesh& mesh) {
@@ -201,7 +201,7 @@ void PrintWork::FillRectangle(rectangle rect) {
rect.size.y = clip_max_pos_y - rect.pos.y;
}
spr::put_sprite_rect(rect, resolution_mode, prio, fill_color, layer);
spr::put_sprite_rect_fill(rect, resolution_mode, prio, fill_color, layer);
}
font_char PrintWork::GetCharData(wchar_t c) {
+10 -10
View File
@@ -122,7 +122,7 @@ namespace spr {
while (args->next)
args = args->next;
args->next = next;
next->kind = SPR_KIND_LINE;
next->kind = SPR_KIND_CHILD;
}
vec2 proj_sprite_3d_line(vec3 vec, bool offset) {
@@ -159,7 +159,7 @@ namespace spr {
args.trans.y = p1.y;
args.trans.z = 0.0f;
args.layer = layer;
args.kind = SPR_KIND_LINES;
args.kind = SPR_KIND_LINE;
args.resolution_mode_screen = mode;
args.resolution_mode_sprite = mode;
args.prio = prio;
@@ -169,10 +169,10 @@ namespace spr {
spr::put_sprite(args);
}
void put_sprite_line_list(vec2* points, size_t count, resolution_mode mode,
void put_sprite_poly_line(vec2* points, size_t count, resolution_mode mode,
spr::SprPrio prio, color4u8 color, int32_t layer) {
spr::SprArgs args;
args.kind = SPR_KIND_ARROW_AB;
args.kind = SPR_KIND_POLY_LINE;
args.layer = layer;
args.resolution_mode_screen = mode;
args.resolution_mode_sprite = mode;
@@ -192,13 +192,13 @@ namespace spr {
spr::put_sprite(args);
}
void put_sprite_multi(rectangle rect, resolution_mode mode, spr::SprPrio prio, color4u8 color, int32_t layer) {
void put_sprite_rect_draw(rectangle rect, resolution_mode mode, spr::SprPrio prio, color4u8 color, int32_t layer) {
spr::SprArgs args;
args.trans.x = rect.pos.x;
args.trans.y = rect.pos.y;
args.trans.z = 0.0f;
args.layer = layer;
args.kind = SPR_KIND_MULTI;
args.kind = SPR_KIND_RECT_DRAW;
args.resolution_mode_screen = mode;
args.resolution_mode_sprite = mode;
args.prio = prio;
@@ -208,13 +208,13 @@ namespace spr {
spr::put_sprite(args);
}
void put_sprite_rect(rectangle rect, resolution_mode mode, spr::SprPrio prio, color4u8 color, int32_t layer) {
void put_sprite_rect_fill(rectangle rect, resolution_mode mode, spr::SprPrio prio, color4u8 color, int32_t layer) {
spr::SprArgs args;
args.trans.x = rect.pos.x;
args.trans.y = rect.pos.y;
args.trans.z = 0.0f;
args.layer = layer;
args.kind = SPR_KIND_RECT;
args.kind = SPR_KIND_RECT_FILL;
args.resolution_mode_screen = mode;
args.resolution_mode_sprite = mode;
args.prio = prio;
@@ -224,11 +224,11 @@ namespace spr {
spr::put_sprite(args);
}
void put_sprite_triangles(SpriteVertex* vert, size_t num, resolution_mode mode,
void put_sprite_strip(SpriteVertex* vert, size_t num, resolution_mode mode,
SprPrio prio, int32_t spr_id, int32_t layer) {
spr::SprArgs args;
args.layer = layer;
args.kind = SPR_KIND_TRIANGLE;
args.kind = SPR_KIND_STRIP;
args.resolution_mode_screen = mode;
args.resolution_mode_sprite = mode;
args.prio = prio;
+10 -11
View File
@@ -145,15 +145,14 @@ namespace spr {
enum SprKind {
SPR_KIND_NORMAL = 0,
SPR_KIND_CHILD,
SPR_KIND_LINE,
SPR_KIND_RECT_FILL,
SPR_KIND_RECT_DRAW,
SPR_KIND_5,
SPR_KIND_LINES,
SPR_KIND_RECT,
SPR_KIND_MULTI,
SPR_KIND_ARROW_A,
SPR_KIND_ARROW_B,
SPR_KIND_ARROW_AB,
SPR_KIND_TRIANGLE,
SPR_KIND_CIRCLE,
SPR_KIND_POLY_LINE,
SPR_KIND_STRIP,
};
enum SprPrio {
@@ -272,11 +271,11 @@ namespace spr {
void put_sprite_3d_line(vec3 p1, vec3 p2, color4u8 color);
void put_sprite_line(vec2 p1, vec2 p2, resolution_mode mode, spr::SprPrio prio, color4u8 color, int32_t layer);
void put_sprite_line_list(vec2* points, size_t count, resolution_mode mode,
void put_sprite_poly_line(vec2* points, size_t count, resolution_mode mode,
spr::SprPrio prio, color4u8 color, int32_t layer);
void put_sprite_multi(rectangle rect, resolution_mode mode, spr::SprPrio prio, color4u8 color, int32_t layer);
void put_sprite_rect(rectangle rect, resolution_mode mode, spr::SprPrio prio, color4u8 color, int32_t layer);
void put_sprite_triangles(SpriteVertex* vert, size_t num, resolution_mode mode,
void put_sprite_rect_draw(rectangle rect, resolution_mode mode, spr::SprPrio prio, color4u8 color, int32_t layer);
void put_sprite_rect_fill(rectangle rect, resolution_mode mode, spr::SprPrio prio, color4u8 color, int32_t layer);
void put_sprite_strip(SpriteVertex* vert, size_t num, resolution_mode mode,
SprPrio prio, int32_t spr_id, int32_t layer);
}
+2 -2
View File
@@ -1205,7 +1205,7 @@ void RobOsageTest::disp_line() {
spr::put_sprite_3d_line(j[-1].pos, j[0].pos, line_color);
for (const RobOsageNode* j = j_begin; j != j_end; j++)
spr::put_sprite_rect({ spr::proj_sprite_3d_line(j->pos, true) - 2.0f, 4.0f },
spr::put_sprite_rect_fill({ spr::proj_sprite_3d_line(j->pos, true) - 2.0f, 4.0f },
RESOLUTION_MODE_MAX, spr::SPR_PRIO_DEBUG, rect_color, 0);
mat4_transpose(i->rob.end_node.bone_node_mat, &mat);
@@ -1293,7 +1293,7 @@ void RobOsageTest::disp_line_cls_param(const mat4& transform, const vec3& pos) {
mat4_get_translation(&transform, &p_node);
spr::put_sprite_3d_line(p, p_node, color_grey);
spr::put_sprite_rect({ spr::proj_sprite_3d_line(p, true) - 1.0f, 2.0f },
spr::put_sprite_rect_fill({ spr::proj_sprite_3d_line(p, true) - 1.0f, 2.0f },
RESOLUTION_MODE_MAX, spr::SPR_PRIO_DEBUG, color_yellow, 0);
}
+595 -504
View File
File diff suppressed because it is too large Load Diff