aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/library_gl.js78
-rw-r--r--src/preamble.js7
2 files changed, 76 insertions, 9 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);
diff --git a/src/preamble.js b/src/preamble.js
index d56891d0..86a5ce80 100644
--- a/src/preamble.js
+++ b/src/preamble.js
@@ -765,11 +765,14 @@ Module['String_copy'] = String_copy;
// This processes a JS string into a C-line array of numbers, 0-terminated.
// For LLVM-originating strings, see parser.js:parseLLVMString function
-function intArrayFromString(stringy, dontAddNull) {
+function intArrayFromString(stringy, dontAddNull, length /* optional */) {
var ret = [];
var t;
var i = 0;
- while (i < stringy.length) {
+ if (length === undefined) {
+ length = stringy.length;
+ }
+ while (i < length) {
var chr = stringy.charCodeAt(i);
if (chr > 0xFF) {
#if ASSERTIONS