aboutsummaryrefslogtreecommitdiff
path: root/src/library_gl.js
diff options
context:
space:
mode:
authorEhsan Akhgari <ehsan.akhgari@gmail.com>2012-02-11 19:19:13 -0500
committerEhsan Akhgari <ehsan.akhgari@gmail.com>2012-03-28 10:58:38 -0700
commit88e15c2423ec2f9723b28006d705ed7d31a33fe6 (patch)
treed73bae4154759066c4a705b044bc7bfcc5f718f4 /src/library_gl.js
parent69638af60262c11b88802d6b8c1e53433d1baf45 (diff)
Implement the remaining shader and program functions
Diffstat (limited to 'src/library_gl.js')
-rw-r--r--src/library_gl.js78
1 files changed, 71 insertions, 7 deletions
diff --git a/src/library_gl.js b/src/library_gl.js
index e5fe1c49..a41a4ba9 100644
--- a/src/library_gl.js
+++ b/src/library_gl.js
@@ -531,6 +531,27 @@ var LibraryGL = {
return GL.hashtable("shader").add(shader);
},
+ glDeleteShader: function(shader) {
+ Module.ctx.deleteShader(GL.hashtable("shader").get(shader));
+ },
+
+ glDetachShader: function(program, shader) {
+ Module.ctx.detachShader(GL.hashtable("program").get(program),
+ GL.hashtable("shader").get(shader));
+ },
+
+ glGetAttachedShaders: function(program, maxCount, count, shaders) {
+ var result = Module.ctx.getAttachedShaders(GL.hashtable("program").get(program));
+ var len = result.length;
+ if (len > maxCount) {
+ len = maxCount;
+ }
+ {{{ makeSetValue('count', '0', 'len', 'i32') }}};
+ for (var i = 0; i < len; ++i) {
+ {{{ makeSetValue('shaders', 'i', 'GL.hashtable("shader").get(result[i])', 'i32') }}};
+ }
+ },
+
glShaderSource_deps: ['$GL'],
glShaderSource: function(shader, count, string, length) {
var source = "";
@@ -554,6 +575,15 @@ var LibraryGL = {
Module.ctx.shaderSource(GL.hashtable("shader").get(shader), source);
},
+ glGetShaderSource: function(shader, bufsize, length, source) {
+ var result = Module.ctx.getShaderSource(GL.hashtable("shader").get(shader));
+ result.slice(0, bufsize - 1);
+ writeStringToMemory(result, source);
+ if (length) {
+ {{{ makeSetValue('length', '0', 'result.length', 'i32') }}};
+ }
+ },
+
glCompileShader_deps: ['$GL'],
glCompileShader: function(shader) {
Module.ctx.compileShader(GL.hashtable("shader").get(shader));
@@ -565,18 +595,27 @@ var LibraryGL = {
log.slice(0, maxLength - 1);
writeStringToMemory(log, infoLog);
if (length) {
- {{{ makeSetValue('length', 'i', 'log.length', 'i32') }}}
+ {{{ makeSetValue('length', '0', 'log.length', 'i32') }}}
}
},
-
+
glGetShaderiv_deps: ['$GL'],
- glGetShaderiv : function(shader, pname, p) {
- {{{ makeSetValue('p', '0', 'Module.ctx.getShaderParameter(GL.hashtable("shader").get(shader),pname)', 'i32') }}};
+ glGetShaderiv : function(shader, pname, p) {
+ {{{ makeSetValue('p', '0', 'Module.ctx.getShaderParameter(GL.hashtable("shader").get(shader), pname)', 'i32') }}};
},
glGetProgramiv_deps: ['$GL'],
- glGetProgramiv : function(program, pname, p) {
- {{{ makeSetValue('p', '0', 'Module.ctx.getProgramParameter(GL.hashtable("program").get(program),pname)', 'i32') }}};
+ glGetProgramiv : function(program, pname, p) {
+ {{{ makeSetValue('p', '0', 'Module.ctx.getProgramParameter(GL.hashtable("program").get(program), pname)', 'i32') }}};
+ },
+
+ glIsShader_deps: ['$GL'],
+ glIsShader: function(shader) {
+ var fb = GL.hashtable("shader").get(shader);
+ if (typeof(fb) == 'undefined') {
+ return false;
+ }
+ return Module.ctx.isShader(fb);
},
glCreateProgram_deps: ['$GL'],
@@ -584,12 +623,23 @@ var LibraryGL = {
return GL.hashtable("program").add(Module.ctx.createProgram());
},
+ glDeleteProgram: function(program) {
+ Module.ctx.deleteProgram(GL.hashtable("program").get(program));
+ },
+
glAttachShader_deps: ['$GL'],
glAttachShader: function(program, shader) {
Module.ctx.attachShader(GL.hashtable("program").get(program),
GL.hashtable("shader").get(shader));
},
+ glGetShaderPrecisionFormat: function(shaderType, precisionType, range, precision) {
+ var result = Module.ctx.getShaderPrecisionFormat(shaderType, precisionType);
+ {{{ makeSetValue('range', '0', 'result.rangeMin', 'i32') }}};
+ {{{ makeSetValue('range', '1', 'result.rangeMax', 'i32') }}};
+ {{{ makeSetValue('precision', '0', 'result.precision', 'i32') }}};
+ },
+
glLinkProgram_deps: ['$GL'],
glLinkProgram: function(program) {
Module.ctx.linkProgram(GL.hashtable("program").get(program));
@@ -605,7 +655,7 @@ var LibraryGL = {
log = log.substr(0, maxLength - 1);
writeStringToMemory(log, infoLog);
if (length) {
- {{{ makeSetValue('length', 'i', 'log.length', 'i32') }}}
+ {{{ makeSetValue('length', '0', 'log.length', 'i32') }}}
}
},
@@ -614,6 +664,20 @@ var LibraryGL = {
Module.ctx.useProgram(GL.hashtable("program").get(program));
},
+ glValidateProgram_deps: ['$Gl'],
+ glValidateProgram: function(program) {
+ Module.ctx.validateProgram(GL.hashtable("program").get(program));
+ },
+
+ glIsProgram_deps: ['$GL'],
+ glIsProgram: function(program) {
+ var fb = GL.hashtable("program").get(program);
+ if (typeof(fb) == 'undefined') {
+ return false;
+ }
+ return Module.ctx.isProgram(fb);
+ },
+
glBindAttribLocation_deps: ['$GL'],
glBindAttribLocation: function(program, index, name) {
name = Pointer_stringify(name);