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