【发布时间】:2020-08-18 08:22:37
【问题描述】:
我有不同的网格和不同的 VBO,有些可能有法线,有些没有,等等。每个网格也有它的 VAO,所有的 VBO 都被绑定。
然后我用实例化绘制所有网格。我计划使用 mat4 的共享全局 VBO 来存储每帧动态计算的转换。每个 VAO 还需要另外指向这个共享的 VBO。此外,每个网格实例的数量可能会有所不同。
但我想我们想减少向 GPU 上传命令的数据量,这就是为什么我想在一个连续的内存中累积所有矩阵并将其发送到单个 glBufferSubData 命令中。
不同批次的不同实例化网格想要使用共享 VBO 的不同段来读取矩阵。所以我也需要在每一帧更新 VAO。
问题是:我应该如何以更好的方式执行此操作?这样的架构真的是一个好的架构吗?我想我应该为每个 VAO 上的共享 VBO 使用 glBindVertexBuffer,所以我更新了段的偏移量和大小,并且 VAO 是轻量级的,但它真的是标准解决方案吗?
【问题讨论】:
标签: performance opengl instance vbo vao