搜尋

首頁  >  問答  >  主體

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>
P粉265724930P粉265724930511 天前486

全部回覆(1)我來回復

  • P粉476883986

    P粉4768839862023-08-18 00:14:57

    檢視WebGL 2.0規格 - PRIMITIVE_RESTART_FIXED_INDEX始終啟用

    因此,如果索引類型是UNSIGNED_BYTE,則索引255是原始重啟索引,不能用於索引頂點。

    回覆
    0
  • 取消回覆