繁体   English   中英

OpenGL纹理加速-查看相关纹理

[英]OpenGL Texture Speed up - View Dependent Textures

我有一个对象类型,可以根据旋转(正确地)将纹理渲染到2D网格上(模拟3D)。 但是,为每个视图加载/绑定新的纹理图像非常慢。 禁用依赖于视图的纹理加载会导致非常快的性能。

缓冲对象的所有视图/纹理可能不是一个很好的选择,它可能包含约720个视图(单独的图像),每个视图可能是600x1000像素。 也不保证最终用户的系统规格,这是一个外围应用程序。

在按需加载纹理和立即缓冲所有视图纹理之间,是否有任何良好的中间OpenGL建议?

这是拥有纹理缓存并加载720个不同图像的所有最低分辨率MIP级别的地方。 这将是您的1x1、2x2等分辨率的图像。

在检测视图中的更改时,您将更新纹理缓存,对上次使用的纹理进行优先级排序,以便当前视图中的纹理具有最高优先级,而长时间不使用的纹理具有最低优先级优先。

随着纹理优先级的提高,您将引入纹理的更详细的MIP级别,并且可以在完成纹理加载时重新绑定纹理,纹理缓存会将它们异步加载到单独的线程中,然后在准备好它们时通知您的主线程因为这需要在与GL上下文相同的线程中发生。

还有其他一些方法可以使用新的扩展,例如AMD的Partially Resident Textures,但该扩展具有一些局限性,因此使用起来有些麻烦。

如果旋转平滑且缓慢,则可以根据视图从磁盘流式传输数据,并预取周围视图的数据。

如果您可以承受有损压缩,则可以使用主动压缩将大量数据放入RAM中,然后将其中一些移至VRAM(如果可能,请使用DXT / BC压缩)。

您应该查看以下文章:

JMP Van Waveren。 实时纹理流和解压缩。 英特尔软件网络,2006年。

JMP Van Waveren。 来自慢速存储设备的地理空间纹理流。 英特尔软件网络,2008年。

JP van Waveren。 id tech 5的挑战:从纹理虚拟化到大规模并行化。 SIGGRAPH Talk,2009年。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM