CodePen

HTML

            
              <!-- Physics shaders -->

<script id="physics-vert" type="x-vertex-shader">

    attribute vec2 aVertexPosition;

    void main() {
        gl_Position = vec4( aVertexPosition, 1, 1 );
    }

</script>

<script id="physics-frag" type="x-fragment-shader">
    
    precision mediump float;

    const vec3 TARGET = vec3( 0, 0, 0.01 );

    uniform sampler2D uParticleData;
    uniform vec2 uViewport;

    // Retrieves the texel at a given offset from the current pixel
    vec4 texelAtOffet( vec2 offset ) {
        return texture2D( uParticleData, ( gl_FragCoord.xy + offset ) / uViewport );
    }

    void main() {

        // Determine which data slot we're at (position or velocity)
        int slot = int( mod( gl_FragCoord.x, 2.0 ) );

        if ( slot == 0 ) { // position

            // Retrieve data at current and adjacent slots
            vec4 dataA = texelAtOffet( vec2( 0, 0 ) );
            vec4 dataB = texelAtOffet( vec2( 1, 0 ) );

            // Extract position and velocity data
            vec3 pos = dataA.xyz;
            vec3 vel = dataB.xyz;

            float phase = dataA.w;

            if ( phase > 0.0 ) {

                // Integrate velocity
                pos += vel * 0.005;

                // Kill the particle if it's near the target
                if ( length( TARGET - pos ) < 0.035 ) phase = 0.0;
                else phase += 0.1;

            } else {

                pos = vec3(-1);
            }

            // Write out the new position data
            gl_FragColor = vec4( pos, phase );

        } else if ( slot == 1 ) { // velocity

            // Retrieve data at current and previous slots
            vec4 dataA = texelAtOffet( vec2( -1, 0 ) );
            vec4 dataB = texelAtOffet( vec2( 0, 0 ) );

            // Extract position and velocity data
            vec3 pos = dataA.xyz;
            vec3 vel = dataB.xyz;

            float phase = dataA.w;

            if ( phase > 0.0 ) {

                // Compute a normalised vector pointing towards target
                vec3 delta = normalize( TARGET - pos );

                // Add a force along the delta vector
                vel += delta * 0.05;

                // Add a drag force
                vel *= 0.991;

            } else {

                vel = vec3(0);
            }

            // Write out the velocity data
            gl_FragColor = vec4( vel, 1.0 );
        }
    }

</script>

<!-- Render shaders -->

<script id="render-vert" type="x-vertex-shader">

    attribute vec2 aParticleUV;

    uniform sampler2D uParticleData;

    void main() {

        vec4 particle = texture2D( uParticleData, aParticleUV );
        float perspective = 1.0 + particle.z * 5.5;
        float phase = cos( particle.w ) * max( 0.5, tan( particle.z * 8.05 ) );

        gl_Position = vec4( particle.xyz, perspective );
        gl_PointSize = min( 64.0, ( 1.0 / perspective ) * ( 0.5 + phase ) );
    }

</script>

<script id="render-frag" type="x-fragment-shader">

    uniform sampler2D uParticleTexture;

    void main() {
        gl_FragColor = texture2D( uParticleTexture, gl_PointCoord );
    }

</script>

<!-- Debug shaders -->

<script id="debug-vert" type="x-vertex-shader">

    attribute vec2 aVertexPosition;
    varying vec2 vTexCoord;

    void main() {

        // Map from xy (-1 -> 1) to uv (0 -> 1)
        vTexCoord = ( aVertexPosition + 1.0 ) / 2.0;
        gl_Position = vec4( aVertexPosition, 1, 1 );
    }

</script>

<script id="debug-frag" type="x-fragment-shader">

    precision mediump float;

    uniform sampler2D uParticleData;
    varying vec2 vTexCoord;

    void main() {
        gl_FragColor = vec4( texture2D( uParticleData, vTexCoord ).xyz, 0.8 );
    }

</script>

<div class='info'>
    <hgroup class='about'>
        <h1>1,048,576 Particles</h1>
        <h2>GPU Physics with WebGL</h2>
    </hgroup>
    <nav class='more'>
        <a target="_blank" href='http://soulwire.co.uk/'>soulwire</a>
        <a target="_blank" href='https://github.com/soulwire/WebGL-GPU-Particles'>View on GitHub</a>
    </nav>
</div>
<div class="cb toggle-fbo">
    <input class="toggle" type="checkbox"/>
    <span class="button">Show FBO</span>
</div>

<div id="nogl">
    <h1>Aww, No WebGL :(</h1>
    <p>This experiment requires WebGL to run. Please enable it, or come back and visit with a <a href="http://caniuse.com/webgl" target="_blank">compatible browser</a>.</p>
</div>

<img id="particle-texture" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAQAAAAEACAYAAABccqhmAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyRpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoTWFjaW50b3NoKSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo3M0FFRTA3OUQ1NDAxMUUyQUY5MURFMTJFRkNGRDhFOSIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDo3M0FFRTA3QUQ1NDAxMUUyQUY5MURFMTJFRkNGRDhFOSI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjczQUVFMDc3RDU0MDExRTJBRjkxREUxMkVGQ0ZEOEU5IiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjczQUVFMDc4RDU0MDExRTJBRjkxREUxMkVGQ0ZEOEU5Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+jzi7rgAAw+RJREFUeNrsvWmP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">

            
          
!

CSS

            
              @import url( http://fonts.googleapis.com/css?family=Quantico );

html, body {
    font-family: 'Quantico', sans-serif;
    background: #1c3149;
    background: -moz-radial-gradient(center, ellipse cover,  #1c3149 0%, #0d121c 80%);
    background: -webkit-gradient(radial, center center, 0px, center center, 100%, color-stop(0%,#1c3149), color-stop(80%,#0d121c));
    background: -webkit-radial-gradient(center, ellipse cover,  #1c3149 0%,#0d121c 80%);
    background: -o-radial-gradient(center, ellipse cover,  #1c3149 0%,#0d121c 80%);background: -ms-radial-gradient(center, ellipse cover,  #1c3149 0%,#0d121c 80%);
    background: radial-gradient(ellipse at center,  #1c3149 0%,#0d121c 80%);
    overflow: hidden;
    margin:0;
}

#particle-texture {
    display: none;
}

/* GUI */

.cb {

    position: absolute;
    cursor: pointer;
    right: 20px;
    top: 20px;
}

.cb .button {

    -webkit-transition: all 200ms ease-out;
    -moz-transition: all 200ms ease-out;
    -o-transition: all 200ms ease-out;
    transition: all 200ms ease-out;
    text-transform: uppercase;
    font-family: Arial, "Helvetica Neue", Helvetica, sans-serif;
    border-radius: 2px;
    text-align: center;
    line-height: 25px;
    font-size: 11px;
    display: block;
    opacity: 0.8;
    height: 25px;
    width: 80px;
    color: #fff;
}

.cb .button:hover {
    opacity: 1.0;
}

.cb .toggle {

    position: absolute;
    opacity: 0.0;
    z-index: 1;
    display: block;
    cursor: pointer;
    height: 100%;
    width: 100%;
}

.cb .toggle ~ .button {
    background: #000;
}

.cb .toggle:checked ~ .button {
    background: #2ecc71;
}

/* No GL */

#nogl {
    
    -webkit-box-sizing: border-box;
    -moz-box-sizing: border-box;
    -ms-box-sizing: border-box;
    -o-box-sizing: border-box;
    box-sizing: border-box;

    border-radius: 3px;
    line-height: 1.45;
    text-align: justify;
    box-shadow: 0px 0px 0px 4px rgba(255,0,41,0.2);
    background: #FF0029;
    font-size: 13px;
    position: absolute;
    padding: 10px 20px;
    display: none;
    margin: -70px 0 0 -130px;
    height: 140px;
    width: 260px;
    color: #fff;
    left: 50%;
    top: 50%;
}

#nogl h1 {

    font-weight: 300;
    font-size: 18px;
    margin: 12px 0;
}

#nogl p {

    color: rgba(255,255,255,0.7);
}

#nogl a {

    color: #fff;
}

/* Info */

@-webkit-keyframes show-info {
    0% { -webkit-transform: rotateY(120deg); }
    100% { -webkit-transform: rotateY(0deg); }
}

@-moz-keyframes show-info {
    0% { -moz-transform: rotateY(120deg); }
    100% { -moz-transform: rotateY(0deg); }
}

@-ms-keyframes show-info {
    0% { -ms-transform: rotateY(120deg); }
    100% { -ms-transform: rotateY(0deg); }
}

@-o-keyframes show-info {
    0% { -o-transform: rotateY(120deg); }
    100% { -o-transform: rotateY(0deg); }
}

@keyframes show-info {
    0% { transform: rotateY(120deg); }
    100% { transform: rotateY(0deg); }
}

.info {

    -webkit-transition: all 180ms ease-out;
    -moz-transition: all 180ms ease-out;
    -ms-transition: all 180ms ease-out;
    -o-transition: all 180ms ease-out;
    transition: all 180ms ease-out;

    -webkit-transform-style: preserve-3d;
    -moz-transform-style: preserve-3d;
    -ms-transform-style: preserve-3d;
    -o-transform-style: preserve-3d;
    transform-style: preserve-3d;

    -webkit-transform: perspective(800);
    -moz-transform: perspective(800);
    -ms-transform: perspective(800);
    -o-transform: perspective(800);
    transform: perspective(800);

    position: absolute;
    font-size: 12px;
    opacity: 0.8;
    color: #fff;
    width: 240px;
    left: 0px;
    top: 20px;
}

.info:hover {

    box-shadow: 0 0 0 4px rgba(255,255,255,0.05);
    opacity: 1.0;
}

.info h1,
.info h2,
.info h3 {

    line-height: 1;
    margin: 5px 0;
}

.info a {

    -webkit-transition: all 200ms ease-out;
    -moz-transition: all 200ms ease-out;
    -ms-transition: all 200ms ease-out;
    -o-transition: all 200ms ease-out;
    transition: all 200ms ease-out;

    border-bottom: 1px dotted rgba(255,255,255,0.4);
    text-decoration: none;
    opacity: 0.6;
    color: #fff;
}

.info a:hover {

    opacity: 0.99;
}

.info .about, .info .more {

    -webkit-transform-origin: 0% 50%;
    -moz-transform-origin: 0% 50%;
    -ms-transform-origin: 0% 50%;
    -o-transform-origin: 0% 50%;
    transform-origin: 0% 50%;

    -webkit-transform: rotateY(120deg);
    -moz-transform: rotateY(120deg);
    -ms-transform: rotateY(120deg);
    -o-transform: rotateY(120deg);
    transform: rotateY(120deg);

    margin-bottom: 1px;
    background: rgba(0,0,0,0.8);
    padding: 12px 15px 12px 20px;
}

.info .about {

    -webkit-animation: show-info 500ms cubic-bezier(0.230, 1.000, 0.320, 1.000) 600ms 1 normal forwards;
    -moz-animation: show-info 500ms cubic-bezier(0.230, 1.000, 0.320, 1.000) 600ms 1 normal forwards;
    -ms-animation: show-info 500ms cubic-bezier(0.230, 1.000, 0.320, 1.000) 600ms 1 normal forwards;
    -o-animation: show-info 500ms cubic-bezier(0.230, 1.000, 0.320, 1.000) 600ms 1 normal forwards;
    animation: show-info 500ms cubic-bezier(0.230, 1.000, 0.320, 1.000) 600ms 1 normal forwards;

    padding-bottom: 15px;
}

.info .about a {
    
    opacity: 0.9;
}

.info .about h1 {

    letter-spacing: -1px;
    font-weight: 300;
    font-size: 19px;
    opacity: 0.95;
}

.info .about h2 {

    font-weight: 300;
    font-size: 13px;
    opacity: 0.8;
}

.info .about h3 {

    text-transform: uppercase;
    margin-top: 10px;
    font-size: 11px;
}

.info .about h3:before {

    margin-right: 2px;
    font-size: 14px;
    content: '\203A';
}

.info .more {

    -webkit-animation: show-info 500ms cubic-bezier(0.230, 1.000, 0.320, 1.000) 500ms 1 normal forwards;
    -moz-animation: show-info 500ms cubic-bezier(0.230, 1.000, 0.320, 1.000) 500ms 1 normal forwards;
    -ms-animation: show-info 500ms cubic-bezier(0.230, 1.000, 0.320, 1.000) 500ms 1 normal forwards;
    -o-animation: show-info 500ms cubic-bezier(0.230, 1.000, 0.320, 1.000) 500ms 1 normal forwards;
    animation: show-info 500ms cubic-bezier(0.230, 1.000, 0.320, 1.000) 500ms 1 normal forwards;

    padding: 5px 15px 10px 20px;
}

.info .more a {
    
    text-transform: uppercase;
    margin-right: 10px;
    font-size: 10px;
}
            
          
!
? ?
? ?
Must be a valid URL.
+ add another resource
via CSS Lint

JS

            
              
// MIT License
// @see https://github.com/soulwire/WebGL-GPU-Particles

/*
------------------------------------------------------------

Config

------------------------------------------------------------
*/

// Number of particles
var PARTICLE_COUNT = Math.pow( 1024, 2 );

// Particle count must be power of 2
var PARTICLE_COUNT_SQRT = Math.sqrt( PARTICLE_COUNT );

// How many texture slots each particle needs for it's data
var PARTICLE_DATA_SLOTS = 2;

// The required size of the FBO containing the particle data
var PARTICLE_TEXTURE_WIDTH = PARTICLE_COUNT_SQRT * PARTICLE_DATA_SLOTS;
var PARTICLE_TEXTURE_HEIGHT = PARTICLE_COUNT_SQRT;

// How many particles can be emitted at a given time
var PARTICLE_EMIT_RATE = 1000;

/*
------------------------------------------------------------

Variables

------------------------------------------------------------
*/

// Stats instance
var stats;

// Programs
var physicsProgram;
var renderProgram;
var debugProgram;

// Buffers and textures
var particleUVDataBuffer;
var particleDataTexture;
var particleFramebuffer;
var viewportQuadBuffer;
var particleData;

// Shaders
var shaders = {
    physics_vert: getShader( 'physics-vert' ),
    physics_frag: getShader( 'physics-frag' ),
    render_vert: getShader( 'render-vert' ),
    render_frag: getShader( 'render-frag' ),
    debug_vert: getShader( 'debug-vert' ),
    debug_frag: getShader( 'debug-frag' )
};

var debugToggle = document.querySelector( '.toggle-fbo .toggle' );

// Sketch instance (augmented WebGL context)
var gl = Sketch.create({
    type: Sketch.WEBGL,
    autostart: false
});

if ( !gl ) {
    nogl = document.getElementById( 'nogl' );
    nogl.style.display = 'block';
}

/*
------------------------------------------------------------

Helper methods

------------------------------------------------------------
*/

// Retrieves shader source from a script element in the DOM
function getShader( id ) {

    return document.getElementById( id ).textContent;
}

// Creates and compiles a shader from source
function createShader( source, type ) {

    var shader = gl.createShader( type );

    gl.shaderSource( shader, source );
    gl.compileShader( shader );

    if ( !gl.getShaderParameter( shader, gl.COMPILE_STATUS ) )
        throw gl.getShaderInfoLog( shader );

    return shader;
}

// Creates a shader program and creates / links shaders
function createProgram( vertexSource, fragmentSource ) {

    var vs = createShader( vertexSource, gl.VERTEX_SHADER );
    var fs = createShader( fragmentSource, gl.FRAGMENT_SHADER );

    var program = gl.createProgram();

    gl.attachShader( program, vs );
    gl.attachShader( program, fs );
    gl.linkProgram( program );

    if ( !gl.getProgramParameter( program, gl.LINK_STATUS ) )
        throw gl.getProgramInfoLog( program );

    return program;
}

// Sets `count` particles to be alive, positions them at the emission `origin` and gives them
// an initial random velocity
function emitParticles( count, origin, velocities ) {

    velocities = velocities || { x:0.0, y:0.0, z:0.0 };

    // Bind the particle data texture since we'll be updating it
    gl.activeTexture( gl.TEXTURE0 + particleDataTexture.unit );
    gl.bindTexture( gl.TEXTURE_2D, particleDataTexture );

    // Determine the x and y coordinates in the particle data texture to start writing to
    var x = ~~( ( gl.particleIndex * PARTICLE_DATA_SLOTS ) % PARTICLE_TEXTURE_WIDTH );
    var y = ~~( gl.particleIndex / PARTICLE_TEXTURE_HEIGHT );

    // An array defining the chunks of texture to be updated
    var chunks = [{
        x: x,
        y: y,
        size: count * PARTICLE_DATA_SLOTS
    }];

    // Recursively splits chunks until they will all fit into the particle data texture
    function split( chunk ) {

        var boundary = chunk.x + chunk.size;

        // If the chunk will exceed the texture size, it must be split
        if ( boundary > PARTICLE_TEXTURE_WIDTH ) {

            // How many slots fall outside the texture dimensions
            var delta = boundary - PARTICLE_TEXTURE_WIDTH;

            // Reduce the current chunk size to fit
            chunk.size -= delta;

            // Create a new chunk from the orphaned data
            chunk = {
                x: 0,
                y: ( chunk.y + 1 ) % PARTICLE_TEXTURE_HEIGHT,
                size: delta
            };

            // Store the new chunk
            chunks.push( chunk );

            // Continue splitting chunks
            split( chunk );
        }
    }

    // Start splitting chunks until we can fit them all into the texture
    split( chunks[0] );

    // Now that we have a set of chunks that fit, start updating the texture data
    var i, j, n, m, chunk, data, force = 1.0;

    for ( i = 0, n = chunks.length; i < n; i++ ) {

        chunk = chunks[i];
        data = [];

        for ( j = 0, m = chunk.size; j < m; j++ ) {

            data.push(

                // Move the particle to the emission origin
                origin.x,
                origin.y,
                origin.z,

                // Set the phase above 0, switching it on for use
                random( 10 ),

                // Populate the velocity slot with an initial random force
                velocities.x + force * random( -1.0, 1.0 ),
                velocities.y + force * random( -1.0, 1.0 ),
                velocities.z + force * random( -1.0, 1.0 ),

                // Empty data slot
                0
            );
        }

        // Now we modify the pixels of the particle data texture inside the chunk boundaries
        gl.texSubImage2D(
            // target, detail level, x, y, width, height
            gl.TEXTURE_2D, 0, chunk.x, chunk.y, chunk.size, 1,
            // data format, data type, pixels
            gl.RGBA, gl.FLOAT, new Float32Array( data )
        );
    }

    // Update the particle index
    gl.particleIndex += count;
    gl.particleIndex %= PARTICLE_COUNT;
}

/*
------------------------------------------------------------

Demo

------------------------------------------------------------
*/

gl.setup = function() {

    // Add Stats.js so we can monitor the FPS
    stats = new Stats();
    stats.domElement.style.position = 'absolute';
    stats.domElement.style.right = '20px';
    stats.domElement.style.top = '50px';
    document.body.appendChild( stats.domElement );

    // Set persistant states
    gl.clearColor( 0.0, 0.0, 0.0, 0.0 );

    // Store some extra data we'll need
    gl.particleIndex = 0;

    // Enable extensions - this won't work without floating point textures!
    if ( !gl.getExtension( 'OES_texture_float' ) ) alert( 'Float textures not supported' );

    // Create shader programs
    physicsProgram = createProgram( shaders.physics_vert, shaders.physics_frag );
    renderProgram = createProgram( shaders.render_vert, shaders.render_frag );
    debugProgram = createProgram( shaders.debug_vert, shaders.debug_frag );

    // Store physics program attribute and uniform locations
    physicsProgram.aVertexPositionLoc = gl.getAttribLocation( physicsProgram, 'aVertexPosition' );
    physicsProgram.uParticleDataLoc = gl.getUniformLocation( physicsProgram, 'uParticleData' );
    physicsProgram.uViewportLoc = gl.getUniformLocation( physicsProgram, 'uViewport' );

    // Store render program attribute and uniform locations
    renderProgram.uParticleTextureLoc = gl.getUniformLocation( renderProgram, 'uParticleTexture' );
    renderProgram.uParticleDataLoc = gl.getUniformLocation( renderProgram, 'uParticleData' );
    renderProgram.aParticleUVLoc = gl.getAttribLocation( renderProgram, 'aParticleUV' );

    // Store debug program attribute and uniform locations
    debugProgram.aVertexPositionLoc = gl.getAttribLocation( debugProgram, 'aVertexPosition' );
    debugProgram.uParticleDataLoc = gl.getUniformLocation( debugProgram, 'uParticleData' );

    // Enable array attribute slots in programs
    gl.enableVertexAttribArray( physicsProgram.aVertexPositionLoc );
    gl.enableVertexAttribArray( renderProgram.aParticleUVLoc );
    gl.enableVertexAttribArray( debugProgram.aVertexPositionLoc );

    // Setup the initial particle data (4 components per particle slot, all zeros)
    particleData = new Float32Array( 4 * PARTICLE_COUNT * PARTICLE_DATA_SLOTS );

    // Create a texture to hold the particle data
    particleDataTexture = gl.createTexture();
    particleDataTexture.unit = 0;

    // Activate the correct texture unit and bind the texture to it
    gl.activeTexture( gl.TEXTURE0 + particleDataTexture.unit );
    gl.bindTexture( gl.TEXTURE_2D, particleDataTexture );

    // Fill the texture with the initial particle data
    gl.texImage2D(
        // target, level, internal format, width, height 
        gl.TEXTURE_2D, 0, gl.RGBA, PARTICLE_TEXTURE_WIDTH, PARTICLE_TEXTURE_HEIGHT,
        // border, data format, data type, pixels
        0, gl.RGBA, gl.FLOAT, particleData
    );

    // Disable bilinear filtering when minifying / magnifying texture
    gl.texParameteri( gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST );
    gl.texParameteri( gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST );

    // Clamp the texture to the edge (don't repeat)
    gl.texParameteri( gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE );
    gl.texParameteri( gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE );

    // Create a framebuffer for the physics simulations to render updated particle data to and 
    // populate it with the initial particle data stored inside `particleDataTexture`
    particleFramebuffer = gl.createFramebuffer();
    gl.bindFramebuffer( gl.FRAMEBUFFER, particleFramebuffer );
    gl.framebufferTexture2D( gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, particleDataTexture, 0 );

    // Create UV coordinates for each particle (0 -> 1). This will tell the physics shader where
    // to find each particle's data inside the particle texture
    var particleUVData = new Float32Array( PARTICLE_COUNT * 2 );
    var interval = 1.0 / PARTICLE_COUNT_SQRT;

    for ( var i = 0, u = 0, v = 1; i < PARTICLE_COUNT; i++, u = i * 2, v = u + 1 ) {
        particleUVData[ u ] = interval * ~~( i % PARTICLE_COUNT_SQRT ); // u
        particleUVData[ v ] = interval * ~~( i / PARTICLE_COUNT_SQRT ); // v
    }
    // Buffer in the particle UV data for the render program
    particleUVDataBuffer = gl.createBuffer();
    gl.bindBuffer( gl.ARRAY_BUFFER, particleUVDataBuffer );
    gl.bufferData( gl.ARRAY_BUFFER, particleUVData, gl.STATIC_DRAW );
    gl.enableVertexAttribArray( renderProgram.aParticleUVLoc );

    // Create geometry for a fullscreen clipspace quad
    var viewportQuadVertices = new Float32Array([
        -1.0, -1.0, // 2----3
         1.0, -1.0, // | \  |
        -1.0,  1.0, // |  \ |
         1.0,  1.0  // 0----1
    ]);

    // Buffer in the geometry, used to fill FBOs at the full size of the viewport
    viewportQuadBuffer = gl.createBuffer();
    gl.bindBuffer( gl.ARRAY_BUFFER, viewportQuadBuffer );
    gl.bufferData( gl.ARRAY_BUFFER, viewportQuadVertices, gl.STATIC_DRAW );

    // Create a texture for the particle image asset
    var particleTexture = gl.createTexture();
    particleTexture.unit = 1;

    // Load the particle asset into the texture
    var particleTextureImage = document.getElementById( 'particle-texture' );
    
    // Activate the correct texture unit and bind the texture to it
    gl.activeTexture( gl.TEXTURE0 + particleTexture.unit );
    gl.bindTexture( gl.TEXTURE_2D, particleTexture );
    gl.texParameteri( gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR_MIPMAP_NEAREST );
    gl.texParameteri( gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR );
    gl.texParameteri( gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE );
    gl.texParameteri( gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE );
    gl.texImage2D( gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, particleTextureImage );
    gl.generateMipmap( gl.TEXTURE_2D );

    // Set physics program uniform values
    gl.useProgram( physicsProgram );
    gl.uniform1i( physicsProgram.uParticleDataLoc, 0 );
    gl.uniform2f( physicsProgram.uViewportLoc, PARTICLE_TEXTURE_WIDTH, PARTICLE_TEXTURE_HEIGHT );

    // Set render program uniform values
    gl.useProgram( renderProgram );
    gl.uniform1i( renderProgram.uParticleDataLoc, particleDataTexture.unit );
    gl.uniform1i( renderProgram.uParticleTextureLoc, particleTexture.unit );

    // Set debug program uniform values
    gl.useProgram( debugProgram );
    gl.uniform1i( debugProgram.uParticleDataLoc, 0 );
    // Kick it off!
    gl.start();
};

gl.draw = function() {

    // Spit out some initial particles
    if ( gl.millis < 3000 ) {
        emitParticles( 800, {
            x: -1.0 + sin( gl.millis * 0.001 ) * 2.0,
            y: -0.2 + cos( gl.millis * 0.004 ) * 0.5,
            z: sin( gl.millis * 0.015 ) * -0.05
        });
    }

    stats.begin();

    // 1. Physics step

    // Set the viewport to the size of the particle data texture since we're rendering to that
    gl.viewport( 0, 0, PARTICLE_TEXTURE_WIDTH, PARTICLE_TEXTURE_HEIGHT );

    // Prepare the physics program to execute per fragment of the particle data texture
    gl.useProgram( physicsProgram );
    gl.bindBuffer( gl.ARRAY_BUFFER, viewportQuadBuffer );
    gl.vertexAttribPointer( physicsProgram.aVertexPositionLoc, 2, gl.FLOAT, gl.FALSE, 0, 0 );

    // Tell WebGL to use the particle FBO, not the front buffer for (offscreen) rendering
    gl.bindFramebuffer( gl.FRAMEBUFFER, particleFramebuffer );
    gl.drawArrays( gl.TRIANGLE_STRIP, 0, 4 );

    // Unbind the FBO, WebGL will now use the default buffer for rendering
    gl.bindFramebuffer( gl.FRAMEBUFFER, null );

    // 2. Render step

    // Clear the front buffer (if we had called clear when the particle FBO was bound, it
    // would have nixed the particle position and velocity data)
    gl.clear( gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT );

    // Set the viewport size to the full canvas
    gl.viewport( 0, 0, gl.drawingBufferWidth, gl.drawingBufferHeight );

    // For each particle, pull out the position and render it as a point to the screen
    gl.useProgram( renderProgram );
    gl.bindBuffer( gl.ARRAY_BUFFER, particleUVDataBuffer );
    gl.vertexAttribPointer( renderProgram.aParticleUVLoc, 2, gl.FLOAT, gl.FALSE, 0, 0 );

    // Draw with additive blending
    gl.enable( gl.BLEND );
    gl.blendFunc( gl.SRC_ALPHA, gl.ONE );
    gl.drawArrays( gl.POINTS, 0, PARTICLE_COUNT );

    // 3. Debug step

    if ( debugToggle.checked ) {

        gl.viewport( 20, 20, 600, 300 );
        gl.useProgram( debugProgram );
        gl.bindBuffer( gl.ARRAY_BUFFER, viewportQuadBuffer );
        gl.vertexAttribPointer( debugProgram.aVertexPositionLoc, 2, gl.FLOAT, gl.FALSE, 0, 0 );

        // Draw with interpolative blending
        gl.blendFunc( gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA );
        gl.drawArrays( gl.TRIANGLE_STRIP, 0, 4 );
    }

    gl.disable( gl.BLEND );

    stats.end();
};

gl.mousemove = function() {

    if ( gl.running && !gl.lastEmit || gl.millis - gl.lastEmit > 16 ) {

        gl.lastEmit = gl.millis;

        var i, n, x, y, touch, limit = PARTICLE_EMIT_RATE / gl.touches.length;

        for ( i = 0, n = gl.touches.length; i < n; i++ ) {
touch = gl.touches[i];

            // Convert mouse screen coordinates into clipspace coordinates
            x = map( touch.x, 0, gl.width, -1, 1 );
            y = map( touch.y, 0, gl.height, 1, -1 );

            // Emit some particles!
            emitParticles( limit, {
                x: x,
                y: y,
                z: 0.0
            });}
    }
};
            
          
!
Must be a valid URL.
+ add another resource
via JS Hint
Loading ..................