OpenGL批处理和禁用对象

时间:2016-04-23 19:43:34

标签: performance opengl

我在单个VBO中组合具有相同格式的顶点数据,根据这些对象使用的材质指定顶点属性,并使用单个glDrawArrays()调用进行渲染。

在我必须禁用某些对象(比如object1)在运行时渲染之前,一切都很顺利。这是否可能,假设我已经设置了所有顶点属性和东西?最好不要使用批处理,并且每个对象都有vbo / vao(然后,如果一个对象被禁用,只是不要在其上调用glDraw*())?

1 个答案:

答案 0 :(得分:0)

批处理需要将所有数据放在一个缓冲区中,但批处理不是限制。批处理是减少绘制调用的数量。将数据放在一个缓冲区中必要,但还不够。

相对于必须切换缓冲区和顶点格式,将所有顶点数据放在一个缓冲区具有性能优势。您不需要一直将所有内容批处理为单个绘图调用,以提高每个对象使用缓冲区的性能。

在OpenGL Object中,多次绘制调用的主要成本不是绘制调用本身。它通常在绘制调用之间进行状态更改。

您已将顶点数据放在同一个缓冲区中,如果可以通过一次绘制调用渲染所有内容,则必须设法消除对象之间的阶段更改。那时,你已经获得了大部分的表现。接受并转向其他较低级别的果实。