105 lines
2.4 KiB
JavaScript
105 lines
2.4 KiB
JavaScript
|
|
/**
|
||
|
|
* @author Mat Groves http://matgroves.com/ @Doormat23
|
||
|
|
*/
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @class PrimitiveShader
|
||
|
|
* @constructor
|
||
|
|
* @param gl {WebGLContext} the current WebGL drawing context
|
||
|
|
*/
|
||
|
|
PIXI.PrimitiveShader = function(gl)
|
||
|
|
{
|
||
|
|
/**
|
||
|
|
* @property gl
|
||
|
|
* @type WebGLContext
|
||
|
|
*/
|
||
|
|
this.gl = gl;
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @property {any} program - The WebGL program.
|
||
|
|
*/
|
||
|
|
this.program = null;
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @property fragmentSrc
|
||
|
|
* @type Array
|
||
|
|
*/
|
||
|
|
this.fragmentSrc = [
|
||
|
|
'precision mediump float;',
|
||
|
|
'varying vec4 vColor;',
|
||
|
|
|
||
|
|
'void main(void) {',
|
||
|
|
' gl_FragColor = vColor;',
|
||
|
|
'}'
|
||
|
|
];
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @property vertexSrc
|
||
|
|
* @type Array
|
||
|
|
*/
|
||
|
|
this.vertexSrc = [
|
||
|
|
'attribute vec2 aVertexPosition;',
|
||
|
|
'attribute vec4 aColor;',
|
||
|
|
'uniform mat3 translationMatrix;',
|
||
|
|
'uniform vec2 projectionVector;',
|
||
|
|
'uniform vec2 offsetVector;',
|
||
|
|
'uniform float alpha;',
|
||
|
|
'uniform vec3 tint;',
|
||
|
|
'varying vec4 vColor;',
|
||
|
|
|
||
|
|
'void main(void) {',
|
||
|
|
' vec3 v = translationMatrix * vec3(aVertexPosition , 1.0);',
|
||
|
|
' v -= offsetVector.xyx;',
|
||
|
|
' gl_Position = vec4( v.x / projectionVector.x -1.0, v.y / -projectionVector.y + 1.0 , 0.0, 1.0);',
|
||
|
|
' vColor = aColor * vec4(tint * alpha, alpha);',
|
||
|
|
'}'
|
||
|
|
];
|
||
|
|
|
||
|
|
this.init();
|
||
|
|
};
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Initialises the shader
|
||
|
|
* @method init
|
||
|
|
*
|
||
|
|
*/
|
||
|
|
PIXI.PrimitiveShader.prototype.init = function()
|
||
|
|
{
|
||
|
|
|
||
|
|
var gl = this.gl;
|
||
|
|
|
||
|
|
var program = PIXI.compileProgram(gl, this.vertexSrc, this.fragmentSrc);
|
||
|
|
gl.useProgram(program);
|
||
|
|
|
||
|
|
// get and store the uniforms for the shader
|
||
|
|
this.projectionVector = gl.getUniformLocation(program, 'projectionVector');
|
||
|
|
this.offsetVector = gl.getUniformLocation(program, 'offsetVector');
|
||
|
|
this.tintColor = gl.getUniformLocation(program, 'tint');
|
||
|
|
|
||
|
|
|
||
|
|
// get and store the attributes
|
||
|
|
this.aVertexPosition = gl.getAttribLocation(program, 'aVertexPosition');
|
||
|
|
this.colorAttribute = gl.getAttribLocation(program, 'aColor');
|
||
|
|
|
||
|
|
this.attributes = [this.aVertexPosition, this.colorAttribute];
|
||
|
|
|
||
|
|
this.translationMatrix = gl.getUniformLocation(program, 'translationMatrix');
|
||
|
|
this.alpha = gl.getUniformLocation(program, 'alpha');
|
||
|
|
|
||
|
|
this.program = program;
|
||
|
|
};
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Destroys the shader
|
||
|
|
* @method destroy
|
||
|
|
*
|
||
|
|
*/
|
||
|
|
PIXI.PrimitiveShader.prototype.destroy = function()
|
||
|
|
{
|
||
|
|
this.gl.deleteProgram( this.program );
|
||
|
|
this.uniforms = null;
|
||
|
|
this.gl = null;
|
||
|
|
|
||
|
|
this.attribute = null;
|
||
|
|
};
|