在OpenGL4.0中使用交错属性数组获得性能提升

Mic*_* IV 11 c++ opengl performance opengl-4

我使用OpenGL4.X.最近我读到了这个 Apple OpenGLES2文档,其中声明使用交错属性数组可以提高IOS移动设备的性能,并且是推荐的方式(而不是使用属性块).

对于那些不明白我的意思的人来说,这是一个例子:

单个属性数组中的属性块:

 float vertices[]{
 //Triangle vertices:

  v0x , v0y , v0z ,
  v1x , v1y , v1z ,
  v2x , v2y , v2z ,

  //Triangle UVs:

  uv0s , uv0t ,
  uv1s , uv1t ,
  uv2s , uv2t ,

  //Triangle Normals:
  n0x , n0y , n0z ,
  n1x , n1y , n1z ,
  n2x , n2y , n2z 

}
Run Code Online (Sandbox Code Playgroud)

交错属性数组:

 float vertices[]{


  v0x , v0y , v0z ,
  uv0s , uv0t ,          ////vertex 1 attributes
  n0x , n0y , n0z ,

  v1x , v1y , v1z ,
  uv1s , uv1t ,         ///vertex 2 attributes
  n1x , n1y , n1z ,

  v2x , v2y , v2z ,
  uv2s , uv2t ,         ///vertex 3 attributes
  n2x , n2y , n2z 

}
Run Code Online (Sandbox Code Playgroud)

所以我的问题是:在桌面GPU上运行的OpenGL也是如此吗?如果是,那么理论上性能增益有多大?

BЈо*_*вић 6

对于在桌面GPU上运行的OpenGL也是如此吗?

Vertex规范维基页面:

作为一般规则,您应尽可能使用交错属性.显然,如果你需要改变某些属性而不是其他属性,那么将那些改变的属性与那些不改变的属性交错并不是一个好主意.


理论上性能增益有多大?

我无法回答这个问题,但我不希望有太大的进步.唯一可靠的方法是衡量.


Nic*_*las 6

为了使任何优化成为性能增益,它必须首先优化成为性能瓶颈的东西。除非它目前是瓶颈,否则对其采取任何措施都不一定能提高性能。

没有办法回答你的问题,因为任何性能提升首先取决于你是否在顶点传输性能上遇到瓶颈(即:优化了什么)。除非你真的很用力地推动你的显卡,以至于你的顶点着色器、片段着色器和 CPU 问题不会成为瓶颈,否则这无关紧要。

并且无法知道它的增益有多大,因为不同的硬件会有不同的响应。不同的情况会根据瓶颈的紧缩程度做出不同的反应。

只需交错你的属性。它不会花费您任何费用,只需要最少的时间或精力,并且在性能方面可能具有重要的价值。