Source: gfx/core/particles/webgl/ParticleShader.js

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;