これは最も単純な WebGL テスト プログラムで、uint8 値 255 を 1 つだけ含むインデックス バッファを作成します。サイズ 64px の赤い正方形が描画されるはずですが、描画されません (描画にはインデックス値は関係ありません)。
WebGL は、符号なしバイト範囲内にあるにもかかわらず、インデックス 255 の要素を無視します。 254 またはその他の値を使用すると、赤い四角形が期待どおりに表示されます。
これは WebGL のバグですか、それとも予想される動作ですか?関連する情報が見つかりません。
<スクリプトタイプ="モジュール"> 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(); letindex_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, `#バージョン 300 es ボイドメイン() { gl_Position = vec4(pos, 1); gl_PointSize = 64.0; } `); gl.shaderSource(frag, `#バージョン 300 es 精度の高い浮動小数点; vec4 カラーを出力します。 ボイドメイン() { カラー = 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);
表示WebGL 2.0 仕様 - PRIMITIVE_RESTART_FIXED_INDEX は常に有効です:
したがって、インデックス タイプが
UNSIGNED_BYTE
の場合、インデックス 255 はoriginal restartインデックスであり、頂点のインデックス付けには使用できません。