| <!DOCTYPE html> |
| <html> |
| <head> |
| <script src="../../../resources/js-test-pre.js"></script> |
| </head> |
| <body> |
| <canvas id="canvas" width="40" height="40"></canvas> |
| <script> |
| description("Make sure that getBufferSubData() doesn't work on WebGL 1 contexts"); |
| |
| if (window.internals) |
| internals.settings.setWebGL2Enabled(true); |
| |
| var arrayBuffer = new ArrayBuffer(40); |
| var fullArrayView = new Float32Array(arrayBuffer); // [15, 16, 17, 18, 19, 20, 21, 22, 23, 24], 40 bytes |
| var receiver = new Float32Array(20); // 20 floats, 80 bytes |
| for (var i = 0; i < 10; ++i) |
| fullArrayView[i] = 15 + i; |
| |
| var canvas = document.getElementById("canvas"); |
| var context = canvas.getContext("webgl2"); |
| |
| var targets = [context.ARRAY_BUFFER, context.COPY_READ_BUFFER, context.COPY_WRITE_BUFFER, context.PIXEL_PACK_BUFFER, context.PIXEL_UNPACK_BUFFER, context.TRANSFORM_FEEDBACK_BUFFER, context.UNIFORM_BUFFER]; |
| targets.forEach(function(i) { |
| targets.forEach(function(j) { |
| if (i != j) { |
| testCopy(i, j); |
| } |
| }); |
| }); |
| |
| function testCopy(readTarget, writeTarget) { |
| var buffer1 = context.createBuffer(); |
| shouldBe("context.getError()", "context.NO_ERROR"); |
| context.bindBuffer(readTarget, buffer1); |
| shouldBe("context.getError()", "context.NO_ERROR"); |
| context.bufferData(readTarget, arrayBuffer, context.STATIC_DRAW); |
| shouldBe("context.getError()", "context.NO_ERROR"); |
| |
| var buffer2 = context.createBuffer(); |
| shouldBe("context.getError()", "context.NO_ERROR"); |
| context.bindBuffer(writeTarget, buffer2); |
| shouldBe("context.getError()", "context.NO_ERROR"); |
| context.bufferData(writeTarget, arrayBuffer, context.STATIC_DRAW); |
| shouldBe("context.getError()", "context.NO_ERROR"); |
| |
| context.copyBufferSubData(readTarget, writeTarget, 0, 4, 4); |
| shouldBe("context.getError()", "context.NO_ERROR"); |
| context.getBufferSubData(writeTarget, 0, receiver, 0, 10); |
| shouldBe("context.getError()", "context.NO_ERROR"); |
| shouldBe("receiver[0]", "fullArrayView[0]"); |
| shouldBe("receiver[1]", "fullArrayView[0]"); |
| for (var i = 2; i < 10; ++i) |
| shouldBe("receiver[" + i + "]", "fullArrayView[" + i + "]"); |
| |
| context.copyBufferSubData(readTarget, writeTarget, 0, 0, 40); |
| shouldBe("context.getError()", "context.NO_ERROR"); |
| context.getBufferSubData(writeTarget, 0, receiver, 0, 10); |
| shouldBe("context.getError()", "context.NO_ERROR"); |
| for (var i = 0; i < 10; ++i) |
| shouldBe("receiver[" + i + "]", "fullArrayView[" + i + "]"); |
| |
| context.copyBufferSubData(readTarget, writeTarget, 4, 0, 4); |
| shouldBe("context.getError()", "context.NO_ERROR"); |
| context.getBufferSubData(writeTarget, 0, receiver, 0, 10); |
| shouldBe("context.getError()", "context.NO_ERROR"); |
| shouldBe("receiver[0]", "fullArrayView[1]"); |
| for (var i = 1; i < 10; ++i) |
| shouldBe("receiver[" + i + "]", "fullArrayView[" + i + "]"); |
| |
| context.copyBufferSubData(readTarget, writeTarget, 0, 0, 40); |
| shouldBe("context.getError()", "context.NO_ERROR"); |
| context.getBufferSubData(writeTarget, 0, receiver, 0, 10); |
| shouldBe("context.getError()", "context.NO_ERROR"); |
| for (var i = 0; i < 10; ++i) |
| shouldBe("receiver[" + i + "]", "fullArrayView[" + i + "]"); |
| |
| context.copyBufferSubData(writeTarget, writeTarget, 4, 8, 4); |
| shouldBe("context.getError()", "context.NO_ERROR"); |
| context.getBufferSubData(writeTarget, 0, receiver, 0, 10); |
| shouldBe("context.getError()", "context.NO_ERROR"); |
| shouldBe("receiver[0]", "fullArrayView[0]"); |
| shouldBe("receiver[1]", "fullArrayView[1]"); |
| shouldBe("receiver[2]", "fullArrayView[1]"); |
| for (var i = 3; i < 10; ++i) |
| shouldBe("receiver[" + i + "]", "fullArrayView[" + i + "]"); |
| |
| context.deleteBuffer(buffer1); |
| shouldBe("context.getError()", "context.NO_ERROR"); |
| context.deleteBuffer(buffer2); |
| shouldBe("context.getError()", "context.NO_ERROR"); |
| } |
| |
| </script> |
| <script src="../../../resources/js-test-post.js"></script> |
| </body> |
| </html> |