# HG changeset patch # User John Tsiombikas # Date 1308197600 -10800 # Node ID 9eb4c37ce415744c885da1e317fbf048d33a841c # Parent c52b17d412f398c2c369dc7089cfb3b6c274b13a - added set_uniform functions in glass.js - added normal matrix uniform in sanegl.js diff -r c52b17d412f3 -r 9eb4c37ce415 glass.js --- a/glass.js Wed Jun 15 20:45:50 2011 +0300 +++ b/glass.js Thu Jun 16 07:13:20 2011 +0300 @@ -23,6 +23,8 @@ var glass_start_time = 0; var glass_cb_disp = null; +var glass_cb_mouse = null; +var glass_cb_motion = null; function glass_init(canv_id, cons_id) { @@ -55,6 +57,21 @@ function glass_start() { + if(glass_cb_motion) { + canvas.onmousemove = function(ev) { + glass_cb_motion(ev.clientX, ev.clientY); + } + } + + if(glass_cb_mouse) { + canvas.onmousedown = function(ev) { + glass_cb_mouse(ev.button, true, ev.clientX, ev.clientY); + } + canvas.onmouseup = function(ev) { + glass_cb_mouse(ev.button, false, ev.clientX, ev.clientY); + } + } + glass_start_time = get_msec(); glass_redraw(); } @@ -64,6 +81,17 @@ glass_cb_disp = func; } +function glass_mouse_func(func) +{ + glass_cb_mouse = func; +} + +function glass_motion_func(func) +{ + glass_cb_motion = func; +} + + function glass_redraw() { var msec = get_msec(); @@ -123,17 +151,20 @@ xhr.send(null); var src = xhr.responseText; - return create_shader(src, type); + return create_shader(src, type, name); } -function create_shader(src, type) +function create_shader(src, type, name) { var sdr = gl.createShader(type); gl.shaderSource(sdr, src); gl.compileShader(sdr); if(!gl.getShaderParameter(sdr, gl.COMPILE_STATUS)) { - logmsg("failed to compile shader: " + src + ": " + gl.getShaderInfoLog(sdr)); + if(!name) { + name = ""; + } + logmsg("failed to compile shader: " + name + ": " + gl.getShaderInfoLog(sdr)); return null; } return sdr; @@ -166,6 +197,51 @@ return prog; } +function set_uniform1f(p, name, v) +{ + var loc = gl.getUniformLocation(p, name); + if(loc != -1) { + gl.useProgram(p); + gl.uniform1f(loc, v); + } +} + +function set_uniform2f(p, name, x, y) +{ + var loc = gl.getUniformLocation(p, name); + if(loc != -1) { + gl.useProgram(p); + gl.uniform2f(loc, x, y); + } +} + +function set_uniform3f(p, name, x, y, z) +{ + var loc = gl.getUniformLocation(p, name); + if(loc != -1) { + gl.useProgram(p); + gl.uniform3f(loc, x, y, z); + } +} + +function set_uniform4f(p, name, x, y, z, w) +{ + var loc = gl.getUniformLocation(p, name); + if(loc != -1) { + gl.useProgram(p); + gl.uniform4f(loc, x, y, z, w); + } +} + +function set_uniform_matrix4fv(p, name, mat) +{ + var loc = gl.getUniformLocation(p, name); + if(loc != -1) { + gl.useProgram(p); + gl.uniformMatrix4fv(loc, false, mat); + } +} + function logmsg(str) { if(console) { diff -r c52b17d412f3 -r 9eb4c37ce415 sanegl.js --- a/sanegl.js Wed Jun 15 20:45:50 2011 +0300 +++ b/sanegl.js Thu Jun 16 07:13:20 2011 +0300 @@ -164,17 +164,26 @@ var loc = gl.getUniformLocation(prog, "mvmat"); if(loc != -1) { - gl.uniformMatrix4fv(loc, gl.FALSE, gl_mat[GL_MODELVIEW][mvtop]); + gl.uniformMatrix4fv(loc, false, gl_mat[GL_MODELVIEW][mvtop]); } loc = gl.getUniformLocation(prog, "projmat"); if(loc != -1) { - gl.uniformMatrix4fv(loc, gl.FALSE, gl_mat[GL_PROJECTION][ptop]); + gl.uniformMatrix4fv(loc, false, gl_mat[GL_PROJECTION][ptop]); } loc = gl.getUniformLocation(prog, "texmat"); if(loc != -1) { - gl.uniformMatrix4fv(loc, gl.FALSE, gl_mat[GL_TEXTURE][ttop]); + gl.uniformMatrix4fv(loc, false, gl_mat[GL_TEXTURE][ttop]); + } + + loc = gl.getUniformLocation(prog, "normmat"); + if(loc != -1) { + var normmat = new Float32Array(16); + m4_copy(normmat, gl_mat[GL_MODELVIEW][mvtop]); + normmat[3] = normmat[7] = normmat[11] = normmat[12] = normmat[13] = normmat[14] = 0.0; + normmat[15] = 1.0; + gl.uniformMatrix4fv(loc, false, normmat); } }