我使用ARB_sparse_texture
extension使用非常大的虚拟3D纹理实时渲染体积效果。
我找不到有关它如何与自动mipmap生成(glGenerateMipmap()
)交互的信息。
我正确地用数据填充纹理的0级并正确提交使用过的块。一切都运作良好,但我也需要这个纹理的mipmap链,我不明白如何自动生成它(我在spec for ARB_sparse_texture
或spec for ARB_sparse_texture2
中找不到任何关于它的内容。
如果我在填充0级后只使用glGenerateMipmap()
会怎样?
(我试过了,它开始急剧停止)
我应该手动计算并提交较粗糙级别的所有已用块,还可以使用计算着色器手动下采样数据? (最糟糕的变体。它的额外工作太多了)
有没有简单的方法(比如glGenerateMipmap()
具有正常纹理)?
答案 0 :(得分:1)
稀疏内存和mipmap生成之间的交互相当明显。 glGenerateMipmaps
从基本mipmap级别读取数据,并将其写入所有级别,包括最高级别。使用稀疏内存时,从未提交的页面读取会产生未定义的数据,并且对未提交的页面的写入不起作用。
因此,如果基类中存在未提交的页面,则从中进行下采样将产生未定义的结果。如果mipmap链中存在未提交的页面,则对它们的写入将不会执行任何操作。由于稀疏纹理扩展不会改变glGenerateMipmaps
的指定行为,因此生成过程将执行其读写操作,而不知道提交的页面。
基本上,如果你要打电话给glGenerateMipmaps
,那么纹理稀疏就没什么意义了。除非您将未定义的值写入较低的mipmap级别,否则无法正常使用。
嗯,是的。你有什么期望?我试过了,它开始大幅停滞
glGenerateMipmaps
内部使用渲染管道或计算着色器。无论哪种方式,它实际上都是一个渲染命令,因此它不是一个轻量级的操作。