pixel-bloom-shader

by Lingjia Liu

HTML

<canvas id="scene" width="512" height="512"></canvas>

JavaScript

var scene = document.getElementById("scene");
var gl = scene.getContext("webgl");

var createProgram = function (vsh, fsh) {
    var program = gl.createProgram();
    gl.attachShader(program, vsh);
    gl.attachShader(program, fsh);
    gl.linkProgram(program);

    var status = gl.getProgramParameter(program, gl.LINK_STATUS);
    if (!status) {
        var error = gl.getProgramInfoLog(program);
        console.error("Failed to link shader program: " + error);
        gl.deleteProgram(program);
        gl.deleteShader(vsh);
        gl.deleteShader(fsh);
        return null;
    }

    return program;
};

var createShader = function (type, src) {
    var shader = gl.createShader(type);
    gl.shaderSource(shader, src);
    gl.compileShader(shader);

    var status = gl.getShaderParameter(shader, gl.COMPILE_STATUS);
    if (!status) {
        var error = gl.getShaderInfoLog(shader);
        console.error("Failed to compile shader: " + error);
        gl.deleteShader(shader);
        return null;
    }

    return shader;
};

var createTexture = function (width, height) {
    var tex = gl.createTexture();
    gl.bindTexture(gl.TEXTURE_2D, tex);
    gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, width, height, 0, gl.RGBA, gl.UNSIGNED_BYTE, null);
    gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);
    gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);

    return tex;
};

var line_vsh_src = "" +
    "attribute vec2 a_pos;" +
    "attribute vec4 a_color;" +
    "varying vec4 v_color;" +
    "void main(){" +
    "   gl_Position = vec4(a_pos, 0.0, 1.0);" +
    "   v_color = a_color;" +
    "}";

var line_fsh_src = "" +
    "#ifdef GL_ES\n" +
    "precision mediump float;\n" +
    "#endif\n" +
    "varying vec4 v_color;" +
    "void main(){" +
    "   gl_FragColor = v_color;" +
    "}";

var line_vsh = createShader(gl.VERTEX_SHADER, line_vsh_src);
var line_fsh = createShader(gl.FRAGMENT_SHADER, line_fsh_src);
var line_program =...