我对在 OpenGL 管道的 TCS(和 TES)中使用数组作为每个补丁变量感到有些困惑。下面的基本 TCS 示例有效,但只要我将大小anotherTest
增加到上面的值32
,我就会得到
0(5) : error C5041: cannot locate suitable resource to bind variable "anotherTest". Possibly large array.
在我的 C++ 代码中使用glGetIntegerv(GL_MAX_TESS_PATCH_COMPONENTS, &maxPatchComponents)
(在 Linux 上的 Qt 5.10 框架中)我得到
:: Using OpenGL 4.3.0 NVIDIA 396.24
→ maxPatchComponents = 120
因此,我会说我应该能够使用偶数anotherTest[120]
(注意gl_TessLevelOuter
并且gl_TessLevelInner
不计入补丁组件的数量)。那么发生了什么?我知道这32
是GL_MAX_PATCH_VERTICES
(也在我的机器上)的常见限制,但这不应该影响我的每个补丁变量的大小。想法?
#version 430
// Tessellation control shader
layout (vertices = 4) out;
patch out int anotherTest[32];
void main(void) {
if (gl_InvocationID == 0) {
gl_TessLevelOuter[0] = 1;
gl_TessLevelOuter[1] = 64;
}
anotherTest[0] = 2;
gl_out[gl_InvocationID].gl_Position = gl_in[gl_InvocationID].gl_Position;
}