summaryrefslogtreecommitdiff
path: root/shaders/vfog.cc
blob: 116d4334d4f78261122d1f1fd14f634e23caf5b6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
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);