Sprite Draw batching overhaul
This commit is contained in:
@@ -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) {
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user