如何绕过 glsl 统一数组大小限制? [复制]
Posted
技术标签:
【中文标题】如何绕过 glsl 统一数组大小限制? [复制]【英文标题】:How do I bypass the glsl uniform array size limit? [duplicate] 【发布时间】:2021-05-02 18:25:30 【问题描述】:我最近发现统一数组的大小是有限制的。我有许多浮点数组制服,并且发现我可以在着色器停止工作之前将它们的集体大小增加 6。我做大哪个数组都没关系。现在......我真的需要他们更大。我怎样才能绕过这个限制?如果有帮助,我正在使用#version 330 内核。
【问题讨论】:
见khronos.org/opengl/wiki/Uniform_(GLSL)#Implementation_limits 【参考方案1】:你不能。这是 GLSL 的规范。这就像在问“我怎样才能拥有比INT_MAX
更大的int
?”。从字面上看是不可能的。
您可以尝试重新设计您的制服,使其不止一件,并且在逻辑上将它们拆分为相关的值,而不是将它们全部归为一个。
【讨论】:
【参考方案2】:限制由 GPU 和/或驱动程序给出。如果超出制服的限制,则数据不适合制服。即使有破解该限制的方法,您也不应该这样做,限制的存在可能是有原因的。
使用 OpenGL 4.3 或更新版本(或者如果扩展支持),您可以使用 SSBO,它旨在将大量数据传递给着色器。
如果您不能使用它,您需要使用变通方法,例如将数据保存在纹理中并在 GLSL 中编写一个函数,再次从纹理中提取该数据。
【讨论】:
以上是关于如何绕过 glsl 统一数组大小限制? [复制]的主要内容,如果未能解决你的问题,请参考以下文章