1

如果我们有支持 NPOT 纹理的 mipmap,那么矩形纹理有什么用?是否有任何与性能相关或与图像质量相关的改进?另外,我认为,mipmapping 会占用大量内存,因为它为每个级别创建。那么,使用矩形纹理不是更好吗?

4

1 回答 1

3

矩形纹理:

  1. 永远不会有 mipmap。
  2. 使用非归一化纹理坐标。

#1 并不重要,因为您可以通过使用glTexStorage2D并将mipmap 级别数设置为 1或通过正确设置纹理的基本/最大级别和/或使用最小过滤参数来实现相同的效果不要使用 mipmap。

#2 更难模仿。texelFetch函数在纹理空间中工作,但它使用整数纹理坐标矩形纹理坐标是浮点值。这允许他们使用双线性甚至各向异性过滤。你不能用texelFetch.

您可以通过规范化纹素空间纹理坐标来模拟矩形纹理。但这需要手动工作:您必须查询纹理的大小textureSize或将大小传递uniform给着色器。然后你必须做一个划分来标准化坐标。这可能是现代硬件在幕后所做的(特别是因为像 Vulkan 这样的新 API 没有它们),但如果明确支持矩形纹理,手动工作可能会绕过它。

#2 确实是你现在使用矩形纹理的主要原因。它们非常适合渲染目标,因为您可以使用窗口空间坐标从它们中获取值,而无需规范化纹理坐标。但总的来说,它们是非常特殊的纹理类型。

性能问题纯粹是推测性的和特定于硬件的。

于 2013-01-03T09:51:08.783 回答