var Shader = require('pixi-gl-core').GLShader;
var fs = require('fs');
function generateMultiTextureShader(gl, maxTextures)
{
var vertexSrc = fs.readFileSync(__dirname + '/texture.vert', 'utf8');
var fragmentSrc = 'precision lowp float;\n\n' + generateSampleSrc(maxTextures) + "\n\n" + fragTemplate
fragmentSrc = fragmentSrc.replace(/\%\%/gi, '16');
var shader = new Shader(gl, vertexSrc, fragmentSrc);
var sampleValues = [];
for (var i = 0; i < maxTextures; i++) {
sampleValues[i] = i;
};
shader.bind();
shader.uniforms.uSamplers = sampleValues;
return shader;
}
function generateSampleSrc(maxTextures)
{
var src = 'vec4 getSampleFromArray(sampler2D textures[%%], int ndx, vec2 uv) {\n\nvec4 color;'
src += '\n';
src += '\n';
for (var i = 0; i < maxTextures; i++)
{
if(i > 0)src += '\nelse ';
if(i < maxTextures-1)src += 'if(ndx == ' + i + ')';
src += '\n{';
src += '\n\tcolor = texture2D(textures['+i+'], uv);';
src += '\n}';
};
src += '\n';
src += '\n';
src += 'return color;';
src += '\n}';
return src;
}
var fragTemplate = [
'varying vec2 vTextureCoord;',
'varying vec4 vColor;',
'varying float vTextureId;',
'uniform sampler2D uSamplers[%%];',
'void main(void){',
'gl_FragColor = getSampleFromArray(uSamplers, int(vTextureId), vTextureCoord) * vColor;',
'}'
].join('\n');
module.exports = generateMultiTextureShader;