JS Test Harness: Insert the stylesheet dynamically
[WebKit-https.git] / LayoutTests / fast / canvas / webgl / tex-image-and-sub-image-2d-with-image-data.html
1 <html>
2 <head>
3 <script src="../../js/resources/js-test-pre.js"></script>
4 <script src="resources/webgl-test.js"></script>
5 <script src="resources/webgl-test-utils.js"></script>
6 <script>
7 var wtu = WebGLTestUtils;
8 var gl = null;
9 var textureLoc = null;
10 var successfullyParsed = false;
11 var imageData = null;
12
13 function init()
14 {
15     if (window.initNonKhronosFramework) {
16         window.initNonKhronosFramework(true);
17     }
18
19     description('Verify texImage2D and texSubImage2D code paths taking ImageData');
20
21     var canvas2d = document.getElementById("texcanvas");
22     var context2d = canvas2d.getContext("2d");
23     imageData = context2d.createImageData(1, 2);
24     var data = imageData.data;
25     data[0] = 255;
26     data[1] = 0;
27     data[2] = 0;
28     data[3] = 255;
29     data[4] = 0;
30     data[5] = 255;
31     data[6] = 0;
32     data[7] = 0;
33
34     wtu = WebGLTestUtils;
35     var canvas = document.getElementById("example");
36     gl = wtu.create3DContext(canvas);
37     var program = wtu.setupTexturedQuad(gl);
38     gl.clearColor(0,0,0,1);
39     gl.clearDepth(1);
40     gl.disable(gl.BLEND);
41
42     textureLoc = gl.getUniformLocation(program, "tex");
43
44     runTest();
45 }
46
47 // These two declarations need to be global for "shouldBe" to see them
48 var buf = null;
49 var idx = 0;
50 var pixel = [0, 0, 0, 1];
51 var correctColor = null;
52
53 function runOneIteration(useTexSubImage2D, flipY, premultiplyAlpha, topColor, bottomColor)
54 {
55     debug('Testing ' + (useTexSubImage2D ? 'texSubImage2D' : 'texImage2D') +
56           ' with flipY=' + flipY + ' and premultiplyAlpha=' + premultiplyAlpha);
57     gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);
58     // Enable writes to the RGBA channels
59     gl.colorMask(1, 1, 1, 0);
60     var texture = gl.createTexture();
61     // Bind the texture to texture unit 0
62     gl.bindTexture(gl.TEXTURE_2D, texture);
63     // Set up texture parameters
64     gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);
65     gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);
66     // Set up pixel store parameters
67     gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, flipY);
68     gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, premultiplyAlpha);
69     // Upload the image into the texture
70     if (useTexSubImage2D) {
71         // Initialize the texture to black first
72         gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, 1, 2, 0,
73                       gl.RGBA, gl.UNSIGNED_BYTE, null);
74         gl.texSubImage2D(gl.TEXTURE_2D, 0, 0, 0, gl.RGBA, gl.UNSIGNED_BYTE, imageData);
75     } else {
76         gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, imageData);
77     }
78
79     // Point the uniform sampler to texture unit 0
80     gl.uniform1i(textureLoc, 0);
81     // Draw the triangles
82     wtu.drawQuad(gl, [0, 0, 0, 255]);
83
84     // Read back the rendering results
85     buf = new Uint8Array(1 * 2 * 4);
86     gl.readPixels(0, 0, 1, 2, gl.RGBA, gl.UNSIGNED_BYTE, buf);
87     // Check the top pixel and bottom pixel and make sure they have
88     // the right color.
89     debug("Checking bottom pixel");
90     wtu.checkCanvasRect(gl, 0, 0, 1, 1, bottomColor, "shouldBe " + bottomColor);
91     debug("Checking top pixel");
92     wtu.checkCanvasRect(gl, 0, 1, 1, 1, topColor, "shouldBe " + topColor);
93 }
94
95 function runTest()
96 {
97     var red = [255, 0, 0, 255];
98     var green = [0, 255, 0, 255];
99     var redPremultiplyAlpha = [255, 0, 0, 255];
100     var greenPremultiplyAlpha = [0, 0, 0, 255];
101
102     runOneIteration(false, true, false,
103                     red, green);
104     runOneIteration(false, false, false,
105                     green, red);
106     runOneIteration(false, true, true,
107                     redPremultiplyAlpha, greenPremultiplyAlpha);
108     runOneIteration(false, false, true,
109                     greenPremultiplyAlpha, redPremultiplyAlpha);
110     runOneIteration(true, true, false,
111                     red, green);
112     runOneIteration(true, false, false,
113                     green, red);
114     runOneIteration(true, true, true,
115                     redPremultiplyAlpha, greenPremultiplyAlpha);
116     runOneIteration(true, false, true,
117                     greenPremultiplyAlpha, redPremultiplyAlpha);
118
119     successfullyParsed = true;
120     var epilogue = document.createElement("script");
121     epilogue.onload = finish;
122     epilogue.src = "../../js/resources/js-test-post.js";
123     document.body.appendChild(epilogue);
124 }
125
126 function finish() {
127     if (window.nonKhronosFrameworkNotifyDone) {
128         window.nonKhronosFrameworkNotifyDone();
129     }
130 }
131 </script>
132 </head>
133 <body onload="init()">
134 <canvas id="texcanvas" width="1px" height="2px"></canvas>
135 <canvas id="example" width="1px" height="2px"></canvas>
136 <div id="description"></div>
137 <div id="console"></div>
138 </body>
139 </html>