我一直在使用OpenGL编写程序。最近,我开始学习OpenGL着色语言。我是新手;所以请在你的答案中详细说明。OpenGL着色语言不同类型的变量(限定符)
我的问题是:
- 什么是不同类型的变量(预选赛)在GLSL?
- 它们用于什么?
- 它们有什么不同?
我只熟悉从“顶点着色器”传递到要在顶点之间进行插值的片段着色器的“变化”变量。除此之外,我什么都不知道。
我一直在使用OpenGL编写程序。最近,我开始学习OpenGL着色语言。我是新手;所以请在你的答案中详细说明。OpenGL着色语言不同类型的变量(限定符)
我的问题是:
我只熟悉从“顶点着色器”传递到要在顶点之间进行插值的片段着色器的“变化”变量。除此之外,我什么都不知道。
在OpenGL中3+:
varying
已被弃用const
是......嗯,常量!uniform
为每绘图调用(至多)如果使用glAttribDivisor和硬件instanciationin
是用于从前面的流水线级,至多即每个顶点(或每片段)值的输入,每原始out
是用于输出到下一阶段关于用于片段着色器输出:在OpenGL3和向上,大多数内置的片段着色器输出(如gl_FragColor
,具有gl_FragDepth
显着的例外)变量被弃用的并应予以更换用户定义的out
变量。
如果要输出到默认帧缓冲区,则无论您声明为片段着色器的输出结果在颜色缓冲区中。如果您将FBO绑定到多个颜色缓冲区(即多个渲染目标),则需要通过glBindFragDataLocationIndexed
手动将每个out
变量绑定到正确的颜色缓冲区索引。
所有你所能想约两个GLSL(“服务器”)端和OpenGL的细节(“客户”)侧,可以发现:
太好了,非常感谢!只有一个小问题,片段着色器的下一个阶段是什么?如果你的片段着色器定义了一个“out”变量,那个变量的值被传递给哪个变量? – Einiosaurus 2011-06-01 08:33:55
编辑我的答案,以澄清片段着色器输出的问题! – 2011-06-01 09:10:36
“片段着色器的下一个阶段是什么?” - > 2011年没有,但每个人都期待“混合着色器”而不是丑陋的glBlendFunc。编辑:+1用精确页面引用规格。 – Calvin1602 2011-06-01 19:08:18
谢谢大家的回答。从一些在线资源中,我找到了关于两个限定符“in”和“out”的信息,它们也可以用于顶点 - 片段着色器通信。它们与“不同”限定符非常相似。他们是一个单独的“限定词”级别还是仅仅是“不同”限定词的替代? – Einiosaurus 2011-06-01 05:09:33