OpenGL 4.3까지, GLSL의 배열은 고정 된 컴파일 시간 크기 여야했습니다. 4.3에서는 쉐이더 저장 버퍼 객체를 사용할 수있게되어 궁극적 인 길이가 "제한되지 않음"을 허용합니다. 기본적으로, 당신은이 작업을 수행 할 수 있습니다
buffer BlockName
{
mat4 manyManyMatrices[];
};
OpenGL은 당신이 glBindBufferRange
를 사용하는 방법에 따라 런타임에이 배열에 얼마나 많은 행렬 알아낼 것입니다. 따라서 길이를 얻으려면 여전히 manyManyMatrices.length()
을 사용할 수 있지만 컴파일 타임 상수는 아닙니다.
그러나이 기능은 (이 편집 시점에) 매우 새롭고 베타에서만 구현됩니다. 또한 GL 4.x 급 하드웨어 (일명 : Direct3D 11 급 하드웨어)가 필요합니다. 마지막으로 셰이더 저장 블록을 사용하기 때문에 데이터에 액세스하는 것이 원하는 것보다 느릴 수 있습니다.
이와 같이, 내가 사용하는 행렬 수가 가장 많은 균일 블록을 사용하는 것이 좋습니다. 그것이 메모리 문제 (가능성은 희박한 경우)가되면 어레이 크기를 기반으로 셰이더를 분할하거나 셰이더 저장 블록 또는 기타를 사용할 수 있습니다.