summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/client.cpp2
-rw-r--r--src/client.h1
-rw-r--r--src/gui/debugwindow.cpp16
-rw-r--r--src/gui/debugwindow.h1
-rw-r--r--src/main.h1
-rw-r--r--src/resources/image.cpp8
6 files changed, 27 insertions, 2 deletions
diff --git a/src/client.cpp b/src/client.cpp
index 1ac4be9f4..8bfebf58d 100644
--- a/src/client.cpp
+++ b/src/client.cpp
@@ -156,6 +156,8 @@ bool isSafeMode = false;
int serverVersion;
int start_time;
+int textures_count = 0;
+
/**
* Advances game logic counter.
* Called every 10 milliseconds by SDL_AddTimer()
diff --git a/src/client.h b/src/client.h
index eb859f0a8..f03a213db 100644
--- a/src/client.h
+++ b/src/client.h
@@ -63,6 +63,7 @@ extern volatile int cur_time;
extern bool isSafeMode;
extern int serverVersion;
extern int start_time;
+extern int textures_count;
class ErrorListener : public gcn::ActionListener
{
diff --git a/src/gui/debugwindow.cpp b/src/gui/debugwindow.cpp
index cbfce25dc..ddd2bc7db 100644
--- a/src/gui/debugwindow.cpp
+++ b/src/gui/debugwindow.cpp
@@ -124,7 +124,8 @@ void DebugWindow::widgetResized(const gcn::Event &event)
mTabs->setDimension(gcn::Rectangle(0, 0, getWidth(), getHeight()));
}
-MapDebugTab::MapDebugTab()
+MapDebugTab::MapDebugTab() :
+ mTexturesLabel(0)
{
LayoutHelper h(this);
ContainerPlacer place = h.getPlacer(0, 0);
@@ -169,7 +170,12 @@ MapDebugTab::MapDebugTab()
place(0, 5, mTileMouseLabel, 2);
place(0, 6, mParticleCountLabel, 2);
place(0, 7, mMapActorCountLabel, 2);
-
+#ifdef USE_OPENGL
+#ifdef DEBUG_OPENGL_LEAKS
+ mTexturesLabel = new Label(strprintf("%s %s", _("Textures count:"), "?"));
+ place(0, 8, mTexturesLabel, 2);
+#endif
+#endif
place.getCell().matchColWidth(0, 0);
place = h.getPlacer(0, 1);
setDimension(gcn::Rectangle(0, 0, 600, 300));
@@ -215,6 +221,12 @@ void MapDebugTab::logic()
mMapActorCountLabel->setCaption(
strprintf("%s %d", _("Map actors count:"),
map->getActorsCount()));
+#ifdef USE_OPENGL
+#ifdef DEBUG_OPENGL_LEAKS
+ mTexturesLabel->setCaption(strprintf("%s %d",
+ _("Textures count:"), textures_count));
+#endif
+#endif
}
}
else
diff --git a/src/gui/debugwindow.h b/src/gui/debugwindow.h
index b3432946b..ae4b1b597 100644
--- a/src/gui/debugwindow.h
+++ b/src/gui/debugwindow.h
@@ -63,6 +63,7 @@ class MapDebugTab : public DebugTab
Label *mParticleCountLabel;
Label *mMapActorCountLabel;
Label *mXYLabel;
+ Label *mTexturesLabel;
int mUpdateTime;
Label *mFPSLabel;
std::string mFPSText;
diff --git a/src/main.h b/src/main.h
index 883c7a9d5..9e0886fb4 100644
--- a/src/main.h
+++ b/src/main.h
@@ -88,6 +88,7 @@
//define DEBUG_FONT 1
//define DEBUG_FONT_COUNTERS 1
//define DEBUG_ALPHA_CACHE 1
+#define DEBUG_OPENGL_LEAKS 1
#define SMALL_VERSION "1.1.5.1"
#define CHECK_VERSION "01.01.05.01"
diff --git a/src/resources/image.cpp b/src/resources/image.cpp
index d5db3b211..be7bb7f47 100644
--- a/src/resources/image.cpp
+++ b/src/resources/image.cpp
@@ -30,6 +30,7 @@
#include "opengl1graphics.h"
#endif
+#include "client.h"
#include "log.h"
#include "main.h"
@@ -217,6 +218,10 @@ void Image::unload()
{
glDeleteTextures(1, &mGLImage);
mGLImage = 0;
+#ifdef DEBUG_OPENGL_LEAKS
+ if (textures_count > 0)
+ textures_count --;
+#endif
}
#endif
}
@@ -675,6 +680,9 @@ Image *Image::_GLload(SDL_Surface *tmpImage)
glTexImage2D(mTextureType, 0, 4, tmpImage->w, tmpImage->h,
0, GL_RGBA, GL_UNSIGNED_BYTE, tmpImage->pixels);
+#ifdef DEBUG_OPENGL_LEAKS
+ textures_count ++;
+#endif
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
glTexParameteri(mTextureType, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(mTextureType, GL_TEXTURE_MAG_FILTER, GL_NEAREST);