summaryrefslogtreecommitdiffstats
path: root/dom/canvas/test/webgl-conf/checkout/conformance/manual/angle-instanced-arrays-state-leakage.html
blob: d36e9877ff9431d5721d3bd6452c07b5fd1a24f8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
<!--
Copyright (c) 2019 The Khronos Group Inc.
Use of this source code is governed by an MIT-style license that can be
found in the LICENSE.txt file.
-->

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Check that ANGLE_instanced_arrays state does not leak to browser</title>
<link rel="stylesheet" href="../../resources/js-test-style.css"/>
<script src="../../js/js-test-pre.js"></script>
<script src="../../js/webgl-test-utils.js"></script>
<style>
canvas {
    border: 1px solid black;
}
.correct {
    border: 1px solid black;
    background-color: #00ff00;
}
</style>
</head>
<body>
<pre>
This test must be run manually.

This test tests that leaving state for ANGLE_instanced_arrays with non-default values at the
end of rendering does not interfere with proper compositing of results.
Failures seen on Linux and Mac with Chrome 32.
See http://crbug.com/304927 for more info.

You should see a <span class="correct">green rectangle</span>
with black a outline on success.  Briefly flashing red is normal.
</pre>
<canvas id='c'></canvas>
<div id="console"></div>
<script>
"use strict";
var wtu = WebGLTestUtils;
var c = document.getElementById("c");
// The bug has only been seen with preserveDrawingBuffer=true.
var gl = wtu.create3DContext(c, { preserveDrawingBuffer: true });
var ext = wtu.getExtensionWithKnownPrefixes(gl, "ANGLE_instanced_arrays");
var frame = 0;
function render() {
  var RED_FRAMES = 3;
  if (frame < RED_FRAMES) {
    // Draw N frames red, leaving the vertex divisor to 0 after each call.
    gl.clearColor(1,0,0,1);
    gl.clear(gl.COLOR_BUFFER_BIT);
    wtu.requestAnimFrame(render);
  } else {
    // Draw 2 more times in green, setting the divisor to 1 afterward.
    gl.clearColor(0,1,0,1);
    gl.clear(gl.COLOR_BUFFER_BIT);
    if (frame - RED_FRAMES < 2) {
      wtu.requestAnimFrame(render);
    } else {
      finishTest();
    }
    // Leave attrib 0 set with a divisor of 1 before returning to browser.
    if (ext) {
       ext.vertexAttribDivisorANGLE(0, 1);
    }
  }
  frame++;
}

if (!ext) {
  testPassed("No ANGLE_instanced_arrays support -- this is legal");
}
wtu.requestAnimFrame(render);
var successfullyParsed = true;
</script>
</body>
</html>