WebGL unterstützt keine Indexzeichnung mit Index 255
P粉265724930
P粉265724930 2023-08-17 12:37:59
0
1
456
<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粉265724930
P粉265724930

Antworte allen(1)
P粉476883986

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

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

Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage