I see a very strange problem on some OSX machines where, apparently, my WebGL program uses the wrong texture contents for painting.
I have a sprite pack where I buffer together a bunch of sprite quads into one call to call. I also use multiple texturing to further reduce the number of draw calls, drawing sprites for multiple textures in the same callback.
Each vertex has the following data:
float x;
float y;
float u;
float v;
float texture_offset_x;
float texture_offset_y;
float texture_scale_width;
float texture_scale_height;
float t0;
float t1;
float t2;
float t3;
float t4;
float t5;
float width_scale;
float height_scale;
unsigned byte r;
unsigned byte g;
unsigned byte b;
unsigned byte a;
float texture_index;
And the fragment shader combines drawing calls like this:
"#version 100",
"",
"uniform lowp sampler2D sampler0;",
"uniform lowp sampler2D sampler1;",
"uniform lowp sampler2D sampler2;",
"uniform lowp sampler2D sampler3;",
"uniform lowp sampler2D sampler4;",
"uniform lowp sampler2D sampler5;",
"uniform lowp sampler2D sampler6;",
"uniform lowp sampler2D sampler7;",
"",
"varying mediump vec2 vTextureCoord;",
"varying lowp vec4 vTintColor;",
"varying lowp float vTextureIndex;",
"",
"void main(void) {",
" lowp vec4 fragColors[8];",
" fragColors[0] = texture2D(sampler0, vTextureCoord);",
" fragColors[1] = texture2D(sampler1, vTextureCoord);",
" fragColors[2] = texture2D(sampler2, vTextureCoord);",
" fragColors[3] = texture2D(sampler3, vTextureCoord);",
" fragColors[4] = texture2D(sampler4, vTextureCoord);",
" fragColors[5] = texture2D(sampler5, vTextureCoord);",
" fragColors[6] = texture2D(sampler6, vTextureCoord);",
" fragColors[7] = texture2D(sampler7, vTextureCoord);",
"",
" lowp float fragIncluded[8];",
"",
" fragIncluded[0] = float(vTextureIndex <= 0.5);",
" fragIncluded[1] = float(vTextureIndex >= 0.5 && vTextureIndex < 1.5);",
" fragIncluded[2] = float(vTextureIndex >= 1.5 && vTextureIndex < 2.5);",
" fragIncluded[3] = float(vTextureIndex >= 2.5 && vTextureIndex < 3.5);",
" fragIncluded[4] = float(vTextureIndex >= 3.5 && vTextureIndex < 4.5);",
" fragIncluded[5] = float(vTextureIndex >= 4.5 && vTextureIndex < 5.5);",
" fragIncluded[6] = float(vTextureIndex >= 5.5 && vTextureIndex < 6.5);",
" fragIncluded[7] = float(vTextureIndex >= 6.5 && vTextureIndex < 7.5);",
"",
" lowp vec4 fragColor = fragColors[0] * fragIncluded[0] + ",
" fragColors[1] * fragIncluded[1] + ",
" fragColors[2] * fragIncluded[2] + ",
" fragColors[3] * fragIncluded[3] + ",
" fragColors[4] * fragIncluded[4] + ",
" fragColors[5] * fragIncluded[5] + ",
" fragColors[6] * fragIncluded[6] + ",
" fragColors[7] * fragIncluded[7];",
"",
" gl_FragColor = fragColor * vTintColor;",
"}"
. OSX . , MacBooks NVidia, Intel HD 5000. Chrome, Safari Firefox, , WebGL . OSX?
. , . , UI. , WebGL Inspector, , .
, , , , A sampler1, B sampler2 , , A sampler2 B 1.
URL-: https://tinytappers.bigvikinggames.com/
, , , . , , . , OSX.
- ? - , ? , , WebGL, . - - ?