X-Git-Url: https://git.ucc.asn.au/?p=ipdf%2Fcode.git;a=blobdiff_plain;f=src%2Fscreen.cpp;h=9687c5514279b6bc6619e5de2af873333c16ac7f;hp=40754b3e6e3efcc37bb88d22962c82eb5e3b072a;hb=6229c121e63cf53459cf82cb1eaa8af063da592a;hpb=a851cf197844a2eb15fd5ee2c350ee296e415dca diff --git a/src/screen.cpp b/src/screen.cpp index 40754b3..9687c55 100644 --- a/src/screen.cpp +++ b/src/screen.cpp @@ -94,6 +94,12 @@ Screen::Screen() Fatal("Your system does not support the ARB_explicit_attrib_location extension, which is required."); } + m_frame_begin_time = SDL_GetPerformanceCounter(); + m_last_frame_time = 0; + m_last_frame_gpu_timer = 0; + glGenQueries(1, &m_frame_gpu_timer); + glBeginQuery(GL_TIME_ELAPSED, m_frame_gpu_timer); + glDebugMessageCallback(opengl_debug_callback, 0); GLuint default_vao; @@ -230,7 +236,24 @@ void Screen::Present() { if (m_debug_font_atlas) DebugFontFlush(); + m_last_frame_time = SDL_GetPerformanceCounter() - m_frame_begin_time; + glEndQuery(GL_TIME_ELAPSED); SDL_GL_SwapWindow(m_window); + m_frame_begin_time = SDL_GetPerformanceCounter(); + if (m_last_frame_gpu_timer) + glDeleteQueries(1, &m_last_frame_gpu_timer); + m_last_frame_gpu_timer = m_frame_gpu_timer; + glGenQueries(1, &m_frame_gpu_timer); + glBeginQuery(GL_TIME_ELAPSED, m_frame_gpu_timer); +} + +double Screen::GetLastFrameTimeGPU() const +{ + if (!m_last_frame_gpu_timer) + return 0; + uint64_t frame_time_ns; + glGetQueryObjectui64v(m_last_frame_gpu_timer, GL_QUERY_RESULT, &frame_time_ns); + return frame_time_ns/1000000000.0; } void Screen::ScreenShot(const char * filename) const