如何绕过 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 统一数组大小限制? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

Qt 数组的 GLSL 统一始终为零

如何绕过 AWS Lambda 大小限制

iPhone GLSL 动态分支问题

如何通过我的 api 调用绕过 CORS 限制? [复制]

创建一个 GLSL 制服数组?

您可以将固定大小的数组作为 GLSL 函数参数传递吗?