aboutsummaryrefslogtreecommitdiff
path: root/src/library_gl.js
diff options
context:
space:
mode:
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);
},