OpenGL:计算绘制的三角形/对象的数量

时间:2017-03-09 21:19:54

标签: opengl

对于Visual Studio开发的OpenGL游戏,是否有可能计算在API的帮助下绘制的三角形或对象(网格没有相互连接)?我没有找到任何相关信息。手动计算它们似乎是人为的痛苦。

2 个答案:

答案 0 :(得分:0)

虽然“自己”这样做并不麻烦,但您可以覆盖/重定向所有glDraw*()次来电。

几年前我做了类似的事情,我想计算任何给定帧的绘制调用量(对于调试版本)。我通过为每个glDraw*()设置一个宏来实现它。看起来像是:

int drawCallCount = 0;

#define glDrawArrays(...) \
    do { glad_glDrawArrays(__VA_ARGS__); ++drawCallCount; } while (0)

// etc glDraw*()

然后在每个帧结束时,我会阅读drawCallCount并将其重置为0

请注意,我正在使用GLAD

考虑glDrawArrays(GLenum mode, GLint first, GLsizei count)。然后,您会检查modeGL_TRIANGLES,然后(count - first) / 3将是绘制调用的三角形数量。

+-------------------+---------------------+
| Mode              | Triangles           |
+-------------------+---------------------+
| GL_TRIANGLES      | (count - first) / 3 |
+-------------------+---------------------+
| GL_TRIANGLE_STRIP | (count - 2 - first) |
+-------------------+---------------------+
| GL_TRIANGLE_FAN   | (count - 2 - first) |
+-------------------+---------------------+

答案 1 :(得分:0)

我自己想出来了,结果与搅拌机完全相同。

绘制的对象当然有很多网格。绘制的网格顶点计数存储在一个简单变量中,该变量设置为零,然后在每个渲染循环迭代中求和并除以3。