From 2134151b90e0a91c0e533f0300b67efc43936897 Mon Sep 17 00:00:00 2001 From: Kyzentun Date: Thu, 24 Jul 2014 03:38:17 -0600 Subject: [PATCH] Added Sprite::NewBlankSprite for use by NoteSkinManager. Removed default texture loading from Sprite::Sprite. Should fix problems with white banners and garbage on videos. --- src/NoteSkinManager.cpp | 6 +++--- src/Sprite.cpp | 14 +++++++++++--- src/Sprite.h | 3 +++ 3 files changed, 17 insertions(+), 6 deletions(-) diff --git a/src/NoteSkinManager.cpp b/src/NoteSkinManager.cpp index 1c226daa55..2148154829 100644 --- a/src/NoteSkinManager.cpp +++ b/src/NoteSkinManager.cpp @@ -438,14 +438,14 @@ Actor *NoteSkinManager::LoadActor( const RString &sButton, const RString &sEleme if( !PushActorTemplate(L, sButton, sElement, bSpriteOnly) ) { // ActorUtil will warn about the error - return new Sprite; + return Sprite::NewBlankSprite(); } auto_ptr pNode( XmlFileUtil::XNodeFromTable(L) ); if( pNode.get() == NULL ) { // XNode will warn about the error - return new Sprite; + return Sprite::NewBlankSprite(); } LUA->Release( L ); @@ -460,7 +460,7 @@ Actor *NoteSkinManager::LoadActor( const RString &sButton, const RString &sEleme { LuaHelpers::ReportScriptErrorFmt("%s: %s %s must be a Sprite", m_sCurrentNoteSkin.c_str(), sButton.c_str(), sElement.c_str()); delete pRet; - return new Sprite; + return Sprite::NewBlankSprite(); } } diff --git a/src/Sprite.cpp b/src/Sprite.cpp index 3a82cf343b..f9350e7e4b 100644 --- a/src/Sprite.cpp +++ b/src/Sprite.cpp @@ -32,11 +32,19 @@ Sprite::Sprite() m_fTexCoordVelocityX = 0; m_fTexCoordVelocityY = 0; - - // An uninitialized sprite should be valid to display. -Kyz - Load(TEXTUREMAN->GetDefaultTextureID()); } +// NoteSkinManager needs a sprite with a texture set to return in cases where +// the noteskin doesn't return a valid actor. I would really prefer to make +// Sprite::Sprite load the default texture, but that causes problems for +// banners on ScreenSelectMusic and videos on ScreenGameplay. So rather than +// dig through either of those, NoteSkinManager uses this special function. +Sprite* Sprite::NewBlankSprite() +{ + Sprite* news= new Sprite; + news->Load(TEXTUREMAN->GetDefaultTextureID()); + return news; +} Sprite::~Sprite() { diff --git a/src/Sprite.h b/src/Sprite.h index 0697fc8aec..4e4ba791ac 100644 --- a/src/Sprite.h +++ b/src/Sprite.h @@ -15,6 +15,9 @@ public: Sprite( const Sprite &cpy ); virtual ~Sprite(); + // See explanation in source. + static Sprite* NewBlankSprite(); + virtual void InitState(); void LoadFromNode( const XNode* pNode );