diff options
author | chai <chaifix@163.com> | 2018-12-24 08:15:13 +0800 |
---|---|---|
committer | chai <chaifix@163.com> | 2018-12-24 08:15:13 +0800 |
commit | 6e64f600b662bbf5dd6cb63661504b67b60cddcd (patch) | |
tree | 23d4a4f7e5e837715af63d9077e51373b0abc188 | |
parent | 145e0752c702fa354fb78d3f30fa4b8ec44bfe7b (diff) |
*stats
-rw-r--r-- | bin/game/main.lua | 9 | ||||
-rw-r--r-- | bin/jin.exe | bin | 561152 -> 562176 bytes | |||
-rw-r--r-- | src/libjin-lua/modules/graphics/je_lua_graphics.cpp | 17 | ||||
-rw-r--r-- | src/libjin/game/je_application.cpp | 2 | ||||
-rw-r--r-- | src/libjin/graphics/fonts/je_font.h | 6 | ||||
-rw-r--r-- | src/libjin/graphics/je_canvas.cpp | 4 | ||||
-rw-r--r-- | src/libjin/graphics/je_gl.cpp | 29 | ||||
-rw-r--r-- | src/libjin/graphics/je_gl.h | 28 | ||||
-rw-r--r-- | src/libjin/graphics/je_image.cpp | 2 | ||||
-rw-r--r-- | src/libjin/graphics/je_shapes.cpp | 10 | ||||
-rw-r--r-- | src/libjin/graphics/je_texture.cpp | 3 | ||||
-rw-r--r-- | src/libjin/graphics/je_window.cpp | 3 | ||||
-rw-r--r-- | src/libjin/graphics/je_window.h | 2 |
13 files changed, 102 insertions, 13 deletions
diff --git a/bin/game/main.lua b/bin/game/main.lua index 8128bb6..e45958f 100644 --- a/bin/game/main.lua +++ b/bin/game/main.lua @@ -108,6 +108,8 @@ function jin.core.onLoad() timer:every(1, function() jin.log.info(jin.time.getFPS() .. " fps") + local stats = jin.graphics.getStats() + jin.log.info("textures " .. stats.textures) end) --local xmlParser = jin.utils.xml.newParser() @@ -157,4 +159,11 @@ function jin.core.onDraw() jin.graphics.useShader(sinShader) jin.graphics.rect(jin.graphics.RenderMode.FILL, 300, 300, 100, 50) jin.graphics.unuseShader() + + local stats = jin.graphics.getStats() + jin.graphics.print("draw call: " .. stats.drawCalls, 450, 10) + jin.graphics.print("canvas switches: " .. stats.canvasSwitches, 450, 30) + jin.graphics.print("shader switches: " .. stats.shaderSwitches, 450, 50) + jin.graphics.print("font switches: " .. stats.fontSwitches, 450, 70) + end
\ No newline at end of file diff --git a/bin/jin.exe b/bin/jin.exe Binary files differindex 39b358d..57e2152 100644 --- a/bin/jin.exe +++ b/bin/jin.exe diff --git a/src/libjin-lua/modules/graphics/je_lua_graphics.cpp b/src/libjin-lua/modules/graphics/je_lua_graphics.cpp index aeb1921..fe3b3d8 100644 --- a/src/libjin-lua/modules/graphics/je_lua_graphics.cpp +++ b/src/libjin-lua/modules/graphics/je_lua_graphics.cpp @@ -306,7 +306,7 @@ namespace JinEngine LUA_IMPLEMENT int l_present(lua_State* L) { - Window::get()->swapBuffers(); + Window::get()->present(); return 0; } @@ -992,6 +992,20 @@ namespace JinEngine return 0; } + LUA_IMPLEMENT int l_getStats(lua_State* L) + { + OpenGL::Stats stats = gl.getStats(); + luax_newtable(L); + luax_setfieldinteger(L, "drawCalls", stats.drawCalls); + luax_setfieldinteger(L, "canvasSwitches", stats.canvasSwitches); + luax_setfieldinteger(L, "shaderSwitches", stats.shaderSwitches); + luax_setfieldinteger(L, "fontSwitches", stats.fontSwitches); + luax_setfieldinteger(L, "textures", stats.textures); + luax_setfieldinteger(L, "canvases", stats.canvases); + luax_setfieldinteger(L, "fonts", stats.fonts); + return 1; + } + LUA_EXPORT int luaopen_graphics(lua_State* L) { luaopen_Bitmap(L); @@ -1011,6 +1025,7 @@ namespace JinEngine luaopen_Mesh(L); luaL_Reg methods[] = { + { "getStats", l_getStats }, /* window */ { "init", l_init }, { "setTitle", l_setTitle }, diff --git a/src/libjin/game/je_application.cpp b/src/libjin/game/je_application.cpp index faf9d1f..24629d4 100644 --- a/src/libjin/game/je_application.cpp +++ b/src/libjin/game/je_application.cpp @@ -53,7 +53,7 @@ namespace JinEngine glClear(GL_COLOR_BUFFER_BIT); if (_onDraw != nullptr) _onDraw(); - wnd->swapBuffers(); + wnd->present(); sleep(16); } quitloop:; diff --git a/src/libjin/graphics/fonts/je_font.h b/src/libjin/graphics/fonts/je_font.h index 3af0b11..9c231de 100644 --- a/src/libjin/graphics/fonts/je_font.h +++ b/src/libjin/graphics/fonts/je_font.h @@ -34,12 +34,16 @@ namespace JinEngine Font(unsigned fontsize) : mFontSize(fontsize) { + ++gl.getStats().fonts; } /// /// Font destructor. /// - virtual ~Font() {}; + virtual ~Font() + { + --gl.getStats().fonts; + }; /// /// Create page with given text. diff --git a/src/libjin/graphics/je_canvas.cpp b/src/libjin/graphics/je_canvas.cpp index 0a3f6f4..ba7919e 100644 --- a/src/libjin/graphics/je_canvas.cpp +++ b/src/libjin/graphics/je_canvas.cpp @@ -13,6 +13,7 @@ namespace JinEngine Canvas::Canvas(GLuint n) : fbo(n) { + ++gl.getStats().canvases; } Canvas::Canvas(int w, int h) @@ -37,10 +38,13 @@ namespace JinEngine // Unbind framebuffer gl.bindFrameBuffer(current_fbo); + + ++gl.getStats().canvases; } Canvas::~Canvas() { + --gl.getStats().canvases; } bool Canvas::isBinded(const Canvas* cvs) diff --git a/src/libjin/graphics/je_gl.cpp b/src/libjin/graphics/je_gl.cpp index 7ef4ee0..24b0a48 100644 --- a/src/libjin/graphics/je_gl.cpp +++ b/src/libjin/graphics/je_gl.cpp @@ -23,6 +23,7 @@ namespace JinEngine OpenGL::OpenGL() : mBlendMode(BlendMode::NONE) { + memset(&mStats, 0, sizeof(mStats)); memset(&mColor, 0xff, sizeof(mColor)); // Set default modelview matrix. mModelViewMatrices.push_back(Matrix()); @@ -102,6 +103,7 @@ namespace JinEngine void OpenGL::drawArrays(GLenum mode, GLint first, GLsizei count) { glDrawArrays(mode, first, count); + ++mStats.drawCalls; } void OpenGL::drawBuffer(GLenum mode) @@ -278,10 +280,12 @@ namespace JinEngine void OpenGL::useShader(Shaders::Shader* shader) { - if (shader) + if (mShader != shader && shader) { glUseProgram(shader->getGLProgramID()); mShader = shader; + + ++mStats.shaderSwitches; } } @@ -301,7 +305,7 @@ namespace JinEngine void OpenGL::bindCanvas(Canvas* canvas) { - if (canvas) + if (mCanvas != canvas && canvas) { GLuint fbo = canvas->getGLFrameBuffer(); gl.bindFrameBuffer(fbo); @@ -311,6 +315,8 @@ namespace JinEngine gl.setProjectionMatrix(0, w, 0, h, -1, 1); mCanvas = canvas; + + ++mStats.canvasSwitches; } } @@ -344,8 +350,12 @@ namespace JinEngine void OpenGL::setFont(Fonts::Font* font) { - if (font) + if (mFont != font && font) + { mFont = font; + + ++mStats.fontSwitches; + } } void OpenGL::unsetFont() @@ -358,5 +368,18 @@ namespace JinEngine return mFont; } + void OpenGL::resetStats() + { + mStats.drawCalls = 0; + mStats.canvasSwitches = 0; + mStats.shaderSwitches = 0; + mStats.fontSwitches = 0; + } + + OpenGL::Stats& OpenGL::getStats() + { + return mStats; + } + } // namespace Graphics } // namespace JinEngine
\ No newline at end of file diff --git a/src/libjin/graphics/je_gl.h b/src/libjin/graphics/je_gl.h index 37dc890..21aa900 100644 --- a/src/libjin/graphics/je_gl.h +++ b/src/libjin/graphics/je_gl.h @@ -38,6 +38,19 @@ namespace JinEngine PREMULTIPLIEDALPHA, }; + struct Stats + { + int drawCalls; + //int drawCallsBatched; + int canvasSwitches; + int shaderSwitches; + int fontSwitches; + int textures; + int canvases; + int fonts; + //int64 textureMemory; + }; + OpenGL(); ~OpenGL(); @@ -185,6 +198,16 @@ namespace JinEngine /// BlendMode getBlendMode(); + /// + /// + /// + void resetStats(); + + /// + /// + /// + Stats& getStats(); + private: static const Canvas* const DEFAULT_CANVAS; @@ -229,6 +252,11 @@ namespace JinEngine /// Fonts::Font* mFont; + /// + /// + /// + Stats mStats; + }; // Singleton. diff --git a/src/libjin/graphics/je_image.cpp b/src/libjin/graphics/je_image.cpp index 46ae34f..98f6fcf 100644 --- a/src/libjin/graphics/je_image.cpp +++ b/src/libjin/graphics/je_image.cpp @@ -12,6 +12,7 @@ namespace JinEngine using namespace Filesystem; Image::Image(const char* path) + : Bitmap() { AssetDatabase* fs = AssetDatabase::get(); Buffer buffer; @@ -20,6 +21,7 @@ namespace JinEngine } Image::Image(const void* imgData, size_t size) + : Bitmap() { if (imgData == nullptr) return; diff --git a/src/libjin/graphics/je_shapes.cpp b/src/libjin/graphics/je_shapes.cpp index 7781b3f..8bfb1ef 100644 --- a/src/libjin/graphics/je_shapes.cpp +++ b/src/libjin/graphics/je_shapes.cpp @@ -30,7 +30,7 @@ namespace JinEngine .sendMatrix4(SHADER_MODELVIEW_MATRIX, &modelMatrix) .sendMatrix4(SHADER_PROJECTION_MATRIX, &gl.getProjectionMatrix()); - glDrawArrays(GL_POINTS, 0, 1); + gl.drawArrays(GL_POINTS, 0, 1); } void points(int n, GLshort* p) @@ -43,7 +43,7 @@ namespace JinEngine .sendMatrix4(SHADER_MODELVIEW_MATRIX, &modelMatrix) .sendMatrix4(SHADER_PROJECTION_MATRIX, &gl.getProjectionMatrix()); - glDrawArrays(GL_POINTS, 0, n); + gl.drawArrays(GL_POINTS, 0, n); } void line(int x1, int y1, int x2, int y2) @@ -61,7 +61,7 @@ namespace JinEngine .sendMatrix4(SHADER_MODELVIEW_MATRIX, &modelMatrix) .sendMatrix4(SHADER_PROJECTION_MATRIX, &gl.getProjectionMatrix()); - glDrawArrays(GL_LINES, 0, 2); + gl.drawArrays(GL_LINES, 0, 2); } void circle(RenderMode mode, int x, int y, int r) @@ -110,7 +110,7 @@ namespace JinEngine .sendMatrix4(SHADER_PROJECTION_MATRIX, &gl.getProjectionMatrix()) .uploadVertices(2, GL_FLOAT, 0, p); - glDrawArrays(GL_LINE_LOOP, 0, count); + gl.drawArrays(GL_LINE_LOOP, 0, count); } void polygon(RenderMode mode, float* p, int count) @@ -128,7 +128,7 @@ namespace JinEngine .sendMatrix4(SHADER_PROJECTION_MATRIX, &gl.getProjectionMatrix()) .uploadVertices(2, GL_FLOAT, 0, p); - glDrawArrays(GL_POLYGON, 0, count); + gl.drawArrays(GL_POLYGON, 0, count); } } diff --git a/src/libjin/graphics/je_texture.cpp b/src/libjin/graphics/je_texture.cpp index 152e5d0..53d9bd3 100644 --- a/src/libjin/graphics/je_texture.cpp +++ b/src/libjin/graphics/je_texture.cpp @@ -32,6 +32,7 @@ namespace JinEngine Texture::Texture() : Graphic() { + ++gl.getStats().textures; } Texture::Texture(const char* path) @@ -44,10 +45,12 @@ namespace JinEngine Texture::Texture(const Bitmap* bitmap) : Graphic(bitmap) { + ++gl.getStats().textures; } Texture::~Texture() { + --gl.getStats().textures; } } // namespace Graphics diff --git a/src/libjin/graphics/je_window.cpp b/src/libjin/graphics/je_window.cpp index 4e5ecb1..1ce3901 100644 --- a/src/libjin/graphics/je_window.cpp +++ b/src/libjin/graphics/je_window.cpp @@ -112,10 +112,11 @@ namespace JinEngine SDL_DestroyWindow(mWnd); } - void Window::swapBuffers() + void Window::present() { if (mWnd) SDL_GL_SwapWindow(mWnd); + gl.resetStats(); } void Window::setTitle(const char* title) diff --git a/src/libjin/graphics/je_window.h b/src/libjin/graphics/je_window.h index 387395e..f9fe5df 100644 --- a/src/libjin/graphics/je_window.h +++ b/src/libjin/graphics/je_window.h @@ -68,7 +68,7 @@ namespace JinEngine /// /// /// - void swapBuffers(); + void present(); /// /// |