OpenGL TCS - ограничения по размеру массива для каждого патча - PullRequest
0 голосов
/ 18 мая 2018

Я несколько озадачен использованием массивов в качестве переменных per-patch в TCS (и TES) конвейера OpenGL.Базовый пример TCS ниже работает, но как только я увеличиваю размер anotherTest до значения, превышающего 32, я получаю

0(5) : error C5041: cannot locate suitable resource to bind variable "anotherTest". Possibly large array.

Использование glGetIntegerv(GL_MAX_TESS_PATCH_COMPONENTS, &maxPatchComponents) в моем коде C ++ (в Qt 5.10Framework на Linux) Я получаю

:: 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;
}
...