glGenQueries 总是返回非查询对象,glBeginQuery 返回错误
Posted
技术标签:
【中文标题】glGenQueries 总是返回非查询对象,glBeginQuery 返回错误【英文标题】:glGenQueries always return non-query objects, glBeginQuery return error 【发布时间】:2017-03-25 17:55:51 【问题描述】:我正在尝试使用 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、intel HD 4000 上运行
【问题讨论】:
您坚持询问 OpenGL 是否按照您的要求做的事情有什么原因吗? 你不喜欢 OpenGL,调用glGenFoo
不会生成任何Foo
,实际上只有第一次绑定/使用它们?
哈哈哈,是的,我喜欢它,是的,这就是原因!谢谢
【参考方案1】:
来自glIsQuery
的文档:
glIsQuery 如果 id 当前是查询对象的名称,则返回 GL_TRUE。如果 id 为零,或者是当前不是查询对象名称的非零值,或者如果发生错误,则 glIsQuery 返回 GL_FALSE。
由 glGenQueries 返回但尚未通过调用 glBeginQuery 与查询对象关联的名称不是查询对象的名称。
由于您在向其分配查询对象之前调用glIsQuery
(例如通过调用glBeginQuery
),因此返回值必须是GL_FALSE
。
【讨论】:
非常感谢,我想提一下,问题是通过用空开始和结束初始化查询来解决的。我不知道无效操作错误的原因是什么glGenQueries(1, &glQueryID); glBeginQuery(GL_SAMPLES_PASSED, glQueryID); glEndQuery(GL_SAMPLES_PASSED);
【参考方案2】:
通过初始化查询,然后是空的开始/结束查询来解决问题
glGenQueries(1, &glQueryID);
glBeginQuery(GL_SAMPLES_PASSED, glQueryID);
glEndQuery(GL_SAMPLES_PASSED);
这将在稍后绘制时修复错误 1282(无效操作)
【讨论】:
以上是关于glGenQueries 总是返回非查询对象,glBeginQuery 返回错误的主要内容,如果未能解决你的问题,请参考以下文章
Spring Data JPA:查询如何返回非实体对象或对象列表?
一种GL error 501的原因和解决 ----no default precision defined引起