Browse Source

Added an inner frame CPU timer.

Needs names for the UI components to distinguish them, and probably stacking vertically for easier comparison.
shared-context
Doug Binks 11 years ago
parent
commit
a63854859e
3 changed files with 55 additions and 22 deletions
  1. +43
    -18
      example/demo.c
  2. +5
    -1
      example/demo.h
  3. +7
    -3
      example/example_gl3.c

+ 43
- 18
example/demo.c View File

@@ -862,7 +862,7 @@ void updateFPS(struct FPScounter* fps, float frameTime)


#define AVG_SIZE 20 #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; int i, head;
float avg, w, h; float avg, w, h;
@@ -886,29 +886,54 @@ void renderFPS(struct NVGcontext* vg, float x, float y, struct FPScounter* fps)


nvgBeginPath(vg); nvgBeginPath(vg);
nvgMoveTo(vg, x, y+h); 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); nvgLineTo(vg, x+w, y+h);
nvgFillColor(vg, nvgRGBA(255,192,0,128)); nvgFillColor(vg, nvgRGBA(255,192,0,128));
nvgFill(vg); nvgFill(vg);


nvgFontFace(vg, "sans"); 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);


} }



+ 5
- 1
example/demo.h View File

@@ -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); 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 #define FPS_HISTORY_COUNT 100
enum FPSRenderStyle {
RENDER_FPS,
RENDER_MS,
};
struct FPScounter struct FPScounter
{ {
float values[FPS_HISTORY_COUNT]; float values[FPS_HISTORY_COUNT];
@@ -25,7 +29,7 @@ struct FPScounter


void initFPS(struct FPScounter* fps); void initFPS(struct FPScounter* fps);
void updateFPS(struct FPScounter* fps, float frameTime); 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 #ifdef __cplusplus
} }


+ 7
- 3
example/example_gl3.c View File

@@ -55,7 +55,8 @@ int main()
struct DemoData data; struct DemoData data;
struct NVGcontext* vg = NULL; struct NVGcontext* vg = NULL;
struct FPScounter fps; struct FPScounter fps;
double prevt = 0;
struct FPScounter cpuTimes;
double prevt = 0, cpuTime = 0;


if (!glfwInit()) { if (!glfwInit()) {
printf("Failed to init GLFW."); printf("Failed to init GLFW.");
@@ -63,6 +64,7 @@ int main()
} }


initFPS(&fps); initFPS(&fps);
initFPS(&cpuTimes);


glfwSetErrorCallback(errorcb); glfwSetErrorCallback(errorcb);
#ifndef _WIN32 // don't require this on win32, and works with more cards #ifndef _WIN32 // don't require this on win32, and works with more cards
@@ -122,6 +124,7 @@ int main()
dt = t - prevt; dt = t - prevt;
prevt = t; prevt = t;
updateFPS(&fps, dt); updateFPS(&fps, dt);
updateFPS(&cpuTimes, cpuTime);


glfwGetCursorPos(window, &mx, &my); glfwGetCursorPos(window, &mx, &my);
glfwGetWindowSize(window, &winWidth, &winHeight); glfwGetWindowSize(window, &winWidth, &winHeight);
@@ -142,12 +145,13 @@ int main()
nvgBeginFrame(vg, winWidth, winHeight, pxRatio); nvgBeginFrame(vg, winWidth, winHeight, pxRatio);


renderDemo(vg, mx,my, winWidth,winHeight, t, blowup, &data); 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); nvgEndFrame(vg);


glEnable(GL_DEPTH_TEST); glEnable(GL_DEPTH_TEST);
cpuTime = glfwGetTime() - t;
glfwSwapBuffers(window); glfwSwapBuffers(window);
glfwPollEvents(); glfwPollEvents();
} }


Loading…
Cancel
Save