2017-04-25 29 views
1

众所周知,OpenGL和许多图像/视频格式在像素数据的起源方面有所不同。因此,当我们使用OpenGL绘制图像(尤其是来自相机的实时图像)时,我们有以下选项。OpenGL纹理内存布局和查找速度

  1. 翻转图像(在CPU上)然后上传到GPU,正常绘制。
  2. 上传直接将GPU和借鉴使用翻转纹理坐标

现在,我不想翻转图像,因为它不是免费的(加工费用),我们可能需要做以下之一情况下,我们继续使用CPU上的图像:

  • 分配新的图像缓存 - >翻转到这一新的缓冲 - >上传到GPU - >就地释放新的缓冲区
  • 翻转图像 - >上传到GPU - >再次在原地翻转

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

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

总之,我的问题归结为:纹理查找和过滤速度的变化取决于GPU内存中纹理的实际布局?我想知道这对于像NVIDIA这样的专用GPU和像intels这样的集成GPU。 PS:这纯粹是为了教育目的,我意识到知道这个问题的答案对应用程序性能无关紧要,但拥有一些内在知识总是很好的。另外我很好奇:)

+0

首先,在使用OpenGL时不要对这些东西做出假设。我没有看到任何理由不在这里应用常识(例如,试图缓存友好,尽量减少带宽使用),但我绝对不会说在特定的GLSL在所有支持的硬件上执行完全相同。其次,你不能提供足够的信息来说明你的应用程序的性能如何重要,以及你在纹理上做了哪些处理。如果你不能理解复杂性,为什么你甚至会开始推测翻转tex coords的影响? – thokra

+0

这不完全关于我的应用程序。 (2)反正在所有情况下都更快,我并没有试图让它更快。这更多是为了教育目的。我正在编辑这个问题来陈述这一点,谢谢。 – Alparslan

回答

3

TL/DR的答案是:不,不会有任何明显的速度变化。

不论其来源(NV,AMD,Intel - 制造商是谁),GPU都是这样设计的。 Texture maps在现代3D图形中无处不在,所以如果GPU不能应付仿射纹理转换,那么它就是一个糟糕的,不具市场的GPU。

+0

常识告诉我这一点,很高兴听到它是常见的:) – Alparslan