我目前正在开发一个项目,我正在使用ARB_occlusion_query扩展。我已经正确注册了扩展,我可以生成查询,然后我启动一个并在渲染后调用EndQuery函数,但这似乎给了我'无效枚举'的错误。我在这里查了一下speq: http://www.opengl.org/registry/specs/ARB/occlusion_query.txt
我按如下方式调用EndQueries:
glEndQuery( GL_SAMPLES_PASSED_ARB );
所有这些似乎都有效,但它一直给我一个错误代码,声明'无效的枚举',错误代码1280.
我一直在为每个OpenGL调用添加错误检查,以确保错误不会从其他任何地方传来,我已将它隔离到本节。我按如下方式生成查询:
glGenQueries( size, (GLuint*)m_QueryID);
其中size(现在)是硬编码值10,m_QueryID是unsigned int数组,大小为10。
唯一出现问题的地方是glEndQuery调用。它给了我'无效的枚举'作为回报。所有其他调用如获取结果,启动查询以及最后删除它们都很好。
我的循环如下:
glBeginQuery( GL_SAMPLES_PASSED_ARB, m_QueryID[0] );
*render some models here*
glEndQuery( GL_SAMPLES_PASSED_ARB );
之后我会得到结果,由于我在glEndQuery调用上遇到的错误,我现在没有做任何事情。
根据speq中的错误代码,它说:
如果目标不是GL_SAMPLES_PASSED,则会生成GL_INVALID_ENUM。
这意味着我没有在那里传递GL_SAMPLES_PASSED,我就是这样。我甚至在没有ARB的情况下尝试过但当然没有变化,同样的事情仍在抱怨无效的枚举。