调用 glGenerateMipmap() 后不使用 mipmap 过滤器

Not using mipmap filter after calling glGenerateMipmap()

如果我创建了 mipmap 级别但不使用 mipmap 过滤器会怎样?它总是从基础 mipmap 级别采样吗?我还能获得 mipmap 的性能增益吗? 那么,当我们创建 mipmap 时,驱动程序是仅将所需的 mipmap 级别加载到纹理内存中并从中加载样本,还是从所需级别加载所有级别和样本? 实施中的详细信息会有所帮助。

如果您不使用包含 mipmap 的过滤器值之一(例如 GL_LINEAR_MIPMAP_LINEAR),您的 mipmap 将不会以任何方式使用。这种行为就像您从未创建过它们一样。仅使用基本级别,您不会获得任何性能提升。

有多种方法可以在不使用 mipmap 过滤器的情况下使用 mipmap。通过设置 GL_TEXTURE_BASE_LEVELGL_TEXTURE_MAX_LEVEL,您可以强制使用给定的 mipmap 级别。

现在,如果您生成 mipmap 而从不使用它们,究竟会发生什么,这完全取决于实现。由于大多数生成 mipmap 的应用程序都会使用它们,因此很可能会产生性能成本。

如果供应商发现这种情况发生在一个重要的 application/benchmark 中,它可以很容易地进行优化以不加载未使用的 mipmap,甚至可以将 mipmap 的生成推迟到第一次使用(这可能永远不会) .实际上,实施了许多优化,以尽可能有效地编写糟糕的 applications/benchmarks 运行,只要它们被认为是重要的。