blob: f2c47890d0a2af296ad89c1a00f06da02fb9ed9a [file] [log] [blame]
<style>
canvas {
width: 10px;
height: 10px;
}
</style>
<script>
if (window.testRunner) {
testRunner.waitUntilDone();
}
const WIDTH = 10;
const HEIGHT = 10;
const COLORS = [
[0, 0, 1, 1],
[0, 1, 1, 1],
[0, 0.5, 0, 1],
[1, 0, 1, 1],
[1, 1, 0.5, 1],
[0.5, 0, 1, 1],
[0.5, 0.5, 0.5, 1],
[0.5, 0.5, 1, 1],
[0.25, 0, 1, 1],
[0, 1, 0, 1]
];
let canvas;
let gl;
let currentFrame = 0;
function step1() {
// Step 1. Create a WebGL canvas and render into it.
// We do this for 10 frames, each time a different color ending in pure green (0, 1, 0, 1).
canvas = document.querySelector("canvas");
canvas.width = WIDTH;
canvas.height = HEIGHT;
gl = canvas.getContext("webgl");
function clearToColor() {
if (currentFrame >= COLORS.length) {
requestAnimationFrame(step2);
return;
}
gl.clearColor(...COLORS[currentFrame]);
gl.clear(gl.COLOR_BUFFER_BIT);
currentFrame++;
requestAnimationFrame(clearToColor);
}
clearToColor();
}
function step2() {
// Step 2. Create a framebuffer and render into it, but don't draw into the canvas.");
const texture = gl.createTexture();
gl.bindTexture(gl.TEXTURE_2D, texture);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, WIDTH, HEIGHT, 0, gl.RGBA, gl.UNSIGNED_BYTE, null);
const framebuffer = gl.createFramebuffer();
gl.bindFramebuffer(gl.FRAMEBUFFER, framebuffer);
gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, texture, 0);
// Clear framebuffer to red (1, 0, 0, 1). This color was not used above.
gl.clearColor(1, 0, 0, 1);
gl.clear(gl.COLOR_BUFFER_BIT);
gl.bindFramebuffer(gl.FRAMEBUFFER, null);
// Step 3. Remove the canvas from its parent.
canvas.parentNode.removeChild(canvas);
// Step 4. Insert the canvas into a new parent.
document.getElementById("container2").appendChild(canvas);
// End result should be a green canvas.
if (window.testRunner)
testRunner.notifyDone();
}
function runTest() {
requestAnimationFrame(step1);
}
window.addEventListener("load", runTest, false);
</script>
<div id="container1">
<canvas></canvas>
</div>
<div id="container2">
</div>