首页 > 解决方案 > glMultiDrawElements 和 glDrawElements 等价

问题描述

我在许多glMultiDrawElements“等效”的网站上阅读过这样做:

for(int i = 0; i < drawCount; ++i){
    glDrawElements(mode, counts[i], type, indices[i]);
}

但我不明白的是“等价物”的那一部分。等价到什么程度?如果两者完全相同,那么glMultiDrawElements如果我可以对glDrawElements函数和 for 循环执行相同的操作,那么函数的意义何在?

glMultiDrawElements功能是否给我一些性能优势?

标签: opengl

解决方案


glMultiDrawElements 表现得好像你做了那些绘制调用。性能不是,也从来不是,“行为”的一部分。OpenGL 规范定义了行为;它没有也不能指定性能。

还应该注意的是,从 OpenGL 4.6/ ARB_shader_draw_parameters 开始,这些不再是完全等效的函数。多重绘制函数能够将输入gl_DrawID参数设置为 Vertex Shader,从而允许着色器管道知道正在执行多重绘制操作中间的哪个绘制操作。

你不能用glDrawElements.


推荐阅读