0

我正在尝试使用 openGL 3.3,使用 GLFW,GLEW 创建一个遮挡查询

加载功能:

uint32_t glQueryID;
glGenQueries(1, &glQueryID);
if (glIsQuery(glQueryID)) //just for testing its always false !
{
 ... it must be always true !?!
}

绘图功能:

glBeginQuery(GL_ANY_SAMPLES_PASSED, glQueryID);
glGetError();// 1282 invalid operation

但是,我所有其他 glCalls 都可以正常工作,没有任何错误

在 Mac OS X、英特尔 HD 4000 上运行

4

2 回答 2

2

从以下文档glIsQuery

如果 id 当前是查询对象的名称,则 glIsQuery 返回 GL_TRUE。如果 id 为零,或者是当前不是查询对象名称的非零值,或者如果发生错误,则 glIsQuery 返回 GL_FALSE。

glGenQueries 返回但尚未通过调用 glBeginQuery 与查询对象关联的名称不是查询对象的名称。

由于您glIsQuery在将查询对象分配给它之前调用(例如通过调用glBeginQuery),因此返回值必须是GL_FALSE.

于 2017-03-25T18:17:12.647 回答
0

通过初始化查询,然后是空的开始/结束查询来解决问题

glGenQueries(1, &glQueryID);
glBeginQuery(GL_SAMPLES_PASSED, glQueryID);
glEndQuery(GL_SAMPLES_PASSED);

这将在稍后绘制时修复错误 1282(无效操作)

于 2017-03-25T18:34:48.570 回答