ogl_beamforming

Ultrasound Beamforming Implemented with OpenGL
git clone anongit@rnpnr.xyz:ogl_beamforming.git
Log | Files | Refs | Feed | Submodules | LICENSE

Commit: be868315b5189efb3884bd9592c2952e8fe5a1f8
Parent: a5a7f38e63238e0d29eaf3cc4b99556e1575675e
Author: Randy Palamar
Date:   Fri, 25 Apr 2025 22:33:10 -0600

ui: fix cycler variables leaking label array memory on release

labels are not dynamically generated -> store a pointer to the
global table storing them in the image

Diffstat:
Mui.c | 18++++++++----------
1 file changed, 8 insertions(+), 10 deletions(-)

diff --git a/ui.c b/ui.c @@ -811,20 +811,16 @@ end_variable_group(Variable *group) function Variable * add_variable_cycler(BeamformerUI *ui, Variable *group, Arena *arena, u32 flags, Font font, s8 name, - u32 *store, s8 *labels, u32 label_count) + u32 *store, s8 *labels, u32 cycle_count) { Variable *result = add_variable(ui, group, arena, name, V_INPUT|flags, VT_CYCLER, font); - result->u.cycler.cycle_length = label_count; + result->u.cycler.cycle_length = cycle_count; result->u.cycler.state = store; - if (labels) { - result->u.cycler.labels = alloc(arena, s8, label_count); - for (u32 i = 0; i < label_count; i++) - result->u.cycler.labels[i] = labels[i]; - } + result->u.cycler.labels = labels; return result; } -static Variable * +function Variable * add_button(BeamformerUI *ui, Variable *group, Arena *arena, s8 name, UIButtonID id, u32 flags, Font font) { @@ -938,14 +934,16 @@ add_beamformer_parameters_view(Variable *parent, BeamformerCtx *ctx) &bp->off_axis_pos, (v2){.x = -1e3, .y = 1e3}, 0.25e3, 0.5e-3, V_INPUT|V_TEXT|V_CAUSES_COMPUTE, ui->font); + local_persist s8 beamform_plane_labels[] = {s8("XZ"), s8("YZ")}; add_variable_cycler(ui, group, &ui->arena, V_CAUSES_COMPUTE, ui->font, s8("Beamform Plane:"), - (u32 *)&bp->beamform_plane, (s8 []){s8("XZ"), s8("YZ")}, 2); + (u32 *)&bp->beamform_plane, beamform_plane_labels, countof(beamform_plane_labels)); add_beamformer_variable_f32(ui, group, &ui->arena, s8("F#:"), s8(""), &bp->f_number, (v2){.y = 1e3}, 1, 0.1, V_INPUT|V_TEXT|V_CAUSES_COMPUTE, ui->font); + local_persist s8 interpolate_labels[] = {s8("False"), s8("True")}; add_variable_cycler(ui, group, &ui->arena, V_CAUSES_COMPUTE, ui->font, s8("Interpolate:"), - &bp->interpolate, (s8 []){s8("False"), s8("True")}, 2); + &bp->interpolate, interpolate_labels, countof(interpolate_labels)); return result; }