如何确定顶点着色器输出的限制?
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
) 可以通过 glGetIntegerv
以 GL_MAX_VARYING_VECTORS
作为 pname
参数参数进行查询。
我正在尝试引入多个阴影投射器,在此过程中,我正在为 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
) 可以通过 glGetIntegerv
以 GL_MAX_VARYING_VECTORS
作为 pname
参数参数进行查询。