2013-09-21 23 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。驅動程序在兼容性配置文件中正常工作。