From 322c0bdef7f809176c9ee2adbd4641a2706277a6 Mon Sep 17 00:00:00 2001 From: bjorn Date: Wed, 11 Jul 2018 19:31:11 -0700 Subject: [PATCH] GpuStats; --- src/api/graphics.c | 2 +- src/graphics/gpu.h | 6 +++++- src/graphics/graphics.c | 8 ++------ src/graphics/graphics.h | 8 +------- src/graphics/opengl/gpu.c | 8 ++++++++ 5 files changed, 17 insertions(+), 15 deletions(-) diff --git a/src/api/graphics.c b/src/api/graphics.c index b8426555..3a17808e 100644 --- a/src/api/graphics.c +++ b/src/api/graphics.c @@ -368,7 +368,7 @@ int l_lovrGraphicsGetStats(lua_State* L) { lua_createtable(L, 0, 2); } - GraphicsStats stats = lovrGraphicsGetStats(); + GpuStats stats = lovrGraphicsGetStats(); lua_pushinteger(L, stats.drawCalls); lua_setfield(L, 1, "drawcalls"); diff --git a/src/graphics/gpu.h b/src/graphics/gpu.h index 3714afe9..5f2ee258 100644 --- a/src/graphics/gpu.h +++ b/src/graphics/gpu.h @@ -7,7 +7,8 @@ #pragma once typedef struct { - uint32_t shaderSwitches; + int shaderSwitches; + int drawCalls; } GpuStats; typedef struct { @@ -49,6 +50,9 @@ void gpuInit(bool srgb, gpuProc (*getProcAddress)(const char*)); void gpuDestroy(); void gpuDraw(GpuDrawCommand* command); void gpuPresent(); +GpuStats gpuGetStats(); + +// Ephemeral void gpuBindFramebuffer(uint32_t framebuffer); void gpuBindIndexBuffer(uint32_t indexBuffer); void gpuBindTexture(Texture* texture, int slot); diff --git a/src/graphics/graphics.c b/src/graphics/graphics.c index af68bc1e..838aa2d3 100644 --- a/src/graphics/graphics.c +++ b/src/graphics/graphics.c @@ -116,8 +116,6 @@ void lovrGraphicsClear(bool clearColor, bool clearDepth, bool clearStencil, Colo void lovrGraphicsPresent() { glfwSwapBuffers(state.window); - state.stats.drawCalls = 0; - state.stats.shaderSwitches = 0; gpuPresent(); } @@ -193,8 +191,8 @@ int lovrGraphicsGetHeight() { return height; } -GraphicsStats lovrGraphicsGetStats() { - return state.stats; +GpuStats lovrGraphicsGetStats() { + return gpuGetStats(); } // State @@ -1109,8 +1107,6 @@ void lovrGraphicsDraw(Mesh* mesh, mat4 transform, DefaultShader defaultShader, i if (transform) { lovrGraphicsPop(); } - - state.stats.drawCalls++; } void lovrGraphicsPushLayer(Canvas* canvas) { diff --git a/src/graphics/graphics.h b/src/graphics/graphics.h index 5dee47a9..fae92bdd 100644 --- a/src/graphics/graphics.h +++ b/src/graphics/graphics.h @@ -87,11 +87,6 @@ typedef struct { float textureAnisotropy; } GraphicsLimits; -typedef struct { - int drawCalls; - int shaderSwitches; -} GraphicsStats; - typedef struct { bool initialized; GLFWwindow* window; @@ -125,7 +120,6 @@ typedef struct { Mesh* mesh; bool stencilEnabled; bool stencilWriting; - GraphicsStats stats; } GraphicsState; // Base @@ -137,7 +131,7 @@ void lovrGraphicsPresent(); void lovrGraphicsCreateWindow(int w, int h, bool fullscreen, int msaa, const char* title, const char* icon); int lovrGraphicsGetWidth(); int lovrGraphicsGetHeight(); -GraphicsStats lovrGraphicsGetStats(); +GpuStats lovrGraphicsGetStats(); // State Color lovrGraphicsGetBackgroundColor(); diff --git a/src/graphics/opengl/gpu.c b/src/graphics/opengl/gpu.c index 3acf54c6..2f9c97f0 100644 --- a/src/graphics/opengl/gpu.c +++ b/src/graphics/opengl/gpu.c @@ -73,12 +73,20 @@ void gpuDraw(GpuDrawCommand* command) { glDrawArrays(glDrawMode, rangeStart, count); } } + + state.stats.drawCalls++; } void gpuPresent() { memset(&state.stats, 0, sizeof(state.stats)); } +GpuStats gpuGetStats() { + return state.stats; +} + +// Ephemeral + void gpuBindFramebuffer(uint32_t framebuffer) { if (state.framebuffer != framebuffer) { state.framebuffer = framebuffer;