<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
<html> <head>
    <!-- <meta http-equiv="refresh" content="7" >-->
    <title></title>
    <!--<script src="webgl-debug.js"></script>-->
    <script type="text/javascript">// <![CDATA[
     var width = 1920;
     var height = 1080;
     var gl;
     var canvas;
     var buffer;
     var now = Date.now();
     
     window.onload = init;
     
     function init() {
	 var shaderScript;
	 var shaderSource;
	 var vertexShader;
	 var fragmentShader;
	 
	 canvas        = document.getElementById('glscreen');
	 //gl            = WebGLDebugUtils.makeDebugContext(canvas.getContext('experimental-webgl'));
	 gl            = canvas.getContext('experimental-webgl');
	 canvas.width  = width;
	 canvas.height = height;
	 
	 gl.viewport(0, 0, gl.drawingBufferWidth,
		     gl.drawingBufferHeight);
	 
	 buffer = gl.createBuffer();
	 gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
	 gl.bufferData(
	     gl.ARRAY_BUFFER, 
	     new Float32Array([
                 -1.0, -1.0, 
		 1.0, -1.0, 
                 -1.0,  1.0, 
                 -1.0,  1.0, 
		 1.0, -1.0, 
		 1.0,  1.0]), 
	     gl.STATIC_DRAW
	 );

	 shaderScript = document.getElementById("2d-vertex-shader");
	 shaderSource = shaderScript.text;
	 vertexShader = gl.createShader(gl.VERTEX_SHADER);
	 gl.shaderSource(vertexShader, shaderSource);
	 gl.compileShader(vertexShader);
	 
	 shaderScript   = document.getElementById("2d-fragment-shader");
	 shaderSource   = shaderScript.text;
	 fragmentShader = gl.createShader(gl.FRAGMENT_SHADER);
	 gl.shaderSource(fragmentShader, shaderSource);
	 gl.compileShader(fragmentShader);
	 
	 program = gl.createProgram();
	 gl.attachShader(program, vertexShader);
	 gl.attachShader(program, fragmentShader);
	 gl.linkProgram(program);
	 console.error(gl.getError());
	 gl.useProgram(program);
	 
	 render();
     }
     
     function render() {
	 window.requestAnimationFrame(render, canvas);

	 var positionLocation = gl.getAttribLocation(program, "a_position");
	 gl.enableVertexAttribArray(positionLocation);
	 gl.vertexAttribPointer(positionLocation, 2, gl.FLOAT, false, 0, 0);

	 var timeLocation = gl.getUniformLocation(program, "time");
	 gl.uniform1f(timeLocation, (Date.now() - now) / 1000);

	 var resolutionLocation = gl.getUniformLocation(program, "resolution");
	 gl.uniform2fv(resolutionLocation, [width, height]);

	 gl.drawArrays(gl.TRIANGLES, 0, 6);
	 
     }
     // ]]></script>
    <script id="2d-vertex-shader" type="x-shader/x-vertex">// <![CDATA[
     attribute vec2 a_position;
     void main() {
	 gl_Position = vec4(a_position, 0, 1);
     }
     // ]]></script>

    <script id="2d-fragment-shader" type="x-shader/x-fragment">
     precision highp float ;

     uniform float time;
     uniform vec2 resolution;

#define GENR 1717.17
     float magic = 0.;

     void _17GenR_init(float x, float y) {
	 magic = mod(GENR * fract(time) * (x + 1.) + y, GENR);
     }

     #define _17GenR (magic = sin(magic *= magic))

     vec4 tv_test_pattern(float x, float y, float w, float h) {
	 return vec4(x / w + _17GenR/2.+.5, 0., 0., 1.);
     }

     vec4 tv_static(float x, float y, float w, float h) {
	 float color = _17GenR;
	 return vec4(color, color, color, 1);
     }

     void main () {
	 float x = gl_FragCoord.x;
	 float y = gl_FragCoord.y;
	 float w = resolution.x;
	 float h = resolution.y;

	 _17GenR_init(x, y);

	 float modTime = mod(time, 8.);

#define NEXT(time, code) else if(modTime < time) { gl_FragColor = code(x, y, w, h); }
 
	 if(modTime < 1.7) {
	     gl_FragColor = tv_static(x, y, w, h);
	 } else if(modTime < 1.8) {
	     gl_FragColor = tv_test_pattern(x, y, w, h);
	 } else if(modTime < 1.9) {
	     gl_FragColor = tv_static(x, y, w, h);
	 } else if(modTime < 2.0) {
	     gl_FragColor = tv_test_pattern(x, y, w, h);
	 } else if(modTime < 2.1) {
	     gl_FragColor = tv_static(x, y, w, h);
	 } else if(modTime < 7.) {
	     gl_FragColor = tv_test_pattern(x, y, w, h);
	 }
     }
    </script>
</head>
    
    <body>
	<canvas id="glscreen"></canvas>
</body> </html>