从某些示例 of used 变换反馈中,我看到glTransformFeedbackVaryings是在程序编译之后映射的,在对所有OpenGL版本执行这种方法之前都是这样的?不能使用布局限定符来设置索引吗?我的问题是,在代码着色器中,程序创建过程是从其他例程中抽象出来的,并且在将其拆分到可控编译/链接方法之前,我想知道是否存在这样的方法。
更新:
在使用可分离着色器物体时是如何完成的?没有明确的链接步骤。
更新:
我仍然不清楚如何在使用单独的着色器对象时设置glTransformFeedbackVaryings。
我完全不清楚这一解释:
如果使用可分离的程序对象,则从在最后一个着色阶段活动的程序对象中获取所捕获的属性集,以处理转换反馈捕获的原语。要在转换反馈模式下捕获的属性集被忽略,该属性用于在以前的着色器舞台上活动的任何其他程序。
实际上,我认为我可以激活管道对象并执行query.But (它似乎没有effect.My转换反馈),nothing.Then写到,我在转换反馈文档中找到了这个讨论
您能从用glCreateShaderProgramEXT创建的独立着色器程序中输出变体吗? 决定:不。glTransformFeedbackVaryings需要重新链接才能在程序上生效.glCreateShaderProgramEXT分离并删除用于创建程序的着色器对象,这样glLinkProgram就会失败。您仍然可以使用标准的GLSL创建过程创建顶点或几何着色器程序,您可以在其中使用glTransformFeedbackVaryings和glLinkProgram。
这是不清楚的too.Does,答案意味着,要设置变换反馈变体,应该只使用常规的着色程序?我不明白。
发布于 2013-09-28 15:50:50
您要问的是使用4.4.2.1 Transform Feedback Layout Qualifiers是可能的,不幸的是它是OpenGL 4.4特性。它可以通过GL_ARB_enhanced_layouts以扩展形式获得,但这是一个相对较新的扩展,目前采用的还比较少。
它比GLSL中的任何传统布局限定符都要复杂得多,所以在可预见的将来,您最好的选择是管理GL中的变体,而不是在着色器中。
至于SSO (可分离的着色器对象)程序中的变体,OpenGL规范说明如下:
OpenGL 4.4 (核心概况) - 13.2变换反馈-pp.392
如果使用可分离的程序对象,则从在最后一个着色阶段活动的程序对象中获取所捕获的属性集,以处理转换反馈捕获的原语。要在转换反馈模式下捕获的属性集被忽略,该属性用于在以前的着色器舞台上活动的任何其他程序。
通常,linking识别在不同阶段之间实际使用的变体(在现代GLSL中表示in/out ),并为GLSL程序建立一套“活动”制服。链接trims是在多个阶段之间不共享的自重,并在各个阶段之间执行静态接口验证,并且当为任何剩余的变体或制服设置绑定位置时也是如此。因为当使用SSO时,每个程序对象都可以是一个阶段,所以链接器不会减少输入/输出(变体)的数量,而且您可以忽略规范中的许多语言,这些语言规定必须在链接之前或之后发生。
由于链接不是创建与单独的着色器对象一起使用的程序对象的步骤,所以转换反馈必须相对于单个阶段(这可能意味着不同的程序对象取决于您选择的阶段)。OpenGL使用与管道中启用的最终顶点处理阶段相关联的程序;这可能是顶点着色器、镶嵌评估着色器或几何图形着色器(按该顺序排列)。无论哪个程序为您的管道提供了最终的顶点处理阶段,都是转换反馈变体的程序对象。
https://stackoverflow.com/questions/19067843
复制相似问题