diff --git a/stepmania/src/RageBitmapTexture.cpp b/stepmania/src/RageBitmapTexture.cpp index 55aa5f4286..d3e6bb2f94 100644 --- a/stepmania/src/RageBitmapTexture.cpp +++ b/stepmania/src/RageBitmapTexture.cpp @@ -33,12 +33,14 @@ RageBitmapTexture::RageBitmapTexture( const CString &sFilePath ) : RageTexture( { // LOG->Trace( "RageBitmapTexture::RageBitmapTexture()" ); + m_uGLTextureID = 0; Load( sFilePath ); } RageBitmapTexture::~RageBitmapTexture() { - glDeleteTextures(1, &m_uGLTextureID); + if(m_uGLTextureID) + glDeleteTextures(1, &m_uGLTextureID); } int power_of_two(int input) @@ -82,10 +84,10 @@ void RageBitmapTexture::Load( const CString &sFilePath ) ConvertSDLSurface(img, m_iTextureWidth, m_iTextureHeight, 32, 0x000000FF, 0x0000FF00, 0x00FF0000, 0xFF000000 ); + if(!m_uGLTextureID) + glGenTextures(1, &m_uGLTextureID); - glGenTextures(1, &m_uGLTextureID); - DISPLAY->FlushQueue(); - glBindTexture(GL_TEXTURE_2D, m_uGLTextureID); + DISPLAY->SetTexture(this); glPixelStorei(GL_UNPACK_ROW_LENGTH, img->pitch / img->format->BytesPerPixel); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); @@ -93,21 +95,19 @@ void RageBitmapTexture::Load( const CString &sFilePath ) GL_UNSIGNED_BYTE, img->pixels); glFlush(); - SDL_FreeSurface(img); - CreateFrameRects(); } void RageBitmapTexture::Reload() { - glDeleteTextures(1, &m_uGLTextureID); + DISPLAY->SetTexture(0); + + if(m_uGLTextureID) { + glDeleteTextures(1, &m_uGLTextureID); + m_uGLTextureID = 0; + } Load( m_sFilePath ); } - -unsigned int RageBitmapTexture::GetGLTextureID() -{ - return m_uGLTextureID; -} \ No newline at end of file diff --git a/stepmania/src/RageBitmapTexture.h b/stepmania/src/RageBitmapTexture.h index e1dcff3274..bab804c540 100644 --- a/stepmania/src/RageBitmapTexture.h +++ b/stepmania/src/RageBitmapTexture.h @@ -24,12 +24,14 @@ class RageBitmapTexture : public RageTexture public: RageBitmapTexture( const CString &sFilePath ); virtual ~RageBitmapTexture(); + /* only called by RageTextureManager::InvalidateTextures */ + virtual void Invalidate() { m_uGLTextureID = 0; } protected: virtual void Load( const CString &sFilePath ); virtual void Reload(); - virtual unsigned int GetGLTextureID(); + virtual unsigned int GetGLTextureID() { return m_uGLTextureID; } unsigned int m_uGLTextureID; CString m_sFilePath;