我需要一个vec4和一个浮点数从顶点着色器传递到几何着色器,然后到片段着色器。 3个着色器属于3个不同的程序,以便保持统一的唯一性,并且3个被收集在单个程序流水线中,并根据需要附加/分离几何着色器。程序流水线着色器变量交换
的GL_ARB_separate_shader_object扩展说:
GLSL有一个“按名称交会”为不同的输出变量连接到不同的后续着色器的输入变量模型。对于单独的着色器,无法保证前面的着色器是否会写入给定的用户定义的输入变量。 HLSL9,Cg和OpenGL程序集扩展程序通过“API资源集合”模型处理这种情况。 在GLSL术语中,这意味着单独的GLSL着色器/必须/通过内置变量变量而不是用户定义的变量变量进行通信。
细,在顶点和几何着色器我用gl_FrontColor为vec4,和gl_FogFragCoord浮子,在经由gl_FogFragCoord和gl_Color片段读取它们。
It works,fine .. but ..我是说.. cmon,真的吗?
我可以理解所有这些背后的基本原理,但它对我来说确实是一个糟糕的解决方法。 真的没有其他方法可以使不同程序的不同着色器相互通信,如果它们全部在相同的程序管道中工作的话?
ah我明白了..很好_is_有趣确实..无论如何,我尝试使用常规进出/像往常一样,但着色器不会阅读他们(每个将看到他'在'归零)..不应该这项工作?或者在程序流水线中的着色器之间传入/传出时可能会丢失一些东西? – user815129
@ user815129:那是一个新问题。这是“我有一些不起作用的代码”问题,而不是“这个规范是什么意思?”题。你应该问这个问题,并且不仅要发布你的着色器代码,还要发布着色器*加载代码。单独的程序在加载时需要一些特殊的处理。 –
@ user815129:另外,当尝试新的东西时,你应该总是从一个简单的实例开始。这样,您可以在将其批量放入应用程序之前,在受控环境中使用它。 –