请问openGL中glEndQuery(GL_TIME_ELAPSED);是做什么的?

AnnaChen1209 2013-05-16 09:56:34


void RenderGPU() {
SetOrthographicProjection();
glViewport(0,0,texture_size_x, texture_size_y);
CHECK_GL_ERRORS

glBeginQuery(GL_TIME_ELAPSED,t_query);
for(int i=0;i<NUM_ITER;i++) {
glBindFramebuffer(GL_DRAW_FRAMEBUFFER, fboID[writeID]);
glDrawBuffers(2, mrt);

CHECK_GL_ERRORS
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, attachID[2*readID]);

CHECK_GL_ERRORS
glActiveTexture(GL_TEXTURE1);
glBindTexture(GL_TEXTURE_2D, attachID[2*readID+1]);

glClear(GL_COLOR_BUFFER_BIT);
glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);

verletShader.Use();
verletShader.AddUniform("ellipsoid_xform"); glUniformMatrix4fv(verletShader("ellipsoid_xform"), 1, GL_FALSE, glm::value_ptr(ellipsoid));
verletShader.AddUniform("inv_ellipsoid"); glUniformMatrix4fv(verletShader("inv_ellipsoid"), 1, GL_FALSE, glm::value_ptr(inverse_ellipsoid));
//verletShader.AddUniform("ellipsoid"); glUniform4f(verletShader("ellipsoid"),center.x, center.y, center.z, radius);
DrawFullScreenQuad();
verletShader.UnUse();


//swap read/write pathways
int tmp = readID;
readID = writeID;
writeID = tmp;
}

//glFlush();
//glFinish();

CHECK_GL_ERRORS
ResetPerspectiveProjection();

//read back the results into the VBO
glBindFramebuffer(GL_READ_FRAMEBUFFER, fboID[readID]);

glReadBuffer(GL_COLOR_ATTACHMENT0);
glBindBuffer(GL_PIXEL_PACK_BUFFER, vboID);
glReadPixels(0, 0, texture_size_x, texture_size_y, GL_RGBA, GL_FLOAT, 0);
//glFlush();
//glFinish();
glEndQuery(GL_TIME_ELAPSED);


这段代码中,glBeginQuery(GL_TIME_ELAPSED,t_query);和glEndQuery(GL_TIME_ELAPSED);报错是什么原因?不是代码问题,可能是我配置的问题
...全文
260 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
AnnaChen1209 2013-05-16
  • 打赏
  • 举报
回复
已解决 参考 http://www.opengl.org/discussion_boards/showthread.php/171554-How-to-measure-timing-in-OpenGL/page2 Oh, ok! That's the problem. You haven't included glext.h properly. You can just add the following code, so that timer query constant are defined. #ifndef GL_ARB_timer_query #define GL_TIME_ELAPSED 0x88BF #define GL_TIMESTAMP 0x8E28 #endif Or use value 0x88BF instead of GL_TIME_ELAPSED.

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧