const TextureShader = require('../../renderers/webgl/shaders/TextureShader');
/**
* @class
* @extends TextureShader
* @param shaderManager {ShaderManager} The webgl shader manager this shader works for.
*/
class ParticleShader extends TextureShader {
constructor(shaderManager) {
super(shaderManager,
// vertex shader
[
'attribute vec2 aVertexPosition;',
'attribute vec2 aTextureCoord;',
'attribute float aColor;',
'attribute vec2 aPositionCoord;',
'attribute vec2 aScale;',
'attribute float aRotation;',
'uniform mat3 projectionMatrix;',
'varying vec2 vTextureCoord;',
'varying float vColor;',
'void main(void){',
' vec2 v = aVertexPosition;',
' v.x = (aVertexPosition.x) * cos(aRotation) - (aVertexPosition.y) * sin(aRotation);',
' v.y = (aVertexPosition.x) * sin(aRotation) + (aVertexPosition.y) * cos(aRotation);',
' v = v + aPositionCoord;',
' gl_Position = vec4((projectionMatrix * vec3(v, 1.0)).xy, 0.0, 1.0);',
' vTextureCoord = aTextureCoord;',
' vColor = aColor;',
'}',
].join('\n'),
// hello
[
'precision lowp float;',
'varying vec2 vTextureCoord;',
'varying float vColor;',
'uniform sampler2D uSampler;',
'uniform float uAlpha;',
'void main(void){',
' vec4 color = texture2D(uSampler, vTextureCoord) * vColor * uAlpha;',
' if (color.a == 0.0) discard;',
' gl_FragColor = color;',
'}',
].join('\n'),
// custom uniforms
{
uAlpha: { type: '1f', value: 1 },
},
// custom attributes
{
aPositionCoord: 0,
// aScale: 0,
aRotation: 0,
}
);
// TEMP HACK
}
}
module.exports = ParticleShader;