各种 OpenGL 函数的相对成本?

Jul*_*ien 5 opengl 3d

我正在尝试优化一些 OpenGL 代码,我想知道是否有人知道一个可以粗略估计各种 OpenGL 函数相对成本的表格?类似的东西(这些数字可能完全错误):

method                        cost
glDrawElements(100 indices)    1
glBindTexture(512x512)         2
glGenBuffers(1 buffer)         1.2
Run Code Online (Sandbox Code Playgroud)

如果不存在,是否有可能构建一个,或者各种硬件/操作系统是否差异太大以至于没有意义?

Nic*_*las 6

当然不存在这样的列表。创建这样一个列表的问题之一是回答“什么样的成本?”这一问题。

所有渲染函数都有 GPU 时间成本。也就是说,GPU必须做渲染。成本的多少取决于所使用的着色器、提供的顶点数量以及所使用的纹理。

即使对于 CPU 时间成本,其值也不清楚。拿glDrawElements。如果在调用之前更改了顶点属性绑定,则可能会比不更改时花费更多的 CPU 时间。同样,如果自上次使用程序后更改了程序中的统一值,则使用该程序进行渲染可能需要更长时间。等等。

组装这样一个列表的主要问题是它会鼓励过早的优化。如果您有这样的列表,那么将鼓励用户采取措施避免使用成本更高的功能。他们可能会沿着这条路线采取太多步骤。不,最好完全避免这个问题,并鼓励用户在profile优化应用程序之前实际使用他们的应用程序。

  • 虽然我总体上同意 Nicol 的观点,但至少可以肯定地说一件事:状态更改通常代价高昂。Tom Forsynth 的网站上有一篇博客文章试图找到状态更改成本最高的(非强制性)顺序。 (2认同)