可以从顶点着色器向几何/碎片整理器发送多少数据? (带块)

时间:2013-11-21 08:55:13

标签: opengl shader

关于着色器以及可以在它们之间发送多少数据,以及如何使用您拥有的gpu(或如何找到它)来计算可以发送的数据,我有一个小问题。

我有一个顶点着色器程序,其中包含此代码片段。

out VertexData {
    mat4 Object_To_World;
    mat4 World_To_View;
    mat4 View_To_Clip;
}VertexOut;

请注意,我在片段分析器中有一个等效的“in”部分。

使用此代码片段,我的着色器不会链接并运行。

P.S 我知道这可能不是传输这些数据的方法,我只想查看我是否可以做到,以及限制是什么,但我无法弄清楚如何计算/找到字节数限制/位。

1 个答案:

答案 0 :(得分:5)

使用glGet*()(假设OpenGL 4)

查询这些限制

一些感兴趣的调查员:

  • GL_MAX_VERTEX_OUTPUT_COMPONENTS(至少64位)

  • GL_MAX_GEOMETRY_INPUT_COMPONENTS(至少64位)

  • GL_MAX_GEOMETRY_OUTPUT_COMPONENTS(至少128位)

  • GL_MAX_FRAGMENT_INPUT_COMPONENTS(至少128位)

  • GL_MAX_VARYING_*

限制通常匹配着色器阶段的任何组合,至少是最小值。根据GL版本,可以依赖这些最小值。

那里有3x4x4 = 48个浮动组件。尽管这些和其他中间内置值符合限制,但考虑使用统一或缓冲支持(统一缓冲区,纹理缓冲区)存储来存储不变数据。