首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GLSL真的会用统一的(而不是每个顶点的)值做不必要的计算吗?

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

Stack Overflow用户
提问于 2013-03-17 22:44:04
回答 4查看 1.4K关注 0票数 8

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

代码语言:javascript
复制
#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的解决方案很感兴趣。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-03-18 19:19:45

因此,据我所知,没有一般的答案。我在我的硬件上做了一些测试。我的清单中有两个GPU:Intel HD Graphics 3000NVidia GeForce GT 555M。我用顶点着色器中的矩阵乘法测试了我的程序(程序本身是用java/scala编写的),然后将乘法转移到CPU程序并再次测试。

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

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

代码语言:javascript
复制
intel:
    sphere400: 57.17552887364208 fps
    sphere40: 128.1394156842645 fps
nvidia:
    sphere400: 134.9527665317139 fps
    sphere40: 242.0135527589545 fps

处理器上的矩阵乘法

代码语言:javascript
复制
intel:
    sphere400: 57.37234652897303 fps
    sphere40: 128.2051282051282 fps
nvidia:
    sphere400: 142.28799089356858 fps
    sphere40: 247.1576866040534 fps

测试表明,在顶点着色器中乘以(均匀)矩阵不是一个好主意,至少在这个硬件上是这样。因此,一般来说,人们可能不依赖于相应的GLSL编译器优化。

票数 10
EN

Stack Overflow用户

发布于 2013-03-17 23:02:11

是对每个顶点执行projM * viewM * modelM矩阵乘法,还是足够智能地计算一次,直到统一变量更改后才重新计算?

请询问有问题的OpenGL实现的开发人员。OpenGL规范对此没什么可说的,但是驱动程序和GLSL编译器编写者可能已经为此实现了优化。

如果它还不够“聪明”,那么除了在CPU上计算所有与一致相关的值并将它们作为统一变量发送到之外,还有什么方法可以对它进行优化吗?

不是的。你得自己跑腿。

票数 3
EN

Stack Overflow用户

发布于 2013-03-17 23:06:12

所有OpenGL和GLSL优化都是特定于供应商的。很难判断glsl编译器的最终输出是什么。

您可以在此处查找供应商特定信息:http://renderingpipeline.com/graphics-literature/low-level-gpu-documentation/

对于你的代码,你总是可以将矩阵‘打包’到新的uniform:matModelViewProjection中,在应用程序中将其相乘,并将其发送到顶点着色器。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15462022

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档