diff --git a/src/video/sdl.cpp b/src/video/sdl.cpp index 8245a5d63..8587efadb 100644 --- a/src/video/sdl.cpp +++ b/src/video/sdl.cpp @@ -790,6 +790,7 @@ void WaitEventsOneFrame() */ static Uint32 LastTick = 0; +static int RefreshRate = 0; void RealizeVideoMemory() { @@ -805,17 +806,38 @@ void RealizeVideoMemory() //for (int i = 0; i < NumRects; i++) // SDL_UpdateTexture(TheTexture, &Rects[i], TheScreen->pixels, TheScreen->pitch); SDL_RenderCopy(TheRenderer, TheTexture, NULL, NULL); - if (EnableDebugPrint) { - // show a bar representing fps scaled by 10 - SDL_SetRenderDrawColor(TheRenderer, 255, 0, 0, 255); - Uint32 nextTick = SDL_GetTicks(); - double fps = 10000.0 / (nextTick - LastTick); - SDL_RenderDrawLine(TheRenderer, 0, 0, floorl(fps), 0); - SDL_SetRenderDrawColor(TheRenderer, 0, 0, 0, 255); - LastTick = nextTick; - } - SDL_RenderPresent(TheRenderer); } + if (Parameters::Instance.benchmark) { + if (!RefreshRate) { + int displayCount = SDL_GetNumVideoDisplays(); + SDL_DisplayMode mode; + for (int i = 0; i < displayCount; i++) { + SDL_GetDesktopDisplayMode(0, &mode); + if (mode.refresh_rate > RefreshRate) { + RefreshRate = mode.refresh_rate; + } + } + } + + // show a bar representing fps, where the entire bar is the max refresh rate of attached displays + Uint32 nextTick = SDL_GetTicks(); + Uint32 frameTime = nextTick - LastTick; + int fps = std::min(RefreshRate, static_cast<int>(frameTime > 0 ? (1000.0 / frameTime) : 0)); + LastTick = nextTick; + + // draw the full bar + SDL_SetRenderDrawColor(TheRenderer, 255, 0, 0, 255); + SDL_Rect frame = { Video.Width - 10, 2, 8, RefreshRate }; + SDL_RenderDrawRect(TheRenderer, &frame); + + // draw the inner fps gage + SDL_SetRenderDrawColor(TheRenderer, 0, 255, 0, 255); + SDL_Rect bar = { Video.Width - 8, 2 + RefreshRate - fps, 4, fps }; + SDL_RenderFillRect(TheRenderer, &bar); + + SDL_SetRenderDrawColor(TheRenderer, 0, 0, 0, 255); + } + SDL_RenderPresent(TheRenderer); NumRects = 0; } if (!Preference.HardwareCursor) { diff --git a/src/video/shaders.cpp b/src/video/shaders.cpp index 4f7dad821..0d9d26831 100644 --- a/src/video/shaders.cpp +++ b/src/video/shaders.cpp @@ -393,7 +393,7 @@ bool RenderWithShader(SDL_Renderer *renderer, SDL_Window* win, SDL_Texture* back lazyGlTexCoord2f(maxu, maxv); lazyGlVertex2f(maxx, maxy); } lazyGlEnd(); - SDL_GL_SwapWindow(win); + // SDL_GL_SwapWindow(win); if (ShaderProgram != 0) { glUseProgram(oldProgramId);