var Shader = require('./Shader'); /** * @class * @memberof PIXI * @extends PIXI.Shader * @param shaderManager {ShaderManager} 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 TextureShader(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 customAttributes) { attributes[a] = customAttributes[a]; } } /** * The vertex shader. * @member {Array} */ vertexSrc = vertexSrc || TextureShader.defaultVertexSrc; /** * The fragment shader. * @member {Array} */ fragmentSrc = fragmentSrc || TextureShader.defaultFragmentSrc; Shader.call(this, shaderManager, vertexSrc, fragmentSrc, uniforms, attributes); } // constructor TextureShader.prototype = Object.create(Shader.prototype); TextureShader.prototype.constructor = TextureShader; module.exports = TextureShader; TextureShader.defaultVertexSrc = [ 'precision lowp float;', 'attribute vec2 aVertexPosition;', 'attribute vec2 aTextureCoord;', 'attribute vec4 aColor;', 'uniform mat3 projectionMatrix;', 'varying vec2 vTextureCoord;', 'varying vec4 vColor;', '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'); TextureShader.defaultFragmentSrc = [ 'precision lowp float;', 'varying vec2 vTextureCoord;', 'varying vec4 vColor;', 'uniform sampler2D uSampler;', 'void main(void){', ' gl_FragColor = texture2D(uSampler, vTextureCoord) * vColor ;', '}' ].join('\n');