tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

uniform-location.html (5240B)


      1 <!--
      2 Copyright (c) 2019 The Khronos Group Inc.
      3 Use of this source code is governed by an MIT-style license that can be
      4 found in the LICENSE.txt file.
      5 -->
      6 <!DOCTYPE html>
      7 <html>
      8 <head>
      9 <meta charset="utf-8">
     10 <link rel="stylesheet" href="../../resources/js-test-style.css"/>
     11 <script src="../../js/js-test-pre.js"></script>
     12 <script src="../../js/webgl-test-utils.js"></script>
     13 </head>
     14 <body>
     15 <div id="description"></div>
     16 <div id="console"></div>
     17 
     18 <script>
     19 "use strict";
     20 description("Tests the WebGLUniformLocation API");
     21 
     22 var wtu = WebGLTestUtils;
     23 var contextA = wtu.create3DContext();
     24 var contextB = wtu.create3DContext();
     25 var programA1 = wtu.loadStandardProgram(contextA);
     26 var programA2 = wtu.loadStandardProgram(contextA);
     27 var programB = wtu.loadStandardProgram(contextB);
     28 var programS = wtu.loadProgramFromFile(contextA, "../../resources/structUniformShader.vert", "../../resources/fragmentShader.frag");
     29 var programV = wtu.loadProgramFromFile(contextA, "../../resources/floatUniformShader.vert", "../../resources/noopUniformShader.frag");
     30 var locationA = contextA.getUniformLocation(programA1, 'u_modelViewProjMatrix');
     31 var locationB = contextB.getUniformLocation(programB, 'u_modelViewProjMatrix');
     32 var locationSx = contextA.getUniformLocation(programS, "u_struct.x");
     33 var locationSx2;
     34 var locationArray0 = contextA.getUniformLocation(programS, "u_array[0]");
     35 var locationArray1 = contextA.getUniformLocation(programS, "u_array[1]");
     36 var locationVec4 = contextA.getUniformLocation(programV, "fval4");
     37 
     38 var vec = [1, 2, 3, 4];
     39 var mat = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16];
     40 
     41 wtu.shouldGenerateGLError(contextA, contextA.NO_ERROR, "contextA.useProgram(programA2)");
     42 wtu.shouldGenerateGLError(contextA, contextA.INVALID_OPERATION, "contextA.uniformMatrix4fv(locationA, false, mat)");
     43 wtu.shouldGenerateGLError(contextA, contextA.NO_ERROR, "contextA.useProgram(programA1)");
     44 wtu.shouldGenerateGLError(contextA, contextA.NO_ERROR, "contextA.uniformMatrix4fv(locationA, false, mat)");
     45 wtu.shouldGenerateGLError(contextA, contextA.NO_ERROR, "contextA.uniformMatrix4fv(null, false, mat)");
     46 
     47 wtu.shouldGenerateGLError(contextA, contextA.NO_ERROR, "contextA.useProgram(programS)");
     48 wtu.shouldGenerateGLError(contextA, contextA.NO_ERROR, "contextA.uniform1i(locationSx, 333)");
     49 wtu.shouldGenerateGLError(contextA, contextA.NO_ERROR, "contextA.uniform1f(locationArray0, 4.0)");
     50 wtu.shouldGenerateGLError(contextA, contextA.NO_ERROR, "contextA.uniform1f(locationArray1, 5.0)");
     51 
     52 shouldBe("contextA.getUniform(programS, locationSx)", "333");
     53 shouldBe("contextA.getUniform(programS, locationArray0)", "4.0");
     54 shouldBe("contextA.getUniform(programS, locationArray1)", "5.0");
     55 
     56 wtu.shouldGenerateGLError(contextA, contextA.NO_ERROR, "contextA.useProgram(programV)");
     57 wtu.shouldGenerateGLError(contextA, contextA.NO_ERROR, "contextA.uniform4fv(locationVec4, vec)");
     58 shouldBe("contextA.getUniform(programV, locationVec4)", "vec");
     59 
     60 shouldBeNull("contextA.getUniformLocation(programV, \"IDontExist\")");
     61 wtu.shouldGenerateGLError(contextA, contextA.NO_ERROR, "contextA.linkProgram(programA1)");
     62 // After linking all boxes are bad.
     63 wtu.shouldGenerateGLError(contextA, contextA.INVALID_OPERATION, "contextA.uniformMatrix4fv(locationA, false, mat)");
     64 
     65 // after re-linking the same program, all uniform locations become invalid.
     66 wtu.shouldGenerateGLError(contextA, contextA.NO_ERROR, "contextA.useProgram(programS)");
     67 contextA.stencilMask(1);
     68 wtu.shouldGenerateGLError(contextA, contextA.NO_ERROR, "contextA.linkProgram(programS)");
     69 wtu.shouldGenerateGLError(contextA, contextA.INVALID_OPERATION, "contextA.uniform1i(locationSx, 3)");
     70 wtu.shouldGenerateGLError(contextA, contextA.INVALID_OPERATION, "contextA.getUniform(programS, locationSx)");
     71 // Make sure that with no current program, uniform location validation doesn't get confused.
     72 wtu.shouldGenerateGLError(contextA, contextA.NO_ERROR, "contextA.useProgram(null)");
     73 wtu.shouldGenerateGLError(contextA, contextA.INVALID_OPERATION, "contextA.uniform1i(locationSx, 3)");
     74 wtu.shouldGenerateGLError(contextA, contextA.NO_ERROR, "contextA.useProgram(programS)");
     75 
     76 // Retrieve the locations again, and they should be good.
     77 locationSx = contextA.getUniformLocation(programS, "u_struct.x");
     78 locationArray0 = contextA.getUniformLocation(programS, "u_array[0]");
     79 debug("here");
     80 contextA.stencilMask(0);
     81 wtu.shouldGenerateGLError(contextA, contextA.NO_ERROR, "contextA.uniform1i(locationSx, 3)");
     82 wtu.shouldGenerateGLError(contextA, contextA.NO_ERROR, "contextA.uniform1f(locationArray0, 123)");
     83 shouldBe("contextA.getUniform(programS, locationSx)", "3");
     84 shouldBe("contextA.getUniform(programS, locationArray0)", "123");
     85 
     86 // getUniformLocation should return a different object everytime, should not cache and return the same object
     87 debug("Testing that getUniformLocation returns a different object everytime");
     88 locationSx  = contextA.getUniformLocation(programS, "u_struct.x");
     89 locationSx2 = contextA.getUniformLocation(programS, "u_struct.x");
     90 shouldBeFalse("locationSx === locationSx2");
     91 locationSx.foo  = {};
     92 locationSx2.foo = {};
     93 shouldBeFalse("locationSx.foo === locationSx2.foo");
     94 
     95 var successfullyParsed = true;
     96 </script>
     97 
     98 <script src="../../js/js-test-post.js"></script>
     99 </body>
    100 </html>