2

我正在考虑调整我当前的批量渲染。我目前做的是用这样的命令运行一个循环:

shader->setUniformValue("mvp_matrix", matrix * geo[x].geoMatrix);
glDrawElementsBaseVertex(GL_TRIANGLES, meshIndicesCountList[x], GL_UNSIGNED_INT, (const GLvoid *) (skip * sizeof(unsigned int)), offsetVertex);

本质上,我有 1 个 HUGE VBO,或者更像 3 个(顶点/法线/索引),我使用 1 个 VAO 将其全部绑定并渲染。当前渲染也适用于 1 材质 = 1 vao/3 VBOS(垂直/标准/索引)中的网格列表。

效果很好,但我现在想做的是创建一个向量,然后让每个 VBO 最多保持 500k 个索引。这个想法是将 1 个大缓冲区拆分为多个较小的缓冲区,这样如果用户更改材料,那么我不必重建整个大型 VBO,而只需重建较小的一个。假设有 1 亿个多边形,5 万个对象。重建可能需要一段时间......我想我测量过它,它是几秒钟。

所以问题是,给定我用来运行上面的循环以绘制对象的命令。我还能以某种方式使用它来绘制子 VBO 吗?上面的命令给出了 VBO 中每个项目的偏移/顶点起点,但是如果我在 1 个 VAO 下绑定多个 VBO,我看不到指定应该使用哪个 VBO 的方法。或者也许我应该每 1 个 VBO 列表(或包含所有 VBO 的结构)有 1 个 VAO,然后在循环中绑定每个 VBO,然后调用 draw?我只是有点担心使用 10k 绑定的 VBO 我会失去性能,并且在更换整个 VBO 时不会获得太多的加速?

希望这以某种方式......解释“问题”。

4

0 回答 0