suchen

Heim  >  Fragen und Antworten  >  Hauptteil

WebGL unterstützt keine Indexzeichnung mit Index 255

<p>Dies ist das einfachste WebGL-Testprogramm, das einen Indexpuffer mit nur einem uint8-Wert von 255 erstellt. Es sollte ein rotes Quadrat mit einer Größe von 64 Pixeln gezeichnet werden, aber das ist nicht der Fall (der Indexwert spielt für das Zeichnen keine Rolle). </p> <p>Irgendwie ignoriert WebGL das Element bei Index 255, obwohl es im vorzeichenlosen Bytebereich liegt. Bei 254 oder anderen Werten erscheint das rote Quadrat wie erwartet. </p> <p>Ist das ein Fehler in WebGL oder erwartetes Verhalten? Ich kann keine relevanten Informationen finden. </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, neues 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 Präzisions-Hochschwimmer; aus vec4 Farbe; void main() { Farbe = 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 Tage vor484

Antworte allen(1)Ich werde antworten

  • P粉476883986

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

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

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

    Antwort
    0
  • StornierenAntwort