WebGL不支援使用索引255進行索引繪製
<p>這是一個最簡單的WebGL測試程序,它創建了一個只有一個uint8值為255的索引緩衝區。它應該繪製一個大小為64px的紅色正方形,但實際上並沒有(索引值對於繪製並不重要)。 </p>
<p>不知何故,WebGL忽略了索引為255的元素,儘管它在無符號位元組範圍內。使用254或其他值,紅色正方形會如預期出現。 </p>
<p>這是WebGL的一個bug還是預期行為?我找不到任何相關資訊。 </p>
<pre class="brush:php;toolbar:false;"><canvas width="800" height="600"></canvas>
<script type="module">
let canvas = document.querySelector("canvas");
let gl = canvas.getContext("webgl2", {antialias: false});
let vert = gl.createShader(gl.VERTEX_SHADER);
let frag = gl.createShader(gl.FRAGMENT_SHADER);
let prog = gl.createProgram();
let index_buf = gl.createBuffer();
gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, index_buf);
gl.bufferData(
gl.ELEMENT_ARRAY_BUFFER, new Uint8Array([255]), gl.STATIC_DRAW
);
gl.shaderSource(vert, `#version 300 es
void main()
{
gl_Position = vec4(pos, 1);
gl_PointSize = 64.0;
}
`);
gl.shaderSource(frag, `#version 300 es
precision highp float;
out vec4 color;
void main()
{
color = vec4(1,0,0,1);
}
`);
gl.compileShader(vert);
gl.compileShader(frag);
gl.attachShader(prog, vert);
gl.attachShader(prog, frag);
gl.linkProgram(prog);
gl.clearColor(0, 0, 0, 1);
gl.clear(gl.COLOR_BUFFER_BIT);
gl.useProgram(prog);
gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, index_buf);
gl.drawElements(gl.POINTS, 1, gl.UNSIGNED_BYTE, 0);
</script></pre>
<p><br /></p>