ogl_beamforming

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

Commit: 71f98adffc8b181f768ed19e5f25638ac75c73b9
Parent: 4b9b2163f207aff04c9f21c6dc195ed8ff92436f
Author: Randy Palamar
Date:   Tue, 30 Jun 2026 07:41:44 -0600

ui: add contrast mode indicator to frame overlay

Diffstat:
Mbeamformer.meta | 4++++
Mbeamformer_core.c | 2++
Mbeamformer_internal.h | 2++
Mgenerated/beamformer.meta.c | 5+++++
Mui.c | 7+++++--
5 files changed, 18 insertions(+), 2 deletions(-)

diff --git a/beamformer.meta b/beamformer.meta @@ -260,6 +260,10 @@ @Expand(ContrastModeTable) ` $(samples),` `};` `` + `read_only global str8 beamformer_contrast_mode_strings[] = {` + @Expand(ContrastModeTable) ` str8_comp("$(name)"),` + `};` + `` `read_only global u8 beamformer_acquisition_kind_has_fixed_transmits[] = {` @Expand(AcquisitionKindTable) ` $(fixed_transmits),` `};` diff --git a/beamformer_core.c b/beamformer_core.c @@ -910,6 +910,7 @@ beamformer_commit_parameter_block(BeamformerCtx *ctx, BeamformerComputePlan *cp, cp->acquisition_count = pb->parameters.acquisition_count; cp->acquisition_kind = pb->parameters.acquisition_kind; + cp->contrast_mode = pb->parameters.contrast_mode; i64 buffer_size = PING_PONG_BUFFER_SLOTS * round_up_to(cp->rf_size, 64); if (ctx->compute_context.ping_pong_buffer.size < buffer_size) { @@ -1387,6 +1388,7 @@ complete_queue(BeamformerCtx *ctx, BeamformWorkQueue *q, Arena *arena) BeamformerFrame *frame = beamformer_frame_next(cs, cp->output_points, cp->iq_pipeline, reserved_frame_size); frame->acquisition_kind = cp->acquisition_kind; + frame->contrast_mode = cp->contrast_mode; frame->compound_count = cp->acquisition_count; frame->view_plane_tag = work->compute_context.view_plane; mem_copy(frame->voxel_transform.E, cp->voxel_transform.E, sizeof(cp->voxel_transform)); diff --git a/beamformer_internal.h b/beamformer_internal.h @@ -301,6 +301,7 @@ struct BeamformerComputePlan { BeamformerAcquisitionKind acquisition_kind; u32 acquisition_count; + BeamformerContrastMode contrast_mode; u32 rf_size; i32 hadamard_order; @@ -406,6 +407,7 @@ typedef struct { u32 compound_count; BeamformerDataKind data_kind; BeamformerAcquisitionKind acquisition_kind; + BeamformerContrastMode contrast_mode; BeamformerViewPlaneTag view_plane_tag; } BeamformerFrame; diff --git a/generated/beamformer.meta.c b/generated/beamformer.meta.c @@ -474,6 +474,11 @@ read_only global u8 beamformer_contrast_mode_samples[] = { 3, }; +read_only global str8 beamformer_contrast_mode_strings[] = { + str8_comp("None"), + str8_comp("A1S2"), +}; + read_only global u8 beamformer_acquisition_kind_has_fixed_transmits[] = { 1, 0, diff --git a/ui.c b/ui.c @@ -718,7 +718,7 @@ stream_append_variable_group(Stream *s, Variable *var) } function s8 -push_acquisition_kind(Stream *s, BeamformerAcquisitionKind kind, u32 transmit_count) +push_acquisition_kind(Stream *s, BeamformerAcquisitionKind kind, u32 transmit_count, BeamformerContrastMode contrast_mode) { s8 name = beamformer_acquisition_kind_strings[kind]; b32 fixed_transmits = beamformer_acquisition_kind_has_fixed_transmits[kind]; @@ -733,6 +733,9 @@ push_acquisition_kind(Stream *s, BeamformerAcquisitionKind kind, u32 transmit_co stream_append_u64(s, transmit_count); } + if (contrast_mode != BeamformerContrastMode_None) + stream_append_s8s(s, s8(" ("), s8_from_str8(beamformer_contrast_mode_strings[contrast_mode]), s8(")")); + return stream_to_s8(s); } @@ -2714,7 +2717,7 @@ draw_beamformer_frame_view(BeamformerUI *ui, Arena a, Variable *var, Rect displa { Stream buf = arena_stream(a); - s8 shader = push_acquisition_kind(&buf, frame->acquisition_kind, frame->compound_count); + s8 shader = push_acquisition_kind(&buf, frame->acquisition_kind, frame->compound_count, frame->contrast_mode); text_spec.font = &ui->font; text_spec.limits.size.w -= 16; v2 txt_s = measure_text(*text_spec.font, shader);