Opengl 程序管道着色器变量交换

Opengl 程序管道着色器变量交换,opengl,opengl-3,Opengl,Opengl 3,我需要一个vec4和一个float从顶点着色器传递到几何体着色器,然后传递到片段着色器。3个着色器属于3个不同的程序,以保持统一唯一,并且3个着色器收集在单个程序管道中,并根据需要附加/分离几何体着色器 GL_ARB_separate_shader_对象扩展说明: GLSL有一个“按名称会合”模型,用于将不同的输出变量连接到后续着色器的不同输入变量。对于单独的着色器,无法保证前面的着色器是否会写入给定的用户定义输入变量。HLSL9、Cg和OpenGL汇编扩展程序通过使用“API资源集合”模型来处

我需要一个vec4和一个float从顶点着色器传递到几何体着色器,然后传递到片段着色器。3个着色器属于3个不同的程序,以保持统一唯一,并且3个着色器收集在单个程序管道中,并根据需要附加/分离几何体着色器

GL_ARB_separate_shader_对象扩展说明:

GLSL有一个“按名称会合”模型,用于将不同的输出变量连接到后续着色器的不同输入变量。对于单独的着色器,无法保证前面的着色器是否会写入给定的用户定义输入变量。HLSL9、Cg和OpenGL汇编扩展程序通过使用“API资源集合”模型来处理这种情况在GLSL术语中,这意味着单独的GLSL着色器/必须/通过内置变量而不是用户定义的变量进行通信。

很好,在顶点和几何体着色器中,我对vec4使用gl_FrontColor,对float使用gl_FogFragCoord,通过gl_FogFragCoord和gl_Color在片段中读取它们

行得通,很好。。但是我是说。。cmon,真的吗?

我能理解这一切背后的理由,但对我来说,这真的是一个糟糕的解决办法。
如果来自不同程序的不同着色器都在同一个程序管道中工作,那么真的没有其他方法可以让它们相互通信吗?

让我们先把这个问题解决掉:你在那里读到的关于扩展/核心功能的内容是不正确的。下面是一个解释,如果它在一个规范中是如何不正确的,以及为什么这个规范中有不正确的行

阅读扩展规范时,请务必注意以下内容之间的差异:

  • 规范性文本:这定义了扩展的实际工作方式。这是课文的重点
  • 描述性文本:这提供了功能的用途的非约束性概述。它是无约束力的,这意味着实际的规范性文本可能与之相反
  • 元文本:这解释了规范文本背后的推理。它还表示页眉和页脚信息(谁编写了扩展名、发布日期等)
扩展部分的说明性文本由“概述”部分组成

规范性文本,即解释其工作原理的部分,由“新程序和功能”、“新标记”和表格的任何部分“规范的添加/更改”定义

其他一切都是元文本。但特别是“问题”部分。该部分解释了规范中决策背后的一些推理。您引用的内容来自“问题”部分。它不具有约束力,因此与实际功能无关

现在,你可能想知道,在这种情况下,决策背后的推理怎么可能是错误的。为什么问题部分会对明显虚假的扩展内容提出事实性的主张

好的,这可以追溯到关于这个扩展规范的两个事实

  • 它基于一个名为的旧扩展。在这一扩展中,上述说法是正确的。不能将用户定义的变量用于可分离程序。这是因为该扩展完全是由NVIDIA编写的,他们实际上只是拼凑了一些废话来满足一些用户的需求。这不是一个真正的解决方案,更多的是权宜之计

  • ARB非常懒地把这个扩展规范放在一起。事实上,这是多么的愚蠢。例如,第2期从EXT版本逐字复制,即使ARB版本中引用的部分绝对不正确

    阅读其他一些问题就像钻研偏执型精神分裂症患者的思想一样。他们提出其他不符合事实的主张,然后立即自相矛盾。这就像在ARB的会议上有一个环边座位之类的。功能(大部分)良好;扩展规范本身就是垃圾

  • 我理解你的沮丧。我从扩展中了解功能的一般方法是阅读概述,然后跳到问题。概述让我很好地了解了它应该做什么,而问题部分让我很好地了解了实现的情况。所有这些都不需要通过“规范语言”进行解析


    您不能使用此扩展名执行此操作。问题部分比毫无价值更糟糕;这是一种积极的误导。您必须阅读spec语言。

    让我们先把它放在一边:您在那里读到的内容与扩展/核心特性不符。下面是一个解释,如果它在一个规范中是如何不正确的,以及为什么这个规范中有不正确的行

    阅读扩展规范时,请务必注意以下内容之间的差异:

    • 规范性文本:这定义了扩展的实际工作方式。这是课文的重点
    • 描述性文本:这提供了功能的用途的非约束性概述。它是无约束力的,这意味着实际的规范性文本可能与之相反
    • 元文本:这解释了规范文本背后的推理。它还表示页眉和页脚信息(谁编写了扩展名、发布日期等)
    扩展部分的说明性文本由“概述”部分组成

    规范性文本,即解释其工作原理的部分,由“新程序和功能”、“新标记”和表格的任何部分“规范的添加/更改”定义

    其他一切都是元文本。但特别是“问题”部分。该部分解释了规范中决策背后的一些推理。您引用的内容来自“问题”部分。它不具有约束力,因此与实际功能无关