在OpenGL中为顶点、uvs和法线使用一个缓冲区是否比使用三个缓冲区性能更好
Does using one buffer for vertices, uvs and normals in OpenGL perform better than using three?
我发现将这些元素保存在单独的缓冲区中更干净、更容易,但我想知道将它们全部保存在一个大缓冲区中是否会更好。
使用多个缓冲区的优点是,可以很容易地为某些特殊渲染禁用一个缓冲区(例如,仅深度不需要法线或纹理坐标)。
但是,将所有属性交错存储在一个数组中可以在渲染时提供更好的缓存位置。
我们谈论的是数组结构或结构数组及其效率。在大多数情况下,结构数组效率更高,因为它可以更好地利用处理器缓存,但这是假设您将按数据在内存中的顺序访问数据。
但是,如果某些数据以与另一个不同的速率刷新,那么将它们放在不同的缓冲区中会有好处,这样您就可以只更新需要更新的数据。
根据OpenGL wiki,
如果使用单独的VBO,您不会损失太多性能。会的大约5%,但您的测试可能会显示出其他情况。
我不知道这个语句是否只用于动态数据,但在我的引擎中,我使用了单独的VBO。
相关文章:
- 是否可以从 OpenGL 缓冲区获取原始大小的像素?
- 是否可以在 OpenGL 中的同一调用中呈现两个具有不同索引起点的不同缓冲区?
- 是否可以将 std::basic_ifstream 和 std::basic_ofstream 与自定义缓冲区一起使用?
- 是否可以在C++中拼接缓冲区,零拷贝?
- std::vector::assign/std::vector::operator=(const&) 是否保证在"this"中重用缓冲区?
- 输出操纵器 std::ends 是否向输出缓冲区添加空字符?
- 当构建器被销毁时,缓冲区是否有效
- 如何检查输入缓冲区是否为空
- 如何检查 cin 缓冲区是否包含相同的值 0.5 秒 (C++)
- C++如何检查std::cin缓冲区是否为空
- (DirectX 11)单个顶点缓冲区是否可以一次绑定到多个 IA 输入槽
- 在OpenGL中为顶点、uvs和法线使用一个缓冲区是否比使用三个缓冲区性能更好
- CUDA:查明主机缓冲区是否被固定(页面锁定)
- 使用 std::vector 作为简单缓冲区是否是一种好的做法
- 如何确定缓冲区是否已释放
- 对于std::cin缓冲区是否有大小限制?
- 命名管道在c++ Linux检查缓冲区是否已满
- ReadFile缓冲区是否需要被清空?
- 是否有一种方法来检查缓冲区是否在Brotli压缩格式
- 检测声音缓冲区是否充满数据