我正在编写一个渲染器,并且正在选择一种处理 vao/vbo/shader 管理的最终方法。在网上,我发现关于实际推荐的信息高度矛盾。目前思路如下:
-一个VBO连续存储所有网格。
- 每个“着色器映射”创建一个 VAO 以将特定的指针映射存储到 VBO。(“着色器映射”,在具有相同输入的不同着色器中保持一致)
然后通过“着色器映射”对实体进行排序,并使用主 VBO 中的偏移量进行渲染,从而最大限度地减少着色器和 VAO 开关。就像是:
for(shaders by mapping)
bindVAO(); //set pointers
for(shader)
for(entity using shader)
entity.setUniforms();
drawArrays(entity.offset, entity.size);
因为这将包括大量的重构,所以我想问一下这个解决方案是否是最优的。我还想知道是否有可能在单个 VBO 中具有多种交错格式。