gpt4 book ai didi

opengl - 处理超过 4GB 纹理 (BigTiff) OpenGL

转载 作者:行者123 更新时间:2023-12-03 03:32:29 25 4
gpt4 key购买 nike

我正在开发一些高清成像软件,虽然目前没有计划为此版本提供非常大的纹理,但我想做一些 future 的校样。

如果我正在处理非常大的纹理(例如 1095630 x 939495),我可以使用压缩纹理和 mip 映射的标准组合吗?或者这些纹理是否会太大而无法存储在纹理内存中?

我的假设是它们太大,我必须在 CPU 上执行伪手动 mip 贴图。即抓取非常大的数据,为完全缩小创建合理的压缩版本,然后当用户放大时,将大纹理的子部分发送到 GPU?

在 CPU 上进行上述压缩的想法会非常慢,因此我的计划是平铺数据并将其发送到 GPU 进行压缩。在这种情况下,我如何找出(最好是动态地)GPU 可以处理的最大纹理大小?

我是 TIFF 格式的新手,但从它的外观来看,它已经存储为图 block ,这是正确的吗?我希望尝试一下 libtiff,但我还没有找到很多使用它的例子(今天我的谷歌技能失败了,抱歉)。 https://stackoverflow.com/questions/ask

现有示例我希望能从这两个人那里得到一些指示:

总结:

  • 如何找出 GPU 可以处理的最大纹理尺寸(最好是 3D 纹理尺寸...)
  • 分解大纹理格式并将其压缩为 GPU 可以处理的最佳方式是什么
  • 促进缩放的最佳方式是什么?
  • 使用 libTiff 的指南?

最佳答案

这取决于您的目标硬件。

如果您的目标是广泛支持大范围的 GPU 代,那么像您建议的那样原位更新纹理 (mipmap) 级别是可行的方法。老一代 GPU 对可处理的最大纹理分辨率有限制。通常在任一维度上约为 4096 到 8192。通常,您会有一组图 block 纹理(每个图 block 约为 1024×1024 左右),并分配足够的图 block 来覆盖整个屏幕以及一些边距。

如果您的目标是新一代 GPU,那么您可以使用 John Carmack 提出的“Megatetextures”:使用无绑定(bind)、无稀疏纹理。但这不是核心 OpenGL 功能,而是通过扩展 GL_ARB_sparse_texture 公开的和 GL_ARB_bindless_texture 。您拥有一个大型“虚拟”纹理,而不是一组纹理图 block ,您可以根据需要将所需的图 block 流式传输到其中。

在支持此功能的 GPU 上,您也不会遇到专用 GPU RAM 数量设置的限制。 OpenGL 从来没有“可用视频内存”的概念,并且纹理始终可以根据需要换入换出。借助对稀疏纹理的支持,如今的 GPU 可以卸载系统内存中的 GB 纹理数据,并在需要时将其提取到 GPU RAM 中(本质上,系统内存变成了纹理数据的 L4 缓存)。

关于opengl - 处理超过 4GB 纹理 (BigTiff) OpenGL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25640268/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com