Skip to content

Commit

Permalink
Merge local commits
Browse files Browse the repository at this point in the history
  • Loading branch information
phandasm committed Sep 2, 2023
2 parents d134938 + d1065f5 commit 9ca0834
Show file tree
Hide file tree
Showing 5 changed files with 78 additions and 3 deletions.
23 changes: 23 additions & 0 deletions data/gradient.effect
Original file line number Diff line number Diff line change
@@ -1,9 +1,12 @@
uniform float4x4 ViewProj;
uniform float4 color_base = {1.0, 1.0, 1.0, 1.0};
uniform float4 color_middle = {1.0, 1.0, 1.0, 1.0};
uniform float4 color_crest = {1.0, 1.0, 1.0, 1.0};
uniform float grad_center = 0.0;
uniform float grad_height = 0.0;
uniform float grad_offset = 0.0;
uniform float range_middle = 0.69; // -20dB when floor is -65dB
uniform float range_crest = 0.86; // -9dB when floor is -65dB

uniform float graph_width = 0.0;
uniform float graph_height = 0.0;
Expand Down Expand Up @@ -66,6 +69,16 @@ float4 PSGradient(VertGrad vert_in) : TARGET
return lerp(color_base, color_crest, lerp_t);
}

float4 PSRange(VertGrad vert_in) : TARGET
{
float ratio = 1.0 - saturate((distance(vert_in.tex.y, grad_center) - grad_offset) / grad_height);
if (ratio > range_middle)
return color_base; // Green
else if (ratio < range_crest)
return color_crest; // Red
return color_middle; // Yellow
}

technique Solid
{
pass
Expand All @@ -84,6 +97,16 @@ technique Gradient
}
}

technique Range
{
pass
{
vertex_shader = VSGradient(vert_in);
pixel_shader = PSRange(vert_in);
}
}


technique Radial
{
pass
Expand Down
4 changes: 4 additions & 0 deletions data/locale/en-US.ini
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ line="Line"
solid="Solid"
gradient="Gradient"
pulse="Pulse"
range="Range"

pulse_mode="Pulse Mode"
peak_magnitude="Peak Magnitude"
Expand Down Expand Up @@ -80,8 +81,11 @@ exp_moving_avg="Exponential Moving Average"
fast_peaks="Fast Peaks"

color_base="Base Color"
color_middle="Middle Color"
color_crest="Crest Color"
grad_ratio="Gradient Ratio"
range_middle="Middle Range"
range_crest="Crest Range"

display_mode="Display Mode"
curve="Curve"
Expand Down
4 changes: 4 additions & 0 deletions src/settings.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ static inline bool p_equ(const char *s1, const char *s2) { return std::strcmp(s1
#define P_SOLID "solid"
#define P_GRADIENT "gradient"
#define P_PULSE "pulse"
#define P_RANGE "range"

#define P_PULSE_MODE "pulse_mode"
#define P_PEAK_MAG "peak_magnitude"
Expand Down Expand Up @@ -103,8 +104,11 @@ static inline bool p_equ(const char *s1, const char *s2) { return std::strcmp(s1
#define P_FAST_PEAKS "fast_peaks"

#define P_COLOR_BASE "color_base"
#define P_COLOR_MIDDLE "color_middle"
#define P_COLOR_CREST "color_crest"
#define P_GRAD_RATIO "grad_ratio"
#define P_RANGE_MIDDLE "range_middle"
#define P_RANGE_CREST "range_crest"

#define P_DISPLAY_MODE "display_mode"
#define P_CURVE "curve"
Expand Down
44 changes: 42 additions & 2 deletions src/source.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -151,8 +151,11 @@ namespace callbacks {
obs_data_set_default_double(settings, P_ROLLOFF_RATE, 0.0);
obs_data_set_default_string(settings, P_RENDER_MODE, P_SOLID);
obs_data_set_default_int(settings, P_COLOR_BASE, 0xffffffff);
obs_data_set_default_int(settings, P_COLOR_MIDDLE, 0xffffffff);
obs_data_set_default_int(settings, P_COLOR_CREST, 0xffffffff);
obs_data_set_default_double(settings, P_GRAD_RATIO, 0.75);
obs_data_set_default_int(settings, P_RANGE_MIDDLE, -20);
obs_data_set_default_int(settings, P_RANGE_CREST, -9);
obs_data_set_default_int(settings, P_BAR_WIDTH, 24);
obs_data_set_default_int(settings, P_BAR_GAP, 6);
obs_data_set_default_int(settings, P_STEP_WIDTH, 8);
Expand Down Expand Up @@ -405,17 +408,27 @@ namespace callbacks {
obs_property_list_add_string(renderlist, T(P_SOLID), P_SOLID);
obs_property_list_add_string(renderlist, T(P_GRADIENT), P_GRADIENT);
obs_property_list_add_string(renderlist, T(P_PULSE), P_PULSE);
obs_property_list_add_string(renderlist, T(P_RANGE), P_RANGE);
auto pulselist = obs_properties_add_list(props, P_PULSE_MODE, T(P_PULSE_MODE), OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_STRING);
obs_property_list_add_string(pulselist, T(P_PEAK_MAG), P_PEAK_MAG);
obs_property_list_add_string(pulselist, T(P_PEAK_FREQ), P_PEAK_FREQ);
obs_properties_add_color_alpha(props, P_COLOR_BASE, T(P_COLOR_BASE));
obs_properties_add_color_alpha(props, P_COLOR_MIDDLE, T(P_COLOR_MIDDLE));
obs_properties_add_color_alpha(props, P_COLOR_CREST, T(P_COLOR_CREST));
obs_properties_add_float_slider(props, P_GRAD_RATIO, T(P_GRAD_RATIO), 0.0, 4.0, 0.01);
auto range_middle = obs_properties_add_int_slider(props, P_RANGE_MIDDLE, T(P_RANGE_MIDDLE), -120, 0, 1);
obs_property_int_set_suffix(range_middle, " dBFS");
auto range_crest = obs_properties_add_int_slider(props, P_RANGE_CREST, T(P_RANGE_CREST), -120, 0, 1);
obs_property_int_set_suffix(range_crest, " dBFS");
obs_property_set_modified_callback(renderlist, [](obs_properties_t *props, [[maybe_unused]] obs_property_t *property, obs_data_t *settings) -> bool {
auto grad = p_equ(obs_data_get_string(settings, P_RENDER_MODE), P_GRADIENT);
auto pulse = p_equ(obs_data_get_string(settings, P_RENDER_MODE), P_PULSE);
obs_property_set_enabled(obs_properties_get(props, P_COLOR_CREST), grad || pulse);
auto range = p_equ(obs_data_get_string(settings, P_RENDER_MODE), P_RANGE);
obs_property_set_enabled(obs_properties_get(props, P_COLOR_MIDDLE), range);
obs_property_set_enabled(obs_properties_get(props, P_COLOR_CREST), grad || pulse || range);
set_prop_visible(props, P_GRAD_RATIO, grad || pulse);
set_prop_visible(props, P_RANGE_MIDDLE, range);
set_prop_visible(props, P_RANGE_CREST, range);
set_prop_visible(props, P_PULSE_MODE, pulse);
return true;
});
Expand Down Expand Up @@ -495,8 +508,11 @@ void WAVSource::get_settings(obs_data_t *settings)
auto rendermode = obs_data_get_string(settings, P_RENDER_MODE);
auto pulsemode = obs_data_get_string(settings, P_PULSE_MODE);
auto color_base = obs_data_get_int(settings, P_COLOR_BASE);
auto color_middle = obs_data_get_int(settings, P_COLOR_MIDDLE);
auto color_crest = obs_data_get_int(settings, P_COLOR_CREST);
m_grad_ratio = (float)obs_data_get_double(settings, P_GRAD_RATIO);
m_range_middle = (int)obs_data_get_int(settings, P_RANGE_MIDDLE);
m_range_crest = (int)obs_data_get_int(settings, P_RANGE_CREST);
auto display = obs_data_get_string(settings, P_DISPLAY_MODE);
m_bar_width = (int)obs_data_get_int(settings, P_BAR_WIDTH);
m_bar_gap = (int)obs_data_get_int(settings, P_BAR_GAP);
Expand All @@ -512,6 +528,7 @@ void WAVSource::get_settings(obs_data_t *settings)
m_max_gain = (float)obs_data_get_int(settings, P_MAX_GAIN);

m_color_base = { {{(uint8_t)color_base / 255.0f, (uint8_t)(color_base >> 8) / 255.0f, (uint8_t)(color_base >> 16) / 255.0f, (uint8_t)(color_base >> 24) / 255.0f}} };
m_color_middle = { {{(uint8_t)color_middle / 255.0f, (uint8_t)(color_middle >> 8) / 255.0f, (uint8_t)(color_middle >> 16) / 255.0f, (uint8_t)(color_middle >> 24) / 255.0f}} };
m_color_crest = { {{(uint8_t)color_crest / 255.0f, (uint8_t)(color_crest >> 8) / 255.0f, (uint8_t)(color_crest >> 16) / 255.0f, (uint8_t)(color_crest >> 24) / 255.0f}} };

if(m_fft_size < 128)
Expand Down Expand Up @@ -573,6 +590,8 @@ void WAVSource::get_settings(obs_data_t *settings)
m_render_mode = RenderMode::GRADIENT;
else if(p_equ(rendermode, P_PULSE))
m_render_mode = RenderMode::PULSE;
else if(p_equ(rendermode, P_RANGE))
m_render_mode = RenderMode::RANGE;
else
m_render_mode = RenderMode::SOLID;

Expand Down Expand Up @@ -1590,8 +1609,12 @@ gs_technique_t *WAVSource::get_shader_tech()
const char *techname;
if(m_radial)
techname = (m_render_mode == RenderMode::GRADIENT) ? "RadialGradient" : "Radial";
else if(m_render_mode == RenderMode::GRADIENT)
techname = "Gradient";
else if(m_render_mode == RenderMode::RANGE)
techname = "Range";
else
techname = (m_render_mode == RenderMode::GRADIENT) ? "Gradient" : "Solid";
techname = "Solid";
return gs_effect_get_technique(m_shader, techname);
}

Expand Down Expand Up @@ -1628,6 +1651,23 @@ void WAVSource::set_shader_vars(float cpos, float miny, float minpos, float chan
auto grad_offset = gs_effect_get_param_by_name(m_shader, "grad_offset");
gs_effect_set_float(grad_offset, channel_offset);
}
else if(m_render_mode == RenderMode::RANGE)
{
auto color_middle = gs_effect_get_param_by_name(m_shader, "color_middle");
gs_effect_set_vec4(color_middle, &m_color_middle);
auto color_crest = gs_effect_get_param_by_name(m_shader, "color_crest");
gs_effect_set_vec4(color_crest, &m_color_crest);
auto grad_height = gs_effect_get_param_by_name(m_shader, "grad_height");
gs_effect_set_float(grad_height, cpos - channel_offset);
auto grad_center = gs_effect_get_param_by_name(m_shader, "grad_center");
gs_effect_set_float(grad_center, cpos);
auto grad_offset = gs_effect_get_param_by_name(m_shader, "grad_offset");
gs_effect_set_float(grad_offset, channel_offset);
auto range_middle = gs_effect_get_param_by_name(m_shader, "range_middle");
gs_effect_set_float(range_middle, (float)(m_range_middle - m_ceiling) / m_floor);
auto range_crest = gs_effect_get_param_by_name(m_shader, "range_crest");
gs_effect_set_float(range_crest, (float)(m_range_crest - m_ceiling) / m_floor);
}
}

if(m_radial)
Expand Down
6 changes: 5 additions & 1 deletion src/source.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,8 @@ enum class RenderMode
LINE,
SOLID,
GRADIENT,
PULSE
PULSE,
RANGE
};

enum class PulseMode
Expand Down Expand Up @@ -165,8 +166,11 @@ class WAVSource
int m_ceiling = 0;
float m_gravity = 0.0f;
float m_grad_ratio = 1.0f;
int m_range_middle = -20;
int m_range_crest = -9;
bool m_fast_peaks = false;
vec4 m_color_base{ {{1.0, 1.0, 1.0, 1.0}} };
vec4 m_color_middle{ {{1.0, 1.0, 1.0, 1.0}} };
vec4 m_color_crest{ {{1.0, 1.0, 1.0, 1.0}} };
float m_slope = 0.0f;
bool m_log_scale = true;
Expand Down

0 comments on commit 9ca0834

Please sign in to comment.