gpt4 book ai didi

opengl - GLSL 真的用统一的(不是每个顶点的)值做不必要的计算吗?

转载 作者:行者123 更新时间:2023-12-03 15:40:01 25 4
gpt4 key购买 nike

例如,如果我使用如下所示的顶点着色器:

#version 400 core

uniform mat4 projM;
uniform mat4 viewM;
uniform mat4 modelM;

in vec4 in_Position;

out vec4 pass_position_model;

void main(void) {
gl_Position = projM * viewM * modelM * in_Position;
pass_position_model = modelM * in_Position;
}

可以吗 projM * viewM * modelM每个顶点的矩阵乘法,或者它足够聪明地计算一次并且在统一变量改变之前不重新计算?
如果它不够“聪明”,那么除了在 CPU 上计算所有与统一相关的值并将它们作为统一变量发送到 GPU 之外,还有其他方法可以优化它吗?
此外,我对以后可以毫无问题地移植到 OpenGL ES 2.0 的解决方案感兴趣。

最佳答案

因此,据我所知,没有通用的答案。不过,我对我的硬件做了一些测试。我的库存中有 2 个 GPU,Intel HD Graphics 3000NVidia GeForce GT 555M .我在顶点着色器中使用矩阵乘法测试了我的程序(程序本身是用 java/scala 编写的),然后将乘法移动到 CPU 程序并再次测试。

(sphereN - 它是一个连续旋转的球体,有 2*N^2 个四边形,用 glDrawElements(GL_QUADS,...) 绘制,有 1 个纹理,没有任何照明/其他效果)

顶点着色器中的矩阵乘法:

intel:
sphere400: 57.17552887364208 fps
sphere40: 128.1394156842645 fps
nvidia:
sphere400: 134.9527665317139 fps
sphere40: 242.0135527589545 fps

cpu上的矩阵乘法:
intel:
sphere400: 57.37234652897303 fps
sphere40: 128.2051282051282 fps
nvidia:
sphere400: 142.28799089356858 fps
sphere40: 247.1576866040534 fps

测试表明,在顶点着色器中乘法(均匀)矩阵是个坏主意,至少在这个硬件上是这样。所以一般情况下可能不依赖于相应的 GLSL 编译器优化。

关于opengl - GLSL 真的用统一的(不是每个顶点的)值做不必要的计算吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15462022/

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