122 lines
3.6 KiB
HTML
122 lines
3.6 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="en">
|
|
|
|
<head>
|
|
<title>WebGL 2 Samples - draw_primitive_restart</title>
|
|
<meta charset="utf-8">
|
|
<link rel="stylesheet" href="2.0.0/resources/webgl_test_files/resources/js-test-style.css">
|
|
<script src="2.0.0/resources/webgl_test_files/js/js-test-pre.js"></script>
|
|
<script src="2.0.0/resources/webgl_test_files/js/webgl-test-utils.js"></script>
|
|
</head>
|
|
|
|
<body>
|
|
<div id="info">WebGL 2 Samples - draw_primitive_restart</div>
|
|
<div id="console"></div>
|
|
|
|
<script id="vs" type="x-shader/x-vertex">#version 300 es
|
|
precision highp float;
|
|
precision highp int;
|
|
|
|
layout(location = 0) in vec2 pos;
|
|
|
|
void main()
|
|
{
|
|
gl_Position = vec4(pos, 0.0, 1.0);
|
|
}
|
|
</script>
|
|
|
|
<script id="fs" type="x-shader/x-fragment">#version 300 es
|
|
precision highp float;
|
|
precision highp int;
|
|
|
|
out vec4 color;
|
|
|
|
void main()
|
|
{
|
|
color = vec4(1.0, 0.5, 0.0, 1.0);
|
|
}
|
|
</script>
|
|
|
|
<script>
|
|
(function () {
|
|
'use strict';
|
|
var wtu = WebGLTestUtils;
|
|
|
|
// -- Init Canvas
|
|
var canvas = document.createElement('canvas');
|
|
canvas.width = 200;
|
|
canvas.height = canvas.width;
|
|
document.body.appendChild(canvas);
|
|
|
|
// -- Init WebGL Context
|
|
var gl = canvas.getContext('webgl2', { antialias: false });
|
|
var isWebGL2 = !!gl;
|
|
if (!isWebGL2) {
|
|
testFailed("WebGL 2 context does not exist");
|
|
return;
|
|
}
|
|
|
|
testPassed("WebGL 2 context exists");
|
|
|
|
// -- Init Program
|
|
var program = wtu.setupProgram(gl, ["vs", "fs"]);
|
|
gl.useProgram(program);
|
|
|
|
// -- Init Buffer
|
|
var vertices = new Float32Array([
|
|
-1.0, -1.0,
|
|
-1.0, 1.0,
|
|
1.0, -1.0,
|
|
1.0, 1.0
|
|
]);
|
|
|
|
var vertexPosBuffer = gl.createBuffer();
|
|
gl.bindBuffer(gl.ARRAY_BUFFER, vertexPosBuffer);
|
|
gl.bufferData(gl.ARRAY_BUFFER, vertices, gl.STATIC_DRAW);
|
|
gl.bindBuffer(gl.ARRAY_BUFFER, null);
|
|
|
|
// https://www.khronos.org/registry/webgl/specs/latest/2.0/#5.18
|
|
// WebGL 2.0 behaves as though PRIMITIVE_RESTART_FIXED_INDEX were always enabled.
|
|
var MAX_UNSIGNED_SHORT = 65535;
|
|
var num_vertices = 7;
|
|
var indices = new Uint16Array([
|
|
0, 1, 2, MAX_UNSIGNED_SHORT, 2, 3, 1
|
|
]);
|
|
|
|
var vertexElementBuffer = gl.createBuffer();
|
|
gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, vertexElementBuffer);
|
|
gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, indices, gl.STATIC_DRAW);
|
|
gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, null);
|
|
|
|
// -- Init Vertex Array
|
|
var vertexArray = gl.createVertexArray();
|
|
gl.bindVertexArray(vertexArray);
|
|
|
|
var vertexPosLocation = 0;
|
|
gl.bindBuffer(gl.ARRAY_BUFFER, vertexPosBuffer);
|
|
gl.enableVertexAttribArray(vertexPosLocation);
|
|
gl.vertexAttribPointer(vertexPosLocation, 2, gl.FLOAT, false, 0, 0);
|
|
gl.bindBuffer(gl.ARRAY_BUFFER, null);
|
|
|
|
gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, vertexElementBuffer);
|
|
|
|
gl.bindVertexArray(null);
|
|
|
|
// -- Render
|
|
gl.clearColor(0.0, 0.0, 0.0, 1.0);
|
|
gl.clear(gl.COLOR_BUFFER_BIT);
|
|
|
|
gl.bindVertexArray(vertexArray);
|
|
|
|
gl.drawElements(gl.TRIANGLE_STRIP, 7, gl.UNSIGNED_SHORT, 0);
|
|
|
|
// -- Delete WebGL resources
|
|
gl.deleteBuffer(vertexPosBuffer);
|
|
gl.deleteBuffer(vertexElementBuffer);
|
|
gl.deleteProgram(program);
|
|
gl.deleteVertexArray(vertexArray);
|
|
})();
|
|
</script>
|
|
</body>
|
|
</html>
|