从使用 OpenGL变换反馈的一些示例中,我看到 glTransformFeedbackVaryings 在程序编译之后和链接之前被映射。这种方式是否适用于所有 OpenGL 版本?不能像顶点数组一样使用布局限定符来设置索引?我问是因为在我的代码着色器程序中,创建过程是从其他例程中抽象出来的,在将其拆分为可控的编译/链接方法之前,我想知道是否有解决方法。
更新:
使用可分离着色器对象时如何完成?没有明确的链接步骤。
更新:
在使用单独的着色器对象时,我仍然不清楚如何设置 glTransformFeedbackVaryings。
这个解释对我来说完全不清楚:
如果使用可分离程序对象,则捕获的属性集取自在最后一个着色器阶段活动的程序对象,处理由变换反馈捕获的图元。在转换反馈模式中为在前一个着色器阶段活动的任何其他程序捕获的属性集将被忽略。
我实际上以为我可以激活一个管道对象并进行查询。但它似乎没有效果。我的转换反馈什么也没写。然后我在转换反馈文档中找到了这个讨论:
您可以从使用 glCreateShaderProgramEXT 创建的单独着色器程序中输出变量吗?
RESOLVED: No. glTransformFeedbackVaryings requires a re-link to take effect on a program. glCreateShaderProgramEXT detaches and deletes the shader object use to create the program so a glLinkProgram will fail. You can still create a vertex or geometry shader program with the standard GLSL creation process where you could use glTransformFeedbackVaryings and glLinkProgram.
这也不清楚。答案是否意味着设置变换反馈变化应该只使用常规着色器程序?我不明白。