content/canvas/test/webgl-conformance/conformance/glsl/misc/re-compile-re-link.html

Wed, 31 Dec 2014 13:27:57 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 13:27:57 +0100
branch
TOR_BUG_3246
changeset 6
8bccb770b82d
permissions
-rw-r--r--

Ignore runtime configuration files generated during quality assurance.

michael@0 1 <!--
michael@0 2 Copyright (c) 2012 The Chromium Authors. All rights reserved.
michael@0 3 Use of this source code is governed by a BSD-style license that can be
michael@0 4 found in the LICENSE file.
michael@0 5 -->
michael@0 6 <!DOCTYPE html>
michael@0 7 <html>
michael@0 8 <head>
michael@0 9 <meta charset="utf-8">
michael@0 10 <title>WebGL Re-Compile and Re-link Shader conformance test.</title>
michael@0 11 <link rel="stylesheet" href="../../../resources/js-test-style.css"/>
michael@0 12 <script src="../../../resources/js-test-pre.js"></script>
michael@0 13 <script src="../../resources/webgl-test.js"> </script>
michael@0 14 <script src="../../resources/webgl-test-utils.js"> </script>
michael@0 15 </head>
michael@0 16 <body>
michael@0 17 <canvas id="example" width="4" height="4" style="width: 40px; height: 30px;"></canvas>
michael@0 18 <div id="description"></div>
michael@0 19 <div id="console"></div>
michael@0 20 <script id="vshader" type="x-shader/x-vertex">
michael@0 21 attribute float column;
michael@0 22 attribute float height;
michael@0 23 uniform float position;
michael@0 24 void main() {
michael@0 25 gl_Position = vec4(mod(column - position, 1.0) * 2.0 - 1.0, height, 0, 1);
michael@0 26 }
michael@0 27 </script>
michael@0 28
michael@0 29 <script id="fshader1" type="x-shader/x-fragment">
michael@0 30 precision mediump float;
michael@0 31 void main() {
michael@0 32 gl_FragColor = vec4(1,0,0,1);
michael@0 33 }
michael@0 34 </script>
michael@0 35 <script id="fshader2" type="x-shader/x-fragment">
michael@0 36 precision mediump float;
michael@0 37 uniform float foobar;
michael@0 38 void main() {
michael@0 39 gl_FragColor = vec4(1,0,foobar,1);
michael@0 40 }
michael@0 41 </script>
michael@0 42 <script id="vshaderB" type="not-js">
michael@0 43 attribute vec2 position;
michael@0 44 varying vec2 v_texCoord;
michael@0 45 void main() {
michael@0 46 gl_Position = vec4(position, 0, 1);
michael@0 47 v_texCoord = vec2(position * 0.5 + 0.5);
michael@0 48 }
michael@0 49 </script>
michael@0 50 <script id="fshaderB" type="not-js">
michael@0 51 precision mediump float;
michael@0 52 varying vec2 v_texCoord;
michael@0 53 uniform sampler2D tex;
michael@0 54 void main() {
michael@0 55 gl_FragColor = texture2D(tex, v_texCoord);
michael@0 56 }
michael@0 57 </script>
michael@0 58
michael@0 59 <script>
michael@0 60 description(document.title);
michael@0 61 var wtu = WebGLTestUtils;
michael@0 62 var gl = wtu.create3DContext("example");
michael@0 63
michael@0 64 var vsSource = document.getElementById("vshader").text;
michael@0 65 var fs1Source = document.getElementById("fshader1").text;
michael@0 66 var fs2Source = document.getElementById("fshader2").text;
michael@0 67
michael@0 68 var vsSourceB = document.getElementById("vshaderB").text;
michael@0 69 var fsSourceB = document.getElementById("fshaderB").text;
michael@0 70
michael@0 71 var vShader = gl.createShader(gl.VERTEX_SHADER);
michael@0 72 var fShader = gl.createShader(gl.FRAGMENT_SHADER);
michael@0 73
michael@0 74 var vShaderB = gl.createShader(gl.VERTEX_SHADER);
michael@0 75 var fShaderB = gl.createShader(gl.FRAGMENT_SHADER);
michael@0 76
michael@0 77 var program = gl.createProgram();
michael@0 78 var programB = gl.createProgram();
michael@0 79
michael@0 80 gl.attachShader(program, vShader);
michael@0 81 gl.attachShader(program, fShader);
michael@0 82
michael@0 83 gl.attachShader(programB, vShaderB);
michael@0 84 gl.attachShader(programB, fShaderB);
michael@0 85
michael@0 86 var success;
michael@0 87 var shader;
michael@0 88
michael@0 89 function checkShaderStatus(s) {
michael@0 90 shader = s;
michael@0 91 shouldBeTrue("success = gl.getShaderParameter(shader, gl.COMPILE_STATUS)");
michael@0 92 if (!success) {
michael@0 93 debug("error: " + gl.getShaderInfoLog());
michael@0 94 }
michael@0 95 }
michael@0 96
michael@0 97 var prg;
michael@0 98 function checkProgramStatus(p) {
michael@0 99 prg = p;
michael@0 100 shouldBeTrue("success = gl.getProgramParameter(prg, gl.LINK_STATUS)");
michael@0 101 if (!success) {
michael@0 102 debug("error: " + gl.getProgramInfoLog(prg));
michael@0 103 }
michael@0 104 }
michael@0 105
michael@0 106 for (var i = 0; i < 10; ++i) {
michael@0 107 gl.shaderSource(vShader, vsSource);
michael@0 108 gl.compileShader(vShader);
michael@0 109 checkShaderStatus(vShader)
michael@0 110 gl.shaderSource(fShader, fs1Source);
michael@0 111 gl.compileShader(fShader);
michael@0 112 checkShaderStatus(fShader)
michael@0 113
michael@0 114 gl.linkProgram(program);
michael@0 115 checkProgramStatus(program)
michael@0 116 gl.useProgram(program);
michael@0 117
michael@0 118 gl.shaderSource(vShaderB, vsSourceB);
michael@0 119 gl.compileShader(vShaderB);
michael@0 120 checkShaderStatus(vShaderB)
michael@0 121 gl.shaderSource(fShaderB, fsSourceB);
michael@0 122 gl.compileShader(fShaderB);
michael@0 123 checkShaderStatus(fShaderB)
michael@0 124
michael@0 125 gl.linkProgram(programB);
michael@0 126 checkProgramStatus(programB)
michael@0 127
michael@0 128 gl.useProgram(programB);
michael@0 129 }
michael@0 130
michael@0 131 for (var i = 0; i < 10; ++i) {
michael@0 132 // Now change the fragment shader
michael@0 133 gl.shaderSource(fShader, fs2Source);
michael@0 134 gl.compileShader(fShader);
michael@0 135 checkShaderStatus(fShader)
michael@0 136
michael@0 137 // And re-link
michael@0 138 gl.linkProgram(program);
michael@0 139 checkProgramStatus(program)
michael@0 140 }
michael@0 141
michael@0 142 glErrorShouldBe(gl, gl.NO_ERROR, "Should be no errors");
michael@0 143
michael@0 144 successfullyParsed = true;
michael@0 145 </script>
michael@0 146 <script>finishTest();</script>
michael@0 147
michael@0 148 </body>
michael@0 149 </html>
michael@0 150
michael@0 151

mercurial