【发布时间】:2014-06-27 22:27:57
【问题描述】:
我想知道当硬件镶嵌开启时,是否有办法获得渲染到窗口的有效多边形(或顶点)的数量。由于自适应细分,多边形数量从一帧到下一帧发生变化。
我正在使用 OpenGL 4.2 并渲染调用 glDrawElements 的网格。我正在使用完整的程序着色器(顶点、镶嵌控制、镶嵌评估、几何和片段)。
我有一个数组中多边形的初始数量,但是在执行细分阶段后,这个数字不再有效。
我尝试使用 glGetQuery(GL_PRIMITIVES_GENERATED) 但它总是返回 0。
glGenQueries(1, query).
glBeginQuery(GL_PRIMITIVES_GENERATED, query).
//Draw stuff
glEndQuery(GL_PRIMITIVES_GENERATED).
glGetQueryObjectuiv(query, GL_QUERY_RESULT_AVAILABLE, &value).
【问题讨论】:
-
这绝对不会做任何有意义的事情。如果你想得到一个原始查询的结果,你需要使用
glGetQueryObjectuiv (<primitive query ID>, GL_QUERY_RESULT, &value)。此外,您应该等到GL_QUERY_RESULT_AVAILABLE为true 后再执行此操作,否则会导致管道停顿。你能在你实际设置原始查询的地方显示代码吗?如果你还没有这样做,我可以给你一些伪代码来正确设置。 -
@AndonM.Coleman 抱歉耽搁了,我遇到了 Internet 服务问题。这是我所做的(在阅读您的评论后):glGenQueries(1, query)。然后:glBeginQuery(GL_PRIMITIVES_GENERATED,查询)。接下来是对 glBindBuffer 和 glDrawElements 的调用。紧随其后:glEndQuery(GL_PRIMITIVES_GENERATED)。 glGetQueryObjectuiv(查询,GL_QUERY_RESULT_AVAILABLE,值)。值始终为零,对 glGetQueryObjectuiv(query, GL_QUERY_RESULT, value) 的调用也返回 0。
-
这是 C++,对吧?你应该使用
&value。它不是您感兴趣的返回值,您需要将value变量的地址 传递给OpenGL。我现在只能想象编译器允许这样做是因为它隐式地将整数转换为指针,但大多数编译器至少会警告你尝试这样做。您能否编辑您的原始问题并将您刚才提到的内容放入代码块中?这将使理解这一点更容易。 -
我确实在使用 &value 但我在这里写错了。
标签: c++ opengl polygon opengl-4 tessellation