aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEhsan Akhgari <ehsan.akhgari@gmail.com>2012-01-22 17:44:59 -0500
committerEhsan Akhgari <ehsan.akhgari@gmail.com>2012-01-22 17:44:59 -0500
commite434672ab004a527e7b179d43dc5aafc4e085809 (patch)
treef584d1673e73f773fb4089750a5a2a18bd7b2cf9
parent711b3d235da31d06e1f1e9e5dd9693a58112a146 (diff)
Add a hashtable API
-rw-r--r--src/library_gl.js43
1 files changed, 29 insertions, 14 deletions
diff --git a/src/library_gl.js b/src/library_gl.js
index a1d39205..a5d73774 100644
--- a/src/library_gl.js
+++ b/src/library_gl.js
@@ -4,10 +4,27 @@
var LibraryGL = {
$GL: {
- textures: {},
- textureCounter: 0,
- buffers: {},
- bufferCounter: 0,
+ _hashtables: {},
+ hashtable: function(name) {
+ if (!(name in this._hashtables)) {
+ this._hashtables[name] = {
+ table: {},
+ counter: 0,
+ add: function(obj) {
+ var id = this.counter++;
+ this.table[id] = obj;
+ return id;
+ },
+ get: function(id) {
+ return this.table[id];
+ },
+ remove: function(id) {
+ delete this.table[id];
+ }
+ };
+ }
+ return this._hashtables[name];
+ },
},
glGetString: function(name_) {
@@ -36,8 +53,7 @@ var LibraryGL = {
glGenTextures__deps: ['$GL'],
glGenTextures: function(n, textures) {
for (var i = 0; i < n; i++) {
- var id = GL.textureCounter++;
- GL.textures[id] = Module.ctx.createTexture();
+ var id = GL.hashtable("texture").add(Module.ctx.createTexture());
IHEAP[textures+QUANTUM_SIZE*i] = id;
}
},
@@ -45,8 +61,8 @@ var LibraryGL = {
glDeleteTextures: function(n, textures) {
for (var i = 0; i < n; i++) {
var id = IHEAP[textures+QUANTUM_SIZE*i];
- Module.ctx.deleteTexture(GL.textures[id]);
- delete GL.textures[id];
+ Module.ctx.deleteTexture(GL.hashtable("texture").get(id));
+ GL.hashtable("texture").remove(id);
}
},
@@ -65,14 +81,13 @@ var LibraryGL = {
},
glBindTexture: function(target, texture) {
- Module.ctx.bindTexture(target, GL.textures[texture]);
+ Module.ctx.bindTexture(target, GL.hashtable("texture").get(texture));
},
glGenBuffers__deps: ['$GL'],
glGenBuffers: function(n, buffers) {
for (var i = 0; i < n; i++) {
- var id = GL.bufferCounter++;
- GL.buffers[id] = Module.ctx.createBuffer();
+ var id = GL.hashtable("buffer").add(Module.ctx.createBuffer());
IHEAP[buffers+QUANTUM_SIZE*i] = id;
}
},
@@ -80,8 +95,8 @@ var LibraryGL = {
glDeleteBuffers: function(n, buffers) {
for (var i = 0; i < n; i++) {
var id = IHEAP[buffers+QUANTUM_SIZE*i];
- Module.ctx.deleteBuffer(GL.buffers[id]);
- delete GL.buffers[id];
+ Module.ctx.deleteBuffer(GL.hashtable("buffer").get(id));
+ GL.hashtable("buffer").remove(id);
}
},
@@ -187,7 +202,7 @@ var LibraryGL = {
},
glBindBuffer: function(target, buffer) {
- Module.ctx.bindBuffer(target, GL.buffers[buffer]);
+ Module.ctx.bindBuffer(target, GL.hashtable("buffer").get(buffer));
},
glVertexAttrib1f: function(index, v0) {