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;