added DEBUG_GL_ERROR debug functionality

git-svn-id: svn://anubis/misc/TextureCache@214 bd8a9e45-a331-0410-811e-c64571078777
This commit is contained in:
josh 2009-11-18 00:20:08 +00:00
parent 9b853cfb21
commit e61910ab9d

View File

@ -9,6 +9,23 @@
#include "FileLoader/FileLoader.h" #include "FileLoader/FileLoader.h"
using namespace std; using namespace std;
//#define DEBUG_GL_ERROR
#ifdef DEBUG_GL_ERROR
#define checkGLError() checkGLErrorLine(__FUNCTION__, __LINE__)
#else
#define checkGLError()
#endif
static void checkGLErrorLine(const char * function, int line)
{
GLenum err = glGetError();
if (err != 0)
{
cerr << "gl error in " << function
<< ": " << err << " (0x" << hex << err << ") at line "
<< dec << line << endl;
}
}
TextureCache::~TextureCache() TextureCache::~TextureCache()
{ {
} }
@ -34,6 +51,7 @@ GLuint TextureCache::loadTexture(const FileLoader::Path & path,
FileLoader & fileLoader, bool mipmaps, FileLoader & fileLoader, bool mipmaps,
int mode, int quality) int mode, int quality)
{ {
checkGLError();
GLuint texture; GLuint texture;
FileLoader::Buffer buff = fileLoader.load(path); FileLoader::Buffer buff = fileLoader.load(path);
if (buff.size <= 0) if (buff.size <= 0)
@ -80,32 +98,43 @@ GLuint TextureCache::loadTexture(const FileLoader::Path & path,
srcOffset += texsurf->w; srcOffset += texsurf->w;
} }
glGenTextures(1, &texture); glGenTextures(1, &texture);
checkGLError();
glBindTexture(GL_TEXTURE_2D, texture); glBindTexture(GL_TEXTURE_2D, texture);
checkGLError();
glTexImage2D(GL_TEXTURE_2D, 0, 4, texsurf->w, texsurf->h, 0, glTexImage2D(GL_TEXTURE_2D, 0, 4, texsurf->w, texsurf->h, 0,
GL_RGBA, GL_UNSIGNED_BYTE, pixels); GL_RGBA, GL_UNSIGNED_BYTE, pixels);
if (quality > 0) if (quality > 0)
{ {
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, checkGLError();
mipmaps ? GL_LINEAR_MIPMAP_LINEAR : GL_LINEAR); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER,
mipmaps ? GL_LINEAR_MIPMAP_LINEAR : GL_LINEAR); mipmaps ? GL_LINEAR_MIPMAP_LINEAR : GL_LINEAR);
checkGLError();
} }
else else
{ {
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, checkGLError();
mipmaps ? GL_NEAREST_MIPMAP_NEAREST : GL_NEAREST); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER,
mipmaps ? GL_NEAREST_MIPMAP_NEAREST : GL_NEAREST); mipmaps ? GL_NEAREST_MIPMAP_NEAREST : GL_NEAREST);
checkGLError();
} }
checkGLError();
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, mode); glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, mode);
checkGLError();
if (mipmaps) if (mipmaps)
{
checkGLError();
gluBuild2DMipmaps(GL_TEXTURE_2D, GL_RGBA, gluBuild2DMipmaps(GL_TEXTURE_2D, GL_RGBA,
texsurf->w, texsurf->h, GL_RGBA, GL_UNSIGNED_BYTE, pixels); texsurf->w, texsurf->h, GL_RGBA, GL_UNSIGNED_BYTE, pixels);
checkGLError();
}
SDL_FreeSurface(texsurf); SDL_FreeSurface(texsurf);
delete[] pixels; delete[] pixels;
checkGLError();
return texture; return texture;
} }