API Docs for: 1.0.0
Show:

File: src\render\shaders\TextureAtlasShader.ts

/**
* 
* @module Kiwi
* @submodule Shaders
* @namespace Kiwi.Shaders
*/

module Kiwi.Shaders {

    /**
    * Shader wrapper for rendering Texture Atlases
    * @class TextureAtlasShader
    * @extends Kiwi.Shaders.ShaderPair
    * @constructor
    * @namespace Kiwi.Shaders
    * @return {Kiwi.Shaders.TextureAtlasShader}
    */
    export class TextureAtlasShader extends ShaderPair {

        constructor() {
            super();
        }

        /**
        * Initialise the shaderPair
        * @method init
        * @param gl {WebGLRenderingCotext}
        * @return {WebGLBuffer}
        * @public
        */
        public init(gl: WebGLRenderingContext) {
            super.init(gl);

            this.attributes.aXYUV = gl.getAttribLocation(this.shaderProgram, "aXYUV");
            this.attributes.aAlpha = gl.getAttribLocation(this.shaderProgram, "aAlpha");
            
            this.initUniforms(gl);
        }

        /**
        * Shader attribute references
        * @property attributes
        * @type object
        * @public
        */
        public attributes: any = {
            aXYUV: null,
            aAlpha: null,
        };

        /**
        * Shader uniform descriptors
        * @property uniforms
        * @type object
        * @public
        */
        public uniforms: any = {
            uCamMatrix: {
                type: "mat3",
            },
            uResolution: {
                type: "2fv",
            },
            uTextureSize: {
                type: "2fv",
            },
            uSampler: {
                type: "1i",
            }
        }


        /**
        * The source for the GLSL fragment shader
        * @property fragSource
        * @type Array
        * @public
        */
        public fragSource: Array<string> = [
            "precision mediump float;",
            "varying vec2 vTextureCoord;",
            "varying float vAlpha;",
            "uniform sampler2D uSampler;",
            "void main(void) {",
            "gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));",
            "gl_FragColor.a *= vAlpha;",
            "}"
        ];


        /**
        * The source for the GLSL vertex shader
        * @property vertSource
        * @type Array
        * @public
        */
        public vertSource: Array<string> = [
            "attribute vec4 aXYUV;",
            "attribute float aAlpha;",
            "uniform mat3 uCamMatrix;",
            "uniform vec2 uResolution;",
            "uniform vec2 uTextureSize;",
            "varying vec2 vTextureCoord;",
            "varying float vAlpha;",
            "void main(void) {",
            "   vec2 pos = (uCamMatrix * vec3(aXYUV.xy,1)).xy; ",
            "   gl_Position = vec4((pos / uResolution * 2.0 - 1.0) * vec2(1, -1), 0, 1);",
            "   vTextureCoord = aXYUV.zw / uTextureSize;",
            "   vAlpha = aAlpha;",
            "}"
        ];


    }

}