2013-09-21 34 views
1

据我所知,在渲染点时,gl_PointCoord始终可用于OpenGL 3中的片段着色器;但另一方面,GLSL 1.20规范说它只有在“点精灵启用”(我打算在致电glEnable(GL_POINT_SPRITE)之后表示)后才可用。使用不同版本的GLSL/OpenGL时,点精灵如何工作?

看到这两条语句如何冲突,并且GL_POINT_SPRITE在OpenGL 3中不可用,何时gl_PointCoord实际上可用?它取决于#version指令,还是取决于您获得的GL配置文件,或者是什么?

此外,这是如何与点形状相互作用的?据我了解,当MSAA关闭时,点呈现为正方形,而MSAA打开时呈现为圆形。当GL_POINT_SPRITE可用时,他们似乎总是被渲染为正方形,当它被启用时,很简单,但是如何在OpenGL 3中正确控制它?当一个人想让他们变成平方时,人们应该简单地在点渲染调用时关闭多重采样?

回答

1

gl_PointCoord始终 “可用”(充满了有意义的值)GL_POINT原语核心的OpenGL。在兼容性配置文件或不提供GLSL 130的实施中,您必须启用GL_POINT_SPRITE

+0

“这是你实际上指的是当你讨论要么正方形或圆形的点。” - 不,当我打开MSAA时,点呈现为圆形。我从不碰触GL_POINT_SMOOTH状态。 – Dolda2000

+0

啊,是的,这是改变了。您可以通过在更新版本的OpenGL中启用或禁用MSAA来更改此行为。它反映了老派OpenGL中'GL_POINT_SMOOTH'的行为。 –

+0

为了正确理解你的答案的第一部分,你是否说我只要获得兼容性配置文件(即使是OpenGL 4兼容性,并使用最新的GLSL'#版本),我就需要启用'GL_POINT_SPRITE'确保'gl_PointCoord'可用?假设GLES2 +始终可用,是否也是安全的? – Dolda2000

0

只需在此添加相关错误:无论您是否使用glEnable(0x8861),Sandy Bridge GPU的Windows 7-10驱动程序总是会在GL 3.1内核配置文件中返回(0,0)gl_PointCoord。驱动程序在兼容性配置文件中正常工作。