OpenGL纹理内存布局和查找速度

时间:2017-04-25 06:40:26

标签: opengl textures

众所周知,OpenGL和许多图像/视频格式的像素数据来源不同。因此,当我们使用OpenGL绘制图像(尤其是来自相机的实时图像)时,我们有以下选项。

  1. 翻转图像(在CPU上),然后上传到GPU,正常绘制。
  2. 直接上传到GPU并使用翻转纹理坐标进行绘制
  3. 现在,我不想翻转图像,因为它不是免费的(处理成本),如果我们继续在CPU上使用图像,我们可能需要执行以下操作之一:

    • 分配新的图像缓冲区 - >翻到这个新的缓冲区 - >上传到GPU - >发布新缓冲区
    • 就地翻转图像 - >上传到GPU - >再次向后翻转

    两者都使用额外的内存和处理能力。 (我知道第一种情况下的新缓冲区可以分配一次。它仍然消耗内存,并且在CPU上进行翻转。)

    所以我理解我们应该使用上面的方法(2)并且非常小心正确地翻转纹理坐标。我一直听说这是更快的方法,然而,没有人接触的是当我们提供翻转的纹理坐标时GPU将访问纹理的速度有多快。如今,许多计算机(笔记本电脑)都集成了GPU,它使用系统内存。纹理查找速度不会受到纹理坐标的影响吗?

    总之,我的问题归结为:纹理查找和过滤速度是否会根据GPU内存中纹理的实际布局而变化?我想知道这对于像nvidia这样的专用GPU以及像intels这样的集成GPU。

    PS:这纯粹是出于教育目的,我意识到知道这个问题的答案对于应用程序性能而言并不重要,但拥有一些内在知识总是好的。我也很好奇:)

1 个答案:

答案 0 :(得分:3)

TL / DR答案是:不,不会有任何可察觉的速度变化。

GPU,无论其来源(NV,AMD,英特尔 - 制造商是谁),都是这样设计的。 Texture maps在现代3D图形中无处不在,所以如果GPU无法应对仿射纹理转换,那么它就是一个糟糕且无法销售的GPU。