Webgl gl_VertexID 受 drawArrays 偏移影响?
Webgl gl_VertexID affected by drawArrays offset?
当 drawArrays 以偏移量调用时,("first" 参数非零),第一个 gl_VertexID 仍然从 0 开始,还是从偏移值开始?
更新
这似乎是 Windows 上 ANGLE 中的一个错误。提交错误
https://github.com/KhronosGroup/WebGL/issues/2770
我们来试试
[...document.querySelectorAll('canvas')].forEach((canvas, ndx) => {
const vs = `#version 300 es
void main() {
gl_Position = vec4(float(gl_VertexID) / 10., 0, 0, 1);
gl_PointSize = 10.0;
}`;
const fs = `#version 300 es
precision mediump float;
out vec4 outColor;
void main() {
outColor = vec4(1, 0, 0, 1);
}`;
const gl = canvas.getContext('webgl2');
if (!gl) {
return alert('need webgl2');
}
const prg = twgl.createProgram(gl, [vs, fs]);
gl.useProgram(prg);
gl.drawArrays(gl.POINTS, ndx * 5, 5);
});
canvas {border: 1px solid black;}
<script src="https://twgljs.org/dist/4.x/twgl.min.js"></script>
<canvas></canvas>
<canvas></canvas>
看起来答案是从偏移值开始。
当 drawArrays 以偏移量调用时,("first" 参数非零),第一个 gl_VertexID 仍然从 0 开始,还是从偏移值开始?
更新
这似乎是 Windows 上 ANGLE 中的一个错误。提交错误
https://github.com/KhronosGroup/WebGL/issues/2770
我们来试试
[...document.querySelectorAll('canvas')].forEach((canvas, ndx) => {
const vs = `#version 300 es
void main() {
gl_Position = vec4(float(gl_VertexID) / 10., 0, 0, 1);
gl_PointSize = 10.0;
}`;
const fs = `#version 300 es
precision mediump float;
out vec4 outColor;
void main() {
outColor = vec4(1, 0, 0, 1);
}`;
const gl = canvas.getContext('webgl2');
if (!gl) {
return alert('need webgl2');
}
const prg = twgl.createProgram(gl, [vs, fs]);
gl.useProgram(prg);
gl.drawArrays(gl.POINTS, ndx * 5, 5);
});
canvas {border: 1px solid black;}
<script src="https://twgljs.org/dist/4.x/twgl.min.js"></script>
<canvas></canvas>
<canvas></canvas>
看起来答案是从偏移值开始。