WebGL tidak menyokong lukisan indeks menggunakan indeks 255
P粉265724930
2023-08-17 12:37:59
<p>Ini ialah program ujian WebGL yang paling mudah, yang mencipta penimbal indeks dengan hanya satu nilai uint8 255. Ia sepatutnya melukis segi empat sama merah bersaiz 64px, tetapi tidak (nilai indeks tidak penting untuk lukisan). </p>
<p>Entah bagaimana WebGL mengabaikan elemen pada indeks 255 walaupun ia berada dalam julat bait yang tidak ditandatangani. Menggunakan 254 atau nilai lain, segi empat sama merah muncul seperti yang dijangkakan. </p>
<p>Adakah ini pepijat dalam WebGL atau tingkah laku yang dijangkakan? Saya tidak dapat mencari sebarang maklumat yang berkaitan. </p>
<pre class="brush:php;toolbar:false;"><canvas width="800" height="600"></canvas>
<script type="modul">
biarkan kanvas = document.querySelector("kanvas");
biarkan gl = canvas.getContext("webgl2", {antialias: false});
biarkan vert = gl.createShader(gl.VERTEX_SHADER);
biarkan frag = gl.createShader(gl.FRAGMENT_SHADER);
biarkan prog = gl.createProgram();
biarkan index_buf = gl.createBuffer();
gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, index_buf);
gl.bufferData(
gl.ELEMENT_ARRAY_BUFFER, Uint8Array([255]), gl.STATIC_DRAW
);
gl.shaderSource(vert, `#versi 300 es
batal utama()
{
gl_Position = vec4(pos, 1);
gl_PointSize = 64.0;
}
`);
gl.shaderSource(frag, `#versi 300 es
terapung tinggi ketepatan;
keluar warna vec4;
batal utama()
{
warna = 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>
Lihat Spesifikasi WebGL 2.0 - PRIMITIVE_RESTART_FIXED_INDEX sentiasa didayakan :
Jadi jika jenis indeks ialah
UNSIGNED_BYTE
, indeks 255 ialah indeks mula semula mentah dan tidak boleh digunakan untuk mengindeks bucu.