gpt4 book ai didi

opengl - FBO 深度纹理附件的最佳设置

转载 作者:行者123 更新时间:2023-12-01 15:06:19 28 4
gpt4 key购买 nike

到目前为止,在对自定义 FBO 进行深度测试时,我一直在使用渲染缓冲区。现在我需要用深度纹理替换它们(因为我需要在着色器中读取它)。我正在查看不同的来源,如 here并看到 GL_FLOAT 用作数据类型。在 other 中使用 GL_UNSIGNED_BYTE 的示例,有时甚至使用 GL_INT。内部格式也可以是 GL_DEPTH_COMPONENT16、GL_DEPTH_COMPONENT24、GL_DEPTH_COMPONENT32。

我的问题是哪种变体在性能和质量方面最好?我确信使用 32 位的深度分量,深度测试应该更精确,但是数据类型呢?通常应该使用哪种?

最佳答案

GL_UNSIGNED_BYTE的使用, GL_FLOAT等你描述的实际上是 Pixel Transfer 类型。这是 OpenGL 在从缓冲区读取/写入像素数据时使用的类型,在 OpenGL 中,驱动程序将进行数据类型转换以确保读取/写入的值兼容。在 OpenGL ES 中,这已被完全删除,但在所有情况下,深度渲染缓冲区的内部格式必须是 GL_DEPTH_COMPONENT<X>{F} 之一。或 GL_DEPTH<X>_STENCIL<Y> .这些格式定义了内部使用的数据类型和格式。

为获得最佳性能,请将组件类型与像素传输类型相匹配,以避免驱动像素转换。 (例如 GL_FLOAT 用于像素传输非常适合 GL_DEPTH_COMPONENT32F )。然而,这实际上仅适用于当您想要使用深度/模板缓冲区的内容在 OpenGL 之外执行某些操作时(例如,使用 PBO 读取或写入缓冲区)。

大多数时候,您可以在分配深度纹理时忽略像素传输格式和类型(除了确保它们是给定内部格式的合法值)。您可能不会在 OpenGL 之外读取它或从客户端内存中为其提供数据,这是唯一适用的情况。

关于opengl - FBO 深度纹理附件的最佳设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19300590/

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