@@ -9,13 +9,35 @@ Elm.Native.Graphics.WebGL.make = function(elm) {
9 if (elm.Native.Graphics.WebGL.values) return elm.Native.Graphics.WebGL.values;
9 if (elm.Native.Graphics.WebGL.values) return elm.Native.Graphics.WebGL.values;
11 var newNode = ElmRuntime.use(ElmRuntime.Render.Utils).newElement;
11 var newNode = ElmRuntime.use(ElmRuntime.Render.Utils).newElement;
13− var Signal = Elm.Signal.make(elm);
14 var newElement = Elm.Graphics.Element.make(elm).newElement;
12 var newElement = Elm.Graphics.Element.make(elm).newElement;
14+ var List = Elm.Native.List.make(elm);
15+ var MJS = Elm.Native.MJS.make(elm);
15 var Utils = Elm.Native.Utils.make(elm);
16 var Utils = Elm.Native.Utils.make(elm);
17+ var Signal = Elm.Signal.make(elm);
16 var Tuple2 = Utils.Tuple2;
18 var Tuple2 = Utils.Tuple2;
17− var MJS = Elm.Native.MJS.make(elm);
19+
18− var List = Elm.Native.List.make(elm);
20+ function loadTex(source) {
22+ var response = Signal.constant(elm.Http.values.Waiting);
24+ var img = new Image();
26+ img.onload = function() {
27+ var success = elm.Http.values.Success({img:img});
28+ elm.notify(response.id, success);
31+ img.onerror = function(e) {
32+ var failure = A2(elm.Http.values.Failure,0,"Failed");
33+ elm.notify(response.id, failure);
20 function model(vert, frag, buffer, uniforms) {
42 function model(vert, frag, buffer, uniforms) {
@@ -28,6 +50,21 @@ Elm.Native.Graphics.WebGL.make = function(elm) {
53+ function do_texture (gl, img) {
55+ var tex = gl.createTexture();
56+ console.log("Created texture");
57+ gl.bindTexture(gl.TEXTURE_2D, tex);
58+ gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, true);
59+ gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, img);
60+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);
61+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);
62+ gl.generateMipmap(gl.TEXTURE_2D);
63+ //gl.bindTexture(gl.TEXTURE0, null);
31 function do_compile (gl, src, tipe) {
68 function do_compile (gl, src, tipe) {
33 var shader = gl.createShader(tipe);
70 var shader = gl.createShader(tipe);
@@ -171,6 +208,7 @@ Elm.Native.Graphics.WebGL.make = function(elm) {
171 gl.useProgram(program);
208 gl.useProgram(program);
173 var numUniforms = gl.getProgramParameter(program, gl.ACTIVE_UNIFORMS);
210 var numUniforms = gl.getProgramParameter(program, gl.ACTIVE_UNIFORMS);
211+ var textureCounter = 0;
174 for (var i = 0; i < numUniforms; i += 1) {
212 for (var i = 0; i < numUniforms; i += 1) {
175 var uniform = gl.getActiveUniform(program, i);
213 var uniform = gl.getActiveUniform(program, i);
176 var uniformLocation = gl.getUniformLocation(program, uniform.name);
214 var uniformLocation = gl.getUniformLocation(program, uniform.name);
@@ -187,6 +225,23 @@ Elm.Native.Graphics.WebGL.make = function(elm) {
187 case gl.FLOAT_MAT4:
225 case gl.FLOAT_MAT4:
188 gl.uniformMatrix4fv(uniformLocation, false, m.uniforms[uniform.name]);
226 gl.uniformMatrix4fv(uniformLocation, false, m.uniforms[uniform.name]);
229+ var texture = m.uniforms[uniform.name];
230+ var tex = undefined;
232+ tex = model.cache.textures[texture.id];
234+ texture.id = Utils.guid();
237+ tex = do_texture(gl, texture.img);
239+ var activeName = 'TEXTURE' + textureCounter;
240+ gl.activeTexture(gl[activeName]);
241+ gl.bindTexture(gl.TEXTURE_2D,tex);
242+ gl.uniform1i(uniformLocation, textureCounter);
243+ textureCounter += 1;
191 console.log("Unsupported uniform type: " + uniform.type);
246 console.log("Unsupported uniform type: " + uniform.type);
@@ -296,6 +351,7 @@ Elm.Native.Graphics.WebGL.make = function(elm) {
298 return elm.Native.Graphics.WebGL.values = {
353 return elm.Native.Graphics.WebGL.values = {
299 model:F4(model),
355 model:F4(model),
300 webgl:F2(webgl)
356 webgl:F2(webgl)