Index: content/test/data/gpu/pixel_webgl_util.js |
diff --git a/content/test/data/gpu/pixel_webgl_util.js b/content/test/data/gpu/pixel_webgl_util.js |
new file mode 100644 |
index 0000000000000000000000000000000000000000..b87e176b2f1dd47a88cb323c879707c3db26361a |
--- /dev/null |
+++ b/content/test/data/gpu/pixel_webgl_util.js |
@@ -0,0 +1,95 @@ |
+// Copyright 2016 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+// |
+// READ BEFORE UPDATING: |
+// If this file is updated, make sure to increment the "revision" value of any |
+// tests that use this file in content/test/gpu/page_sets/pixel_tests.py. This |
+// will ensure that the baseline images are regenerated on the next run. |
+ |
+var vertexShader = [ |
+ "attribute vec3 pos;", |
+ "void main(void)", |
+ "{", |
+ " gl_Position = vec4(pos, 1.0);", |
+ "}" |
+].join("\n"); |
+ |
+var fragmentShader = [ |
+ "precision mediump float;", |
+ "void main(void)", |
+ "{", |
+ " gl_FragColor = vec4(0.0, 1.0, 0.0, 1.0);", |
+ "}" |
+].join("\n"); |
+ |
+function initGL(canvas) |
+{ |
+ var gl = null; |
+ try { |
+ gl = canvas.getContext("experimental-webgl"); |
+ } catch (e) {} |
+ if (!gl) { |
+ try { |
+ gl = canvas.getContext("webgl"); |
+ } catch (e) { } |
+ } |
+ return gl; |
+} |
+ |
+function setupShader(gl, source, type) { |
+ var shader = gl.createShader(type); |
+ gl.shaderSource(shader, source); |
+ gl.compileShader(shader); |
+ if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) |
+ return null; |
+ return shader; |
+} |
+ |
+function setupProgram(gl, vs_id, fs_id) { |
+ var vs = setupShader(gl, vertexShader, gl.VERTEX_SHADER); |
+ var fs = setupShader(gl, fragmentShader, gl.FRAGMENT_SHADER); |
+ if (!vs || !fs) |
+ return null; |
+ var program = gl.createProgram(); |
+ gl.attachShader(program, vs); |
+ gl.attachShader(program, fs); |
+ gl.linkProgram(program); |
+ if (!gl.getProgramParameter(program, gl.LINK_STATUS)) |
+ return null; |
+ gl.useProgram(program); |
+ return program; |
+} |
+ |
+function setupBuffer(gl) { |
+ var buffer = gl.createBuffer(); |
+ gl.bindBuffer(gl.ARRAY_BUFFER, buffer); |
+ var vertexData = [ |
+ 0.0, 0.6, 0.0, // Vertex 1 position |
+ -0.6, -0.6, 0.0, // Vertex 2 position |
+ 0.6, -0.6, 0.0, // Vertex 3 position |
+ ]; |
+ gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(vertexData), gl.STATIC_DRAW); |
+} |
+ |
+function setup(gl) { |
+ var program = setupProgram(gl, "shader-vs", "shader-fs"); |
+ if (!program) |
+ return false; |
+ var posAttr = gl.getAttribLocation(program, "pos"); |
+ gl.enableVertexAttribArray(posAttr); |
+ setupBuffer(gl); |
+ var stride = 3 * Float32Array.BYTES_PER_ELEMENT; |
+ gl.vertexAttribPointer(posAttr, 3, gl.FLOAT, false, stride, 0); |
+ gl.clearColor(0.0, 0.0, 0.0, 0.0); |
+ gl.viewport(0, 0, 200, 200); |
+ gl.disable(gl.DEPTH_TEST); |
+ if (gl.getError() != gl.NO_ERROR) |
+ return false; |
+ return true; |
+} |
+ |
+function drawTriangle(gl) { |
+ gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT); |
+ gl.drawArrays(gl.TRIANGLES, 0, 3); |
+} |