summaryrefslogtreecommitdiff
path: root/shaders/vfog.cc
diff options
context:
space:
mode:
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);