aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorchai <chaifix@163.com>2018-12-24 08:15:13 +0800
committerchai <chaifix@163.com>2018-12-24 08:15:13 +0800
commit6e64f600b662bbf5dd6cb63661504b67b60cddcd (patch)
tree23d4a4f7e5e837715af63d9077e51373b0abc188
parent145e0752c702fa354fb78d3f30fa4b8ec44bfe7b (diff)
*stats
-rw-r--r--bin/game/main.lua9
-rw-r--r--bin/jin.exebin561152 -> 562176 bytes
-rw-r--r--src/libjin-lua/modules/graphics/je_lua_graphics.cpp17
-rw-r--r--src/libjin/game/je_application.cpp2
-rw-r--r--src/libjin/graphics/fonts/je_font.h6
-rw-r--r--src/libjin/graphics/je_canvas.cpp4
-rw-r--r--src/libjin/graphics/je_gl.cpp29
-rw-r--r--src/libjin/graphics/je_gl.h28
-rw-r--r--src/libjin/graphics/je_image.cpp2
-rw-r--r--src/libjin/graphics/je_shapes.cpp10
-rw-r--r--src/libjin/graphics/je_texture.cpp3
-rw-r--r--src/libjin/graphics/je_window.cpp3
-rw-r--r--src/libjin/graphics/je_window.h2
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
index 39b358d..57e2152 100644
--- a/bin/jin.exe
+++ b/bin/jin.exe
Binary files differ
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();
///
///