From e61910ab9ddbf286f121df7a6eaffbd2fd0a7704 Mon Sep 17 00:00:00 2001 From: josh Date: Wed, 18 Nov 2009 00:20:08 +0000 Subject: [PATCH] added DEBUG_GL_ERROR debug functionality git-svn-id: svn://anubis/misc/TextureCache@214 bd8a9e45-a331-0410-811e-c64571078777 --- TextureCache.cc | 37 +++++++++++++++++++++++++++++++++---- 1 file changed, 33 insertions(+), 4 deletions(-) diff --git a/TextureCache.cc b/TextureCache.cc index d41e681..888f9ff 100644 --- a/TextureCache.cc +++ b/TextureCache.cc @@ -9,6 +9,23 @@ #include "FileLoader/FileLoader.h" 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() { } @@ -34,6 +51,7 @@ GLuint TextureCache::loadTexture(const FileLoader::Path & path, FileLoader & fileLoader, bool mipmaps, int mode, int quality) { + checkGLError(); GLuint texture; FileLoader::Buffer buff = fileLoader.load(path); if (buff.size <= 0) @@ -80,32 +98,43 @@ GLuint TextureCache::loadTexture(const FileLoader::Path & path, srcOffset += texsurf->w; } glGenTextures(1, &texture); + checkGLError(); glBindTexture(GL_TEXTURE_2D, texture); + checkGLError(); glTexImage2D(GL_TEXTURE_2D, 0, 4, texsurf->w, texsurf->h, 0, GL_RGBA, GL_UNSIGNED_BYTE, pixels); if (quality > 0) { - glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, - mipmaps ? GL_LINEAR_MIPMAP_LINEAR : GL_LINEAR); + checkGLError(); + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, mipmaps ? GL_LINEAR_MIPMAP_LINEAR : GL_LINEAR); + checkGLError(); } else { - glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, - mipmaps ? GL_NEAREST_MIPMAP_NEAREST : GL_NEAREST); + checkGLError(); + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, mipmaps ? GL_NEAREST_MIPMAP_NEAREST : GL_NEAREST); + checkGLError(); } + checkGLError(); glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, mode); + checkGLError(); if (mipmaps) + { + checkGLError(); gluBuild2DMipmaps(GL_TEXTURE_2D, GL_RGBA, texsurf->w, texsurf->h, GL_RGBA, GL_UNSIGNED_BYTE, pixels); + checkGLError(); + } SDL_FreeSurface(texsurf); delete[] pixels; + checkGLError(); return texture; }