gpt4 book ai didi

opengl - 发送 GL 制服 : Multiple floats vs packing into vector

转载 作者:行者123 更新时间:2023-12-02 04:31:20 33 4
gpt4 key购买 nike

假设我有四个浮点值想要发送到着色器,以下哪一个是发送它们的最佳方式。

将它们作为单独的 float 发送:

uniform float uniformValue1;
uniform float uniformValue2;
uniform float uniformValue3;
uniform float uniformValue4;

void main()
{
//do shader stuff here
}

将它们打包成一个向量:

uniform vec4 uniformValues;

void main()
{
//do shader stuff here
}

我发现了这个文档:https://www.khronos.org/webgl/public-mailing-list/archives/1003/pdf7z773meQcF.pdf

关于这个主题,我想知道一件事:OpenGL/OpenGLES/WebGL 会自动打包制服还是我应该自己处理?

最佳答案

有多种方法可以将统一变量发送到 GPU。 API 调用越少越好,这将使应用程序中的状态更改更少,并且对于较大的 block ,复制数据的频率会降低,而不是较小的 block 的复制频率会更高。管理较少数量的统一变量也更容易;所以使用向量,这是一个双赢的局面。

如果您使用较新的 OpenGL 版本 3.2+,还有其他方法可以复制制服:当你有大量的制服时,交给 GPU。

例如,使用 Uniform blocks ,如果您有一大块将在多个着色器中使用的统一变量,并且您不打算在它们上编写内容。如果您使用多个着色器,统一 block 还会减少复制操作的次数,您可以复制一次并多次使用它们。

另一方面,使用 shader storage block (在 OpenGL 4.3+ 中可用)如果您的应用程序要在它们上写入。

关于opengl - 发送 GL 制服 : Multiple floats vs packing into vector,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21373903/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com