diff --git a/example/demo.c b/example/demo.c index a98eccc..41f5882 100644 --- a/example/demo.c +++ b/example/demo.c @@ -862,7 +862,7 @@ void updateFPS(struct FPScounter* fps, float frameTime) #define AVG_SIZE 20 -void renderFPS(struct NVGcontext* vg, float x, float y, struct FPScounter* fps) +void renderFPS(struct NVGcontext* vg, float x, float y, struct FPScounter* fps, enum FPSRenderStyle style) { int i, head; float avg, w, h; @@ -886,29 +886,54 @@ void renderFPS(struct NVGcontext* vg, float x, float y, struct FPScounter* fps) nvgBeginPath(vg); nvgMoveTo(vg, x, y+h); - for (i = 0; i < FPS_HISTORY_COUNT; i++) { - float v = 1.0f / (0.00001f + fps->values[(fps->head+i) % FPS_HISTORY_COUNT]); - if (v > 80.0f) v = 80.0f; - float vx = x + ((float)i/(FPS_HISTORY_COUNT-1)) * w; - float vy = y + h - ((v / 80.0f) * h); - nvgLineTo(vg, vx, vy); - } + if( RENDER_FPS == style ) + { + for (i = 0; i < FPS_HISTORY_COUNT; i++) { + float v = 1.0f / (0.00001f + fps->values[(fps->head+i) % FPS_HISTORY_COUNT]); + if (v > 80.0f) v = 80.0f; + float vx = x + ((float)i/(FPS_HISTORY_COUNT-1)) * w; + float vy = y + h - ((v / 80.0f) * h); + nvgLineTo(vg, vx, vy); + } + } + else + { + for (i = 0; i < FPS_HISTORY_COUNT; i++) { + float v = fps->values[(fps->head+i) % FPS_HISTORY_COUNT] * 1000.0f; + if (v > 20.0f) v = 20.0f; + float vx = x + ((float)i/(FPS_HISTORY_COUNT-1)) * w; + float vy = y + h - ((v / 20.0f) * h); + nvgLineTo(vg, vx, vy); + } + } nvgLineTo(vg, x+w, y+h); nvgFillColor(vg, nvgRGBA(255,192,0,128)); nvgFill(vg); nvgFontFace(vg, "sans"); - nvgFontSize(vg, 18.0f); - nvgTextAlign(vg,NVG_ALIGN_RIGHT|NVG_ALIGN_MIDDLE); - nvgFillColor(vg, nvgRGBA(240,240,240,255)); - sprintf(str, "%.2f FPS", 1.0f / avg); - nvgText(vg, x+w-5,y+h/2, str, NULL); + if( RENDER_FPS == style ) + { + nvgFontSize(vg, 18.0f); + nvgTextAlign(vg,NVG_ALIGN_RIGHT|NVG_ALIGN_MIDDLE); + nvgFillColor(vg, nvgRGBA(240,240,240,255)); + sprintf(str, "%.2f FPS", 1.0f / avg); + nvgText(vg, x+w-5,y+h/2, str, NULL); + + nvgFontSize(vg, 15.0f); + nvgTextAlign(vg,NVG_ALIGN_LEFT|NVG_ALIGN_MIDDLE); + nvgFillColor(vg, nvgRGBA(240,240,240,160)); + sprintf(str, "%.2f ms", avg * 1000.0f); + nvgText(vg, x+5,y+h/2, str, NULL); + } + else + { + nvgFontSize(vg, 18.0f); + nvgTextAlign(vg,NVG_ALIGN_RIGHT|NVG_ALIGN_MIDDLE); + nvgFillColor(vg, nvgRGBA(240,240,240,255)); + sprintf(str, "%.2f ms", avg * 1000.0f); + nvgText(vg, x+w-5,y+h/2, str, NULL); + } - nvgFontSize(vg, 15.0f); - nvgTextAlign(vg,NVG_ALIGN_LEFT|NVG_ALIGN_MIDDLE); - nvgFillColor(vg, nvgRGBA(240,240,240,160)); - sprintf(str, "%.2f ms", avg * 1000.0f); - nvgText(vg, x+5,y+h/2, str, NULL); } diff --git a/example/demo.h b/example/demo.h index 38a0a58..4689afd 100644 --- a/example/demo.h +++ b/example/demo.h @@ -17,6 +17,10 @@ void freeDemoData(struct NVGcontext* vg, struct DemoData* data); void renderDemo(struct NVGcontext* vg, float mx, float my, float width, float height, float t, int blowup, struct DemoData* data); #define FPS_HISTORY_COUNT 100 +enum FPSRenderStyle { + RENDER_FPS, + RENDER_MS, +}; struct FPScounter { float values[FPS_HISTORY_COUNT]; @@ -25,7 +29,7 @@ struct FPScounter void initFPS(struct FPScounter* fps); void updateFPS(struct FPScounter* fps, float frameTime); -void renderFPS(struct NVGcontext* vg, float x, float y, struct FPScounter* fps); +void renderFPS(struct NVGcontext* vg, float x, float y, struct FPScounter* fps, enum FPSRenderStyle style ); #ifdef __cplusplus } diff --git a/example/example_gl3.c b/example/example_gl3.c index 460d10e..6b9d192 100644 --- a/example/example_gl3.c +++ b/example/example_gl3.c @@ -55,7 +55,8 @@ int main() struct DemoData data; struct NVGcontext* vg = NULL; struct FPScounter fps; - double prevt = 0; + struct FPScounter cpuTimes; + double prevt = 0, cpuTime = 0; if (!glfwInit()) { printf("Failed to init GLFW."); @@ -63,6 +64,7 @@ int main() } initFPS(&fps); + initFPS(&cpuTimes); glfwSetErrorCallback(errorcb); #ifndef _WIN32 // don't require this on win32, and works with more cards @@ -122,6 +124,7 @@ int main() dt = t - prevt; prevt = t; updateFPS(&fps, dt); + updateFPS(&cpuTimes, cpuTime); glfwGetCursorPos(window, &mx, &my); glfwGetWindowSize(window, &winWidth, &winHeight); @@ -142,12 +145,13 @@ int main() nvgBeginFrame(vg, winWidth, winHeight, pxRatio); renderDemo(vg, mx,my, winWidth,winHeight, t, blowup, &data); - renderFPS(vg, 5,5, &fps); + renderFPS(vg, 5,5, &fps, RENDER_FPS); + renderFPS(vg, 310,5, &cpuTimes, RENDER_MS); nvgEndFrame(vg); glEnable(GL_DEPTH_TEST); - + cpuTime = glfwGetTime() - t; glfwSwapBuffers(window); glfwPollEvents(); }