Просмотр исходного кода

add initSliders, to get and set the uniforms

Lucas Stadler лет назад: 10
Родитель
Сommit
99f57682dc
1 измененных файлов с 36 добавлено и 4 удалено
  1. 36 4
      glsl/sliders.js

+ 36 - 4
glsl/sliders.js

47
    
47
    
48
  var names = [".x", ".y", ".z", ".y"];
48
  var names = [".x", ".y", ".z", ".y"];
49
  ranges.forEach((range, i) => {
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
  return containerEl;
55
  return containerEl;
57
  sliders.forEach((slider) => {
59
  sliders.forEach((slider) => {
58
    switch (slider.type) {
60
    switch (slider.type) {
59
      case "float":
61
      case "float":
60
        parent.appendChild(makeSlider(slider.name, slider.range));
62
        parent.appendChild(makeSlider(slider.name, slider.range, slider.onChange));
61
        break;
63
        break;
62
      case "vec2":
64
      case "vec2":
63
      case "vec3":
65
      case "vec3":
64
        parent.appendChild(makeMultiSlider(slider.name, slider.range));
66
        parent.appendChild(makeMultiSlider(slider.name, slider.range, slider.onChange));
65
        break;
67
        break;
66
      default:
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
}