GL_EXT_timer_queryで遊んでみました
#define GL_TIME_ELAPSED_EXT 0x88BF
としましょう。後はGL_ARB_occlusion_queryと同じですね。
GLuint queryID; glGenQueries(1, &queryID); glBeginQuery(GL_TIME_ELAPSED_EXT); ...(何か描画)... glEndQuery(GL_TIME_ELAPSED_EXT); GLint resultAvailable = GL_FALSE; glGetQueryObjectiv(queryID_, GL_QUERY_RESULT_AVAILABLE, &resultAvailable); if (resultAvailable) { GLint result; glGetQueryObjectiv(queryID_, GL_QUERY_RESULT, &result); printf("query time %d\n", result); }
うーんGL_QUERY_RESULT_AVAILABLEは常に0を返しちゃうな。それを無視して値を取るとなんか中途半端な値が取れました。
左がGetQueryObjectivの値、右がgettimeofdayで取得した値です。
269504, 0.000223sec 271233, 0.000160sec 272897, 0.000166sec
どういう値が取れているのか知りたいんですけど、GL_EXT_timer_queryもGL_NV_timer_queryもファイルがないのよね。
http://oss.sgi.com/projects/ogl-sample/registry/NV/timer_query.txt
なんとなくの予想でGPUでかかった時間を10^(-10)secの値で入っているのかなぁと思ったりしますが、うーん-10乗(0.1 nano or 100 pico)ってちょっと中途半端だよね。gettimeofdayの値が正しいかどうかも不明だし。
正しい仕様が知りたいなぁ。
その後にふとGPUのクロック数かと考えたのですが、nvclockでGPUのclockを変更すると値が線形で変化するので、やっぱり時間みたいだ。