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

3

我尝试引入多个阴影投射者,并在此过程中通过VS输出传递每个光源的变换位置。然而,着色器编译器会报告错误,因为输出大小超出了某个内部限制,但我迄今为止无法确定该限制实际上是什么(或如何找到它)。

输出结构如下:

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

编译在最低值为64和32的MAX_SHADOW_CASTERS时失败。

此外,任何有关提高数组容量的建议都将不胜感激。这些值自然是每个片段的,因此据我所知,通用纹理/缓冲区是不切实际的。

1个回答

3

可以通过使用glGetIntegerv函数查询最大数量的变量向量(这是顶点和片段着色器阶段之间接口的称呼 - 在早期的GLSL版本中,它们实际上使用varying关键字而不是in/out)。查询时需要将pname参数设置为GL_MAX_VARYING_VECTORS


1
谢谢,知道名称非常有帮助!我可能需要再提一个问题,但你知道有什么方法可以解决这个问题吗?对于我尝试做的事情来说,限制似乎太小了。 - Celeste Soueid
1
@CalvinSoueid:那么你尝试做的事情可能不会按照你想要的方式进行。 - Nicol Bolas

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接