深度+模板帧缓冲关系
Depth + Stencil framebuffer concerns
我的OpenGL应用程序需要一个模板和深度缓冲。深度缓冲至少需要通过framebuffer对象渲染到纹理,这样我就可以做延迟着色和其他后处理效果。我已经设置了这个framebuffer(使用GL_DEPTH24_STENCIL8),但是我有一些担忧和问题。
首先,我想使用32位浮点深度缓冲区。GL_DEPTH32F_STENCIL8选项似乎是最明显的。我想知道的是,这种格式的实际内存占用是多少?从逻辑上讲,它应该是40位,但知道我对对齐的看法,如果他们将它填充到64位,我不会感到惊讶,许多消息来源说确实会发生这种情况。我想确切地知道。
也许保持深度和模板缓冲区分开对我来说会更好?我需要担心这个不被支持吗?缓存效率如何,因为模板和深度测试经常一起执行?p。我没有使用multisampling
GL_DEPTH32F_STENCIL8
为64位格式;深度为32位,模板为8位,对齐为24位。
有时知道这两种桌面图形api会派上用场,因为这是添加到D3D10的相同格式。D3D使其格式的大小更容易通过查看其名称来掌握。
在D3D中,格式称为DXGI_FORMAT_D32_FLOAT_S8X24_UINT
:
,,,D32_FLOAT
表示存储32位深度(浮点)
,,,S8X24_UINT
表示存储8位模板+ 24位未使用(无符号整数)
D3D很好,因为格式明确地宣布何时有未使用的位用于填充(这是格式中的Xn
所指示的)。在D3D中没有可颜色渲染的8位RGB
格式,因为这会扰乱对齐;它们都是RGBX
或4的某种排列,以产生32位像素。
给你一个权威的答案,我会参考你的扩展,首先添加这种格式的GL:
GL_ARB_depth_buffer_float
概述[…]
此外,这个扩展提供了新的包装深度/模板像素格式(参见EXT_packed_depth_stencil),它具有64位像素,由32位浮点深度值, 8位模板和24位未使用的位组成。还提供了一个填充深度/模板纹理内部格式。
- C++GTKMM gui循环依赖关系
- 如何使用原子指针执行双缓冲
- this_thread::sleep_for和计时时钟之间的关系是否由C++11标准指定
- 消费者和生产者问题的双重缓冲
- Doxygen - 如何在不生成图形的情况下生成文本调用关系结果
- 我已经建立了递归关系,它找到了两个字符串之间最长的连续公共字符串,我怎么能跳过其中一个字符串中的一个字符
- 在 c++ 中对字符串进行操作的关系运算符无法按预期工作
- 如何记住这种递归关系?
- 如何检测是否在缓冲绘画动画中绘制最后一帧?
- 如何在头文件中声明类模板(由于循环依赖关系)
- 我似乎无法修改帧缓冲
- 如何在C++中写入 1000 个文件时有效地缓冲
- 移动语义和深层/浅层复制之间有什么关系?
- 如何在不知道对应关系的情况下在字符串中搜索字符并将其分配给另一个字符?
- 对在不同二进制文件中创建的对象文件的依赖关系
- #include < conio.h> 和 getch() 方法之间的关系是什么?
- 使用Bazel构建具有不同编译器/链接器选项的C/C++依赖关系
- OpenVINO - 推理库插件 libMKLDNNPlugin.so 无法解析依赖关系
- 模拟测试中类的依赖关系
- 深度+模板帧缓冲关系