Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMitchell Stokes <mogurijin@gmail.com>2010-11-17 08:28:25 +0300
committerMitchell Stokes <mogurijin@gmail.com>2010-11-17 08:28:25 +0300
commit1bb98b41944dadf69645cf3b99bcabd9834f9240 (patch)
tree5c700ba234517211190bf7865c0ee7a353475b94 /source/gameengine/Ketsji/BL_Texture.cpp
parentf791d74f102dcfed69a95d605e3c634f76a070ab (diff)
Adding monitoring for (approximate) VRAM used by textures. The information is currently only used in the profiling data of the BGE.
Here is a image of it in action: http://www.pasteall.org/pic/show.php?id=6351 What it monitors: * VRAM used by textures created via bf_gpu and BL_Textures What it does not monitor: * VRAM used by the Blender ui * VRAM used by 2d filters * VRAM allocated by the user via KX_Scene.pre_draw and KX_Scene.pre_draw
Diffstat (limited to 'source/gameengine/Ketsji/BL_Texture.cpp')
-rw-r--r--source/gameengine/Ketsji/BL_Texture.cpp16
1 files changed, 15 insertions, 1 deletions
diff --git a/source/gameengine/Ketsji/BL_Texture.cpp b/source/gameengine/Ketsji/BL_Texture.cpp
index e708775b184..446ad0c47d5 100644
--- a/source/gameengine/Ketsji/BL_Texture.cpp
+++ b/source/gameengine/Ketsji/BL_Texture.cpp
@@ -22,6 +22,8 @@
#include "KX_GameObject.h"
+#include "GPU_extensions.h"
+
#define spit(x) std::cout << x << std::endl;
#include "MEM_guardedalloc.h"
@@ -61,7 +63,8 @@ BL_Texture::BL_Texture()
mNeedsDeleted(0),
mType(0),
mUnit(0),
- mEnvState(0)
+ mEnvState(0),
+ mTexSize(0)
{
// --
}
@@ -77,6 +80,9 @@ void BL_Texture::DeleteTex()
glDeleteTextures(1, (GLuint*)&mTexture);
mNeedsDeleted = 0;
mOk = 0;
+
+ GPU_texture_vram_subtract(mTexSize);
+ mTexSize = 0;
}
if(mEnvState) {
@@ -165,11 +171,15 @@ void BL_Texture::InitGLTex(unsigned int *pix,int x,int y,bool mipmap)
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
gluBuild2DMipmaps( GL_TEXTURE_2D, GL_RGBA, x, y, GL_RGBA, GL_UNSIGNED_BYTE, pix );
+ mTexSize = (x*y*4)+(x*y*4)/3;
+ GPU_texture_vram_add(mTexSize);
}
else {
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexImage2D( GL_TEXTURE_2D, 0, GL_RGBA, x, y, 0, GL_RGBA, GL_UNSIGNED_BYTE, pix );
+ mTexSize = x*y*4;
+ GPU_texture_vram_add(mTexSize);
}
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
@@ -190,11 +200,15 @@ void BL_Texture::InitNonPow2Tex(unsigned int *pix,int x,int y,bool mipmap)
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
gluBuild2DMipmaps( GL_TEXTURE_2D, GL_RGBA, nx, ny, GL_RGBA, GL_UNSIGNED_BYTE, newPixels );
+ mTexSize = (x*y*4)+(x*y*4)/3;
+ GPU_texture_vram_add(mTexSize);
}
else {
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexImage2D( GL_TEXTURE_2D, 0, GL_RGBA, nx, ny, 0, GL_RGBA, GL_UNSIGNED_BYTE, newPixels );
+ mTexSize = x*y*4;
+ GPU_texture_vram_add(mTexSize);
}
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
free(newPixels);