From 717b63369be8e1cd2c24c91e7351526d76896155 Mon Sep 17 00:00:00 2001 From: Antoine C Date: Mon, 15 Jul 2024 13:49:31 +0100 Subject: [PATCH] fix: support for new WaveformData struct in shaders --- res/shaders/filteredsignal.frag | 5 +++++ res/shaders/rgbsignal.frag | 15 +++++++++++++-- res/shaders/stackedsignal.frag | 5 +++++ 3 files changed, 23 insertions(+), 2 deletions(-) diff --git a/res/shaders/filteredsignal.frag b/res/shaders/filteredsignal.frag index ce0f0631df7..7a6747b428f 100644 --- a/res/shaders/filteredsignal.frag +++ b/res/shaders/filteredsignal.frag @@ -21,6 +21,11 @@ uniform sampler2D waveformDataTexture; vec4 getWaveformData(float index) { vec2 uv_data; + // The Waveform data is composed of 8 bytes per sample, (low, mid, high, all, + // stem1, stem2, stem3, stem4), see WaveformData struct. Currently, shaders + // don't support stem rendering. + index = 2 * index; + uv_data.y = floor(index / float(textureStride)); uv_data.x = floor(index - uv_data.y * float(textureStride)); // Divide again to convert to normalized UV coordinates. diff --git a/res/shaders/rgbsignal.frag b/res/shaders/rgbsignal.frag index f60dd9e3774..718918bd6f2 100644 --- a/res/shaders/rgbsignal.frag +++ b/res/shaders/rgbsignal.frag @@ -22,8 +22,19 @@ uniform sampler2D waveformDataTexture; vec4 getWaveformData(float index) { vec2 uv_data; - uv_data.y = splitStereoSignal ? floor(index / float(textureStride)) : max(floor(index / float(textureStride)), floor((index + 1) / float(textureStride))); - uv_data.x = splitStereoSignal ? floor(index - uv_data.y * float(textureStride)) : max(floor(index - uv_data.y * float(textureStride)), floor((index + 1) - uv_data.y * float(textureStride))); + // The Waveform data is composed of 8 bytes per sample, (low, mid, high, + // all, stem1, stem2, stem3, stem4), see WaveformData struct. Currently, + // shaders don't support stem rendering. + index = 2 * index; + + uv_data.y = splitStereoSignal + ? floor(index / float(textureStride)) + : max(floor(index / float(textureStride)), + floor((index + 2) / float(textureStride))); + uv_data.x = splitStereoSignal + ? floor(index - uv_data.y * float(textureStride)) + : max(floor(index - uv_data.y * float(textureStride)), + floor((index + 2) - uv_data.y * float(textureStride))); // Divide again to convert to normalized UV coordinates. return texture2D(waveformDataTexture, uv_data / float(textureStride)); } diff --git a/res/shaders/stackedsignal.frag b/res/shaders/stackedsignal.frag index d5207ac6ef2..1e5bf79d05f 100644 --- a/res/shaders/stackedsignal.frag +++ b/res/shaders/stackedsignal.frag @@ -24,6 +24,11 @@ uniform sampler2D waveformDataTexture; vec4 getWaveformData(float index) { vec2 uv_data; + // The Waveform data is composed of 8 bytes per sample, (low, mid, high, all, + // stem1, stem2, stem3, stem4), see WaveformData struct. Currently, shaders + // don't support stem rendering. + index = 2 * index; + uv_data.y = floor(index / float(textureStride)); uv_data.x = floor(index - uv_data.y * float(textureStride)); // Divide again to convert to normalized UV coordinates.