aboutsummaryrefslogtreecommitdiff
path: root/src/library_gl.js
diff options
context:
space:
mode:
authorEhsan Akhgari <ehsan.akhgari@gmail.com>2012-01-22 18:37:51 -0500
committerEhsan Akhgari <ehsan.akhgari@gmail.com>2012-01-22 18:37:51 -0500
commit92b660065c16e4089ef9fcf419de0ea444566fff (patch)
tree9bc5bf9b69a463fbad1edf5e30d9cf4ee83fcab6 /src/library_gl.js
parent8ff943af1652f2a0a57977e277dc8e56013a9e7c (diff)
Make it possible to compile shaders
Diffstat (limited to 'src/library_gl.js')
-rw-r--r--src/library_gl.js44
1 files changed, 44 insertions, 0 deletions
diff --git a/src/library_gl.js b/src/library_gl.js
index a5d73774..ef72112e 100644
--- a/src/library_gl.js
+++ b/src/library_gl.js
@@ -257,6 +257,50 @@ var LibraryGL = {
Module.ctx.drawArrays(mode, first, count);
},
+ glCreateShader_deps: ['$GL'],
+ glCreateShader: function(shaderType) {
+ var shader = Module.ctx.createShader(shaderType);
+ return GL.hashtable("shader").add(shader);
+ },
+
+ glShaderSource_deps: ['$GL'],
+ glShaderSource: function(shader, count, string, length) {
+ var source = "";
+ for (var i = 0; i < count; ++i) {
+ var frag = string[i];
+ if (length && IHEAP[length + QUANTUM_SIZE*i]) {
+ var len = IHEAP[length + QUANTUM_SIZE*i];
+ if (len < 0) {
+ frag = Pointer_stringify(IHEAP[string + QUANTUM_SIZE*i]);
+ } else {
+ frag = Pointer_stringify(IHEAP[string + QUANTUM_SIZE*i], len);
+ }
+ } else {
+ frag = Pointer_stringify(IHEAP[string + QUANTUM_SIZE*i]);
+ }
+ if (source.length) {
+ source += "\n";
+ }
+ source += frag;
+ }
+ Module.ctx.shaderSource(GL.hashtable("shader").get(shader), source);
+ },
+
+ glCompileShader_deps: ['$GL'],
+ glCompileShader: function(shader) {
+ Module.ctx.compileShader(GL.hashtable("shader").get(shader));
+ },
+
+ glGetShaderInfoLog_deps: ['$GL'],
+ glGetShaderInfoLog: function(shader, maxLength, length, infoLog) {
+ var log = Module.ctx.getShaderInfoLog(GL.hashtable("shader").get(shader));
+ log.slice(0, maxLength - 1);
+ writeStringToMemory(log, infoLog);
+ if (length) {
+ {{{ makeSetValue('length', 'i', 'log.length', 'i32') }}}
+ }
+ },
+
glClearColor: function(red, green, blue, alpha) {
Module.ctx.clearColor(red, green, blue, alpha);
},