我需要一个 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 在片段中读取它们。
它工作,很好.. 但是.. 我的意思是.. cmon,真的吗?
我可以理解这一切背后的基本原理,但对我来说,这确实是一个糟糕的解决方法。如果它们都在同一个程序管道中工作,真的没有其他方法可以使来自不同程序的不同着色器相互通信吗?