diff --git a/stepmania/src/BannerCache.cpp b/stepmania/src/BannerCache.cpp index ca965eb4e9..96f919a167 100644 --- a/stepmania/src/BannerCache.cpp +++ b/stepmania/src/BannerCache.cpp @@ -61,9 +61,22 @@ struct BannerTexture: public RageTexture { unsigned m_uTexHandle; unsigned GetTexHandle() { return m_uTexHandle; }; // accessed by RageDisplay + /* This is a reference to a pointer in m_BannerPathToImage. */ + SDL_Surface *&img; + int width, height; - BannerTexture( RageTextureID name, SDL_Surface *&img, int width, int height ): - RageTexture(name) + BannerTexture( RageTextureID name, SDL_Surface *&img_, int width_, int height_ ): + RageTexture(name), img(img_), width(width_), height(height_) + { + Create(); + } + + ~BannerTexture() + { + Destroy(); + } + + void Create() { /* The image is preprocessed; do as little work as possible. */ @@ -81,7 +94,7 @@ struct BannerTexture: public RageTexture if( img->w > DISPLAY->GetMaxTextureSize() || img->h > DISPLAY->GetMaxTextureSize() ) { - LOG->Warn("Converted %s at runtime", name.filename.c_str() ); + LOG->Warn("Converted %s at runtime", GetID().filename.c_str() ); ConvertSDLSurface(img, img->w, img->h, 32, 0x000000FF, 0x0000FF00, 0x00FF0000, 0xFF000000); zoomSurface(img, width, height); } @@ -108,10 +121,21 @@ struct BannerTexture: public RageTexture CreateFrameRects(); } - ~BannerTexture() - { + void Destroy() + { DISPLAY->DeleteTexture( m_uTexHandle ); } + + void Reload() + { + Destroy(); + Create(); + } + + void Invalidate() + { + m_uTexHandle = 0; /* don't Destroy() */ + } }; RageTextureID BannerCache::LoadCachedSongBanner( CString BannerPath )