如何确定顶点着色器输出的限制?

How can I determine the limit on Vertex Shader outputs?

我正在尝试引入多个阴影投射器,在此过程中,我正在为 VS 输出中的每盏灯传递一个转换后的位置。着色器编译器由于输出大小超过某个内部限制而报告错误,但到目前为止我一直无法确定实际限制是什么(或如何找到它)。

输出结构如下:

out VS_OUT
{
    vec3 FragPos;
    vec3 Normal;
    vec3 Colour;
    vec2 TexCoord;
    vec4[MAX_SHADOW_CASTERS] LightSpaceFragPos;
} vso;

至少在 MAX_SHADOW_CASTERS 值 64 和 32 处编译失败。

此外,如有任何关于提高阵列容量的建议,我们将不胜感激。这些值自然是每个片段,所以据我所知,通用 texture/buffer 是不切实际的。

可变向量变量的最大数量(这就是所谓的顶点和片段着色器阶段之间的接口——在早期的 GLSL 版本中,它们实际上有关键字 varying 而不是 in/out) 可以通过 glGetIntegervGL_MAX_VARYING_VECTORS 作为 pname 参数参数进行查询。