C++ 如何绕过glsl统一数组大小限制?

C++ 如何绕过glsl统一数组大小限制?,c++,opengl,glsl,C++,Opengl,Glsl,我最近发现均匀阵列的大小是有限制的。我有一些浮点数组制服,并且发现我可以在着色器停止工作之前将它们的集合大小增加6。我把哪个阵列放大并不重要。现在。。。我真的需要它们更大一些。我怎样才能绕过这个限制?如果有帮助的话,我正在使用#版本330 core。你不能。这是GLSL的规范。这就像问“我怎么能有一个int大于int\u MAX?”。实际上不可能 您可以尝试重新设计您的制服,以便有多个制服,并且在逻辑上将制服拆分为相关的值,而不是将它们全部合并为一个值。GPU和/或驱动程序给出了限制。如果超出制

我最近发现均匀阵列的大小是有限制的。我有一些浮点数组制服,并且发现我可以在着色器停止工作之前将它们的集合大小增加6。我把哪个阵列放大并不重要。现在。。。我真的需要它们更大一些。我怎样才能绕过这个限制?如果有帮助的话,我正在使用#版本330 core。

你不能。这是GLSL的规范。这就像问“我怎么能有一个
int
大于
int\u MAX
?”。实际上不可能


您可以尝试重新设计您的制服,以便有多个制服,并且在逻辑上将制服拆分为相关的值,而不是将它们全部合并为一个值。

GPU和/或驱动程序给出了限制。如果超出制服限制,则数据不适用于制服。即使有黑客绕过这个限制,你也不应该这样做,这个限制可能是有原因的

对于OpenGL 4.3或更高版本(或者如果扩展支持的话),您可以使用SSBO,SSBO旨在将大量数据传递给着色器

如果无法使用该选项,则需要使用变通方法,如将数据保存在纹理中,并在GLSL中编写函数,再次从纹理中提取数据。

请参阅