@@ -87,15 +87,53 @@ Elm.Native.Graphics.WebGL.make = function(elm) {
88 function drawModel(glModel) {
88 function drawModel(glModel) {
89 var program = glModel.program;
89 var program = glModel.program;
90− var uniforms = glModel.uniforms;
90+ gl.useProgram(program);
92− for (var uName in uniforms) {
92+ var activeUniforms = gl.getProgramParameter(program, gl.ACTIVE_UNIFORMS);
93+ for (var i = 0; i < activeUniforms; i += 1) {
94+ var uniform = gl.getActiveUniform(program, i);
93− var uLoc = gl.getUniformLocation(program, uName);
95+ var uniformLocation = gl.getUniformLocation(program, uniform.name);
94− var active = gl.getActiveUniform(program, uName);
96+ switch (uniform.type) {
98+ gl.uniformMatrix4fv(uniformLocation, false, glModel.uniforms[uniform.name]);
101+ console.log("Unsupported uniform type: " + uniform.type);
97−
106+ var numIndices = List.length(glModel.attributes);
107+ var indices = List.toArray(List.range(0,numIndices));
108+ var indexBuffer = gl.createBuffer();
109+ gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, indexBuffer);
110+ gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, new Uint16Array(indices), gl.STATIC_DRAW);
112+ var activeAttributes = gl.getProgramParameter(program, gl.ACTIVE_ATTRIBUTES);
113+ for (var i = 0; i < activeAttributes; i += 1) {
114+ var attribute = gl.getActiveAttrib(program, i);
115+ var attribLocation = gl.getAttribLocation(program, attribute.name);
116+ gl.enableVertexAttribArray(attribLocation);
117+ switch (attribute.type) {
120+ List.each(function(v3){
98− var attributes = glModel.attributes;
124+ }, glModel.attributes[attribute.name]);
125+ var attributeBuffer = gl.createBuffer();
126+ gl.bindBuffer(gl.ARRAY_BUFFER, attributeBuffer);
127+ gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(data), gl.STATIC_DRAW);
128+ gl.vertexAttribPointer(attribLocation, 3, gl.FLOAT, false, 0, 0);
131+ console.log("Unsupported attribute type: " + attribute.type);
136+ gl.drawElements(gl.TRIANGLES, numIndices, gl.UNSIGNED_SHORT, 0);