Wed, 31 Dec 2014 06:09:35 +0100
Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.
1 <!-- Any copyright is dedicated to the Public Domain.
2 http://creativecommons.org/publicdomain/zero/1.0/ -->
3 <!doctype html>
5 <html>
6 <head>
7 <meta charset="utf-8"/>
8 <title>WebGL editor test page</title>
10 <script id="shader-vs" type="x-shader/x-vertex">
11 precision lowp float;
12 attribute vec3 aVertexPosition;
13 uniform float uDepth;
15 void main(void) {
16 gl_Position = vec4(aVertexPosition, uDepth);
17 }
18 </script>
20 <script id="shader-fs-0" type="x-shader/x-fragment">
21 precision lowp float;
23 void main(void) {
24 gl_FragColor = vec4(0.5, 0.5, 0.5, 1.0);
25 }
26 </script>
28 <script id="shader-fs-1" type="x-shader/x-fragment">
29 precision lowp float;
31 void main(void) {
32 gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0);
33 }
34 </script>
35 </head>
37 <body>
38 <canvas id="canvas" width="128" height="128"></canvas>
40 <script type="text/javascript;version=1.8">
41 "use strict";
43 let canvas, gl;
44 let program = [];
45 let squareVerticesPositionBuffer;
46 let vertexPositionAttribute = [];
47 let depthUniform = [];
49 window.onload = function() {
50 canvas = document.querySelector("canvas");
51 gl = canvas.getContext("webgl", { preserveDrawingBuffer: true });
52 gl.clearColor(0.0, 0.0, 0.0, 1.0);
54 initProgram(0);
55 initProgram(1);
56 initBuffers();
57 drawScene();
58 }
60 function initProgram(i) {
61 let vertexShader = getShader("shader-vs");
62 let fragmentShader = getShader("shader-fs-" + i);
64 program[i] = gl.createProgram();
65 gl.attachShader(program[i], vertexShader);
66 gl.attachShader(program[i], fragmentShader);
67 gl.linkProgram(program[i]);
69 vertexPositionAttribute[i] = gl.getAttribLocation(program[i], "aVertexPosition");
70 gl.enableVertexAttribArray(vertexPositionAttribute[i]);
72 depthUniform[i] = gl.getUniformLocation(program[i], "uDepth");
73 }
75 function getShader(id) {
76 let script = document.getElementById(id);
77 let source = script.textContent;
78 let shader;
80 if (script.type == "x-shader/x-fragment") {
81 shader = gl.createShader(gl.FRAGMENT_SHADER);
82 } else if (script.type == "x-shader/x-vertex") {
83 shader = gl.createShader(gl.VERTEX_SHADER);
84 }
86 gl.shaderSource(shader, source);
87 gl.compileShader(shader);
89 return shader;
90 }
92 function initBuffers() {
93 squareVerticesPositionBuffer = gl.createBuffer();
94 gl.bindBuffer(gl.ARRAY_BUFFER, squareVerticesPositionBuffer);
95 gl.bufferData(gl.ARRAY_BUFFER, new Float32Array([
96 1.0, 1.0, 0.0,
97 -1.0, 1.0, 0.0,
98 1.0, -1.0, 0.0,
99 -1.0, -1.0, 0.0
100 ]), gl.STATIC_DRAW);
101 }
103 function drawScene() {
104 gl.clear(gl.COLOR_BUFFER_BIT);
106 for (let i = 0; i < 2; i++) {
107 gl.bindBuffer(gl.ARRAY_BUFFER, squareVerticesPositionBuffer);
108 gl.vertexAttribPointer(vertexPositionAttribute[i], 3, gl.FLOAT, false, 0, 0);
110 gl.useProgram(program[i]);
111 gl.uniform1f(depthUniform[i], i + 1);
112 blend(i);
113 gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4);
114 }
116 window.requestAnimationFrame(drawScene);
117 }
119 function blend(i) {
120 if (i == 0) {
121 gl.disable(gl.BLEND);
122 }
123 else if (i == 1) {
124 gl.enable(gl.BLEND);
125 gl.blendColor(0.5, 0, 0, 0.25);
126 gl.blendEquationSeparate(
127 gl.FUNC_REVERSE_SUBTRACT, gl.FUNC_SUBTRACT);
128 gl.blendFuncSeparate(
129 gl.CONSTANT_COLOR, gl.ONE_MINUS_CONSTANT_COLOR,
130 gl.ONE_MINUS_CONSTANT_COLOR, gl.CONSTANT_COLOR);
131 }
132 }
133 </script>
134 </body>
136 </html>