Three improvements involving image caching:
1) prevent the textureQuad map from containing references to cards when we're returning a temp (card backdrop) image in the threaded version. 2) we had two copies of the pspicon image in the cache (ie the regular & managed). Changed the reference in the DeckMenu code to use the managed instance. 3) Fixed a problem with a default constructor param that would set RESOURCE_LOCKED on certain images. I noticed that the 'NEW' image was locking itself in the cache because no resource modes was being passed in, so the default constructor param was setting it to locked. This seems like a bad idea - if you're not explicitly locking a resource in the call, that shouldn't be the default behaviour. Also added an assert safeguard to catch the possibility of 'overlocking' an image resource, as this probably means the image fetching routine is being abused somehow.
This commit is contained in:
@@ -184,7 +184,7 @@ void DeckMenu::initMenuItems()
|
||||
mSelectionTargetY = selectionY = sY;
|
||||
|
||||
//Grab a texture in VRAM.
|
||||
pspIconsTexture = WResourceManager::Instance()->RetrieveTexture("iconspsp.png", RETRIEVE_LOCK);
|
||||
pspIconsTexture = WResourceManager::Instance()->RetrieveTexture("iconspsp.png", RETRIEVE_MANAGE);
|
||||
|
||||
char buf[512];
|
||||
for (int i = 0; i < 8; i++)
|
||||
|
||||
@@ -39,6 +39,9 @@ void WResource::deadbolt()
|
||||
void WResource::lock()
|
||||
{
|
||||
if (locks < WRES_MAX_LOCK) locks++;
|
||||
// watch out for this - if the lock count increases beyond a reasonable threshold,
|
||||
// someone is probably not releasing the texture correctly
|
||||
assert(locks < 50);
|
||||
}
|
||||
|
||||
void WResource::unlock(bool force)
|
||||
@@ -97,7 +100,19 @@ JQuadPtr WCachedTexture::GetQuad(float offX, float offY, float width, float heig
|
||||
if (width == 0.0f || width > static_cast<float> (texture->mWidth)) width = static_cast<float> (texture->mWidth);
|
||||
if (height == 0.0f || height > static_cast<float> (texture->mHeight)) height = static_cast<float> (texture->mHeight);
|
||||
|
||||
std::map<string, JQuadPtr>::iterator iter = mTrackedQuads.find(resname);
|
||||
// If we're fetching a card resource, but it's not available yet, we'll be attempting to get the Quad from the temporary back image.
|
||||
// If that's the case, don't stash a separate tracked quad entry for each card name in the the Back/BackThumbnail's resource
|
||||
string resource(resname);
|
||||
if (mFilename == kGenericCard)
|
||||
{
|
||||
resource = kGenericCardID;
|
||||
}
|
||||
else if (mFilename == kGenericThumbCard)
|
||||
{
|
||||
resource = kGenericCardThumbnailID;
|
||||
}
|
||||
|
||||
std::map<string, JQuadPtr>::iterator iter = mTrackedQuads.find(resource);
|
||||
if (iter != mTrackedQuads.end())
|
||||
return iter->second;
|
||||
|
||||
@@ -105,7 +120,7 @@ JQuadPtr WCachedTexture::GetQuad(float offX, float offY, float width, float heig
|
||||
|
||||
//Update JQ's values to what we called this with.
|
||||
quad->SetTextureRect(offX, offY, width, height);
|
||||
mTrackedQuads.insert(std::pair<string, JQuadPtr>(resname, quad));
|
||||
mTrackedQuads.insert(std::pair<string, JQuadPtr>(resource, quad));
|
||||
return quad;
|
||||
|
||||
}
|
||||
|
||||
@@ -23,9 +23,6 @@ namespace
|
||||
const std::string kExtension_gbk(".gbk");
|
||||
const std::string kExtension_font(".font");
|
||||
|
||||
const std::string kGenericCard("back.jpg");
|
||||
const std::string kGenericThumbCard("back_thumb.jpg");
|
||||
|
||||
// mutex meant for the cache map
|
||||
boost::mutex sCacheMutex;
|
||||
// mutex meant to protect against unthread-safe calls into JFileSystem, etc.
|
||||
|
||||
Reference in New Issue
Block a user