diff options
| author | Hunter Kvalevog <hunter@kvog.sh> | 2026-02-03 22:05:09 -0600 |
|---|---|---|
| committer | Hunter Kvalevog <hunter@kvog.sh> | 2026-02-03 22:05:09 -0600 |
| commit | bf18c18430c4cacb8c0fddbef0c2bf1962177dec (patch) | |
| tree | a95f5576680ce7d43c0ddc94ccc4f40c1d42fc75 /shaders/vfog.cc | |
| parent | 440612338695a73509c8bf3b72ef0e0786446cb7 (diff) | |
shaders: Refactor
Diffstat (limited to 'shaders/vfog.cc')
| -rw-r--r-- | shaders/vfog.cc | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/shaders/vfog.cc b/shaders/vfog.cc new file mode 100644 index 0000000..116d433 --- /dev/null +++ b/shaders/vfog.cc @@ -0,0 +1,35 @@ +#include "shaders.hh" + +static int u_mode = 0; +static int u_steps = 8; +static float u_sigma = 4.0f; + +static void ui() +{ + const char* modes[] = { "basic", "vfade", "waves" }; + if (ImGui::BeginCombo("mode", modes[u_mode])) { + for (int i = 0; i < (int)COUNTOF(modes); ++i) { + if (ImGui::Selectable(modes[i], i == u_mode)) { + u_mode = i; + } + } + ImGui::EndCombo(); + } + ImGui::SliderInt("steps", &u_steps, 1, 8); + ImGui::InputFloat("sigma", &u_sigma); +} + +static void uniforms(Shader* shader) +{ + GL(glUniform1i(shader->get_required_uniform("u_mode"), u_mode)); + GL(glUniform1i(shader->get_required_uniform("u_steps"), u_steps)); + GL(glUniform1f(shader->get_required_uniform("u_sigma"), u_sigma)); +} + +static Shader vfog = { + .path = "vfog.glsl", + .model = MODEL_CUBE, + .ui_fn = ui, + .uf_fn = uniforms, +}; +ENABLE_SHADER(vfog); |