WebGL はインデックス 255 を使用したインデックス描画をサポートしていません
P粉265724930
2023-08-17 12:37:59
<p>これは最も単純な WebGL テスト プログラムで、uint8 値 255 を 1 つだけ含むインデックス バッファを作成します。サイズ 64px の赤い正方形が描画されるはずですが、描画されません (描画にはインデックス値は関係ありません)。 </p>
<p>WebGL は、符号なしバイト範囲内にあるにもかかわらず、インデックス 255 の要素を無視します。 254 またはその他の値を使用すると、赤い四角形が期待どおりに表示されます。 </p>
<p>これは WebGL のバグですか、それとも予想される動作ですか?関連する情報が見つかりません。 </p>
<pre class="brush:php;toolbar:false;"><canvas width="800" height="600"></canvas>
<スクリプトタイプ="モジュール">
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);
</script></pre>
<p><br /></p>
表示 WebGL 2.0 仕様 - PRIMITIVE_RESTART_FIXED_INDEX は常に有効です :
したがって、インデックス タイプが
UNSIGNED_BYTE
の場合、インデックス 255 は original restart インデックスであり、頂点のインデックス付けには使用できません。