瀏覽代碼

add initSliders, to get and set the uniforms

Lucas Stadler 10 年之前
父節點
當前提交
99f57682dc
共有 1 個文件被更改,包括 36 次插入4 次删除
  1. 36 4
      glsl/sliders.js

+ 36 - 4
glsl/sliders.js

@ -47,7 +47,9 @@ function makeMultiSlider(name, ranges, onChange) {
47 47
    
48 48
  var names = [".x", ".y", ".z", ".y"];
49 49
  ranges.forEach((range, i) => {
50
    containerEl.appendChild(makeSlider(names[i], range));
50
    containerEl.appendChild(makeSlider(names[i], range, function(ev) {
51
      onChange(ev, i);
52
    }));
51 53
  });
52 54
  
53 55
  return containerEl;
@ -57,14 +59,44 @@ function addSliders(parent, sliders) {
57 59
  sliders.forEach((slider) => {
58 60
    switch (slider.type) {
59 61
      case "float":
60
        parent.appendChild(makeSlider(slider.name, slider.range));
62
        parent.appendChild(makeSlider(slider.name, slider.range, slider.onChange));
61 63
        break;
62 64
      case "vec2":
63 65
      case "vec3":
64
        parent.appendChild(makeMultiSlider(slider.name, slider.range));
66
        parent.appendChild(makeMultiSlider(slider.name, slider.range, slider.onChange));
65 67
        break;
66 68
      default:
67
        parent.innerHTML += "unknown slider type " + slider.type;
69
        throw new Error("unknown slider type " + slider.type);
70
    }
71
  });
72
}
73
74
function initSliders(gl, program, sliders) {
75
  return sliders.map(function(slider) {
76
    switch (slider.type) {
77
      case "float":
78
        slider.uniform = gl.uniformLocation(program, slider.name);
79
        
80
        slider.onChange = function(ev) {
81
          gl.uniform1f(slider.uniform, parseFloat(ev.target.value));
82
        }
83
        
84
        break;
85
        
86
      case "vec2":
87
      case "vec3":
88
        slider.values = slider.range.map((r) => r[1]);
89
        slider.uniform = gl.uniformLocation(program, slider.name);
90
        
91
        slider.onChange = function(ev, i) {
92
          slider.values[0] = parseFloat(ev.target.value);
93
          gl.uniform2f(slider.uniform, slider.values[0], slider.values[1]);
94
        }
95
        
96
        break;
97
        
98
      default:
99
        throw new Error("unknown slider type " + slider.type);
68 100
    }
69 101
  });
70 102
}