var utils = require('../../../utils'),
Shader = require('./Shader');
/**
* @class
* @namespace PIXI
* @param shaderManager {WebGLShaderManager} The webgl shader manager this shader works for.
* @param [vertexSrc] {string} The source of the vertex shader.
* @param [fragmentSrc] {string} The source of the fragment shader.
* @param customUniforms {object} Custom uniforms to use to augment the built-in ones.
* @param [fragmentSrc] {string} The source of the fragment shader.
*/
function DefaultShader(shaderManager, vertexSrc, fragmentSrc, customUniforms, customAttributes)
{
var uniforms = {
uSampler: { type: 'sampler2D', value: 0 },
projectionMatrix: { type: 'mat3', value: new Float32Array(1, 0, 0,
0, 1, 0,
0, 0, 1) },
};
if(customUniforms)
{
for (var u in customUniforms)
{
uniforms[u] = customUniforms[u];
}
}
var attributes = {
aVertexPosition: 0,
aTextureCoord: 0,
aColor: 0
};
if(customAttributes)
{
for (var a in attributes)
{
attributes[a] = customAttributes[a];
}
}
/**
* The vertex shader.
* @member {Array}
*/
vertexSrc = vertexSrc || [
'attribute vec2 aVertexPosition;',
'attribute vec2 aTextureCoord;',
'attribute vec4 aColor;',
'uniform mat3 projectionMatrix;',
'varying vec2 vTextureCoord;',
'varying vec4 vColor;',
'const vec2 center = vec2(-1.0, 1.0);',
'void main(void){',
' gl_Position = vec4((projectionMatrix * vec3(aVertexPosition, 1.0)).xy, 0.0, 1.0);',
' vTextureCoord = aTextureCoord;',
' vColor = vec4(aColor.rgb * aColor.a, aColor.a);',
'}'
].join('\n');
/**
* The fragment shader.
* @member {Array}
*/
fragmentSrc = fragmentSrc || [
'precision lowp float;',
'varying vec2 vTextureCoord;',
'varying vec4 vColor;',
'uniform sampler2D uSampler;',
'void main(void){',
' gl_FragColor = texture2D(uSampler, vTextureCoord) * vColor ;',
'}'
].join('\n');
Shader.call(this, shaderManager, vertexSrc, fragmentSrc, uniforms, attributes);
}
// constructor
DefaultShader.prototype = Object.create(Shader.prototype);
DefaultShader.prototype.constructor = DefaultShader;
module.exports = DefaultShader;