使用以下代码:
// where gl is WebGL2RenderingContext, but I tried WebGLRenderingContext as well.
gl.drawArrays(gl.POINTS, 0, points.length / 2);
#version 300 es
in vec2 position;
void main() {
gl_Position = vec4(position, 0.0, 1.0);
}
我的画布没有在画布上渲染任何
points
。然而,当第一个参数 mode
为 gl.LINES
时,互连点渲染得很好。我还注意到这个问题只发生在某些 GPU 浏览器的硬件加速模式下——它在 Linux 上运行良好,但在 Windows 上则不然。
如何正确渲染点?
gl_PointSize
:
#version 300 es
in vec2 position;
void main() {
gl_Position = vec4(position, 0.0, 1.0);
gl_PointSize = 1.0;
}
在
gl_PointSize
文档中:
如果相应的着色器可执行文件未写入 gl_PointSize,则在顶点、曲面细分控制和曲面细分评估着色阶段之后,gl_PointSize(或 gl_out[] 数组的 gl_PointSize 成员,在曲面细分控制着色器的情况下)的值未定义
gl_PointSize
是 undefined
,因此由实现者的默认值决定。在某些 GPU 上,默认值为 1.0
,但在某些 GPU 上默认值也是 0.0
,导致点无法渲染。