繁体   English   中英

什么OpenGL Bindless纹理函数glMakeTextureHandleNonResident实际上做什么?

[英]What does OpenGL Bindless Texture function glMakeTextureHandleNonResident ACTUALLY do?

我有一个测试无边框纹理的工作原型。 我有一台摄像机,可以播放超过6演出的纹理,而我只有2演出的VRAM。 我有一个内截头体,用于获取视口中用于渲染的对象列表,以及一个外截头体用于队列(驻留)即将渲染的纹理,所有其他纹理,如果它们是居民,使用函数glMakeTextureHandleNonResident进行非常驻。

该程序运行,但是gpu的VRAM表现得好像它有一个GC步骤,它以随机的时间间隔清除VRAM。 当它这样做时,我的渲染完全冻结,但随后跳到正确的帧,最终回到60 FPS。 我很好奇glMakeTextureHandleNonResident实际上并没有在“调用”时将纹理拉出VRAM。 有没有人知道GPU正在通过该调用做什么?

GPU:Nvidia 750GT M.

无边纹理基本上在硬件上显示转换表,以便您可以在着色器中使用任意整数(句柄)而不是GL的传统绑定到图像单元机制来引用纹理; 它们不允许您直接控制GPU内存驻留。

稀疏纹理实际上听起来更像你想要的。 请注意,这两件事可以一起使用。


使句柄非驻留不一定从VRAM中驱逐纹理内存,它只是从所述转换表中删除句柄。 纹理记忆的驱逐可以推迟到将来的某个时间,正如您所发现的那样。

您可以在GL_ARB_bindless_texture的扩展规范中阅读更多相关信息。

void glMakeImageHandleResidentARB(GLuint64句柄,GLenum访问):

“当图像句柄是驻留的时,它引用的纹理不一定被认为是AreTexturesResident命令的驻留。”

问题:

(18)纹理和图像处理可以是居民或非居民。 处理驻留如何与OpenGL 1.1( glAreTexturesResidentGL_TEXTURE_RESIDENT )中的纹理驻留查询交互?

决议

此扩展中的纹理和图像句柄的驻留状态完全独立于OpenGL 1.1的GL_TEXTURE_RESIDENT查询。 纹理句柄的驻留是是否已为句柄调用glMakeTextureHandleResidentARB的函数。 OpenGL 1.1驻留通常是纹理数据是否驻留在GPU可访问内存中的函数。

当纹理句柄没有驻留时,它引用的纹理可能存储也可能不存储在GPU可访问的存储器中 在这种情况下, GL_TEXTURE_RESIDENT查询可能会返回GL_TRUE 但是,它不能保证可以安全地使用纹理手柄。

当纹理句柄驻留时,它引用的纹理也被认为是旧的GL_TEXTURE_RESIDENT查询的GL_TEXTURE_RESIDENT 当图像句柄是驻留的时,它所引用的纹理可能被认为是或者可能不被认为是查询的驻留 - 常驻图像句柄可能仅指单个纹理图级别的整个纹理的单个层。

暂无
暂无

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

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