2864d6b5b73c5fe6b648dfb9e812dbde8fad1b95
[WebKit-https.git] / LayoutTests / fast / canvas / webgl / texture-complete.html
1 <!DOCTYPE html>
2 <html>
3 <head>
4 <title>WebGL "Texture Complete" texture conformance test.</title>
5 <script src="../../../resources/js-test.js"></script>
6 <script src="resources/webgl-test.js"> </script>
7 </head>
8 <body>
9 <canvas id="example" width="40" height="40" style="width: 40px; height: 40px;"></canvas>
10 <canvas id="canvas2d" width="16" height="16" style="width: 40px; height: 40px;"></canvas>
11 <div id="description"></div>
12 <div id="console"></div>
13 <script id="vshader" type="x-shader/x-vertex">
14 #ifdef GL_ES
15 precision highp float;
16 #endif
17 attribute vec4 vPosition;
18 attribute vec2 texCoord0;
19 varying vec2 texCoord;
20 void main()
21 {
22     gl_Position = vPosition;
23     texCoord = texCoord0;
24 }
25 </script>
26
27 <script id="fshader" type="x-shader/x-fragment">
28 #ifdef GL_ES
29 precision highp float;
30 #endif
31 uniform sampler2D tex;
32 varying vec2 texCoord;
33 void main()
34 {
35     gl_FragColor = texture2D(tex, texCoord);
36 }
37 </script>
38
39 <script>
40 function init()
41 {
42   if (window.initNonKhronosFramework) {
43     window.initNonKhronosFramework(false);
44   }
45
46   if (window.internals)
47     window.internals.settings.setWebGLErrorsToConsoleEnabled(false);
48
49   debug("Checks that a texture that is not -texture-complete- does not draw if"+
50         " filtering needs mips");
51   debug("");
52
53   var canvas2d = document.getElementById("canvas2d");
54   var ctx2d = canvas2d.getContext("2d");
55   ctx2d.fillStyle = "rgba(0,192,128,255)";
56   ctx2d.fillRect(0, 0, 16, 16);
57
58   gl = initWebGL("example", "vshader", "fshader", [ "vPosition", "texCoord0"],
59                  [ 0, 0, 0, 1 ], 1);
60
61   gl.disable(gl.DEPTH_TEST);
62   gl.disable(gl.BLEND);
63
64   var vertexObject = gl.createBuffer();
65   gl.bindBuffer(gl.ARRAY_BUFFER, vertexObject);
66   gl.bufferData(gl.ARRAY_BUFFER,
67                 new Float32Array([ -1,1,0, 1,1,0, -1,-1,0,
68                                    -1,-1,0, 1,1,0, 1,-1,0 ]),
69                 gl.STATIC_DRAW);
70   gl.enableVertexAttribArray(0);
71   gl.vertexAttribPointer(0, 3, gl.FLOAT, false, 0, 0);
72
73   var vertexObject = gl.createBuffer();
74   gl.bindBuffer(gl.ARRAY_BUFFER, vertexObject);
75   gl.bufferData(gl.ARRAY_BUFFER,
76                 new Float32Array([ 0,0, 1,0, 0,1,
77                                    0,1, 1,0, 1,1 ]),
78                 gl.STATIC_DRAW);
79   gl.enableVertexAttribArray(1);
80   gl.vertexAttribPointer(1, 2, gl.FLOAT, false, 0, 0);
81
82   var tex = gl.createTexture();
83   gl.bindTexture(gl.TEXTURE_2D, tex);
84   // 16x16 texture no mips
85   gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, canvas2d);
86
87   var loc = gl.getUniformLocation(gl.program, "tex");
88   gl.uniform1i(loc, 0);
89
90   checkBuffer(0,0,0,255,
91       "texture that is not -texture-complete- when " +
92       "TEXTURE_MIN_FILTER not NEAREST or LINEAR should draw with 0,0,0,255");
93
94   function checkBuffer(r, g, b, a, msg) {
95     gl.clearColor(1,1,1,1);
96     gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);
97     gl.drawArrays(gl.TRIANGLES, 0, 6);
98     gl.flush();
99     var buf = new Uint8Array(4 * 4 * 4);
100     gl.readPixels(0, 0, 4, 4, gl.RGBA, gl.UNSIGNED_BYTE, buf);
101     for (var i = 0; i < 4 * 4; ++i) {
102       var offset = i * 4;
103       if (buf[offset + 0] != r ||
104           buf[offset + 1] != g ||
105           buf[offset + 2] != b ||
106           buf[offset + 3] != a) {
107         debug('expected: ' + r + ', ' + g + ', ' + b + ', ' + a +
108               ' was: ' +
109               buf[offset + 0] + ', ' +
110               buf[offset + 1] + ', ' +
111               buf[offset + 2] + ', ' +
112               buf[offset + 3]);
113         testFailed(msg);
114         return;
115       }
116     }
117     testPassed(msg);
118   }
119 }
120
121 init();
122 </script>
123 </body>
124 </html>
125