Я несколько озадачен использованием массивов в качестве переменных 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;
}