-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathexplain.html
147 lines (118 loc) · 3.96 KB
/
explain.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
<!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>