首页  >  问答  >  正文

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粉265724930450 天前443

全部回复(1)我来回复

  • P粉476883986

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

    查看WebGL 2.0规范 - PRIMITIVE_RESTART_FIXED_INDEX始终启用

    因此,如果索引类型是UNSIGNED_BYTE,索引255是原始重启索引,不能用于索引顶点。

    回复
    0
  • 取消回复