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.NEAREST);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);
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 =...