aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorEhsan Akhgari <ehsan.akhgari@gmail.com>2012-01-21 19:14:39 -0500
committerEhsan Akhgari <ehsan.akhgari@gmail.com>2012-01-21 19:25:00 -0500
commit72c65ebbe62f1b84e0f3a6c0605d19e4b97139f4 (patch)
tree27c4387204fe933f31ac32a8033608a411025c09 /src
parent08036c648cad75c6644ad607a4b21eba2714f64b (diff)
Implement the buffering APIs
Diffstat (limited to 'src')
-rw-r--r--src/library_gl.js32
1 files changed, 32 insertions, 0 deletions
diff --git a/src/library_gl.js b/src/library_gl.js
index 2be881df..3b948bf1 100644
--- a/src/library_gl.js
+++ b/src/library_gl.js
@@ -6,6 +6,8 @@ var LibraryGL = {
$GL: {
textures: {},
textureCounter: 0,
+ buffers: {},
+ bufferCounter: 0,
},
glGetString: function(name_) {
@@ -66,6 +68,36 @@ var LibraryGL = {
Module.ctx.bindTexture(target, GL.textures[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();
+ IHEAP[buffers+QUANTUM_SIZE*i] = id;
+ }
+ },
+
+ 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];
+ }
+ },
+
+ glBufferData: function(target, size, data, usage) {
+ var buf = new ArrayBuffer(size);
+ var dataInBuf = new Uint8Array(buf);
+ for (var i = 0; i < size; ++i) {
+ dataInBuf[i] = IHEAP[data+QUANTUM_SIZE*i];
+ }
+ Module.ctx.bufferData(target, buf, usage);
+ },
+
+ glBindBuffer: function(target, buffer) {
+ Module.ctx.bindBuffer(target, GL.buffers[buffer]);
+ },
+
glClearColor: function(red, green, blue, alpha) {
Module.ctx.clearColor(red, green, blue, alpha);
},