diff options
| author | Andre Weissflog <floooh@gmail.com> | 2020-12-02 19:48:03 +0100 |
|---|---|---|
| committer | Andre Weissflog <floooh@gmail.com> | 2020-12-02 19:48:03 +0100 |
| commit | 2ac975ad4bb175cfd4661ba0a20fabe1ac657678 (patch) | |
| tree | f17413f018d9ef2bad3491b4a295bf301b9a42ae /util | |
| parent | 7780a5a2ea2db17bbfc851c1fe6f9a4793483d8b (diff) | |
sokol_gfx_imgui.h: add the new uninit/dealloc functions (untested)
Diffstat (limited to 'util')
| -rw-r--r-- | util/sokol_gfx_imgui.h | 295 |
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; |