aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--util/sokol_gfx_imgui.h39
1 files changed, 39 insertions, 0 deletions
diff --git a/util/sokol_gfx_imgui.h b/util/sokol_gfx_imgui.h
index b5153058..fd1788c9 100644
--- a/util/sokol_gfx_imgui.h
+++ b/util/sokol_gfx_imgui.h
@@ -362,6 +362,7 @@ typedef enum sgimgui_cmd_t {
SGIMGUI_CMD_APPLY_BINDINGS,
SGIMGUI_CMD_APPLY_UNIFORMS,
SGIMGUI_CMD_DRAW,
+ SGIMGUI_CMD_DRAW_EX,
SGIMGUI_CMD_DISPATCH,
SGIMGUI_CMD_END_PASS,
SGIMGUI_CMD_COMMIT,
@@ -497,6 +498,14 @@ typedef struct sgimgui_args_draw_t {
int num_instances;
} sgimgui_args_draw_t;
+typedef struct sgimgui_args_draw_ex_t {
+ int base_element;
+ int num_elements;
+ int num_instances;
+ int base_vertex;
+ int base_instance;
+} sgimgui_args_draw_ex_t;
+
typedef struct sgimgui_args_dispatch_t {
int num_groups_x;
int num_groups_y;
@@ -650,6 +659,7 @@ typedef union sgimgui_args_t {
sgimgui_args_apply_bindings_t apply_bindings;
sgimgui_args_apply_uniforms_t apply_uniforms;
sgimgui_args_draw_t draw;
+ sgimgui_args_draw_ex_t draw_ex;
sgimgui_args_dispatch_t dispatch;
sgimgui_args_alloc_buffer_t alloc_buffer;
sgimgui_args_alloc_image_t alloc_image;
@@ -2044,6 +2054,16 @@ _SOKOL_PRIVATE sgimgui_str_t _sgimgui_capture_item_string(sgimgui_t* ctx, int in
item->args.draw.num_instances);
break;
+ case SGIMGUI_CMD_DRAW_EX:
+ _sgimgui_snprintf(&str, "%d: sg_draw_ex(base_element=%d, num_elements=%d, num_instances=%d, base_vertex=%d, base_instance=%d)",
+ index,
+ item->args.draw_ex.base_element,
+ item->args.draw_ex.num_elements,
+ item->args.draw_ex.num_instances,
+ item->args.draw_ex.base_vertex,
+ item->args.draw_ex.base_instance);
+ break;
+
case SGIMGUI_CMD_DISPATCH:
_sgimgui_snprintf(&str, "%d: sg_dispatch(num_groups_x=%d, num_groups_y=%d, num_groups_z=%d)",
index,
@@ -2665,6 +2685,24 @@ _SOKOL_PRIVATE void _sgimgui_draw(int base_element, int num_elements, int num_in
}
}
+_SOKOL_PRIVATE void _sgimgui_draw_ex(int base_element, int num_elements, int num_instances, int base_vertex, int base_instance, void* user_data) {
+ sgimgui_t* ctx = (sgimgui_t*)user_data;
+ SOKOL_ASSERT(ctx);
+ sgimgui_capture_item_t* item = _sgimgui_capture_next_write_item(ctx);
+ if (item) {
+ item->cmd = SGIMGUI_CMD_DRAW_EX;
+ item->color = _SGIMGUI_COLOR_DRAW;
+ item->args.draw_ex.base_element = base_element;
+ item->args.draw_ex.num_elements = num_elements;
+ item->args.draw_ex.num_instances = num_instances;
+ item->args.draw_ex.base_vertex = base_vertex;
+ item->args.draw_ex.base_instance = base_instance;
+ }
+ if (ctx->hooks.draw_ex) {
+ ctx->hooks.draw_ex(base_element, num_elements, num_instances, base_vertex, base_instance, ctx->hooks.user_data);
+ }
+}
+
_SOKOL_PRIVATE void _sgimgui_dispatch(int num_groups_x, int num_groups_y, int num_groups_z, void* user_data) {
sgimgui_t* ctx = (sgimgui_t*) user_data;
SOKOL_ASSERT(ctx);
@@ -4367,6 +4405,7 @@ _SOKOL_PRIVATE void _sgimgui_draw_capture_panel(sgimgui_t* ctx) {
_sgimgui_draw_uniforms_panel(ctx, &item->args.apply_uniforms);
break;
case SGIMGUI_CMD_DRAW:
+ case SGIMGUI_CMD_DRAW_EX:
case SGIMGUI_CMD_DISPATCH:
case SGIMGUI_CMD_END_PASS:
case SGIMGUI_CMD_COMMIT: