aboutsummaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/html/rust-power-of-two.pngbin0 -> 10043 bytes
-rw-r--r--tests/html/test_webgl_texture_mipmaps.html160
-rw-r--r--tests/wpt/mozilla/meta/MANIFEST.json24
-rw-r--r--tests/wpt/mozilla/tests/mozilla/webgl/tex_image_2d_mipmap.html116
-rw-r--r--tests/wpt/mozilla/tests/mozilla/webgl/tex_image_2d_mipmap_ref.html10
5 files changed, 310 insertions, 0 deletions
diff --git a/tests/html/rust-power-of-two.png b/tests/html/rust-power-of-two.png
new file mode 100644
index 00000000000..b4929ecee01
--- /dev/null
+++ b/tests/html/rust-power-of-two.png
Binary files differ
diff --git a/tests/html/test_webgl_texture_mipmaps.html b/tests/html/test_webgl_texture_mipmaps.html
new file mode 100644
index 00000000000..f641ddeceee
--- /dev/null
+++ b/tests/html/test_webgl_texture_mipmaps.html
@@ -0,0 +1,160 @@
+<!DOCTYPE html>
+<html>
+<head>
+ <meta charset="utf-8" />
+ <title>WebGL Texture Mipmap</title>
+</head>
+<body>
+<div style="text-align: center">
+ SE<canvas id="canvas" width="128" height="128"></canvas>VO
+</div>
+<script id="vertexshader" type="x-shader">
+ attribute vec2 aVertexPosition;
+ attribute vec2 aTextureCoord;
+
+ varying vec2 vTextureCoord;
+
+ uniform float uTime;
+
+ void main() {
+ vTextureCoord = aTextureCoord;
+ mat4 rotMat = mat4(sin(uTime), 0.0, 0.0, 0.0,
+ 0.0, sin(uTime), 0.0, 0.0,
+ 0.0, 0.0, 1.0, 0.0,
+ 0.0, 0.0, 0.0, 1.0);
+
+ gl_Position = rotMat * vec4(aVertexPosition, 0.0, 1.0);
+ }
+</script>
+<script id="fragmentshader" type="x-shader">
+ precision mediump float;
+ varying vec2 vTextureCoord;
+
+ uniform sampler2D uSampler;
+
+ void main() {
+ gl_FragColor = texture2D(uSampler, vTextureCoord);
+ }
+</script>
+<script type="text/javascript">
+
+ var canvas;
+ function initWebGL()
+ {
+ canvas = document.getElementById("canvas");
+ var gl = canvas.getContext("webgl") || canvas.getContext("experimental-webgl");
+ if (!gl) return null; // can't initialize WebGL
+ return gl;
+ }
+
+ var gl = initWebGL();
+
+ // Setup Shaders:
+ var v = document.getElementById("vertexshader").firstChild.nodeValue;
+ var f = document.getElementById("fragmentshader").firstChild.nodeValue;
+
+ var vs = gl.createShader(gl.VERTEX_SHADER);
+ gl.shaderSource(vs, v);
+ gl.compileShader(vs);
+
+ if (!gl.getShaderParameter(vs, gl.COMPILE_STATUS)) {
+ console.log(gl.getShaderInfoLog(vs));
+ }
+
+ var fs = gl.createShader(gl.FRAGMENT_SHADER);
+ gl.shaderSource(fs, f);
+ gl.compileShader(fs);
+
+ if (!gl.getShaderParameter(fs, gl.COMPILE_STATUS)) {
+ console.log(gl.getShaderInfoLog(fs));
+ }
+
+ program = gl.createProgram();
+ gl.attachShader(program, vs);
+ gl.attachShader(program, fs);
+ gl.linkProgram(program);
+
+ if (!gl.getProgramParameter(program, gl.LINK_STATUS)) {
+ console.log(gl.getProgramInfoLog(program));
+ }
+
+ gl.useProgram(program);
+
+ program.aVertexPosition = gl.getAttribLocation(program, "aVertexPosition");
+ gl.enableVertexAttribArray(program.aVertexPosition);
+
+ program.aTextureCoord = gl.getAttribLocation(program, "aTextureCoord");
+ gl.enableVertexAttribArray(program.aTextureCoord);
+
+ var rustTexture = gl.createTexture();
+ var rustImage = new Image();
+ rustImage.onload = function() { handleTextureLoaded(rustImage, rustTexture); }
+ rustImage.src = "rust-power-of-two.png";
+
+
+ // Setup Geometry
+ var vertices = new Float32Array([
+ -1.0, -1.0,
+ -1.0, 1.0,
+ 1.0, -1.0,
+ 1.0, 1.0 // Square-Coordinates
+ ]);
+
+ var textureCoords = new Float32Array([
+ 0.0, 0.0,
+ 0.0, 1.0,
+ 1.0, 0.0,
+ 1.0, 1.0
+ ]);
+
+ vbuffer = gl.createBuffer();
+ gl.bindBuffer(gl.ARRAY_BUFFER, vbuffer);
+ gl.bufferData(gl.ARRAY_BUFFER, vertices, gl.STATIC_DRAW);
+
+ uvbuffer = gl.createBuffer();
+ gl.bindBuffer(gl.ARRAY_BUFFER, uvbuffer);
+ gl.bufferData(gl.ARRAY_BUFFER, textureCoords, gl.STATIC_DRAW);
+
+ itemSize = 2; // we have 2 coordinates (x,y)
+ numItems = vertices.length / itemSize; // number of vertices
+
+ // Viewport
+ gl.viewport(0, 0, canvas.width, canvas.height);
+
+ program.time = gl.getUniformLocation(program, "uTime");
+
+ var start_time = new Date().getTime() / 1000;
+
+ setInterval(function () {
+ gl.clearColor(1, 0, 0, 1);
+ gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);
+ // Draw
+
+ gl.bindBuffer(gl.ARRAY_BUFFER, vbuffer);
+ gl.vertexAttribPointer(program.aVertexPosition, itemSize, gl.FLOAT, false, 0, 0);
+
+ gl.bindBuffer(gl.ARRAY_BUFFER, uvbuffer);
+ gl.vertexAttribPointer(program.aTextureCoord, 2, gl.FLOAT, false, 0, 0);
+
+ gl.activeTexture(gl.TEXTURE0);
+ gl.bindTexture(gl.TEXTURE_2D, rustTexture);
+ var dt = new Date().getTime() / 1000 - start_time;
+ gl.uniform1f(program.time, dt);
+
+ gl.drawArrays(gl.TRIANGLE_STRIP, 0, numItems);
+ }, 15);
+
+ function handleTextureLoaded(image, texture) {
+ console.log("handleTextureLoaded, image = " + image);
+ gl.bindTexture(gl.TEXTURE_2D, texture);
+ gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, true);
+ gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, image);
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR_MIPMAP_NEAREST);
+ gl.generateMipmap(gl.TEXTURE_2D);
+ gl.bindTexture(gl.TEXTURE_2D, null);
+ }
+
+</script>
+</body>
+</html>
diff --git a/tests/wpt/mozilla/meta/MANIFEST.json b/tests/wpt/mozilla/meta/MANIFEST.json
index 4490bc10ae3..41a4d229f32 100644
--- a/tests/wpt/mozilla/meta/MANIFEST.json
+++ b/tests/wpt/mozilla/meta/MANIFEST.json
@@ -5647,6 +5647,18 @@
"url": "/_mozilla/mozilla/webgl/tex_image_2d_canvas_no_context.html"
}
],
+ "mozilla/webgl/tex_image_2d_mipmap.html": [
+ {
+ "path": "mozilla/webgl/tex_image_2d_mipmap.html",
+ "references": [
+ [
+ "/_mozilla/mozilla/webgl/tex_image_2d_simple_ref.html",
+ "=="
+ ]
+ ],
+ "url": "/_mozilla/mozilla/webgl/tex_image_2d_mipmap.html"
+ }
+ ],
"mozilla/webgl/tex_image_2d_simple.html": [
{
"path": "mozilla/webgl/tex_image_2d_simple.html",
@@ -12093,6 +12105,18 @@
"url": "/_mozilla/mozilla/webgl/tex_image_2d_canvas_no_context.html"
}
],
+ "mozilla/webgl/tex_image_2d_mipmap.html": [
+ {
+ "path": "mozilla/webgl/tex_image_2d_mipmap.html",
+ "references": [
+ [
+ "/_mozilla/mozilla/webgl/tex_image_2d_simple_ref.html",
+ "=="
+ ]
+ ],
+ "url": "/_mozilla/mozilla/webgl/tex_image_2d_mipmap.html"
+ }
+ ],
"mozilla/webgl/tex_image_2d_simple.html": [
{
"path": "mozilla/webgl/tex_image_2d_simple.html",
diff --git a/tests/wpt/mozilla/tests/mozilla/webgl/tex_image_2d_mipmap.html b/tests/wpt/mozilla/tests/mozilla/webgl/tex_image_2d_mipmap.html
new file mode 100644
index 00000000000..ed8779c4252
--- /dev/null
+++ b/tests/wpt/mozilla/tests/mozilla/webgl/tex_image_2d_mipmap.html
@@ -0,0 +1,116 @@
+<!doctype html>
+<html class="reftest-wait">
+ <link rel="match" href="tex_image_2d_simple_ref.html"></link>
+ <meta charset="utf-8">
+ <title>WebGL texture test</title>
+ <!--
+ This test should show a 256x256 rust logo
+ -->
+ <style>
+ html, body { margin: 0 }
+ </style>
+ <canvas id="c" width="256" height="256"></canvas>
+ <script id="vertex_shader" type="x-shader/x-vertex">
+ precision mediump float;
+ attribute vec2 a_texCoord;
+ attribute vec2 a_position;
+ varying vec2 v_texCoord;
+
+ void main() {
+ gl_Position = vec4(a_position, 0, 1);
+ v_texCoord = a_texCoord;
+ }
+ </script>
+
+ <script id="fragment_shader" type="x-shader/x-fragment">
+ precision mediump float;
+ uniform sampler2D u_image;
+ varying vec2 v_texCoord;
+ void main() {
+ gl_FragColor = texture2D(u_image, v_texCoord);
+ }
+ </script>
+ <script>
+ var gl = document.getElementById('c').getContext('webgl');
+
+ // Clear white
+ gl.clearColor(1, 1, 1, 1);
+ gl.clear(gl.COLOR_BUFFER_BIT);
+
+ // Create the program
+ var vertex_shader = gl.createShader(gl.VERTEX_SHADER),
+ fragment_shader = gl.createShader(gl.FRAGMENT_SHADER),
+ program = gl.createProgram();
+
+ gl.shaderSource(vertex_shader,
+ document.getElementById('vertex_shader').textContent);
+ gl.shaderSource(fragment_shader,
+ document.getElementById('fragment_shader').textContent);
+ gl.compileShader(vertex_shader);
+ gl.compileShader(fragment_shader);
+ gl.attachShader(program, vertex_shader);
+ gl.attachShader(program, fragment_shader);
+ console.log(gl.getShaderInfoLog(vertex_shader));
+ console.log(gl.getShaderInfoLog(fragment_shader));
+ gl.linkProgram(program);
+ gl.useProgram(program);
+
+ // Get the position from the fragment shader
+ var position = gl.getAttribLocation(program, "a_position");
+ var tex_position = gl.getAttribLocation(program, "a_texCoord");
+
+ var texture_coordinates = new Float32Array([
+ 0.0, 0.0,
+ 1.0, 0.0,
+ 0.0, 1.0,
+ 0.0, 1.0,
+ 1.0, 0.0,
+ 1.0, 1.0
+ ]);
+
+ var texture_buffer = gl.createBuffer();
+ gl.bindBuffer(gl.ARRAY_BUFFER, texture_buffer);
+ gl.bufferData(gl.ARRAY_BUFFER, texture_coordinates, gl.STATIC_DRAW);
+ gl.enableVertexAttribArray(tex_position);
+ gl.vertexAttribPointer(tex_position, 2, gl.FLOAT, false, 0, 0);
+
+ var square_data = new Float32Array([
+ -1.0, 1.0, // top left
+ 1.0, 1.0, // top right
+ -1.0, -1.0, // bottom left
+ -1.0, -1.0, // bottom left
+ 1.0, 1.0, // top right
+ 1.0, -1.0 // bottom right
+ ]);
+
+ // Create a buffer for the square with the square
+ // vertex data
+ var square_buffer = gl.createBuffer();
+ gl.bindBuffer(gl.ARRAY_BUFFER, square_buffer);
+ gl.bufferData(gl.ARRAY_BUFFER, square_data, gl.STATIC_DRAW);
+
+ gl.enableVertexAttribArray(position);
+ gl.vertexAttribPointer(position, 2, gl.FLOAT, false, 0, 0);
+
+ // Load the texture and draw
+ var image = new Image();
+ image.width = image.height = 256;
+ // Base-64 to allow the reftest to finish
+ image.src = "img/rust-logo-256x256.png";
+
+ image.onload = function () {
+ var tex = gl.createTexture();
+ gl.bindTexture(gl.TEXTURE_2D, tex);
+
+ console.log(gl.getError() == gl.NO_ERROR);
+
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR_MIPMAP_NEAREST);
+ gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, image);
+ gl.generateMipmap(gl.TEXTURE_2D);
+
+ gl.drawArrays(gl.TRIANGLES, 0, 6);
+ document.documentElement.classList.remove("reftest-wait");
+ }
+ </script>
+</html>
diff --git a/tests/wpt/mozilla/tests/mozilla/webgl/tex_image_2d_mipmap_ref.html b/tests/wpt/mozilla/tests/mozilla/webgl/tex_image_2d_mipmap_ref.html
new file mode 100644
index 00000000000..5f74c0c923a
--- /dev/null
+++ b/tests/wpt/mozilla/tests/mozilla/webgl/tex_image_2d_mipmap_ref.html
@@ -0,0 +1,10 @@
+<!doctype html>
+<meta charset="utf-8">
+<title>WebGL texture test</title>
+<!--
+ This test should show a 256x256 rust logo
+-->
+<style>
+ html, body { margin: 0 }
+</style>
+<img src="img/rust-logo-256x256.png">