关于着色器以及可以在它们之间发送多少数据,以及如何使用您拥有的gpu(或如何找到它)来计算可以发送的数据,我有一个小问题。
我有一个顶点着色器程序,其中包含此代码片段。
out VertexData {
mat4 Object_To_World;
mat4 World_To_View;
mat4 View_To_Clip;
}VertexOut;
请注意,我在片段分析器中有一个等效的“in”部分。
使用此代码片段,我的着色器不会链接并运行。
P.S 我知道这可能不是传输这些数据的方法,我只想查看我是否可以做到,以及限制是什么,但我无法弄清楚如何计算/找到字节数限制/位。
答案 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个浮动组件。尽管这些和其他中间内置值符合限制,但考虑使用统一或缓冲支持(统一缓冲区,纹理缓冲区)存储来存储不变数据。