aboutsummaryrefslogtreecommitdiff
path: root/util
diff options
context:
space:
mode:
authorAndre Weissflog <floooh@gmail.com>2021-02-13 13:54:55 +0100
committerAndre Weissflog <floooh@gmail.com>2021-02-13 13:54:55 +0100
commit1ddb55b177ab64667d389715717fa15c4170b962 (patch)
tree285463bcb36429c2fdb9af5c2002cc7daf646d78 /util
parent53acec77ac3378a74e7ab28b6f453b60794ff6dd (diff)
sokol_nuklear.h: oops, don't memleak on vertex/index-buffer-overflow
Diffstat (limited to 'util')
-rw-r--r--util/sokol_nuklear.h69
1 files changed, 34 insertions, 35 deletions
diff --git a/util/sokol_nuklear.h b/util/sokol_nuklear.h
index 2c920343..e5c11423 100644
--- a/util/sokol_nuklear.h
+++ b/util/sokol_nuklear.h
@@ -1902,48 +1902,47 @@ SOKOL_API_IMPL void snk_render(int width, int height) {
const bool vertex_buffer_overflow = nk_buffer_total(&verts) > _snuklear.vertex_buffer_size;
const bool index_buffer_overflow = nk_buffer_total(&idx) > _snuklear.index_buffer_size;
SOKOL_ASSERT(!vertex_buffer_overflow && !index_buffer_overflow);
- if (vertex_buffer_overflow || index_buffer_overflow) {
- return;
- }
-
- /* Setup rendering */
- const float dpi_scale = _snuklear.desc.dpi_scale;
- const int fb_width = (int)(_snuklear.vs_params.disp_size[0] * dpi_scale);
- const int fb_height = (int)(_snuklear.vs_params.disp_size[1] * dpi_scale);
- sg_apply_viewport(0, 0, fb_width, fb_height, true);
- sg_apply_scissor_rect(0, 0, fb_width, fb_height, true);
- sg_apply_pipeline(_snuklear.pip);
- sg_apply_uniforms(SG_SHADERSTAGE_VS, 0, &SG_RANGE(_snuklear.vs_params));
- sg_update_buffer(_snuklear.vbuf, &(sg_range){ nk_buffer_memory_const(&verts), nk_buffer_total(&verts) });
- sg_update_buffer(_snuklear.ibuf, &(sg_range){ nk_buffer_memory_const(&idx), nk_buffer_total(&idx) });
-
- /* Iterate through the command list, rendering each one */
- const struct nk_draw_command* cmd = NULL;
- int idx_offset = 0;
- nk_draw_foreach(cmd, &_snuklear.ctx, &cmds) {
- if(cmd->elem_count > 0) {
- sg_apply_bindings(&(sg_bindings){
- .fs_images[0] = _snuklear.img,
- .vertex_buffers[0] = _snuklear.vbuf,
- .index_buffer = _snuklear.ibuf,
- .vertex_buffer_offsets[0] = 0,
- .index_buffer_offset = idx_offset
- });
- sg_apply_scissor_rectf(cmd->clip_rect.x * dpi_scale,
- cmd->clip_rect.y * dpi_scale,
- cmd->clip_rect.w * dpi_scale,
- cmd->clip_rect.h * dpi_scale,
- true);
- sg_draw(0, (int)cmd->elem_count, 1);
- idx_offset += (int)cmd->elem_count * (int)sizeof(uint16_t);
+ if (!vertex_buffer_overflow && !index_buffer_overflow) {
+
+ /* Setup rendering */
+ const float dpi_scale = _snuklear.desc.dpi_scale;
+ const int fb_width = (int)(_snuklear.vs_params.disp_size[0] * dpi_scale);
+ const int fb_height = (int)(_snuklear.vs_params.disp_size[1] * dpi_scale);
+ sg_apply_viewport(0, 0, fb_width, fb_height, true);
+ sg_apply_scissor_rect(0, 0, fb_width, fb_height, true);
+ sg_apply_pipeline(_snuklear.pip);
+ sg_apply_uniforms(SG_SHADERSTAGE_VS, 0, &SG_RANGE(_snuklear.vs_params));
+ sg_update_buffer(_snuklear.vbuf, &(sg_range){ nk_buffer_memory_const(&verts), nk_buffer_total(&verts) });
+ sg_update_buffer(_snuklear.ibuf, &(sg_range){ nk_buffer_memory_const(&idx), nk_buffer_total(&idx) });
+
+ /* Iterate through the command list, rendering each one */
+ const struct nk_draw_command* cmd = NULL;
+ int idx_offset = 0;
+ nk_draw_foreach(cmd, &_snuklear.ctx, &cmds) {
+ if(cmd->elem_count > 0) {
+ sg_apply_bindings(&(sg_bindings){
+ .fs_images[0] = _snuklear.img,
+ .vertex_buffers[0] = _snuklear.vbuf,
+ .index_buffer = _snuklear.ibuf,
+ .vertex_buffer_offsets[0] = 0,
+ .index_buffer_offset = idx_offset
+ });
+ sg_apply_scissor_rectf(cmd->clip_rect.x * dpi_scale,
+ cmd->clip_rect.y * dpi_scale,
+ cmd->clip_rect.w * dpi_scale,
+ cmd->clip_rect.h * dpi_scale,
+ true);
+ sg_draw(0, (int)cmd->elem_count, 1);
+ idx_offset += (int)cmd->elem_count * (int)sizeof(uint16_t);
+ }
}
+ sg_apply_scissor_rect(0, 0, fb_width, fb_height, true);
}
/* Cleanup */
nk_buffer_free(&cmds);
nk_buffer_free(&verts);
nk_buffer_free(&idx);
- sg_apply_scissor_rect(0, 0, fb_width, fb_height, true);
}
#if !defined(SOKOL_NUKLEAR_NO_SOKOL_APP)