aboutsummaryrefslogtreecommitdiff
path: root/src/libjin/graphics
diff options
context:
space:
mode:
Diffstat (limited to 'src/libjin/graphics')
-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
9 files changed, 76 insertions, 11 deletions
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();
///
///