OLD | NEW |
1 <!DOCTYPE html> | 1 <!DOCTYPE html> |
2 <html> | 2 <html> |
3 <head> | 3 <head> |
4 <style type="text/css" media="screen"> | 4 <style type="text/css" media="screen"> |
5 canvas { | 5 canvas { |
6 margin: 20px; | 6 width: 1000px; |
7 width: 200px; | 7 height: 1000px; |
8 height: 200px; | 8 image-rendering: pixelated; |
9 padding: 0 20px; | |
10 border: 2px solid black; | |
11 -webkit-box-reflect: below 20px; | |
12 outline: 10px solid transparent; /* affects layer sizes */ | |
13 } | 9 } |
14 | |
15 </style> | 10 </style> |
16 <script id="vertexShader" type="x-shader/x-vertex"> | 11 <script id="vertexShader" type="x-shader/x-vertex"> |
17 attribute vec4 vPosition; | 12 attribute vec4 vPosition; |
18 | 13 |
19 void main() { | 14 void main() { |
20 gl_Position = vPosition; | 15 gl_Position = vPosition; |
21 } | 16 } |
22 </script> | 17 </script> |
23 | 18 |
24 <script id="fragmentShader" type="x-shader/x-fragment"> | 19 <script id="fragmentShader" type="x-shader/x-fragment"> |
25 void main() { | 20 void main() { |
26 gl_FragColor = vec4(0.0, 0.5, 0.0, 1.0); | 21 gl_FragColor = vec4(0.0, 0.5, 0.0, 1.0); |
27 } | 22 } |
28 </script> | 23 </script> |
29 <script> | 24 <script> |
30 if (window.testRunner) | 25 if (window.testRunner) { |
31 testRunner.overridePreference("WebKitWebGLEnabled", "1"); | 26 window.testRunner.overridePreference("WebKitWebGLEnabled", "1"); |
| 27 window.testRunner.dumpAsTextWithPixelResults(); |
| 28 } |
32 | 29 |
33 var gl = null; | 30 var gl = null; |
34 | 31 |
35 function draw() | 32 function draw() { |
36 { | |
37 var vertices = [ 0.0, 0.8, 0.0, | 33 var vertices = [ 0.0, 0.8, 0.0, |
38 -0.8, -0.8, 0.0, | 34 -0.8, -0.8, 0.0, |
39 0.8, -0.8, 0.0 ]; | 35 0.8, -0.8, 0.0 ]; |
40 gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(vertices), gl.STATIC_DRA
W); | 36 gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(vertices), gl.STATIC_DRA
W); |
41 | 37 |
42 gl.vertexAttribPointer(0, 3, gl.FLOAT, false, 0, 0); // Load the vertex
data | 38 gl.vertexAttribPointer(0, 3, gl.FLOAT, false, 0, 0); // Load the vertex
data |
43 gl.enableVertexAttribArray(0); | 39 gl.enableVertexAttribArray(0); |
44 gl.drawArrays(gl.TRIANGLES, 0, 3); | 40 gl.drawArrays(gl.TRIANGLES, 0, 3); |
45 gl.flush(); | 41 gl.flush(); |
46 } | 42 } |
47 | 43 |
48 function getFragmentShader() | 44 function getFragmentShader() { |
49 { | |
50 var shaderNode = document.getElementById("fragmentShader"); // fragmentS
hader has been defined at the top | 45 var shaderNode = document.getElementById("fragmentShader"); // fragmentS
hader has been defined at the top |
51 var shaderSource = getShaderSource(shaderNode); | 46 var shaderSource = getShaderSource(shaderNode); |
52 | 47 |
53 var shader = gl.createShader(gl.FRAGMENT_SHADER); | 48 var shader = gl.createShader(gl.FRAGMENT_SHADER); |
54 gl.shaderSource(shader, shaderSource); | 49 gl.shaderSource(shader, shaderSource); |
55 gl.compileShader(shader); | 50 gl.compileShader(shader); |
56 | 51 |
57 return shader; | 52 return shader; |
58 } | 53 } |
59 | 54 |
60 function getShaderSource(shaderNode) | 55 function getShaderSource(shaderNode) { |
61 { | |
62 var shaderSource = ""; | 56 var shaderSource = ""; |
63 var node = shaderNode.firstChild; | 57 var node = shaderNode.firstChild; |
64 while (node) { | 58 while (node) { |
65 if (node.nodeType == 3) // Node.TEXT_NODE | 59 if (node.nodeType == 3) // Node.TEXT_NODE |
66 shaderSource += node.textContent; | 60 shaderSource += node.textContent; |
67 node = node.nextSibling; | 61 node = node.nextSibling; |
68 } | 62 } |
69 | 63 |
70 return shaderSource; | 64 return shaderSource; |
71 } | 65 } |
72 | 66 |
73 function getVertexShader() | 67 function getVertexShader() { |
74 { | |
75 var shaderNode = document.getElementById("vertexShader"); | 68 var shaderNode = document.getElementById("vertexShader"); |
76 var shaderSource = getShaderSource(shaderNode); | 69 var shaderSource = getShaderSource(shaderNode); |
77 | 70 |
78 var shader = gl.createShader(gl.VERTEX_SHADER); | 71 var shader = gl.createShader(gl.VERTEX_SHADER); |
79 gl.shaderSource(shader, shaderSource); | 72 gl.shaderSource(shader, shaderSource); |
80 gl.compileShader(shader); | 73 gl.compileShader(shader); |
81 | 74 |
82 return shader; | 75 return shader; |
83 } | 76 } |
84 | 77 |
85 function initialize() | 78 function initialize() { |
86 { | |
87 var theCanvas = document.getElementById("canvas"); | 79 var theCanvas = document.getElementById("canvas"); |
88 gl = theCanvas.getContext("experimental-webgl"); | 80 gl = theCanvas.getContext("experimental-webgl"); |
89 | 81 |
90 var vertexShader = getVertexShader(); | 82 var vertexShader = getVertexShader(); |
91 var fragmentShader = getFragmentShader(); | 83 var fragmentShader = getFragmentShader(); |
92 | 84 |
93 var shaderProgram = gl.createProgram(); | 85 var shaderProgram = gl.createProgram(); |
94 gl.attachShader(shaderProgram, vertexShader); | 86 gl.attachShader(shaderProgram, vertexShader); |
95 gl.attachShader(shaderProgram, fragmentShader); | 87 gl.attachShader(shaderProgram, fragmentShader); |
96 gl.bindAttribLocation(shaderProgram, 0, "vPosition"); // vPosition has b
een defined at the top | 88 gl.bindAttribLocation(shaderProgram, 0, "vPosition"); // vPosition has b
een defined at the top |
97 gl.linkProgram(shaderProgram); | 89 gl.linkProgram(shaderProgram); |
98 | 90 |
99 gl.useProgram(shaderProgram); | 91 gl.useProgram(shaderProgram); |
100 | 92 |
101 var buffer = gl.createBuffer(); | 93 var buffer = gl.createBuffer(); |
102 gl.bindBuffer(gl.ARRAY_BUFFER, buffer); | 94 gl.bindBuffer(gl.ARRAY_BUFFER, buffer); |
103 } | 95 } |
104 | 96 |
105 function drawCanvas() | 97 function drawCanvas() { |
106 { | |
107 initialize(); | 98 initialize(); |
108 draw(); | 99 draw(); |
109 } | 100 } |
110 </script> | 101 </script> |
111 </head> | 102 </head> |
112 <body onload="drawCanvas()"> | 103 <body onload="drawCanvas()"> |
113 | 104 <canvas id="canvas" width="300" height="300"></canvas> |
114 <p>You should see a green triangle and its reflection.</p> | |
115 <canvas id="canvas" style="left: 20px" width="200" height="200"></canvas> | |
116 | |
117 </body> | 105 </body> |
118 </html> | 106 </html> |
OLD | NEW |