summaryrefslogtreecommitdiff
path: root/shaders/vfog.cc
diff options
context:
space:
mode:
authorHunter Kvalevog <hunter@kvog.sh>2026-02-03 22:05:09 -0600
committerHunter Kvalevog <hunter@kvog.sh>2026-02-03 22:05:09 -0600
commitbf18c18430c4cacb8c0fddbef0c2bf1962177dec (patch)
treea95f5576680ce7d43c0ddc94ccc4f40c1d42fc75 /shaders/vfog.cc
parent440612338695a73509c8bf3b72ef0e0786446cb7 (diff)
shaders: Refactor
Diffstat (limited to 'shaders/vfog.cc')
-rw-r--r--shaders/vfog.cc35
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);