# HG changeset patch # User John Tsiombikas # Date 1308363181 -10800 # Node ID 56ae66e3299816161517384a53aa06a94dd787be # Parent 9eb4c37ce415744c885da1e317fbf048d33a841c glass.js: - added set_uniform1i sanegl.js: - GL_QUAD handling was broken - added gluPerspective diff -r 9eb4c37ce415 -r 56ae66e32998 glass.js --- a/glass.js Thu Jun 16 07:13:20 2011 +0300 +++ b/glass.js Sat Jun 18 05:13:01 2011 +0300 @@ -197,6 +197,15 @@ return prog; } +function set_uniform1i(p, name, v) +{ + var loc = gl.getUniformLocation(p, name); + if(loc != -1) { + gl.useProgram(p); + gl.uniform1i(loc, v); + } +} + function set_uniform1f(p, name, v) { var loc = gl.getUniformLocation(p, name); diff -r 9eb4c37ce415 -r 56ae66e32998 sanegl.js --- a/sanegl.js Thu Jun 16 07:13:20 2011 +0300 +++ b/sanegl.js Sat Jun 18 05:13:01 2011 +0300 @@ -31,8 +31,7 @@ [new Float32Array(gl_ident_val)], [new Float32Array(gl_ident_val)]); -/* XXX change after debugging */ -const GL_MAX_VERTS = 32; +const GL_MAX_VERTS = 512; var gl_prim = 0; var gl_vbuf = null, gl_nbuf = null, gl_cbuf = null, gl_tbuf = null; @@ -156,6 +155,12 @@ glMultMatrixf(xform); } +function gluPerspective(vfov, aspect, near, far) +{ + var x = near * Math.tan(vfov / 2.0); + glFrustum(-aspect * x, aspect * x, -x, x, near, far); +} + function gl_apply_xform(prog) { var mvtop = gl_mat[GL_MODELVIEW].length - 1; @@ -383,7 +388,17 @@ } gl_vert_calls++; - if(++gl_nverts >= GL_MAX_VERTS) { + gl_nverts++; + + var buffer_full; + if(gl_prim == GL_QUADS) { + /* leave space for 6 more worst-case and don't allow flushes mid-quad */ + buffer_full = gl_nverts >= GL_MAX_VERTS - 6 && gl_vert_calls % 4 == 0; + } else { + buffer_full = gl_nverts >= GL_MAX_VERTS - gl_prim; + } + + if(buffer_full) { gl_draw_immediate(); glBegin(gl_prim); /* reset everything */ }