aboutsummaryrefslogtreecommitdiff
path: root/src/library_gl.js
diff options
context:
space:
mode:
authorAlon Zakai <alonzakai@gmail.com>2013-02-22 10:23:29 -0800
committerAlon Zakai <alonzakai@gmail.com>2013-02-22 10:23:29 -0800
commit6bee6bb0630a1622c5a28146f044ee6333ec8d03 (patch)
tree989bfe0c7d746c9fc074a2ce7e86cb375af647e2 /src/library_gl.js
parent557ef71e2f492878ef5f7f0ea71421babc40b4bb (diff)
save client states in vertex array objects
Diffstat (limited to 'src/library_gl.js')
-rw-r--r--src/library_gl.js12
1 files changed, 12 insertions, 0 deletions
diff --git a/src/library_gl.js b/src/library_gl.js
index 2c3be61c..8a3dc8a8 100644
--- a/src/library_gl.js
+++ b/src/library_gl.js
@@ -1469,6 +1469,9 @@ var LibraryGL = {
case 'glIsFramebuffer': ret = {{{ Functions.getIndex('_glIsFramebuffer', true) }}}; break;
case 'glCheckFramebufferStatus': ret = {{{ Functions.getIndex('_glCheckFramebufferStatus', true) }}}; break;
case 'glRenderbufferStorage': ret = {{{ Functions.getIndex('_glRenderbufferStorage', true) }}}; break;
+ case 'glGenVertexArrays': ret = {{{ Functions.getIndex('_glGenVertexArrays', true) }}}; break;
+ case 'glDeleteVertexArrays': ret = {{{ Functions.getIndex('_glDeleteVertexArrays', true) }}}; break;
+ case 'glBindVertexArray': ret = {{{ Functions.getIndex('_glBindVertexArray', true) }}}; break;
}
if (!ret) Module.printErr('WARNING: getProcAddress failed for ' + name);
return ret;
@@ -2469,9 +2472,11 @@ var LibraryGL = {
if (disable && GL.immediate.enabledClientAttributes[attrib]) {
GL.immediate.enabledClientAttributes[attrib] = false;
GL.immediate.totalEnabledClientAttributes--;
+ if (GLEmulation.currentVao) delete GLEmulation.currentVao.enabledClientStates[cap];
} else if (!disable && !GL.immediate.enabledClientAttributes[attrib]) {
GL.immediate.enabledClientAttributes[attrib] = true;
GL.immediate.totalEnabledClientAttributes++;
+ if (GLEmulation.currentVao) GLEmulation.currentVao.enabledClientStates[cap] = 1;
}
GL.immediate.modifiedClientAttributes = true;
},
@@ -2509,6 +2514,7 @@ var LibraryGL = {
elementArrayBuffer: 0,
enabledVertexAttribArrays: {},
vertexAttribPointers: {},
+ enabledClientStates: {},
};
{{{ makeSetValue('vaos', 'i*4', 'id', 'i32') }}};
}
@@ -2533,6 +2539,9 @@ var LibraryGL = {
for (var vaa in info.vertexAttribPointers) {
_glVertexAttribPointer.apply(null, info.vertexAttribPointers[vaa]);
}
+ for (var attrib in info.enabledClientStates) {
+ _glEnableClientState(attrib|0);
+ }
GLEmulation.currentVao = info; // set currentVao last, so the commands we ran here were not recorded
} else if (GLEmulation.currentVao) {
// undo vao
@@ -2543,6 +2552,9 @@ var LibraryGL = {
for (var vaa in info.enabledVertexAttribArrays) {
_glDisableVertexAttribArray(vaa);
}
+ for (var attrib in info.enabledClientStates) {
+ _glDisableClientState(attrib|0);
+ }
}
},