aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlon Zakai <alonzakai@gmail.com>2012-04-20 11:10:25 -0700
committerAlon Zakai <alonzakai@gmail.com>2012-04-20 11:10:25 -0700
commit1033b78f10c8066c9eb84343b48016b93ebe5f1e (patch)
tree27738ed7928ddd47b30dfed23b60f9b6e79b9976
parentabd9d7207f1481b384672ba4be821cd7a8d56fcd (diff)
refactoring for multiple client textures
-rw-r--r--src/library_gl.js64
1 files changed, 43 insertions, 21 deletions
diff --git a/src/library_gl.js b/src/library_gl.js
index 92548f8d..57d6a452 100644
--- a/src/library_gl.js
+++ b/src/library_gl.js
@@ -1114,24 +1114,37 @@ var LibraryGL = {
},
// Clientside attributes
- TEXTURE: 0,
- VERTEX: 1,
- NORMAL: 2,
- COLOR: 3,
- NUM_ATTRIBUTES: 4,
+ VERTEX: 0,
+ NORMAL: 1,
+ COLOR: 2,
+ TEXTURE0: 3,
+ TEXTURE1: 4,
+ TEXTURE2: 5,
+ TEXTURE3: 6,
+ TEXTURE4: 7,
+ TEXTURE5: 8,
+ TEXTURE6: 9,
+ NUM_ATTRIBUTES: 10,
ATTRIBUTE_BY_NAME: {
- 'T': 0,
- 'V': 1,
- 'N': 2,
- 'C': 3
+ 'V': 0,
+ 'N': 1,
+ 'C': 2,
+ 'T0': 3,
+ 'T1': 4,
+ 'T2': 5,
+ 'T3': 6,
+ 'T4': 7,
+ 'T5': 8,
+ 'T6': 9
},
totalEnabledClientAttributes: 0,
enabledClientAttributes: [0, 0],
clientAttributes: [null, null],
+ clientActiveTexture: 0,
- setClientAttribute: function(which, name, size, type, stride, pointer) {
- this.clientAttributes[which] = {
+ setClientAttribute: function(name, size, type, stride, pointer) {
+ this.clientAttributes[GL.immediate.ATTRIBUTE_BY_NAME[name]] = {
size: size, type: type, stride: stride, pointer: pointer, name: name + size
};
},
@@ -1148,18 +1161,21 @@ var LibraryGL = {
if (this.renderers[renderer]) return this.renderers[renderer];
// Create renderer
- var vertexSize = 0, positionSize = 0, positionOffset = 0, textureSize = 0, textureOffset = 0;
+ var vertexSize = 0, positionSize = 0, positionOffset = 0, textureSize = 0, textureOffset = 0, which, size;
for (var i = 0; i < renderer.length; i+=2) {
var which = renderer[i];
- var size = parseInt(renderer[i+1]);
if (which == 'V') {
+ size = parseInt(renderer[i+1]);
positionSize = size;
positionOffset = vertexSize;
} else if (which == 'T') {
+ index = parseInt(renderer[i+1])
+ size = parseInt(renderer[i+2]);
+ i++;
textureSize = size;
textureOffset = vertexSize;
} else {
- throw 'Cannot create shader rendederer for ' + renderer;
+ throw 'Cannot create shader rendederer for ' + renderer + ' because of ' + which;
}
vertexSize += size * 4; // XXX assuming float
}
@@ -1261,10 +1277,11 @@ var LibraryGL = {
for (var i = 0; i < GL.immediate.NUM_ATTRIBUTES; i++) {
if (GL.immediate.enabledClientAttributes[i]) attributes.push(GL.immediate.clientAttributes[i]);
}
- attributes.sort(function(x, y) { return x.pointer - y.pointer });
+ attributes.sort(function(x, y) { return !x ? (!y ? 0 : 1) : (!y ? -1 : (x.pointer - y.pointer)) });
start = attributes[0].pointer;
for (var i = 0; i < attributes.length; i++) {
var attribute = attributes[i];
+ if (!attribute) break;
#if ASSERTIONS
assert(attribute.stride);
assert(stride == 0 || stride == attribute.stride); // must all be in the same buffer
@@ -1275,6 +1292,7 @@ var LibraryGL = {
}
for (var i = 0; i < attributes.length; i++) {
var attribute = attributes[i];
+ if (!attribute) break;
attribute.offset = attribute.pointer - start;
#if ASSERTIONS
assert(0 <= attribute.offset && attribute.offset < stride); // must all be in the same buffer
@@ -1376,7 +1394,7 @@ var LibraryGL = {
#endif
GL.immediate.vertexData[GL.immediate.vertexCounter++] = u;
GL.immediate.vertexData[GL.immediate.vertexCounter++] = v;
- GL.immediate.addRendererComponent('T2');
+ GL.immediate.addRendererComponent('T02');
},
glTexCoord2f: 'glTexCoord2i',
@@ -1417,7 +1435,7 @@ var LibraryGL = {
if (!GL.immediate.initted) GL.immediate.init();
switch(cap) {
case 0x8078: // GL_TEXTURE_COORD_ARRAY
- GL.immediate.enabledClientAttributes[GL.immediate.TEXTURE] = !disable; break;
+ GL.immediate.enabledClientAttributes[GL.immediate.TEXTURE0] = !disable; break;
case 0x8074: // GL_VERTEX_ARRAY
GL.immediate.enabledClientAttributes[GL.immediate.VERTEX] = !disable; break;
case 0x8075: // GL_NORMAL_ARRAY
@@ -1438,16 +1456,20 @@ var LibraryGL = {
},
glTexCoordPointer: function(size, type, stride, pointer) {
- GL.immediate.setClientAttribute(GL.immediate.TEXTURE, 'T', size, type, stride, pointer);
+ GL.immediate.setClientAttribute('T' + GL.immediate.clientActiveTexture, size, type, stride, pointer);
},
glVertexPointer: function(size, type, stride, pointer) {
- GL.immediate.setClientAttribute(GL.immediate.VERTEX, 'V', size, type, stride, pointer);
+ GL.immediate.setClientAttribute('V', size, type, stride, pointer);
},
glNormalPointer: function(size, type, stride, pointer) {
- GL.immediate.setClientAttribute(GL.immediate.NORMAL, 'N', size, type, stride, pointer);
+ GL.immediate.setClientAttribute('N', size, type, stride, pointer);
},
glColorPointer: function(size, type, stride, pointer) {
- GL.immediate.setClientAttribute(GL.immediate.COLOR, 'C', size, type, stride, pointer);
+ GL.immediate.setClientAttribute('C', size, type, stride, pointer);
+ },
+
+ glClientActiveTexture: function(texture) {
+ GL.immediate.clientActiveTexture = texture;
},
// OpenGL Immediate Mode matrix routines.