aboutsummaryrefslogtreecommitdiff
path: root/src/library_gl.js
diff options
context:
space:
mode:
authorAlon Zakai <alonzakai@gmail.com>2012-04-17 13:38:48 -0700
committerAlon Zakai <alonzakai@gmail.com>2012-04-17 13:38:48 -0700
commit0243e2136d216270752cd8766d372cd62d421db8 (patch)
tree74f9a7af0252184cac77588d61dda9388bffa067 /src/library_gl.js
parent99da1340487738c286fbc38f55dbc23aa9c3233a (diff)
fix glsl rewriting
Diffstat (limited to 'src/library_gl.js')
-rw-r--r--src/library_gl.js19
1 files changed, 11 insertions, 8 deletions
diff --git a/src/library_gl.js b/src/library_gl.js
index 97d760d3..ce098aa9 100644
--- a/src/library_gl.js
+++ b/src/library_gl.js
@@ -919,12 +919,13 @@ var LibraryGL = {
.replace(/gl_ModelViewMatrixTranspose\[2\]/g, 'vec3(u_modelView[0][0], u_modelView[1][0], u_modelView[2][0])'); // XXX extremely inefficient
}
for (var i = 0; i <= 3; i++) {
- if (source.indexOf('gl_TexCoord[' + i + ']') >= 0) {
- // XXX To handle both regular texture mapping and cube mapping, we use vec3 for tex coordinates.
+ // XXX To handle both regular texture mapping and cube mapping, we use vec3 for tex coordinates.
+ var old = source;
+ source = source.replace(new RegExp('gl_TexCoord\\[' + i + '\\]', 'g'), 'v_texCoord' + i)
+ .replace(new RegExp('gl_MultiTexCoord' + i, 'g'), 'a_texCoord' + i);
+ if (source != old) {
source = 'attribute vec3 a_texCoord' + i + '; \n\
- varying vec3 v_texCoord' + i + '; \n' +
- source.replace(new RegExp('gl_TexCoord\\[' + i + '\\]', 'g'), 'v_texCoord' + i)
- .replace(new RegExp('gl_MultiTexCoord' + i, 'g'), 'a_texCoord' + i);
+ varying vec3 v_texCoord' + i + '; \n' + source;
}
}
if (source.indexOf('gl_Color') >= 0) {
@@ -938,14 +939,16 @@ var LibraryGL = {
}
} else { // Fragment shader
for (var i = 0; i <= 3; i++) {
- if (source.indexOf('gl_TexCoord[' + i + ']') >= 0) {
- source = 'varying vec3 v_texCoord' + i + '; \n' +
- source.replace(new RegExp('gl_TexCoord\\[' + i + '\\]', 'g'), 'v_texCoord' + i);
+ var old = 0;
+ source = source.replace(new RegExp('gl_TexCoord\\[' + i + '\\]', 'g'), 'v_texCoord' + i);
+ if (source != old) {
+ source = 'varying vec3 v_texCoord' + i + '; \n' + source;
}
}
if (source.indexOf('gl_Color') >= 0) {
source = 'varying vec4 v_color; \n' + source.replace(/gl_Color/g, 'v_color');
}
+ source = source.replace(/gl_Fog.color/g, 'vec4(0.0)'); // XXX TODO
source = 'precision mediump float;\n' + source;
}
GL.shaderSources[shader] = source;