aboutsummaryrefslogtreecommitdiff
path: root/util
diff options
context:
space:
mode:
authorAndre Weissflog <floooh@gmail.com>2020-12-02 19:48:03 +0100
committerAndre Weissflog <floooh@gmail.com>2020-12-02 19:48:03 +0100
commit2ac975ad4bb175cfd4661ba0a20fabe1ac657678 (patch)
treef17413f018d9ef2bad3491b4a295bf301b9a42ae /util
parent7780a5a2ea2db17bbfc851c1fe6f9a4793483d8b (diff)
sokol_gfx_imgui.h: add the new uninit/dealloc functions (untested)
Diffstat (limited to 'util')
-rw-r--r--util/sokol_gfx_imgui.h295
1 files changed, 295 insertions, 0 deletions
diff --git a/util/sokol_gfx_imgui.h b/util/sokol_gfx_imgui.h
index 4ec064d2..67f9bd5c 100644
--- a/util/sokol_gfx_imgui.h
+++ b/util/sokol_gfx_imgui.h
@@ -303,11 +303,21 @@ typedef enum {
SG_IMGUI_CMD_ALLOC_SHADER,
SG_IMGUI_CMD_ALLOC_PIPELINE,
SG_IMGUI_CMD_ALLOC_PASS,
+ SG_IMGUI_CMD_DEALLOC_BUFFER,
+ SG_IMGUI_CMD_DEALLOC_IMAGE,
+ SG_IMGUI_CMD_DEALLOC_SHADER,
+ SG_IMGUI_CMD_DEALLOC_PIPELINE,
+ SG_IMGUI_CMD_DEALLOC_PASS,
SG_IMGUI_CMD_INIT_BUFFER,
SG_IMGUI_CMD_INIT_IMAGE,
SG_IMGUI_CMD_INIT_SHADER,
SG_IMGUI_CMD_INIT_PIPELINE,
SG_IMGUI_CMD_INIT_PASS,
+ SG_IMGUI_CMD_UNINIT_BUFFER,
+ SG_IMGUI_CMD_UNINIT_IMAGE,
+ SG_IMGUI_CMD_UNINIT_SHADER,
+ SG_IMGUI_CMD_UNINIT_PIPELINE,
+ SG_IMGUI_CMD_UNINIT_PASS,
SG_IMGUI_CMD_FAIL_BUFFER,
SG_IMGUI_CMD_FAIL_IMAGE,
SG_IMGUI_CMD_FAIL_SHADER,
@@ -447,6 +457,26 @@ typedef struct {
typedef struct {
sg_buffer buffer;
+} sg_imgui_args_dealloc_buffer_t;
+
+typedef struct {
+ sg_image image;
+} sg_imgui_args_dealloc_image_t;
+
+typedef struct {
+ sg_shader shader;
+} sg_imgui_args_dealloc_shader_t;
+
+typedef struct {
+ sg_pipeline pipeline;
+} sg_imgui_args_dealloc_pipeline_t;
+
+typedef struct {
+ sg_pass pass;
+} sg_imgui_args_dealloc_pass_t;
+
+typedef struct {
+ sg_buffer buffer;
} sg_imgui_args_init_buffer_t;
typedef struct {
@@ -467,6 +497,26 @@ typedef struct {
typedef struct {
sg_buffer buffer;
+} sg_imgui_args_uninit_buffer_t;
+
+typedef struct {
+ sg_image image;
+} sg_imgui_args_uninit_image_t;
+
+typedef struct {
+ sg_shader shader;
+} sg_imgui_args_uninit_shader_t;
+
+typedef struct {
+ sg_pipeline pipeline;
+} sg_imgui_args_uninit_pipeline_t;
+
+typedef struct {
+ sg_pass pass;
+} sg_imgui_args_uninit_pass_t;
+
+typedef struct {
+ sg_buffer buffer;
} sg_imgui_args_fail_buffer_t;
typedef struct {
@@ -516,11 +566,21 @@ typedef union {
sg_imgui_args_alloc_shader_t alloc_shader;
sg_imgui_args_alloc_pipeline_t alloc_pipeline;
sg_imgui_args_alloc_pass_t alloc_pass;
+ sg_imgui_args_dealloc_buffer_t dealloc_buffer;
+ sg_imgui_args_dealloc_image_t dealloc_image;
+ sg_imgui_args_dealloc_shader_t dealloc_shader;
+ sg_imgui_args_dealloc_pipeline_t dealloc_pipeline;
+ sg_imgui_args_dealloc_pass_t dealloc_pass;
sg_imgui_args_init_buffer_t init_buffer;
sg_imgui_args_init_image_t init_image;
sg_imgui_args_init_shader_t init_shader;
sg_imgui_args_init_pipeline_t init_pipeline;
sg_imgui_args_init_pass_t init_pass;
+ sg_imgui_args_uninit_buffer_t uninit_buffer;
+ sg_imgui_args_uninit_image_t uninit_image;
+ sg_imgui_args_uninit_shader_t uninit_shader;
+ sg_imgui_args_uninit_pipeline_t uninit_pipeline;
+ sg_imgui_args_uninit_pass_t uninit_pass;
sg_imgui_args_fail_buffer_t fail_buffer;
sg_imgui_args_fail_image_t fail_image;
sg_imgui_args_fail_shader_t fail_shader;
@@ -1657,6 +1717,41 @@ _SOKOL_PRIVATE sg_imgui_str_t _sg_imgui_capture_item_string(sg_imgui_t* ctx, int
}
break;
+ case SG_IMGUI_CMD_DEALLOC_BUFFER:
+ {
+ sg_imgui_str_t res_id = _sg_imgui_buffer_id_string(ctx, item->args.dealloc_buffer.buffer);
+ _sg_imgui_snprintf(&str, "%d: sg_dealloc_buffer() => %s", index, res_id.buf);
+ }
+ break;
+
+ case SG_IMGUI_CMD_DEALLOC_IMAGE:
+ {
+ sg_imgui_str_t res_id = _sg_imgui_image_id_string(ctx, item->args.dealloc_image.image);
+ _sg_imgui_snprintf(&str, "%d: sg_dealloc_image() => %s", index, res_id.buf);
+ }
+ break;
+
+ case SG_IMGUI_CMD_DEALLOC_SHADER:
+ {
+ sg_imgui_str_t res_id = _sg_imgui_shader_id_string(ctx, item->args.dealloc_shader.shader);
+ _sg_imgui_snprintf(&str, "%d: sg_dealloc_shader() => %s", index, res_id.buf);
+ }
+ break;
+
+ case SG_IMGUI_CMD_DEALLOC_PIPELINE:
+ {
+ sg_imgui_str_t res_id = _sg_imgui_pipeline_id_string(ctx, item->args.dealloc_pipeline.pipeline);
+ _sg_imgui_snprintf(&str, "%d: sg_dealloc_pipeline() => %s", index, res_id.buf);
+ }
+ break;
+
+ case SG_IMGUI_CMD_DEALLOC_PASS:
+ {
+ sg_imgui_str_t res_id = _sg_imgui_pass_id_string(ctx, item->args.dealloc_pass.pass);
+ _sg_imgui_snprintf(&str, "%d: sg_dealloc_pass() => %s", index, res_id.buf);
+ }
+ break;
+
case SG_IMGUI_CMD_INIT_BUFFER:
{
sg_imgui_str_t res_id = _sg_imgui_buffer_id_string(ctx, item->args.init_buffer.buffer);
@@ -1692,6 +1787,41 @@ _SOKOL_PRIVATE sg_imgui_str_t _sg_imgui_capture_item_string(sg_imgui_t* ctx, int
}
break;
+ case SG_IMGUI_CMD_UNINIT_BUFFER:
+ {
+ sg_imgui_str_t res_id = _sg_imgui_buffer_id_string(ctx, item->args.uninit_buffer.buffer);
+ _sg_imgui_snprintf(&str, "%d: sg_uninit_buffer(buf=%s, desc=..)", index, res_id.buf);
+ }
+ break;
+
+ case SG_IMGUI_CMD_UNINIT_IMAGE:
+ {
+ sg_imgui_str_t res_id = _sg_imgui_image_id_string(ctx, item->args.uninit_image.image);
+ _sg_imgui_snprintf(&str, "%d: sg_uninit_image(img=%s, desc=..)", index, res_id.buf);
+ }
+ break;
+
+ case SG_IMGUI_CMD_UNINIT_SHADER:
+ {
+ sg_imgui_str_t res_id = _sg_imgui_shader_id_string(ctx, item->args.uninit_shader.shader);
+ _sg_imgui_snprintf(&str, "%d: sg_uninit_shader(shd=%s, desc=..)", index, res_id.buf);
+ }
+ break;
+
+ case SG_IMGUI_CMD_UNINIT_PIPELINE:
+ {
+ sg_imgui_str_t res_id = _sg_imgui_pipeline_id_string(ctx, item->args.uninit_pipeline.pipeline);
+ _sg_imgui_snprintf(&str, "%d: sg_uninit_pipeline(pip=%s, desc=..)", index, res_id.buf);
+ }
+ break;
+
+ case SG_IMGUI_CMD_UNINIT_PASS:
+ {
+ sg_imgui_str_t res_id = _sg_imgui_pass_id_string(ctx, item->args.uninit_pass.pass);
+ _sg_imgui_snprintf(&str, "%d: sg_uninit_pass(pass=%s, desc=..)", index, res_id.buf);
+ }
+ break;
+
case SG_IMGUI_CMD_FAIL_BUFFER:
{
sg_imgui_str_t res_id = _sg_imgui_buffer_id_string(ctx, item->args.fail_buffer.buffer);
@@ -2241,6 +2371,76 @@ _SOKOL_PRIVATE void _sg_imgui_alloc_pass(sg_pass result, void* user_data) {
}
}
+_SOKOL_PRIVATE void _sg_imgui_dealloc_buffer(sg_buffer buf_id, void* user_data) {
+ sg_imgui_t* ctx = (sg_imgui_t*) user_data;
+ SOKOL_ASSERT(ctx);
+ sg_imgui_capture_item_t* item = _sg_imgui_capture_next_write_item(ctx);
+ if (item) {
+ item->cmd = SG_IMGUI_CMD_DEALLOC_BUFFER;
+ item->color = _SG_IMGUI_COLOR_RSRC;
+ item->args.dealloc_buffer.buffer = buf_id;
+ }
+ if (ctx->hooks.dealloc_buffer) {
+ ctx->hooks.dealloc_buffer(buf_id, ctx->hooks.user_data);
+ }
+}
+
+_SOKOL_PRIVATE void _sg_imgui_dealloc_image(sg_image img_id, void* user_data) {
+ sg_imgui_t* ctx = (sg_imgui_t*) user_data;
+ SOKOL_ASSERT(ctx);
+ sg_imgui_capture_item_t* item = _sg_imgui_capture_next_write_item(ctx);
+ if (item) {
+ item->cmd = SG_IMGUI_CMD_DEALLOC_IMAGE;
+ item->color = _SG_IMGUI_COLOR_RSRC;
+ item->args.dealloc_image.image = img_id;
+ }
+ if (ctx->hooks.dealloc_image) {
+ ctx->hooks.dealloc_image(img_id, ctx->hooks.user_data);
+ }
+}
+
+_SOKOL_PRIVATE void _sg_imgui_dealloc_shader(sg_shader shd_id, void* user_data) {
+ sg_imgui_t* ctx = (sg_imgui_t*) user_data;
+ SOKOL_ASSERT(ctx);
+ sg_imgui_capture_item_t* item = _sg_imgui_capture_next_write_item(ctx);
+ if (item) {
+ item->cmd = SG_IMGUI_CMD_DEALLOC_SHADER;
+ item->color = _SG_IMGUI_COLOR_RSRC;
+ item->args.dealloc_shader.shader = shd_id;
+ }
+ if (ctx->hooks.dealloc_shader) {
+ ctx->hooks.dealloc_shader(shd_id, ctx->hooks.user_data);
+ }
+}
+
+_SOKOL_PRIVATE void _sg_imgui_dealloc_pipeline(sg_pipeline pip_id, void* user_data) {
+ sg_imgui_t* ctx = (sg_imgui_t*) user_data;
+ SOKOL_ASSERT(ctx);
+ sg_imgui_capture_item_t* item = _sg_imgui_capture_next_write_item(ctx);
+ if (item) {
+ item->cmd = SG_IMGUI_CMD_DEALLOC_PIPELINE;
+ item->color = _SG_IMGUI_COLOR_RSRC;
+ item->args.dealloc_pipeline.pipeline = pip_id;
+ }
+ if (ctx->hooks.dealloc_pipeline) {
+ ctx->hooks.dealloc_pipeline(pip_id, ctx->hooks.user_data);
+ }
+}
+
+_SOKOL_PRIVATE void _sg_imgui_dealloc_pass(sg_pass pass_id, void* user_data) {
+ sg_imgui_t* ctx = (sg_imgui_t*) user_data;
+ SOKOL_ASSERT(ctx);
+ sg_imgui_capture_item_t* item = _sg_imgui_capture_next_write_item(ctx);
+ if (item) {
+ item->cmd = SG_IMGUI_CMD_DEALLOC_PASS;
+ item->color = _SG_IMGUI_COLOR_RSRC;
+ item->args.dealloc_pass.pass = pass_id;
+ }
+ if (ctx->hooks.dealloc_pass) {
+ ctx->hooks.dealloc_pass(pass_id, ctx->hooks.user_data);
+ }
+}
+
_SOKOL_PRIVATE void _sg_imgui_init_buffer(sg_buffer buf_id, const sg_buffer_desc* desc, void* user_data) {
sg_imgui_t* ctx = (sg_imgui_t*) user_data;
SOKOL_ASSERT(ctx);
@@ -2326,6 +2526,91 @@ _SOKOL_PRIVATE void _sg_imgui_init_pass(sg_pass pass_id, const sg_pass_desc* des
}
}
+_SOKOL_PRIVATE void _sg_imgui_uninit_buffer(sg_buffer buf, void* user_data) {
+ sg_imgui_t* ctx = (sg_imgui_t*) user_data;
+ SOKOL_ASSERT(ctx);
+ sg_imgui_capture_item_t* item = _sg_imgui_capture_next_write_item(ctx);
+ if (item) {
+ item->cmd = SG_IMGUI_CMD_UNINIT_BUFFER;
+ item->color = _SG_IMGUI_COLOR_RSRC;
+ item->args.uninit_buffer.buffer = buf;
+ }
+ if (ctx->hooks.uninit_buffer) {
+ ctx->hooks.uninit_buffer(buf, ctx->hooks.user_data);
+ }
+ if (buf.id != SG_INVALID_ID) {
+ _sg_imgui_buffer_destroyed(ctx, _sg_imgui_slot_index(buf.id));
+ }
+}
+
+_SOKOL_PRIVATE void _sg_imgui_uninit_image(sg_image img, void* user_data) {
+ sg_imgui_t* ctx = (sg_imgui_t*) user_data;
+ SOKOL_ASSERT(ctx);
+ sg_imgui_capture_item_t* item = _sg_imgui_capture_next_write_item(ctx);
+ if (item) {
+ item->cmd = SG_IMGUI_CMD_UNINIT_IMAGE;
+ item->color = _SG_IMGUI_COLOR_RSRC;
+ item->args.uninit_image.image = img;
+ }
+ if (ctx->hooks.uninit_image) {
+ ctx->hooks.uninit_image(img, ctx->hooks.user_data);
+ }
+ if (img.id != SG_INVALID_ID) {
+ _sg_imgui_image_destroyed(ctx, _sg_imgui_slot_index(img.id));
+ }
+}
+
+_SOKOL_PRIVATE void _sg_imgui_uninit_shader(sg_shader shd, void* user_data) {
+ sg_imgui_t* ctx = (sg_imgui_t*) user_data;
+ SOKOL_ASSERT(ctx);
+ sg_imgui_capture_item_t* item = _sg_imgui_capture_next_write_item(ctx);
+ if (item) {
+ item->cmd = SG_IMGUI_CMD_UNINIT_SHADER;
+ item->color = _SG_IMGUI_COLOR_RSRC;
+ item->args.uninit_shader.shader = shd;
+ }
+ if (ctx->hooks.uninit_shader) {
+ ctx->hooks.uninit_shader(shd, ctx->hooks.user_data);
+ }
+ if (shd.id != SG_INVALID_ID) {
+ _sg_imgui_shader_destroyed(ctx, _sg_imgui_slot_index(shd.id));
+ }
+}
+
+_SOKOL_PRIVATE void _sg_imgui_uninit_pipeline(sg_pipeline pip, void* user_data) {
+ sg_imgui_t* ctx = (sg_imgui_t*) user_data;
+ SOKOL_ASSERT(ctx);
+ sg_imgui_capture_item_t* item = _sg_imgui_capture_next_write_item(ctx);
+ if (item) {
+ item->cmd = SG_IMGUI_CMD_UNINIT_PIPELINE;
+ item->color = _SG_IMGUI_COLOR_RSRC;
+ item->args.uninit_pipeline.pipeline = pip;
+ }
+ if (ctx->hooks.uninit_pipeline) {
+ ctx->hooks.uninit_pipeline(pip, ctx->hooks.user_data);
+ }
+ if (pip.id != SG_INVALID_ID) {
+ _sg_imgui_pipeline_destroyed(ctx, _sg_imgui_slot_index(pip.id));
+ }
+}
+
+_SOKOL_PRIVATE void _sg_imgui_uninit_pass(sg_pass pass, void* user_data) {
+ sg_imgui_t* ctx = (sg_imgui_t*) user_data;
+ SOKOL_ASSERT(ctx);
+ sg_imgui_capture_item_t* item = _sg_imgui_capture_next_write_item(ctx);
+ if (item) {
+ item->cmd = SG_IMGUI_CMD_UNINIT_PIPELINE;
+ item->color = _SG_IMGUI_COLOR_RSRC;
+ item->args.uninit_pass.pass = pass;
+ }
+ if (ctx->hooks.uninit_pass) {
+ ctx->hooks.uninit_pass(pass, ctx->hooks.user_data);
+ }
+ if (pass.id != SG_INVALID_ID) {
+ _sg_imgui_pass_destroyed(ctx, _sg_imgui_slot_index(pass.id));
+ }
+}
+
_SOKOL_PRIVATE void _sg_imgui_fail_buffer(sg_buffer buf_id, void* user_data) {
sg_imgui_t* ctx = (sg_imgui_t*) user_data;
SOKOL_ASSERT(ctx);
@@ -3489,11 +3774,21 @@ SOKOL_API_IMPL void sg_imgui_init(sg_imgui_t* ctx) {
hooks.alloc_shader = _sg_imgui_alloc_shader;
hooks.alloc_pipeline = _sg_imgui_alloc_pipeline;
hooks.alloc_pass = _sg_imgui_alloc_pass;
+ hooks.dealloc_buffer = _sg_imgui_dealloc_buffer;
+ hooks.dealloc_image = _sg_imgui_dealloc_image;
+ hooks.dealloc_shader = _sg_imgui_dealloc_shader;
+ hooks.dealloc_pipeline = _sg_imgui_dealloc_pipeline;
+ hooks.dealloc_pass = _sg_imgui_dealloc_pass;
hooks.init_buffer = _sg_imgui_init_buffer;
hooks.init_image = _sg_imgui_init_image;
hooks.init_shader = _sg_imgui_init_shader;
hooks.init_pipeline = _sg_imgui_init_pipeline;
hooks.init_pass = _sg_imgui_init_pass;
+ hooks.uninit_buffer = _sg_imgui_uninit_buffer;
+ hooks.uninit_image = _sg_imgui_uninit_image;
+ hooks.uninit_shader = _sg_imgui_uninit_shader;
+ hooks.uninit_pipeline = _sg_imgui_uninit_pipeline;
+ hooks.uninit_pass = _sg_imgui_uninit_pass;
hooks.fail_buffer = _sg_imgui_fail_buffer;
hooks.fail_image = _sg_imgui_fail_image;
hooks.fail_shader = _sg_imgui_fail_shader;