Commit: 007bc1f0a5f2677504c14d4e651eb1f1cb967b94
Parent: abd9e92b9fc0964561f1dffc30964431c29bbe0c
Author: Randy Palamar
Date: Wed, 26 Jun 2024 14:05:04 -0600
simplify fragment shader mip map view
Diffstat:
4 files changed, 19 insertions(+), 28 deletions(-)
diff --git a/beamformer.c b/beamformer.c
@@ -100,24 +100,24 @@ do_beamformer(BeamformerCtx *ctx, Arena arena, s8 rf_data)
u32 fontsize = 32;
u32 fontspace = 1;
- static v2 fs[2];
- if (fs[0].x == 0) {
- fs[0] = (v2){ .rl = MeasureTextEx(ctx->font, txt[0], fontsize, fontspace) };
- fs[1] = (v2){ .rl = MeasureTextEx(ctx->font, txt[1], fontsize, fontspace) };
+ static v2 fts[2];
+ if (fts[0].x == 0) {
+ fts[0] = (v2){ .rl = MeasureTextEx(ctx->font, txt[0], fontsize, fontspace) };
+ fts[1] = (v2){ .rl = MeasureTextEx(ctx->font, txt[1], fontsize, fontspace) };
}
pos.x += 130 * dt * scale.x;
pos.y += 120 * dt * scale.y;
- if (pos.x > (ws.w - fs[txt_idx].x) || pos.x < 0) {
+ if (pos.x > (ws.w - fts[txt_idx].x) || pos.x < 0) {
txt_idx = !txt_idx;
- CLAMP(pos.x, 0, ws.w - fs[txt_idx].x);
+ CLAMP(pos.x, 0, ws.w - fts[txt_idx].x);
scale.x *= -1.0;
}
- if (pos.y > (ws.h - fs[txt_idx].y) || pos.y < 0) {
+ if (pos.y > (ws.h - fts[txt_idx].y) || pos.y < 0) {
txt_idx = !txt_idx;
- CLAMP(pos.y, 0, ws.h - fs[txt_idx].y);
+ CLAMP(pos.y, 0, ws.h - fts[txt_idx].y);
scale.y *= -1.0;
}
@@ -144,16 +144,11 @@ do_beamformer(BeamformerCtx *ctx, Arena arena, s8 rf_data)
BeginTextureMode(ctx->fsctx.output);
ClearBackground(ctx->bg);
BeginShaderMode(ctx->fsctx.shader);
- glUseProgram(ctx->fsctx.shader.id);
- u32 otu = ctx->out_texture_unit;
- glBindImageTexture(otu + 1, ctx->out_texture, ctx->out_texture_mips - 1,
- GL_FALSE, 0, GL_READ_ONLY, GL_RG32F);
- glBindImageTexture(otu, ctx->out_texture, 0,
- GL_FALSE, 0, GL_READ_ONLY, GL_RG32F);
- glUniform1i(ctx->fsctx.out_data_tex_id, otu);
- glUniform1i(ctx->fsctx.mip_view_tex_id, otu + 1);
- glUniform1f(ctx->fsctx.db_cutoff_id, ctx->fsctx.db);
- DrawTexture(ctx->fsctx.output.texture, 0, 0, WHITE);
+ FragmentShaderCtx *fs = &ctx->fsctx;
+ glUseProgram(fs->shader.id);
+ glUniform1i(fs->out_data_tex_id, ctx->out_texture_unit);
+ glUniform1f(fs->db_cutoff_id, fs->db);
+ DrawTexture(fs->output.texture, 0, 0, WHITE);
EndShaderMode();
EndTextureMode();
diff --git a/main.c b/main.c
@@ -164,7 +164,6 @@ init_fragment_shader_ctx(FragmentShaderCtx *ctx, uv3 out_data_dim)
ctx->shader = LoadShader(NULL, "shaders/render.glsl");
ctx->output = LoadRenderTexture(out_data_dim.w, out_data_dim.h);
ctx->out_data_tex_id = glGetUniformLocation(ctx->shader.id, "u_out_data_tex");
- ctx->mip_view_tex_id = glGetUniformLocation(ctx->shader.id, "u_mip_view_tex");
ctx->db_cutoff_id = glGetUniformLocation(ctx->shader.id, "u_db_cutoff");
ctx->db = -50.0f;
}
@@ -197,7 +196,6 @@ reload_shaders(BeamformerCtx *ctx, Arena a)
UnloadShader(ctx->fsctx.shader);
ctx->fsctx.shader = updated_fs;
ctx->fsctx.out_data_tex_id = GetShaderLocation(updated_fs, "u_out_data_tex");
- ctx->fsctx.mip_view_tex_id = GetShaderLocation(updated_fs, "u_mip_view_tex");
ctx->fsctx.db_cutoff_id = GetShaderLocation(updated_fs, "u_db_cutoff");
}
}
diff --git a/shaders/render.glsl b/shaders/render.glsl
@@ -1,12 +1,11 @@
/* See LICENSE for license details. */
-#version 430
+#version 430 core
in vec2 fragTexCoord;
out vec4 v_out_colour;
-layout(rg32f, location = 1) uniform image3D u_out_data_tex;
-layout(rg32f, location = 2) uniform image3D u_mip_view_tex;
-layout(location = 3) uniform float u_db_cutoff = -60;
+layout(location = 1) uniform sampler3D u_out_data_tex;
+layout(location = 2) uniform float u_db_cutoff = -60;
/* input: h [0,360] | s,v [0, 1] *
* output: rgb [0,1] */
@@ -19,11 +18,11 @@ vec3 hsv2rgb(vec3 hsv)
void main()
{
- ivec3 out_data_dim = imageSize(u_out_data_tex);
+ ivec3 out_data_dim = textureSize(u_out_data_tex, 0);
ivec2 coord = ivec2(fragTexCoord * out_data_dim.xy);
- vec2 min_max = imageLoad(u_mip_view_tex, ivec3(0, 0, 0)).xy;
+ vec2 min_max = texelFetch(u_out_data_tex, ivec3(0), textureQueryLevels(u_out_data_tex) - 1).xy;
- float smp = imageLoad(u_out_data_tex, ivec3(coord.x, coord.y, 0)).x;
+ float smp = texelFetch(u_out_data_tex, ivec3(coord.x, coord.y, 0), 0).x;
float absmax = max(abs(min_max.y), abs(min_max.x));
smp = 20 * log(abs(smp) / absmax);
diff --git a/util.h b/util.h
@@ -91,7 +91,6 @@ typedef struct {
Shader shader;
RenderTexture2D output;
i32 out_data_tex_id;
- i32 mip_view_tex_id;
i32 db_cutoff_id;
f32 db;
} FragmentShaderCtx;