【问题标题】:Updating legacy GLSL shaders to modern GLSL将传统 GLSL 着色器更新为现代 GLSL
【发布时间】:2016-12-10 00:08:41
【问题描述】:

我正在尝试更新我拥有的旧 GLSL 120 着色器,虽然其中大部分内容很简单,但我遇到了以下问题:

顶点着色器: gl_FrontSecondaryColor, gl_FrontColor

片段着色器: gl_Color, gl_SecondaryColor

问题是我无法为任何 3.x 及更高版本找到充足的替代品。

例如: gl_FragColor 的替换是创建

layout (location = 0) out vec4 fragColor;

但是对于上述其他的,它们将如何处理?

【问题讨论】:

  • OpenGL图形管线变化很大,看看learnopengl.com/#!Advanced-OpenGL/Advanced-GLSL
  • @MrKiwi 是的,它已经发生了很大变化,但我指的是现代等价物,就像你不再使用 gl_FragColor、gl_ProjectViewMatrix 等一样。相反,您可以创建自己的制服和变量。

标签: glsl shader


【解决方案1】:

gl_FrontSecondaryColor, gl_FrontColor

这些只是顶点着色器的输出。它们在任何方面都没有什么特别之处。

gl_Color, gl_SecondaryColor

这些是神奇的片段着色器,可以在着色器中有效地执行条件逻辑。他们进行正面/背面测试,然后获取适当种类的正面或背面颜色。

因此,如果您要进行双面渲染,则必须自己进行测试。 VS 会输出一个前后值,而 FS 会同时输入这两个值,但要根据三角形的朝向选择一个来使用。 built-in gl_FrontFace variable 告诉当前人脸是正面还是背面。您可以使用它来选择要使用的输入值。

如果您不进行双面渲染...您不在乎。你只有一个 VS 输出和一个 FS 输入。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-14
    • 1970-01-01
    • 1970-01-01
    • 2017-11-03
    • 2013-02-03
    • 1970-01-01
    相关资源
    最近更新 更多