gpt4 book ai didi

opengl - 在 OpenGL 中存储许多小纹理

转载 作者:行者123 更新时间:2023-12-02 07:08:29 26 4
gpt4 key购买 nike

我正在构建一个包含许多小纹理的 OpenGL 应用程序。我估计我会有几百个任何给定时刻屏幕上的纹理。

谁能推荐将所有这些纹理存储在内存中以避免潜在性能问题的最佳做法?

我也有兴趣了解 OpenGL 如何管理纹理。 OpenGL 会尝试将它们存储到 GPU 内存中吗?如果是这样,我可以依靠多少 GPU 内存?如果不是,OpenGL 将纹理从应用程序内存传递到 GPU 的频率如何?发生这种情况时我是否应该担心延迟?

我正在使用 OpenGL 3.3。我打算只使用现代功能,即不使用即时模式。

最佳答案

  1. 如果您有大量小纹理,最好将它们组合成一个大纹理,每个小纹理占据已知的子区域(这种技术有时称为“纹理图集”)。切换绑定(bind)的纹理可能代价高昂,因为它会限制可以一起批处理的绘图数量。通过组合成一个,您可以最大限度地减少必须重新绑定(bind)的次数。或者,如果您的纹理大小非常相似,您可以考虑使用数组纹理(介绍 here)。
  2. OpenGL 确实尽可能将您的纹理存储在 GPU 内存中,但我不相信它能保证实际驻留在显卡上。
  3. 您可用的 GPU 内存量将取决于您运行的硬件以及运行时对系统的其他要求。 “GPU 内存”的确切含义因机器而异,它可以是离散的,仅供 GPU 使用,与主内存共享,或两者的某种组合。
  4. 假设您的应用程序不会经常修改纹理,您应该不需要特别关注延迟问题。您将为 OpenGL 提供一次纹理,从那时起它将管理它们在内存中的位置。假设您不需要比 GPU 内存每帧都能轻松容纳的更多纹理数据,则不必担心。如果您确实需要使用大量纹理数据,请尽量确保将某个纹理的所有使用一起批处理,以最大程度地减少数据必须进行的往返次数。您还可以查看内置的纹理压缩工具,为您对 glTexImage2D 的调用提供类似 GL_COMPRESSED_RGBA 的内容,请参阅 man页面了解更多详情。

当然,一如既往,最好的办法是在接近预期用例的情况下亲自测试这些东西。 OpenGL 提供了大量保证,但很多会因具体实现而异。

关于opengl - 在 OpenGL 中存储许多小纹理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8404363/

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