OpenGL纹理加速-视图相关纹理
OpenGL Texture Speed up - View Dependent Textures
我有一个对象类型,它根据旋转(模拟3D)将纹理(正确地)渲染到2D网格上。然而,为每个视图加载/绑定新纹理图像的速度相当慢。禁用依赖于视图的纹理加载会导致非常快速的性能。
缓冲对象的所有视图/纹理可能不是一个好的选择,它可能包含大约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年。
J。P.van Waveren。id-tech 5大挑战:从纹理虚拟化到大规模并行化。SIGGRAPH演讲,2009年。
- 如何在选项卡视图Qt中设置一个新项目,并保存以前的项目
- OpenInventor从9.8升级到10.4.2后,GLSL纹理返回零
- 视图中的参数推导失败:take_while
- SFML纹理像播放器
- OpenGL大的3D纹理(>2GB)非常慢
- UE4-如何在给定4个屏幕坐标的情况下缩放纹理或材质
- 如何维护资源管理器项目视图中当前可见的项目列表
- 着色器纹理值与创建纹理时写入的值不同
- OpenGL将纹理四边形渲染为(0,0)
- 宽度为奇数的16位纹理为片状
- 在另一个类视图中添加最多2个图表的正确方法是什么
- OpenVR:向视图方向移动
- 使用 WIN32 API (C/C++) 对特定树视图项进行着色
- 将所选值(通过视图)从 boost::multi_array 复制到另一个数组 (C++)
- 使用 CUDA 和纹理进行图像减法
- 如何在不使用滚动条的情况下使视图更改
- 列表视图更改选择颜色
- 在计算着色器中的无序访问视图中写入纹理记录
- OpenGL纹理加速-视图相关纹理
- Direct3D:从纹理中创建渲染目标视图