Opengl glmultmatrixf硬件是否加速?

Opengl glmultmatrixf硬件是否加速?,opengl,Opengl,我一直在为改进一个非常古老的opengl应用程序而进行的合同运行一些测试,我惊讶地发现,在我尝试调用glloadmatrix和调用GLMultMatrix的12台计算机中,有10台的速度几乎相同 测试1: -初始化:无 -对于场景:调用glloadmatrixf -对于每个模型:glpushmatrix、gltranslate/glrotate/glscale、GLDraweElements、glpopmatrix 测试2: -初始化:预先计算每个模型的私有多重矩阵 -对于场景:调用glload

我一直在为改进一个非常古老的opengl应用程序而进行的合同运行一些测试,我惊讶地发现,在我尝试调用glloadmatrix和调用GLMultMatrix的12台计算机中,有10台的速度几乎相同

测试1:
-初始化:无
-对于场景:调用glloadmatrixf
-对于每个模型:glpushmatrix、gltranslate/glrotate/glscale、GLDraweElements、glpopmatrix

测试2:
-初始化:预先计算每个模型的私有多重矩阵
-对于场景:调用glloadmatrixf
-对于每个模型:glpushmatrix、glmultmatrixf、GLDRAPEMENTS、glpopmatrix

测试3:
-初始:预先计算每个模型的完整矩阵
-对于场景:无
-对于每个模型:调用glloadmatrixf,然后调用GLDrainElements

我很清楚gltranslate/glrotate/glscale从来都不是硬件加速的,它在中写得很清楚,但我认为glmultmatrixf也不是。然而,在大多数计算机上,上面描述的具有数百种型号的测试用例2和3都给出了几乎完全相同的性能(差异可能是由于添加了push/pop矩阵),而测试用例1则明显慢于预期

所以问题是:我在互联网上似乎找不到任何关于glmultmatrix是否通常是硬件加速的来源。有人知道吗


ps:将这个旧的应用程序升级到更新的opengl标准超出了本合同的范围

您看到的是,test2和test3中的draw elements调用将成为test1矩阵操作的瓶颈


仅仅进行矩阵乘法实际上非常便宜(几十次乘法和加法),test1的最大成本是
glRotate
,它需要获得要旋转的角度的余弦和正弦

实际上,这取决于您询问的硬件

过去15年中,所有主要的OpenGL实现都在CPU端使用MMX/AltiVec/SSE/AVX矩阵优化(许多驱动程序甚至在版本字符串中列出)。从我的角度来看,这是硬件加速,而不是GPU方面


多个OpenGL矩阵命令实际上可以比从内存加载预先计算的矩阵更快地完成,大约10年前我自己对此进行了广泛的测试。在我自己的测试中,它的速度并没有快很多,而且随着现代CPU的出现,现在常见的渲染瓶颈是填充率而不是顶点变换,这可能无关紧要。

不值得加速,因为仅仅将32个浮点数上传到GPU会花费太长时间,这似乎是最可能的解释,那么glmultmatrixf就不会被加速了。但我刚刚做了另一个类似的测试,用10000个简单的三角形来绘制,对应10000个mult/load矩阵,glmultmatrix仍然几乎和glloadmatrix一样快。就像你说的,这可能意味着即使在这个音量下,抽签调用仍然是瓶颈,但我预计10000*(几十次乘法和加法)不会那么便宜,因此会非常引人注目。好吧,这听起来好像解释了一切。glmultmatrix与glloadmatrix的速度不相似的两台计算机非常旧,因此驱动程序可能没有包括针对12年前的CPU的优化,或者那些CPU的矩阵运算速度较慢。好吧,所以我刚刚完成了发布问题后开始的工作,我跟踪了那些opengl函数和其他一些。glmultmatrix是100%的软件,并按照您的描述进行了优化。glloadmatrix不是一个简单的集合,提交的矩阵首先被存储,然后从中计算出一系列内容。乍一看,我认为glloadmatrix的工作量是glmultmatrix的50-75%。