0

我对在 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不计入补丁组件的数量)。那么发生了什么?我知道这32GL_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;
}
4

0 回答 0