【发布时间】:2013-09-28 14:06:58
【问题描述】:
从使用 OpenGL 的一些 examples transform feedback 我看到 glTransformFeedbackVaryings 在程序编译之后和链接之前被映射。这种方式是否适用于所有 OpenGL 版本?不能使用布局限定符来设置索引就像顶点数组一样?我问是因为在我的代码着色器程序中,创建过程是从其他例程中抽象出来的,在将其拆分为可控的编译/链接方法之前,我想知道是否有解决方法。
更新:
使用separable shader objects时是怎么做的?没有明确的链接步骤。
更新:
我仍然不清楚在使用单独的着色器对象时如何设置 glTransformFeedbackVaryings。
这个解释我完全不清楚:
如果使用可分离的程序对象,则属性集 捕获的取自在最后一个着色器上活动的程序对象 阶段处理由变换反馈捕获的图元。这 在变换反馈模式下为任何其他捕获的属性集 在前一个着色器阶段活动的程序将被忽略。
我其实以为我可以激活一个管道对象并进行查询。但它似乎没有效果。我的转换反馈什么也没写。然后我在Transform Feedback docs找到了这个讨论:
您可以从创建的单独着色器程序中输出变化吗 使用 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.
这也不清楚。答案是否意味着设置变换反馈变化应该只使用常规着色器程序?我不明白。
【问题讨论】:
-
您的目标是什么版本的 OpenGL?众所周知,EXT 扩展与核心 OpenGL 不同步。在将这些东西引入核心之前,通常的过程是 EXT/vendor -> ARB -> core。如果你的目标是一个以变换反馈为核心的 OpenGL 版本,你应该远离 EXT 扩展文档。在 OpenGL 3.0 中您应该避免使用 EXT FBO。
-
我使用的是GL4.2兼容模式。
标签: opengl