【问题标题】:OpenGL single VBO vs multiple VBOsOpenGL 单个 VBO 与多个 VBO
【发布时间】:2023-04-07 19:23:02
【问题描述】:

目前,在我的渲染引擎中,每个网格数据都有一个 VBO(1 个 VBO 用于顶点,1 VBO 用于法线,1 VBO 用于纹理坐标,1 VBO 用于切线,1 VBO 用于双切线),它们都是与 VAO 绑定在一起。

我现在正在考虑更改系统以保存包含所有网格数据(顶点、法线等)的单个 VBO,但我将从中获得多少收益?谈到速度和实用性(因为如果我的网格没有纹理,我可能没有所有数据并且只提供顶点和法线)。

【问题讨论】:

    标签: c++ opengl rendering


    【解决方案1】:

    您将寻求减少整体内存带宽。如果您的缓冲区对象包含交错在一起的所有属性,那么这意味着您的整个数组对象仅引用一个连续的内存部分。这对于内存子系统来说更容易缓存。这与 CPU 的原理完全相同——本地连续内存访问越多,它们可能越快。

    还有一个潜在的不利因素:一般规则是您应该将元素对齐到元素大小和四个字节中的较大者。这会导致一些空间浪费。但几乎总是利大于弊。

    显然,唯一会受到影响的是 GPU 获取顶点所需的时间。如果您是曲面细分或填充边界,您不会立即看到任何改进。

    【讨论】:

    • 好的。现在我正在设置环境来测试它们,我希望我会看到使用单个 VBO 的一些改进,因为现在它很慢,我认为的一件事是原因是多个 VBO。我会看到
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-23
    • 2012-10-30
    • 2011-06-22
    • 1970-01-01
    相关资源
    最近更新 更多