aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlon Zakai <alonzakai@gmail.com>2012-04-19 18:14:48 -0700
committerAlon Zakai <alonzakai@gmail.com>2012-04-19 18:14:48 -0700
commit04753136fa88a1a046f3420b650a6e3f4d731db8 (patch)
tree210db1494e2e46a5527ec6834d92050d6c5d4009
parent872f6a4fb13a4be20b27d6588c758504f697504e (diff)
misc emulation workarounds
-rw-r--r--src/library_gl.js21
1 files changed, 20 insertions, 1 deletions
diff --git a/src/library_gl.js b/src/library_gl.js
index 786365fd..59782b2c 100644
--- a/src/library_gl.js
+++ b/src/library_gl.js
@@ -874,18 +874,21 @@ var LibraryGL = {
init: function() {
// Add some emulation workarounds
Module.printErr('WARNING: using emscripten GL emulation. This is a collection of limited workarounds, do not expect it to work');
+
_glEnable = function(cap) {
if (cap == 0x0DE1) return; // GL_TEXTURE_2D
if (cap == 0x0B20) return; // GL_LINE_SMOOTH
if (cap == 0x0B60) return; // GL_FOG
Module.ctx.enable(cap);
};
+
_glDisable = function(cap) {
if (cap == 0x0DE1) return; // GL_TEXTURE_2D
if (cap == 0x0B20) return; // GL_LINE_SMOOTH
if (cap == 0x0B60) return; // GL_FOG
Module.ctx.disable(cap);
};
+
var glGetIntegerv = _glGetIntegerv;
_glGetIntegerv = function(pname, params) {
switch (pname) {
@@ -909,6 +912,7 @@ var LibraryGL = {
}
glGetIntegerv(pname, params);
};
+
// Do some automatic rewriting to work around GLSL differences. Note that this must be done in
// tandem with the rest of the program, by itself it cannot suffice.
// Note that we need to remember shader types for this rewriting, saving sources makes it easier to debug.
@@ -921,6 +925,7 @@ var LibraryGL = {
GL.shaderTypes[id] = shaderType;
return id;
};
+
var glShaderSource = _glShaderSource;
_glShaderSource = function(shader, count, string, length) {
var source = GL.getSource(shader, count, string, length);
@@ -972,6 +977,7 @@ var LibraryGL = {
GL.shaderSources[shader] = source;
Module.ctx.shaderSource(GL.shaders[shader], source);
};
+
var glCompileShader = _glCompileShader;
_glCompileShader = function(shader) {
Module.ctx.compileShader(GL.shaders[shader]);
@@ -983,6 +989,17 @@ var LibraryGL = {
throw 'Shader compilation halt';
}
};
+
+ var glGetFloatv = _glGetFloatv;
+ _glGetFloatv = function(pname, params) {
+ if (pname == 0x0BA6) { // GL_MODELVIEW_MATRIX
+ HEAPF32.set(GL.immediate.matrix['m'], params >> 2);
+ } else if (pname == 0x0BA7) { // GL_PROJECTION_MATRIX
+ HEAPF32.set(GL.immediate.matrix['p'], params >> 2);
+ } else {
+ glGetFloatv(pname, params);
+ }
+ };
},
procReplacements: {
@@ -1063,7 +1080,7 @@ var LibraryGL = {
$GLImmediate: {
// Vertex and index data
- maxElements: 1024,
+ maxElements: 10240,
vertexData: null, // current vertex data. either tempData (glBegin etc.) or a view into the heap (gl*Pointer)
tempData: null,
indexData: null,
@@ -1382,6 +1399,8 @@ var LibraryGL = {
glColor3fv: function(){}, // TODO
+ glFogf: function(){}, // TODO
+
// ClientState/gl*Pointer
glEnableClientState: function(cap, disable) {