Added FTType to texture fetch methods. Baked texture fetch now uses dynamic retry policy.
This commit is contained in:
@@ -131,7 +131,7 @@ LocalBitmap::LocalBitmap(std::string fullpath)
|
||||
if (decodeSelf(raw_image))
|
||||
{
|
||||
/* creating a shell LLViewerTexture and fusing raw image into it */
|
||||
LLViewerFetchedTexture* viewer_image = new LLViewerFetchedTexture( "file://"+filename, id, LOCAL_USE_MIPMAPS );
|
||||
LLViewerFetchedTexture* viewer_image = new LLViewerFetchedTexture( "file://"+filename, FTT_LOCAL_FILE, id, LOCAL_USE_MIPMAPS );
|
||||
viewer_image->createGLTexture( LOCAL_DISCARD_LEVEL, raw_image );
|
||||
viewer_image->setCachedRawImage(-1,raw_image);
|
||||
|
||||
|
||||
@@ -213,7 +213,7 @@ void LLColorSwatchCtrl::draw()
|
||||
{
|
||||
if (!mFallbackImageName.empty())
|
||||
{
|
||||
LLPointer<LLViewerFetchedTexture> fallback_image = LLViewerTextureManager::getFetchedTextureFromFile(mFallbackImageName, TRUE,
|
||||
LLPointer<LLViewerFetchedTexture> fallback_image = LLViewerTextureManager::getFetchedTextureFromFile(mFallbackImageName, FTT_LOCAL_FILE, TRUE,
|
||||
LLGLTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE);
|
||||
if( fallback_image->getComponents() == 4 )
|
||||
{
|
||||
|
||||
@@ -76,6 +76,7 @@ LLDrawPoolTerrain::LLDrawPoolTerrain(LLViewerTexture *texturep) :
|
||||
sDetailMode = gSavedSettings.getS32("RenderTerrainDetail");
|
||||
|
||||
m2DAlphaRampImagep = LLViewerTextureManager::getFetchedTextureFromFile("alpha_gradient_2d.j2c",
|
||||
FTT_LOCAL_FILE,
|
||||
TRUE, LLGLTexture::BOOST_UI,
|
||||
LLViewerTexture::FETCHED_TEXTURE,
|
||||
int_format, format);
|
||||
|
||||
@@ -73,11 +73,11 @@ LLVector3 LLDrawPoolWater::sLightDir;
|
||||
LLDrawPoolWater::LLDrawPoolWater() :
|
||||
LLFacePool(POOL_WATER)
|
||||
{
|
||||
mHBTex[0] = LLViewerTextureManager::getFetchedTexture(gSunTextureID, TRUE, LLGLTexture::BOOST_UI);
|
||||
mHBTex[0] = LLViewerTextureManager::getFetchedTexture(gSunTextureID, FTT_DEFAULT, TRUE, LLGLTexture::BOOST_UI);
|
||||
gGL.getTexUnit(0)->bind(mHBTex[0]) ;
|
||||
mHBTex[0]->setAddressMode(LLTexUnit::TAM_CLAMP);
|
||||
|
||||
mHBTex[1] = LLViewerTextureManager::getFetchedTexture(gMoonTextureID, TRUE, LLGLTexture::BOOST_UI);
|
||||
mHBTex[1] = LLViewerTextureManager::getFetchedTexture(gMoonTextureID, FTT_DEFAULT, TRUE, LLGLTexture::BOOST_UI);
|
||||
gGL.getTexUnit(0)->bind(mHBTex[1]);
|
||||
mHBTex[1]->setAddressMode(LLTexUnit::TAM_CLAMP);
|
||||
|
||||
|
||||
@@ -179,7 +179,7 @@ BOOL stop_gloderror()
|
||||
|
||||
LLViewerFetchedTexture* bindMaterialDiffuseTexture(const LLImportMaterial& material)
|
||||
{
|
||||
LLViewerFetchedTexture *texture = LLViewerTextureManager::getFetchedTexture(material.getDiffuseMap(), TRUE, LLGLTexture::BOOST_PREVIEW);
|
||||
LLViewerFetchedTexture *texture = LLViewerTextureManager::getFetchedTexture(material.getDiffuseMap(), FTT_DEFAULT, TRUE, LLGLTexture::BOOST_PREVIEW);
|
||||
|
||||
if (texture)
|
||||
{
|
||||
@@ -3551,7 +3551,7 @@ U32 LLModelPreview::loadTextures(LLImportMaterial& material,void* opaque)
|
||||
material.mOpaqueData = new LLPointer< LLViewerFetchedTexture >;
|
||||
LLPointer< LLViewerFetchedTexture >& tex = (*reinterpret_cast< LLPointer< LLViewerFetchedTexture > * >(material.mOpaqueData));
|
||||
|
||||
tex = LLViewerTextureManager::getFetchedTextureFromUrl("file://" + material.mDiffuseMapFilename, TRUE, LLGLTexture::BOOST_PREVIEW);
|
||||
tex = LLViewerTextureManager::getFetchedTextureFromUrl("file://" + material.mDiffuseMapFilename, FTT_LOCAL_FILE, TRUE, LLGLTexture::BOOST_PREVIEW);
|
||||
tex->setLoadedCallback(LLModelPreview::textureLoadedCallback, 0, TRUE, FALSE, opaque, NULL, FALSE);
|
||||
tex->forceToSaveRawImage(0, F32_MAX);
|
||||
material.setDiffuseMap(tex->getID()); // record tex ID
|
||||
|
||||
@@ -802,7 +802,7 @@ void LLFloaterReporter::takeScreenshot()
|
||||
|
||||
// store in the image list so it doesn't try to fetch from the server
|
||||
LLPointer<LLViewerFetchedTexture> image_in_list =
|
||||
LLViewerTextureManager::getFetchedTexture(mResourceDatap->mAssetInfo.mUuid, TRUE, LLGLTexture::BOOST_NONE, LLViewerTexture::FETCHED_TEXTURE);
|
||||
LLViewerTextureManager::getFetchedTexture(mResourceDatap->mAssetInfo.mUuid, FTT_LOCAL_FILE, TRUE, LLGLTexture::BOOST_NONE, LLViewerTexture::FETCHED_TEXTURE);
|
||||
image_in_list->createGLTexture(0, raw, 0, TRUE, LLViewerTexture::OTHER);
|
||||
|
||||
// the texture picker then uses that texture
|
||||
|
||||
@@ -129,7 +129,7 @@ void LLFloaterScriptDebug::addScriptLine(const std::string &utf8mesg, const std:
|
||||
|
||||
if (objectp)
|
||||
{
|
||||
objectp->setIcon(LLViewerTextureManager::getFetchedTextureFromFile("script_error.j2c", TRUE, LLGLTexture::BOOST_UI));
|
||||
objectp->setIcon(LLViewerTextureManager::getFetchedTextureFromFile("script_error.j2c", FTT_LOCAL_FILE, TRUE, LLGLTexture::BOOST_UI));
|
||||
floater_label = llformat("%s(%.2f, %.2f)", user_name.c_str(), objectp->getPositionRegion().mV[VX], objectp->getPositionRegion().mV[VY]);
|
||||
}
|
||||
else
|
||||
|
||||
@@ -685,7 +685,7 @@ void LLPreviewTexture::onAspectRatioCommit(LLUICtrl* ctrl, void* userdata)
|
||||
|
||||
void LLPreviewTexture::loadAsset()
|
||||
{
|
||||
mImage = LLViewerTextureManager::getFetchedTexture(mImageID, MIPMAP_TRUE, LLGLTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE);
|
||||
mImage = LLViewerTextureManager::getFetchedTexture(mImageID, FTT_DEFAULT, MIPMAP_TRUE, LLGLTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE);
|
||||
mImageOldBoostLevel = mImage->getBoostLevel();
|
||||
mImage->setBoostLevel(LLGLTexture::BOOST_PREVIEW);
|
||||
mImage->forceToSaveRawImage(0) ;
|
||||
|
||||
@@ -5408,7 +5408,7 @@ void LLSelectMgr::updateSilhouettes()
|
||||
|
||||
if (!mSilhouetteImagep)
|
||||
{
|
||||
mSilhouetteImagep = LLViewerTextureManager::getFetchedTextureFromFile("silhouette.j2c", TRUE, LLGLTexture::BOOST_UI);
|
||||
mSilhouetteImagep = LLViewerTextureManager::getFetchedTextureFromFile("silhouette.j2c", FTT_LOCAL_FILE, TRUE, LLGLTexture::BOOST_UI);
|
||||
}
|
||||
|
||||
mHighlightedObjects->cleanupNodes();
|
||||
|
||||
@@ -637,11 +637,11 @@ void LLFloaterTexturePicker::draw()
|
||||
mTexturep = NULL;
|
||||
if(mImageAssetID.notNull())
|
||||
{
|
||||
mTexturep = LLViewerTextureManager::getFetchedTexture(mImageAssetID, MIPMAP_YES, LLGLTexture::BOOST_PREVIEW);
|
||||
mTexturep = LLViewerTextureManager::getFetchedTexture(mImageAssetID, FTT_DEFAULT, MIPMAP_YES, LLGLTexture::BOOST_PREVIEW);
|
||||
}
|
||||
else if (!mFallbackImageName.empty())
|
||||
{
|
||||
mTexturep = LLViewerTextureManager::getFetchedTextureFromFile(mFallbackImageName, MIPMAP_YES, LLGLTexture::BOOST_PREVIEW);
|
||||
mTexturep = LLViewerTextureManager::getFetchedTextureFromFile(mFallbackImageName, FTT_LOCAL_FILE, MIPMAP_YES, LLGLTexture::BOOST_PREVIEW);
|
||||
}
|
||||
|
||||
if (mTentativeLabel)
|
||||
@@ -1619,13 +1619,13 @@ void LLTextureCtrl::draw()
|
||||
}
|
||||
else if (!mImageAssetID.isNull())
|
||||
{
|
||||
mTexturep = LLViewerTextureManager::getFetchedTexture(mImageAssetID, MIPMAP_YES,LLGLTexture::BOOST_PREVIEW, LLViewerTexture::LOD_TEXTURE);
|
||||
mTexturep = LLViewerTextureManager::getFetchedTexture(mImageAssetID, FTT_DEFAULT, MIPMAP_YES,LLGLTexture::BOOST_PREVIEW, LLViewerTexture::LOD_TEXTURE);
|
||||
mTexturep->forceToSaveRawImage(0) ;
|
||||
}
|
||||
else if (!mFallbackImageName.empty())
|
||||
{
|
||||
// Show fallback image.
|
||||
mTexturep = LLViewerTextureManager::getFetchedTextureFromFile(mFallbackImageName, MIPMAP_YES,LLGLTexture::BOOST_PREVIEW, LLViewerTexture::LOD_TEXTURE);
|
||||
mTexturep = LLViewerTextureManager::getFetchedTextureFromFile(mFallbackImageName, FTT_LOCAL_FILE, MIPMAP_YES,LLGLTexture::BOOST_PREVIEW, LLViewerTexture::LOD_TEXTURE);
|
||||
}
|
||||
else // mImageAssetID == LLUUID::null
|
||||
{
|
||||
|
||||
@@ -60,6 +60,7 @@
|
||||
#include "llstartup.h"
|
||||
#include "llsdserialize.h"
|
||||
#include "llbuffer.h"
|
||||
#include "llhttpretrypolicy.h"
|
||||
#include "hippogridmanager.h"
|
||||
|
||||
#include <boost/algorithm/string/split.hpp>
|
||||
@@ -74,6 +75,9 @@ LLStat LLTextureFetch::sCacheHitRate("texture_cache_hits", 128);
|
||||
LLStat LLTextureFetch::sCacheReadLatency("texture_cache_read_latency", 128);
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
// Log scope
|
||||
static const char * const LOG_TXT = "Texture";
|
||||
|
||||
class LLTextureFetchWorker : public LLWorkerClass
|
||||
{
|
||||
friend class LLTextureFetch;
|
||||
@@ -190,7 +194,8 @@ public:
|
||||
LLTextureFetch & getFetcher() { return *mFetcher; }
|
||||
|
||||
protected:
|
||||
LLTextureFetchWorker(LLTextureFetch* fetcher, const std::string& url, const LLUUID& id, const LLHost& host,
|
||||
LLTextureFetchWorker(LLTextureFetch* fetcher, FTType f_type,
|
||||
const std::string& url, const LLUUID& id, const LLHost& host,
|
||||
F32 priority, S32 discard, S32 size);
|
||||
|
||||
private:
|
||||
@@ -256,8 +261,9 @@ private:
|
||||
e_write_to_cache_state mWriteToCacheState;
|
||||
LLTextureFetch* mFetcher;
|
||||
LLPointer<LLImageFormatted> mFormattedImage;
|
||||
LLPointer<LLImageRaw> mRawImage;
|
||||
LLPointer<LLImageRaw> mAuxImage;
|
||||
LLPointer<LLImageRaw> mRawImage,
|
||||
mAuxImage;
|
||||
FTType mFTType;
|
||||
LLUUID mID;
|
||||
LLHost mHost;
|
||||
std::string mUrl;
|
||||
@@ -291,8 +297,8 @@ private:
|
||||
BOOL mNeedsAux;
|
||||
BOOL mHaveAllData;
|
||||
BOOL mInLocalCache;
|
||||
bool mCanUseHTTP ;
|
||||
bool mCanUseNET ; //can get from asset server.
|
||||
bool mCanUseHTTP,
|
||||
mCanUseNET ; //can get from asset server.
|
||||
S32 mHTTPFailCount;
|
||||
S32 mRetryAttempt;
|
||||
S32 mActiveCount;
|
||||
@@ -331,7 +337,7 @@ class HTTPGetResponder : public LLHTTPClient::ResponderWithCompleted
|
||||
{
|
||||
LOG_CLASS(HTTPGetResponder);
|
||||
public:
|
||||
HTTPGetResponder(LLTextureFetch* fetcher, const LLUUID& id, U64 startTime, S32 requestedSize, U32 offset)
|
||||
HTTPGetResponder( FTType f_type, LLTextureFetch* fetcher, const LLUUID& id, U64 startTime, S32 requestedSize, U32 offset)
|
||||
: mFetcher(fetcher)
|
||||
, mID(id)
|
||||
, mMetricsStartTime(startTime)
|
||||
@@ -340,7 +346,9 @@ public:
|
||||
, mReplyOffset(0)
|
||||
, mReplyLength(0)
|
||||
, mReplyFullLength(0)
|
||||
, mFTType(f_type)
|
||||
{
|
||||
mFetchRetryPolicy = new LLAdaptiveRetryPolicy(10.0,3600.0,2.0,10);
|
||||
}
|
||||
~HTTPGetResponder()
|
||||
{
|
||||
@@ -399,13 +407,11 @@ public:
|
||||
|
||||
if (log_to_viewer_log || log_to_sim)
|
||||
{
|
||||
|
||||
U64Microseconds timeNow = LLTimer::getTotalTime();
|
||||
mFetcher->mTextureInfo.setRequestStartTime(mID, mMetricsStartTime);
|
||||
mFetcher->mTextureInfo.setRequestType(mID, LLTextureInfoDetails::REQUEST_TYPE_HTTP);
|
||||
mFetcher->mTextureInfo.setRequestSize(mID, mRequestedSize);
|
||||
mFetcher->mTextureInfo.setRequestOffset(mID, mRequestedOffset);
|
||||
mFetcher->mTextureInfo.setRequestCompleteTimeAndLog(mID, timeNow);
|
||||
mFetcher->mTextureInfo.setRequestCompleteTimeAndLog(mID, LLTimer::getTotalTime());
|
||||
}
|
||||
|
||||
LL_DEBUGS("Texture") << "HTTP COMPLETE: " << mID << LL_ENDL;
|
||||
@@ -417,6 +423,7 @@ public:
|
||||
bool partial = false;
|
||||
if (HTTP_OK <= mStatus && mStatus < HTTP_MULTIPLE_CHOICES)
|
||||
{
|
||||
mFetchRetryPolicy->onSuccess();
|
||||
success = true;
|
||||
if (HTTP_PARTIAL_CONTENT == mStatus) // partial information
|
||||
{
|
||||
@@ -425,8 +432,26 @@ public:
|
||||
}
|
||||
if (!success)
|
||||
{
|
||||
if(mFTType == FTT_SERVER_BAKE)
|
||||
{
|
||||
mFetchRetryPolicy->onFailure(getStatus(), getResponseHeaders());
|
||||
F32 retry_after;
|
||||
if (mFetchRetryPolicy->shouldRetry(retry_after))
|
||||
{
|
||||
LL_INFOS(LOG_TXT) << mID << " will retry after " << retry_after << " seconds, resetting state to LOAD_FROM_NETWORK" << LL_ENDL;
|
||||
mFetcher->removeFromHTTPQueue(mID, 0);
|
||||
worker->setGetStatus(mStatus, mReason);
|
||||
worker->setState(LLTextureFetchWorker::LOAD_FROM_NETWORK);
|
||||
worker->unlockWorkMutex();
|
||||
return;
|
||||
}
|
||||
}
|
||||
worker->setGetStatus(mStatus, mReason);
|
||||
LL_WARNS() << "CURL GET FAILED, status:" << mStatus << " reason:" << mReason << LL_ENDL;
|
||||
if (mFTType != FTT_MAP_TILE) // missing map tiles are normal, don't complain about them.
|
||||
{
|
||||
LL_WARNS(LOG_TXT) << "CURL GET FAILED, status:" << mStatus
|
||||
<< " reason: " << mReason << LL_ENDL;
|
||||
}
|
||||
}
|
||||
S32BytesImplicit data_size = worker->callbackHttpGet(mReplyOffset, mReplyLength, channels, buffer, partial, success);
|
||||
|
||||
@@ -458,12 +483,15 @@ private:
|
||||
|
||||
LLTextureFetch* mFetcher;
|
||||
LLUUID mID;
|
||||
FTType mFTType;
|
||||
LLPointer<LLHTTPRetryPolicy> mFetchRetryPolicy;
|
||||
U64 mMetricsStartTime;
|
||||
S32 mRequestedSize;
|
||||
U32 mRequestedOffset;
|
||||
U32 mReplyOffset;
|
||||
U32 mReplyLength;
|
||||
U32 mReplyFullLength;
|
||||
|
||||
};
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
@@ -783,6 +811,7 @@ volatile bool LLTextureFetch::svMetricsDataBreak(true); // Start with a data bre
|
||||
// called from MAIN THREAD
|
||||
|
||||
LLTextureFetchWorker::LLTextureFetchWorker(LLTextureFetch* fetcher,
|
||||
FTType f_type, // Fetched image type
|
||||
const std::string& url, // Optional URL
|
||||
const LLUUID& id, // Image UUID
|
||||
const LLHost& host, // Simulator host
|
||||
@@ -793,6 +822,7 @@ LLTextureFetchWorker::LLTextureFetchWorker(LLTextureFetch* fetcher,
|
||||
mState(INIT),
|
||||
mWriteToCacheState(NOT_WRITE),
|
||||
mFetcher(fetcher),
|
||||
mFTType(f_type),
|
||||
mID(id),
|
||||
mHost(host),
|
||||
mUrl(url),
|
||||
@@ -904,7 +934,7 @@ void LLTextureFetchWorker::setupPacketData()
|
||||
mFirstPacket = (data_size - FIRST_PACKET_SIZE) / MAX_IMG_PACKET_SIZE + 1;
|
||||
if (FIRST_PACKET_SIZE + (mFirstPacket-1) * MAX_IMG_PACKET_SIZE != data_size)
|
||||
{
|
||||
LL_WARNS() << "Bad CACHED TEXTURE size: " << data_size << " removing." << LL_ENDL;
|
||||
LL_WARNS(LOG_TXT) << "Bad CACHED TEXTURE size: " << data_size << " removing." << LL_ENDL;
|
||||
removeFromCache();
|
||||
resetFormattedData();
|
||||
clearPackets();
|
||||
@@ -1016,14 +1046,14 @@ bool LLTextureFetchWorker::doWork(S32 param)
|
||||
{
|
||||
if (mState == INIT || mState == LOAD_FROM_NETWORK/* || mState == LOAD_FROM_SIMULATOR*/) //If we've already sent out requests.. might as well continue.
|
||||
{
|
||||
LL_WARNS("Texture") << mID << " abort: mImagePriority < F_ALMOST_ZERO" << LL_ENDL;
|
||||
LL_DEBUGS(LOG_TXT) << mID << " abort: mImagePriority < F_ALMOST_ZERO" << LL_ENDL;
|
||||
return true; // abort
|
||||
}
|
||||
}
|
||||
if(mState > CACHE_POST && !mCanUseNET && !mCanUseHTTP)
|
||||
{
|
||||
//nowhere to get data, abort.
|
||||
LL_WARNS("Texture") << mID << " abort, nowhere to get data" << LL_ENDL;
|
||||
LL_WARNS(LOG_TXT) << mID << " abort, nowhere to get data" << LL_ENDL;
|
||||
return true ;
|
||||
}
|
||||
|
||||
@@ -1072,7 +1102,7 @@ bool LLTextureFetchWorker::doWork(S32 param)
|
||||
mCacheWriteHandle = LLTextureCache::nullHandle();
|
||||
setState(LOAD_FROM_TEXTURE_CACHE);
|
||||
mDesiredSize = llmax(mDesiredSize, TEXTURE_CACHE_ENTRY_SIZE); // min desired size is TEXTURE_CACHE_ENTRY_SIZE
|
||||
LL_DEBUGS("Texture") << mID << ": Priority: " << llformat("%8.0f",mImagePriority)
|
||||
LL_DEBUGS(LOG_TXT) << mID << ": Priority: " << llformat("%8.0f",mImagePriority)
|
||||
<< " Desired Discard: " << mDesiredDiscard << " Desired Size: " << mDesiredSize << LL_ENDL;
|
||||
// fall through
|
||||
}
|
||||
@@ -1104,7 +1134,7 @@ bool LLTextureFetchWorker::doWork(S32 param)
|
||||
offset, size, responder);
|
||||
mCacheReadTimer.reset();
|
||||
}
|
||||
else if (mUrl.empty())
|
||||
else if ((mUrl.empty() || mFTType==FTT_SERVER_BAKE))
|
||||
{
|
||||
setPriority(LLWorkerThread::PRIORITY_LOW | mWorkPriority); // Set priority first since Responder may change it
|
||||
|
||||
@@ -1145,7 +1175,7 @@ bool LLTextureFetchWorker::doWork(S32 param)
|
||||
//
|
||||
//This should never happen
|
||||
//
|
||||
LL_WARNS("Texture") << mID << " this should never happen" << LL_ENDL;
|
||||
LL_DEBUGS(LOG_TXT) << mID << " this should never happen" << LL_ENDL;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@@ -1166,12 +1196,12 @@ bool LLTextureFetchWorker::doWork(S32 param)
|
||||
mLoadedDiscard = mDesiredDiscard;
|
||||
if (mLoadedDiscard < 0)
|
||||
{
|
||||
LL_WARNS("Texture") << mID << " mLoadedDiscard is " << mLoadedDiscard
|
||||
LL_WARNS(LOG_TXT) << mID << " mLoadedDiscard is " << mLoadedDiscard
|
||||
<< ", should be >=0" << LL_ENDL;
|
||||
}
|
||||
setState(DECODE_IMAGE);
|
||||
mWriteToCacheState = NOT_WRITE ;
|
||||
LL_DEBUGS("Texture") << mID << ": Cached. Bytes: " << mFormattedImage->getDataSize()
|
||||
LL_DEBUGS(LOG_TXT) << mID << ": Cached. Bytes: " << mFormattedImage->getDataSize()
|
||||
<< " Size: " << llformat("%dx%d",mFormattedImage->getWidth(),mFormattedImage->getHeight())
|
||||
<< " Desired Discard: " << mDesiredDiscard << " Desired Size: " << mDesiredSize << LL_ENDL;
|
||||
LLTextureFetch::sCacheHitRate.addValue(100.f);
|
||||
@@ -1181,13 +1211,13 @@ bool LLTextureFetchWorker::doWork(S32 param)
|
||||
if (mUrl.compare(0, 7, "file://") == 0)
|
||||
{
|
||||
// failed to load local file, we're done.
|
||||
LL_WARNS("Texture") << mID << ": abort, failed to load local file " << mUrl << LL_ENDL;
|
||||
LL_WARNS(LOG_TXT) << mID << ": abort, failed to load local file " << mUrl << LL_ENDL;
|
||||
return true;
|
||||
}
|
||||
// need more data
|
||||
else
|
||||
{
|
||||
LL_DEBUGS("Texture") << mID << ": Not in Cache" << LL_ENDL;
|
||||
LL_DEBUGS(LOG_TXT) << mID << ": Not in Cache" << LL_ENDL;
|
||||
setState(LOAD_FROM_NETWORK);
|
||||
}
|
||||
|
||||
@@ -1214,22 +1244,33 @@ bool LLTextureFetchWorker::doWork(S32 param)
|
||||
std::string http_url = region->getHttpUrl() ;
|
||||
if (!http_url.empty())
|
||||
{
|
||||
if (mFTType != FTT_DEFAULT)
|
||||
{
|
||||
LL_WARNS(LOG_TXT) << "trying to seek a non-default texture on the sim. Bad!" << LL_ENDL;
|
||||
}
|
||||
mUrl = http_url + "/?texture_id=" + mID.asString().c_str();
|
||||
LL_DEBUGS(LOG_TXT) << "Texture URL: " << mUrl << LL_ENDL;
|
||||
mWriteToCacheState = CAN_WRITE ; //because this texture has a fixed texture id.
|
||||
mPerServicePtr = AIPerService::instance(AIPerService::extract_canonical_servicename(http_url));
|
||||
}
|
||||
else
|
||||
{
|
||||
mCanUseHTTP = false ;
|
||||
LL_DEBUGS(LOG_TXT) << "Texture not available via HTTP: empty URL." << LL_ENDL;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// This will happen if not logged in or if a region does not have HTTP Texture enabled
|
||||
//LL_WARNS() << "Region not found for host: " << mHost << LL_ENDL;
|
||||
LL_DEBUGS(LOG_TXT) << "Texture not available via HTTP: no region " << mUrl << LL_ENDL;
|
||||
mCanUseHTTP = false;
|
||||
}
|
||||
}
|
||||
else if (mFTType == FTT_SERVER_BAKE)
|
||||
{
|
||||
mWriteToCacheState = CAN_WRITE;
|
||||
}
|
||||
if (!mUrl.empty() && SGHostBlackList::isBlacklisted(mUrl)){
|
||||
mCanUseHTTP = false;
|
||||
}
|
||||
@@ -1275,19 +1316,19 @@ bool LLTextureFetchWorker::doWork(S32 param)
|
||||
}
|
||||
if (processSimulatorPackets())
|
||||
{
|
||||
LL_DEBUGS("Texture") << mID << ": Loaded from Sim. Bytes: " << mFormattedImage->getDataSize() << LL_ENDL;
|
||||
LL_DEBUGS(LOG_TXT) << mID << ": Loaded from Sim. Bytes: " << mFormattedImage->getDataSize() << LL_ENDL;
|
||||
mFetcher->removeFromNetworkQueue(this, false);
|
||||
if (mFormattedImage.isNull() || !mFormattedImage->getDataSize())
|
||||
{
|
||||
// processSimulatorPackets() failed
|
||||
// LL_WARNS() << "processSimulatorPackets() failed to load buffer" << LL_ENDL;
|
||||
LL_WARNS("Texture") << mID << " processSimulatorPackets() failed to load buffer" << LL_ENDL;
|
||||
LL_WARNS(LOG_TXT) << mID << " processSimulatorPackets() failed to load buffer" << LL_ENDL;
|
||||
return true; // failed
|
||||
}
|
||||
setPriority(LLWorkerThread::PRIORITY_HIGH | mWorkPriority);
|
||||
if (mLoadedDiscard < 0)
|
||||
{
|
||||
LL_WARNS("Texture") << mID << " mLoadedDiscard is " << mLoadedDiscard
|
||||
LL_WARNS(LOG_TXT) << mID << " mLoadedDiscard is " << mLoadedDiscard
|
||||
<< ", should be >=0" << LL_ENDL;
|
||||
}
|
||||
setState(DECODE_IMAGE);
|
||||
@@ -1340,7 +1381,7 @@ bool LLTextureFetchWorker::doWork(S32 param)
|
||||
{
|
||||
if (! mCanUseHTTP)
|
||||
{
|
||||
LL_WARNS("Texture") << mID << " abort: SEND_HTTP_REQ but !mCanUseHTTP" << LL_ENDL;
|
||||
LL_WARNS(LOG_TXT) << mID << " abort: SEND_HTTP_REQ but !mCanUseHTTP" << LL_ENDL;
|
||||
return true ; //abort
|
||||
}
|
||||
S32 cur_size = 0;
|
||||
@@ -1358,7 +1399,7 @@ bool LLTextureFetchWorker::doWork(S32 param)
|
||||
setPriority(LLWorkerThread::PRIORITY_HIGH | mWorkPriority);
|
||||
if (mLoadedDiscard < 0)
|
||||
{
|
||||
LL_WARNS("Texture") << mID << " mLoadedDiscard is " << mLoadedDiscard
|
||||
LL_WARNS(LOG_TXT) << mID << " mLoadedDiscard is " << mLoadedDiscard
|
||||
<< ", should be >=0" << LL_ENDL;
|
||||
}
|
||||
setState(DECODE_IMAGE);
|
||||
@@ -1366,7 +1407,7 @@ bool LLTextureFetchWorker::doWork(S32 param)
|
||||
}
|
||||
else
|
||||
{
|
||||
LL_WARNS("Texture") << mID << " SEND_HTTP_REQ abort: cur_size " << cur_size << " <=0" << LL_ENDL;
|
||||
LL_WARNS(LOG_TXT) << mID << " SEND_HTTP_REQ abort: cur_size " << cur_size << " <=0" << LL_ENDL;
|
||||
return true ; //abort.
|
||||
}
|
||||
}
|
||||
@@ -1404,35 +1445,33 @@ bool LLTextureFetchWorker::doWork(S32 param)
|
||||
mRequestedSize += 1;
|
||||
}
|
||||
|
||||
if (!mUrl.empty())
|
||||
{
|
||||
mRequestedTimer.reset();
|
||||
mLoaded = FALSE;
|
||||
mGetStatus = 0;
|
||||
mGetReason.clear();
|
||||
LL_DEBUGS("Texture") << "HTTP GET: " << mID << " Offset: " << mRequestedOffset
|
||||
<< " Bytes: " << mRequestedSize
|
||||
<< LL_ENDL;
|
||||
// Will call callbackHttpGet when curl request completes
|
||||
AIHTTPHeaders headers("Accept", "image/x-j2c");
|
||||
// Call LLHTTPClient::request directly instead of LLHTTPClient::getByteRange, because we want to pass a NULL AIEngine.
|
||||
if (mRequestedOffset > 0 || mRequestedSize > 0)
|
||||
{
|
||||
int const range_end = mRequestedOffset + mRequestedSize - 1;
|
||||
char const* const range_format = (range_end >= HTTP_REQUESTS_RANGE_END_MAX) ? "bytes=%d-" : "bytes=%d-%d";
|
||||
headers.addHeader("Range", llformat(range_format, mRequestedOffset, range_end));
|
||||
}
|
||||
LLHTTPClient::request(mUrl, LLHTTPClient::HTTP_GET, NULL,
|
||||
new HTTPGetResponder(mFetcher, mID, LLTimer::getTotalTime(), mRequestedSize, mRequestedOffset),
|
||||
headers, approved/*,*/ DEBUG_CURLIO_PARAM(debug_off), keep_alive, no_does_authentication, allow_compressed_reply, NULL, 0, NULL);
|
||||
}
|
||||
else
|
||||
if (mUrl.empty())
|
||||
{
|
||||
LL_WARNS() << "HTTP GET request failed for " << mID << LL_ENDL;
|
||||
resetFormattedData();
|
||||
++mHTTPFailCount;
|
||||
return true; // failed
|
||||
}
|
||||
|
||||
mRequestedTimer.reset();
|
||||
mLoaded = FALSE;
|
||||
mGetStatus = 0;
|
||||
mGetReason.clear();
|
||||
LL_DEBUGS(LOG_TXT) << "HTTP GET: " << mID << " Offset: " << mRequestedOffset
|
||||
<< " Bytes: " << mRequestedSize
|
||||
<< LL_ENDL;
|
||||
// Will call callbackHttpGet when curl request completes
|
||||
AIHTTPHeaders headers("Accept", "image/x-j2c");
|
||||
// Call LLHTTPClient::request directly instead of LLHTTPClient::getByteRange, because we want to pass a NULL AIEngine.
|
||||
if (mRequestedOffset > 0 || mRequestedSize > 0)
|
||||
{
|
||||
int const range_end = mRequestedOffset + mRequestedSize - 1;
|
||||
char const* const range_format = (range_end >= HTTP_REQUESTS_RANGE_END_MAX) ? "bytes=%d-" : "bytes=%d-%d";
|
||||
headers.addHeader("Range", llformat(range_format, mRequestedOffset, range_end));
|
||||
}
|
||||
LLHTTPClient::request(mUrl, LLHTTPClient::HTTP_GET, NULL,
|
||||
new HTTPGetResponder( mFTType, mFetcher, mID, LLTimer::getTotalTime(), mRequestedSize, mRequestedOffset),
|
||||
headers, approved/*,*/ DEBUG_CURLIO_PARAM(debug_off), keep_alive, no_does_authentication, allow_compressed_reply, NULL, 0, NULL);
|
||||
|
||||
mFetcher->addToHTTPQueue(mID);
|
||||
recordTextureStart(true);
|
||||
@@ -1508,14 +1547,21 @@ bool LLTextureFetchWorker::doWork(S32 param)
|
||||
mHTTPFailCount = max_attempts = 1; // Don't retry
|
||||
if(mGetStatus == HTTP_NOT_FOUND)
|
||||
{
|
||||
if (mFTType != FTT_MAP_TILE)
|
||||
{
|
||||
LL_WARNS(LOG_TXT) << "Texture missing from server (404): " << mUrl << LL_ENDL;
|
||||
}
|
||||
|
||||
if(mWriteToCacheState == NOT_WRITE) //map tiles
|
||||
{
|
||||
resetFormattedData();
|
||||
setState(DONE);
|
||||
//LL_INFOS("Texture") << mID << " abort: WAIT_HTTP_REQ not found" << LL_ENDL;
|
||||
if (mFTType != FTT_MAP_TILE)
|
||||
{
|
||||
LL_WARNS(LOG_TXT) << mID << " abort: WAIT_HTTP_REQ not found" << LL_ENDL;
|
||||
}
|
||||
return true; // failed, means no map tile on the empty region.
|
||||
}
|
||||
LL_WARNS() << "Texture missing from server (404): " << mUrl << LL_ENDL;
|
||||
}
|
||||
else if (mGetStatus == HTTP_INTERNAL_ERROR_CURL_TIMEOUT || mGetStatus == HTTP_INTERNAL_ERROR_LOW_SPEED)
|
||||
{
|
||||
@@ -1576,6 +1622,10 @@ bool LLTextureFetchWorker::doWork(S32 param)
|
||||
|
||||
if (mHTTPFailCount >= max_attempts)
|
||||
{
|
||||
if (mFTType != FTT_SERVER_BAKE)
|
||||
{
|
||||
mUrl.clear();
|
||||
}
|
||||
// Make max_attempts attempt at decoding what data we have,
|
||||
// then bail forever on this image
|
||||
if (cur_size > 0 && (mHTTPFailCount < (max_attempts+1)) )
|
||||
@@ -1585,8 +1635,8 @@ bool LLTextureFetchWorker::doWork(S32 param)
|
||||
setPriority(LLWorkerThread::PRIORITY_HIGH | mWorkPriority);
|
||||
if (mLoadedDiscard < 0)
|
||||
{
|
||||
LL_WARNS("Texture") << mID << " mLoadedDiscard is " << mLoadedDiscard
|
||||
<< ", should be >=0" << LL_ENDL;
|
||||
LL_WARNS(LOG_TXT) << mID << " mLoadedDiscard is " << mLoadedDiscard
|
||||
<< ", should be >=0" << LL_ENDL;
|
||||
}
|
||||
setState(DECODE_IMAGE);
|
||||
return false;
|
||||
@@ -1608,7 +1658,7 @@ bool LLTextureFetchWorker::doWork(S32 param)
|
||||
// UDP is not an option, we are dead
|
||||
resetFormattedData();
|
||||
setState(DONE);
|
||||
LL_INFOS("Texture") << mID << " abort: fail harder" << LL_ENDL;
|
||||
LL_WARNS(LOG_TXT) << mID << " abort: fail harder" << LL_ENDL;
|
||||
return true; // failed
|
||||
}
|
||||
}
|
||||
@@ -1623,7 +1673,7 @@ bool LLTextureFetchWorker::doWork(S32 param)
|
||||
// Clear the url since we're done with the fetch
|
||||
// Note: mUrl is used to check is fetching is required so failure to clear it will force an http fetch
|
||||
// next time the texture is requested, even if the data have already been fetched.
|
||||
if(mWriteToCacheState != NOT_WRITE)
|
||||
if(mWriteToCacheState != NOT_WRITE && mFTType != FTT_SERVER_BAKE)
|
||||
{
|
||||
// Why do we want to keep url if NOT_WRITE - is this a proxy for map tiles?
|
||||
mUrl.clear();
|
||||
@@ -1633,7 +1683,7 @@ bool LLTextureFetchWorker::doWork(S32 param)
|
||||
{
|
||||
//abort.
|
||||
setState(DONE);
|
||||
LL_WARNS("Texture") << mID << " abort: no data received" << LL_ENDL;
|
||||
LL_WARNS(LOG_TXT) << mID << " abort: no data received" << LL_ENDL;
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -1648,7 +1698,7 @@ bool LLTextureFetchWorker::doWork(S32 param)
|
||||
// Get back into alignment.
|
||||
if ((S32)mHttpReplyOffset > cur_size)
|
||||
{
|
||||
LL_WARNS("Texture") << "Partial HTTP response produces break in image data for texture "
|
||||
LL_WARNS(LOG_TXT) << "Partial HTTP response produces break in image data for texture "
|
||||
<< mID << ". Aborting load." << LL_ENDL;
|
||||
setState(DONE);
|
||||
return true;
|
||||
@@ -1700,7 +1750,7 @@ bool LLTextureFetchWorker::doWork(S32 param)
|
||||
mLoadedDiscard = mRequestedDiscard;
|
||||
if (mLoadedDiscard < 0)
|
||||
{
|
||||
LL_WARNS("Texture") << mID << " mLoadedDiscard is " << mLoadedDiscard
|
||||
LL_WARNS(LOG_TXT) << mID << " mLoadedDiscard is " << mLoadedDiscard
|
||||
<< ", should be >=0" << LL_ENDL;
|
||||
}
|
||||
setState(DECODE_IMAGE);
|
||||
@@ -1734,26 +1784,26 @@ bool LLTextureFetchWorker::doWork(S32 param)
|
||||
{
|
||||
// We aborted, don't decode
|
||||
setState(DONE);
|
||||
LL_WARNS("Texture") << mID << " DECODE_IMAGE abort: desired discard " << mDesiredDiscard << "<0" << LL_ENDL;
|
||||
LL_DEBUGS(LOG_TXT) << mID << " DECODE_IMAGE abort: desired discard " << mDesiredDiscard << "<0" << LL_ENDL;
|
||||
return true;
|
||||
}
|
||||
|
||||
if (mFormattedImage->getDataSize() <= 0)
|
||||
{
|
||||
LL_WARNS() << "Decode entered with invalid mFormattedImage. ID = " << mID << LL_ENDL;
|
||||
LL_WARNS(LOG_TXT) << "Decode entered with invalid mFormattedImage. ID = " << mID << LL_ENDL;
|
||||
|
||||
//abort, don't decode
|
||||
setState(DONE);
|
||||
LL_WARNS("Texture") << mID << " DECODE_IMAGE abort: (mFormattedImage->getDataSize() <= 0)" << LL_ENDL;
|
||||
LL_DEBUGS(LOG_TXT) << mID << " DECODE_IMAGE abort: (mFormattedImage->getDataSize() <= 0)" << LL_ENDL;
|
||||
return true;
|
||||
}
|
||||
if (mLoadedDiscard < 0)
|
||||
{
|
||||
LL_WARNS() << "Decode entered with invalid mLoadedDiscard. ID = " << mID << LL_ENDL;
|
||||
LL_WARNS(LOG_TXT) << "Decode entered with invalid mLoadedDiscard. ID = " << mID << LL_ENDL;
|
||||
|
||||
//abort, don't decode
|
||||
setState(DONE);
|
||||
LL_WARNS("Texture") << mID << " DECODE_IMAGE abort: mLoadedDiscard < 0" << LL_ENDL;
|
||||
LL_DEBUGS(LOG_TXT) << mID << " DECODE_IMAGE abort: mLoadedDiscard < 0" << LL_ENDL;
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -1764,7 +1814,7 @@ bool LLTextureFetchWorker::doWork(S32 param)
|
||||
U32 image_priority = LLWorkerThread::PRIORITY_NORMAL | mWorkPriority;
|
||||
mDecoded = FALSE;
|
||||
setState(DECODE_IMAGE_UPDATE);
|
||||
LL_DEBUGS("Texture") << mID << ": Decoding. Bytes: " << mFormattedImage->getDataSize() << " Discard: " << discard
|
||||
LL_DEBUGS(LOG_TXT) << mID << ": Decoding. Bytes: " << mFormattedImage->getDataSize() << " Discard: " << discard
|
||||
<< " All Data: " << mHaveAllData << LL_ENDL;
|
||||
mDecodeHandle = mFetcher->mImageDecodeThread->decodeImage(mFormattedImage, image_priority, discard, mNeedsAux,
|
||||
new DecodeResponder(mFetcher, mID, this));
|
||||
@@ -1777,11 +1827,11 @@ bool LLTextureFetchWorker::doWork(S32 param)
|
||||
{
|
||||
if (mDecodedDiscard < 0)
|
||||
{
|
||||
LL_WARNS("Texture") << mID << ": Failed to Decode." << LL_ENDL;
|
||||
LL_DEBUGS(LOG_TXT) << mID << ": Failed to Decode." << LL_ENDL;
|
||||
if (mCachedSize > 0 && !mInLocalCache && mRetryAttempt == 0)
|
||||
{
|
||||
// Cache file should be deleted, try again
|
||||
// LL_WARNS() << mID << ": Decode of cached file failed (removed), retrying" << LL_ENDL;
|
||||
LL_WARNS(LOG_TXT) << mID << ": Decode of cached file failed (removed), retrying" << LL_ENDL;
|
||||
llassert_always(mDecodeHandle == 0);
|
||||
mFormattedImage = NULL;
|
||||
++mRetryAttempt;
|
||||
@@ -1798,7 +1848,7 @@ bool LLTextureFetchWorker::doWork(S32 param)
|
||||
else
|
||||
{
|
||||
llassert_always(mRawImage.notNull());
|
||||
LL_DEBUGS("Texture") << mID << ": Decoded. Discard: " << mDecodedDiscard
|
||||
LL_DEBUGS(LOG_TXT) << mID << ": Decoded. Discard: " << mDecodedDiscard
|
||||
<< " Raw Image: " << llformat("%dx%d",mRawImage->getWidth(),mRawImage->getHeight()) << LL_ENDL;
|
||||
setPriority(LLWorkerThread::PRIORITY_HIGH | mWorkPriority);
|
||||
setState(WRITE_TO_CACHE);
|
||||
@@ -1871,9 +1921,9 @@ bool LLTextureFetchWorker::doWork(S32 param)
|
||||
{
|
||||
// More data was requested, return to INIT
|
||||
setState(INIT);
|
||||
LL_WARNS("Texture") << mID << " more data requested, returning to INIT: "
|
||||
<< " mDecodedDiscard " << mDecodedDiscard << ">= 0 && mDesiredDiscard " << mDesiredDiscard
|
||||
<< "<" << " mDecodedDiscard " << mDecodedDiscard << LL_ENDL;
|
||||
LL_DEBUGS(LOG_TXT) << mID << " more data requested, returning to INIT: "
|
||||
<< " mDecodedDiscard " << mDecodedDiscard << ">= 0 && mDesiredDiscard " << mDesiredDiscard
|
||||
<< "<" << " mDecodedDiscard " << mDecodedDiscard << LL_ENDL;
|
||||
setPriority(LLWorkerThread::PRIORITY_HIGH | mWorkPriority);
|
||||
return false;
|
||||
}
|
||||
@@ -2034,13 +2084,13 @@ S32 LLTextureFetchWorker::callbackHttpGet(U32 offset, U32 length,
|
||||
|
||||
if (mState != WAIT_HTTP_REQ)
|
||||
{
|
||||
LL_WARNS() << "callbackHttpGet for unrequested fetch worker: " << mID
|
||||
LL_WARNS(LOG_TXT) << "callbackHttpGet for unrequested fetch worker: " << mID
|
||||
<< " req=" << mSentRequest << " state= " << mState << LL_ENDL;
|
||||
return data_size;
|
||||
}
|
||||
if (mLoaded)
|
||||
{
|
||||
LL_WARNS() << "Duplicate callback for " << mID.asString() << LL_ENDL;
|
||||
LL_WARNS(LOG_TXT) << "Duplicate callback for " << mID.asString() << LL_ENDL;
|
||||
return data_size; // ignore duplicate callback
|
||||
}
|
||||
if (success)
|
||||
@@ -2048,7 +2098,7 @@ S32 LLTextureFetchWorker::callbackHttpGet(U32 offset, U32 length,
|
||||
// get length of stream:
|
||||
data_size = buffer->countAfter(channels.in(), NULL);
|
||||
|
||||
LL_DEBUGS("Texture") << "HTTP RECEIVED: " << mID.asString() << " Bytes: " << data_size << LL_ENDL;
|
||||
LL_DEBUGS(LOG_TXT) << "HTTP RECEIVED: " << mID.asString() << " Bytes: " << data_size << LL_ENDL;
|
||||
if (data_size > 0)
|
||||
{
|
||||
LLViewerStatsRecorder::instance().textureFetch(data_size);
|
||||
@@ -2084,7 +2134,7 @@ S32 LLTextureFetchWorker::callbackHttpGet(U32 offset, U32 length,
|
||||
// response body becomes the entire dataset.
|
||||
if (data_size <= mRequestedOffset)
|
||||
{
|
||||
LL_WARNS("Texture") << "Fetched entire texture " << mID
|
||||
LL_WARNS(LOG_TXT) << "Fetched entire texture " << mID
|
||||
<< " when it was expected to be marked complete. mImageSize: "
|
||||
<< mFileSize << " datasize: " << mFormattedImage->getDataSize()
|
||||
<< LL_ENDL;
|
||||
@@ -2100,7 +2150,7 @@ S32 LLTextureFetchWorker::callbackHttpGet(U32 offset, U32 length,
|
||||
else if (data_size > mRequestedSize)
|
||||
{
|
||||
// *TODO: This shouldn't be happening any more
|
||||
LL_WARNS() << "data_size = " << data_size << " > requested: " << mRequestedSize << LL_ENDL;
|
||||
LL_WARNS(LOG_TXT) << "data_size = " << data_size << " > requested: " << mRequestedSize << LL_ENDL;
|
||||
mHaveAllData = TRUE;
|
||||
llassert_always(mDecodeHandle == 0);
|
||||
mFormattedImage = NULL; // discard any previous data we had
|
||||
@@ -2188,18 +2238,18 @@ void LLTextureFetchWorker::callbackDecoded(bool success, LLImageRaw* raw, LLImag
|
||||
mRawImage = raw;
|
||||
mAuxImage = aux;
|
||||
mDecodedDiscard = mFormattedImage->getDiscardLevel();
|
||||
LL_DEBUGS("Texture") << mID << ": Decode Finished. Discard: " << mDecodedDiscard
|
||||
LL_DEBUGS(LOG_TXT) << mID << ": Decode Finished. Discard: " << mDecodedDiscard
|
||||
<< " Raw Image: " << llformat("%dx%d",mRawImage->getWidth(),mRawImage->getHeight()) << LL_ENDL;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (mFormattedImage.notNull())
|
||||
{
|
||||
LL_WARNS("Texture") << "DECODE FAILED: id = " << mID << ", Discard = " << (S32)mFormattedImage->getDiscardLevel() << LL_ENDL;
|
||||
LL_WARNS(LOG_TXT) << "DECODE FAILED: id = " << mID << ", Discard = " << (S32)mFormattedImage->getDiscardLevel() << LL_ENDL;
|
||||
}
|
||||
else
|
||||
{
|
||||
LL_WARNS("Texture") << "DECODE FAILED: id = " << mID << ", mFormattedImage is Null!" << LL_ENDL;
|
||||
LL_WARNS(LOG_TXT) << "DECODE FAILED: id = " << mID << ", mFormattedImage is Null!" << LL_ENDL;
|
||||
}
|
||||
removeFromCache();
|
||||
mDecodedDiscard = -1; // Redundant, here for clarity and paranoia
|
||||
@@ -2280,7 +2330,7 @@ LLTextureFetch::LLTextureFetch(LLTextureCache* cache, LLImageDecodeThread* image
|
||||
mTotalCacheReadCount(0U),
|
||||
mTotalCacheWriteCount(0U)
|
||||
{
|
||||
mTextureInfo.setUpLogging(gSavedSettings.getBOOL("LogTextureDownloadsToViewerLog"), gSavedSettings.getBOOL("LogTextureDownloadsToSimulator"), (U32Bytes)gSavedSettings.getU32("TextureLoggingThreshold"));
|
||||
mTextureInfo.setUpLogging(gSavedSettings.getBOOL("LogTextureDownloadsToViewerLog"), gSavedSettings.getBOOL("LogTextureDownloadsToSimulator"), U32Bytes(gSavedSettings.getU32("TextureLoggingThreshold")));
|
||||
}
|
||||
|
||||
LLTextureFetch::~LLTextureFetch()
|
||||
@@ -2297,20 +2347,23 @@ LLTextureFetch::~LLTextureFetch()
|
||||
// ~LLQueuedThread() called here
|
||||
}
|
||||
|
||||
bool LLTextureFetch::createRequest(const std::string& url, const LLUUID& id, const LLHost& host, F32 priority,
|
||||
bool LLTextureFetch::createRequest(FTType f_type, const std::string& url, const LLUUID& id, const LLHost& host, F32 priority,
|
||||
S32 w, S32 h, S32 c, S32 desired_discard, bool needs_aux, bool can_use_http)
|
||||
{
|
||||
if (mDebugPause)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
LLTextureFetchWorker* worker = getWorker(id);
|
||||
if (f_type == FTT_SERVER_BAKE)
|
||||
{
|
||||
LL_DEBUGS("Avatar") << " requesting " << id << " " << w << "x" << h << " discard " << desired_discard << " type " << f_type << LL_ENDL;
|
||||
}
|
||||
LLTextureFetchWorker* worker = getWorker(id) ;
|
||||
if (worker)
|
||||
{
|
||||
if (worker->mHost != host)
|
||||
{
|
||||
LL_WARNS() << "LLTextureFetch::createRequest " << id << " called with multiple hosts: "
|
||||
LL_WARNS(LOG_TXT) << "LLTextureFetch::createRequest " << id << " called with multiple hosts: "
|
||||
<< host << " != " << worker->mHost << LL_ENDL;
|
||||
removeRequest(worker, true);
|
||||
worker = NULL;
|
||||
@@ -2320,9 +2373,21 @@ bool LLTextureFetch::createRequest(const std::string& url, const LLUUID& id, con
|
||||
|
||||
S32 desired_size;
|
||||
std::string exten = gDirUtilp->getExtension(url);
|
||||
if (!url.empty() && (!exten.empty() && LLImageBase::getCodecFromExtension(exten) != IMG_CODEC_J2C))
|
||||
//if (f_type == FTT_SERVER_BAKE)
|
||||
if ((f_type == FTT_SERVER_BAKE) && !url.empty() && !exten.empty() && (LLImageBase::getCodecFromExtension(exten) != IMG_CODEC_J2C))
|
||||
{
|
||||
LL_DEBUGS("Texture") << "full request for " << id << " exten is not J2C: " << exten << LL_ENDL;
|
||||
// SH-4030: This case should be redundant with the following one, just
|
||||
// breaking it out here to clarify that it's intended behavior.
|
||||
llassert(!url.empty() && (!exten.empty() && LLImageBase::getCodecFromExtension(exten) != IMG_CODEC_J2C));
|
||||
|
||||
// Do full requests for baked textures to reduce interim blurring.
|
||||
LL_DEBUGS(LOG_TXT) << "full request for " << id << " texture is FTT_SERVER_BAKE" << LL_ENDL;
|
||||
desired_size = MAX_IMAGE_DATA_SIZE;
|
||||
desired_discard = 0;
|
||||
}
|
||||
else if (!url.empty() && (!exten.empty() && LLImageBase::getCodecFromExtension(exten) != IMG_CODEC_J2C))
|
||||
{
|
||||
LL_DEBUGS(LOG_TXT) << "full request for " << id << " exten is not J2C: " << exten << LL_ENDL;
|
||||
// Only do partial requests for J2C at the moment
|
||||
//LL_INFOS() << "Merov : LLTextureFetch::createRequest(), blocking fetch on " << url << LL_ENDL;
|
||||
desired_size = MAX_IMAGE_DATA_SIZE;
|
||||
@@ -2375,7 +2440,7 @@ bool LLTextureFetch::createRequest(const std::string& url, const LLUUID& id, con
|
||||
}
|
||||
else
|
||||
{
|
||||
worker = new LLTextureFetchWorker(this, url, id, host, priority, desired_discard, desired_size);
|
||||
worker = new LLTextureFetchWorker(this, f_type, url, id, host, priority, desired_discard, desired_size);
|
||||
lockQueue() ;
|
||||
mRequestMap[id] = worker;
|
||||
unlockQueue() ;
|
||||
@@ -2387,7 +2452,8 @@ bool LLTextureFetch::createRequest(const std::string& url, const LLUUID& id, con
|
||||
worker->unlockWorkMutex();
|
||||
}
|
||||
|
||||
LL_DEBUGS("Texture") << "REQUESTED: " << id << " Discard: " << desired_discard << " size " << desired_size << LL_ENDL;
|
||||
LL_DEBUGS(LOG_TXT) << "REQUESTED: " << id << " f_type " << fttype_to_string(f_type)
|
||||
<< " Discard: " << desired_discard << " size " << desired_size << LL_ENDL;
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -2706,10 +2772,10 @@ void LLTextureFetch::startThread()
|
||||
// Threads: Ttf
|
||||
void LLTextureFetch::endThread()
|
||||
{
|
||||
LL_INFOS("Texture") << "CacheReads: " << mTotalCacheReadCount
|
||||
<< ", CacheWrites: " << mTotalCacheWriteCount
|
||||
<< ", TotalHTTPReq: " << getTotalNumHTTPRequests()
|
||||
<< LL_ENDL;
|
||||
LL_INFOS(LOG_TXT) << "CacheReads: " << mTotalCacheReadCount
|
||||
<< ", CacheWrites: " << mTotalCacheWriteCount
|
||||
<< ", TotalHTTPReq: " << getTotalNumHTTPRequests()
|
||||
<< LL_ENDL;
|
||||
}
|
||||
|
||||
// Threads: Ttf
|
||||
@@ -2734,7 +2800,7 @@ void LLTextureFetch::threadedUpdate()
|
||||
S32 q = mCurlGetRequest->getQueued();
|
||||
if (q > 0)
|
||||
{
|
||||
LL_INFOS() << "Queued gets: " << q << LL_ENDL;
|
||||
LL_INFOS(LOG_TXT) << "Queued gets: " << q << LL_ENDL;
|
||||
info_timer.reset();
|
||||
}
|
||||
}
|
||||
@@ -2786,7 +2852,7 @@ void LLTextureFetch::sendRequestListToSimulators()
|
||||
(req->mState != LLTextureFetchWorker::LOAD_FROM_SIMULATOR))
|
||||
{
|
||||
// We already received our URL, remove from the queue
|
||||
LL_WARNS() << "Worker: " << req->mID << " in mNetworkQueue but in wrong state: " << req->mState << LL_ENDL;
|
||||
LL_WARNS(LOG_TXT) << "Worker: " << req->mID << " in mNetworkQueue but in wrong state: " << req->mState << LL_ENDL;
|
||||
mNetworkQueue.erase(curiter);
|
||||
continue;
|
||||
}
|
||||
@@ -3199,25 +3265,25 @@ S32 LLTextureFetch::getFetchState(const LLUUID& id, F32& data_progress_p, F32& r
|
||||
|
||||
void LLTextureFetch::dump()
|
||||
{
|
||||
LL_INFOS() << "LLTextureFetch REQUESTS:" << LL_ENDL;
|
||||
LL_INFOS(LOG_TXT) << "LLTextureFetch REQUESTS:" << LL_ENDL;
|
||||
for (request_queue_t::iterator iter = mRequestQueue.begin();
|
||||
iter != mRequestQueue.end(); ++iter)
|
||||
{
|
||||
LLQueuedThread::QueuedRequest* qreq = *iter;
|
||||
LLWorkerThread::WorkRequest* wreq = (LLWorkerThread::WorkRequest*)qreq;
|
||||
LLTextureFetchWorker* worker = (LLTextureFetchWorker*)wreq->getWorkerClass();
|
||||
LL_INFOS() << " ID: " << worker->mID
|
||||
LL_INFOS(LOG_TXT) << " ID: " << worker->mID
|
||||
<< " PRI: " << llformat("0x%08x",wreq->getPriority())
|
||||
<< " STATE: " << worker->sStateDescs[worker->mState]
|
||||
<< LL_ENDL;
|
||||
}
|
||||
|
||||
LL_INFOS() << "LLTextureFetch ACTIVE_HTTP:" << LL_ENDL;
|
||||
LL_INFOS(LOG_TXT) << "LLTextureFetch ACTIVE_HTTP:" << LL_ENDL;
|
||||
for (queue_t::const_iterator iter(mHTTPTextureQueue.begin());
|
||||
mHTTPTextureQueue.end() != iter;
|
||||
++iter)
|
||||
{
|
||||
LL_INFOS() << " ID: " << (*iter) << LL_ENDL;
|
||||
LL_INFOS(LOG_TXT) << " ID: " << (*iter) << LL_ENDL;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -43,6 +43,7 @@
|
||||
#include "lltextureinfo.h"
|
||||
#include "llapr.h"
|
||||
#include "llstat.h"
|
||||
#include "llviewertexture.h"
|
||||
|
||||
class LLViewerTexture;
|
||||
class LLTextureFetchWorker;
|
||||
@@ -68,7 +69,7 @@ public:
|
||||
void shutDownTextureCacheThread() ; //called in the main thread after the TextureCacheThread shuts down.
|
||||
void shutDownImageDecodeThread() ; //called in the main thread after the ImageDecodeThread shuts down.
|
||||
|
||||
bool createRequest(const std::string& url, const LLUUID& id, const LLHost& host, F32 priority,
|
||||
bool createRequest(FTType f_type, const std::string& url, const LLUUID& id, const LLHost& host, F32 priority,
|
||||
S32 w, S32 h, S32 c, S32 discard, bool needs_aux, bool can_use_http);
|
||||
void deleteRequest(const LLUUID& id, bool cancel);
|
||||
void deleteAllRequests();
|
||||
|
||||
@@ -3314,7 +3314,7 @@ void LLViewerObject::boostTexturePriority(BOOL boost_children /* = TRUE */)
|
||||
{
|
||||
LLSculptParams *sculpt_params = (LLSculptParams *)getParameterEntry(LLNetworkData::PARAMS_SCULPT);
|
||||
LLUUID sculpt_id = sculpt_params->getSculptTexture();
|
||||
LLViewerTextureManager::getFetchedTexture(sculpt_id, TRUE, LLGLTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE)->setBoostLevel(LLGLTexture::BOOST_SELECTED);
|
||||
LLViewerTextureManager::getFetchedTexture(sculpt_id, FTT_DEFAULT, TRUE, LLGLTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE)->setBoostLevel(LLGLTexture::BOOST_SELECTED);
|
||||
}
|
||||
|
||||
if (boost_children)
|
||||
@@ -4081,15 +4081,15 @@ void LLViewerObject::setTE(const U8 te, const LLTextureEntry &texture_entry)
|
||||
LLPrimitive::setTE(te, texture_entry);
|
||||
|
||||
const LLUUID& image_id = getTE(te)->getID();
|
||||
mTEImages[te] = LLViewerTextureManager::getFetchedTexture(image_id, TRUE, LLGLTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE);
|
||||
mTEImages[te] = LLViewerTextureManager::getFetchedTexture(image_id, FTT_DEFAULT, TRUE, LLGLTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE);
|
||||
|
||||
if (getTE(te)->getMaterialParams().notNull())
|
||||
{
|
||||
const LLUUID& norm_id = getTE(te)->getMaterialParams()->getNormalID();
|
||||
mTENormalMaps[te] = LLViewerTextureManager::getFetchedTexture(norm_id, TRUE, LLGLTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE);
|
||||
mTENormalMaps[te] = LLViewerTextureManager::getFetchedTexture(norm_id, FTT_DEFAULT, TRUE, LLGLTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE);
|
||||
|
||||
const LLUUID& spec_id = getTE(te)->getMaterialParams()->getSpecularID();
|
||||
mTESpecularMaps[te] = LLViewerTextureManager::getFetchedTexture(spec_id, TRUE, LLGLTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE);
|
||||
mTESpecularMaps[te] = LLViewerTextureManager::getFetchedTexture(spec_id, FTT_DEFAULT, TRUE, LLGLTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4204,21 +4204,21 @@ S32 LLViewerObject::setTETexture(const U8 te, const LLUUID& uuid)
|
||||
{
|
||||
// Invalid host == get from the agent's sim
|
||||
LLViewerFetchedTexture *image = LLViewerTextureManager::getFetchedTexture(
|
||||
uuid, TRUE, LLGLTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE, 0, 0, LLHost::invalid);
|
||||
uuid, FTT_DEFAULT, TRUE, LLGLTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE, 0, 0, LLHost::invalid);
|
||||
return setTETextureCore(te,image);
|
||||
}
|
||||
|
||||
S32 LLViewerObject::setTENormalMap(const U8 te, const LLUUID& uuid)
|
||||
{
|
||||
LLViewerFetchedTexture *image = (uuid == LLUUID::null) ? NULL : LLViewerTextureManager::getFetchedTexture(
|
||||
uuid, TRUE, LLGLTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE, 0, 0, LLHost::invalid);
|
||||
uuid, FTT_DEFAULT, TRUE, LLGLTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE, 0, 0, LLHost::invalid);
|
||||
return setTENormalMapCore(te, image);
|
||||
}
|
||||
|
||||
S32 LLViewerObject::setTESpecularMap(const U8 te, const LLUUID& uuid)
|
||||
{
|
||||
LLViewerFetchedTexture *image = (uuid == LLUUID::null) ? NULL : LLViewerTextureManager::getFetchedTexture(
|
||||
uuid, TRUE, LLGLTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE, 0, 0, LLHost::invalid);
|
||||
uuid, FTT_DEFAULT, TRUE, LLGLTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE, 0, 0, LLHost::invalid);
|
||||
return setTESpecularMapCore(te, image);
|
||||
}
|
||||
|
||||
|
||||
@@ -1229,7 +1229,7 @@ const LLViewerRegion::tex_matrix_t& LLViewerRegion::getWorldMapTiles() const
|
||||
for (U32 x = 0; x != totalX; ++x)
|
||||
for (U32 y = 0; y != totalY; ++y)
|
||||
{
|
||||
LLPointer<LLViewerTexture> tex(LLViewerTextureManager::getFetchedTextureFromUrl(strImgURL+llformat("%d-%d-objects.jpg", gridX + x, gridY + y), TRUE, LLViewerTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE));
|
||||
LLPointer<LLViewerTexture> tex(LLViewerTextureManager::getFetchedTextureFromUrl(strImgURL+llformat("%d-%d-objects.jpg", gridX + x, gridY + y), FTT_MAP_TILE, TRUE, LLViewerTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE));
|
||||
mWorldMapTiles.push_back(tex);
|
||||
tex->setBoostLevel(LLViewerTexture::BOOST_MAP);
|
||||
}
|
||||
|
||||
@@ -270,6 +270,7 @@ LLPointer<LLViewerTexture> LLViewerTextureManager::getLocalTexture(const U32 wid
|
||||
|
||||
LLViewerFetchedTexture* LLViewerTextureManager::getFetchedTexture(
|
||||
const LLUUID &image_id,
|
||||
FTType f_type,
|
||||
BOOL usemipmaps,
|
||||
LLViewerTexture::EBoostLevel boost_priority,
|
||||
S8 texture_type,
|
||||
@@ -277,11 +278,12 @@ LLViewerFetchedTexture* LLViewerTextureManager::getFetchedTexture(
|
||||
LLGLenum primary_format,
|
||||
LLHost request_from_host)
|
||||
{
|
||||
return gTextureList.getImage(image_id, usemipmaps, boost_priority, texture_type, internal_format, primary_format, request_from_host) ;
|
||||
return gTextureList.getImage(image_id, f_type, usemipmaps, boost_priority, texture_type, internal_format, primary_format, request_from_host);
|
||||
}
|
||||
|
||||
LLViewerFetchedTexture* LLViewerTextureManager::getFetchedTextureFromFile(
|
||||
const std::string& filename,
|
||||
FTType f_type,
|
||||
BOOL usemipmaps,
|
||||
LLViewerTexture::EBoostLevel boost_priority,
|
||||
S8 texture_type,
|
||||
@@ -289,11 +291,12 @@ LLViewerFetchedTexture* LLViewerTextureManager::getFetchedTextureFromFile(
|
||||
LLGLenum primary_format,
|
||||
const LLUUID& force_id)
|
||||
{
|
||||
return gTextureList.getImageFromFile(filename, usemipmaps, boost_priority, texture_type, internal_format, primary_format, force_id) ;
|
||||
return gTextureList.getImageFromFile(filename, f_type, usemipmaps, boost_priority, texture_type, internal_format, primary_format, force_id);
|
||||
}
|
||||
|
||||
//static
|
||||
LLViewerFetchedTexture* LLViewerTextureManager::getFetchedTextureFromUrl(const std::string& url,
|
||||
FTType f_type,
|
||||
BOOL usemipmaps,
|
||||
LLViewerTexture::EBoostLevel boost_priority,
|
||||
S8 texture_type,
|
||||
@@ -302,12 +305,12 @@ LLViewerFetchedTexture* LLViewerTextureManager::getFetchedTextureFromUrl(const s
|
||||
const LLUUID& force_id
|
||||
)
|
||||
{
|
||||
return gTextureList.getImageFromUrl(url, usemipmaps, boost_priority, texture_type, internal_format, primary_format, force_id) ;
|
||||
return gTextureList.getImageFromUrl(url, f_type, usemipmaps, boost_priority, texture_type, internal_format, primary_format, force_id);
|
||||
}
|
||||
|
||||
LLViewerFetchedTexture* LLViewerTextureManager::getFetchedTextureFromHost(const LLUUID& image_id, LLHost host)
|
||||
LLViewerFetchedTexture* LLViewerTextureManager::getFetchedTextureFromHost(const LLUUID& image_id, FTType f_type, LLHost host)
|
||||
{
|
||||
return gTextureList.getImageFromHost(image_id, host) ;
|
||||
return gTextureList.getImageFromHost(image_id, f_type, host);
|
||||
}
|
||||
|
||||
// Create a bridge to the viewer texture manager.
|
||||
@@ -380,7 +383,7 @@ void LLViewerTextureManager::init()
|
||||
LLViewerFetchedTexture::sDefaultImagep->dontDiscard();
|
||||
LLViewerFetchedTexture::sDefaultImagep->setCategory(LLGLTexture::OTHER) ;
|
||||
|
||||
LLViewerFetchedTexture::sSmokeImagep = LLViewerTextureManager::getFetchedTexture(IMG_SMOKE, TRUE, LLGLTexture::BOOST_UI);
|
||||
LLViewerFetchedTexture::sSmokeImagep = LLViewerTextureManager::getFetchedTexture(IMG_SMOKE, FTT_DEFAULT, TRUE, LLGLTexture::BOOST_UI);
|
||||
LLViewerFetchedTexture::sSmokeImagep->setNoDelete() ;
|
||||
|
||||
LLViewerTexture::initClass() ;
|
||||
@@ -963,30 +966,57 @@ void LLViewerTexture::updateBindStatsForTester()
|
||||
//end of LLViewerTexture
|
||||
//----------------------------------------------------------------------------------------------
|
||||
|
||||
const std::string& fttype_to_string(const FTType& fttype)
|
||||
{
|
||||
static const std::string ftt_unknown("FTT_UNKNOWN");
|
||||
static const std::string ftt_default("FTT_DEFAULT");
|
||||
static const std::string ftt_server_bake("FTT_SERVER_BAKE");
|
||||
static const std::string ftt_host_bake("FTT_HOST_BAKE");
|
||||
static const std::string ftt_map_tile("FTT_MAP_TILE");
|
||||
static const std::string ftt_local_file("FTT_LOCAL_FILE");
|
||||
static const std::string ftt_error("FTT_ERROR");
|
||||
switch(fttype)
|
||||
{
|
||||
case FTT_UNKNOWN: return ftt_unknown; break;
|
||||
case FTT_DEFAULT: return ftt_default; break;
|
||||
case FTT_SERVER_BAKE: return ftt_server_bake; break;
|
||||
case FTT_HOST_BAKE: return ftt_host_bake; break;
|
||||
case FTT_MAP_TILE: return ftt_map_tile; break;
|
||||
case FTT_LOCAL_FILE: return ftt_local_file; break;
|
||||
}
|
||||
return ftt_error;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------------------------
|
||||
//start of LLViewerFetchedTexture
|
||||
//----------------------------------------------------------------------------------------------
|
||||
|
||||
LLViewerFetchedTexture::LLViewerFetchedTexture(const LLUUID& id, const LLHost& host, BOOL usemipmaps)
|
||||
LLViewerFetchedTexture::LLViewerFetchedTexture(const LLUUID& id, FTType f_type, const LLHost& host, BOOL usemipmaps)
|
||||
: LLViewerTexture(id, usemipmaps),
|
||||
mTargetHost(host)
|
||||
{
|
||||
init(TRUE) ;
|
||||
generateGLTexture() ;
|
||||
mGLTexturep->setNeedsAlphaAndPickMask(TRUE) ;
|
||||
init(TRUE);
|
||||
mFTType = f_type;
|
||||
if (mFTType == FTT_HOST_BAKE)
|
||||
{
|
||||
LL_WARNS() << "Unsupported fetch type " << mFTType << LL_ENDL;
|
||||
}
|
||||
generateGLTexture();
|
||||
}
|
||||
|
||||
LLViewerFetchedTexture::LLViewerFetchedTexture(const LLImageRaw* raw, BOOL usemipmaps)
|
||||
LLViewerFetchedTexture::LLViewerFetchedTexture(const LLImageRaw* raw, FTType f_type, BOOL usemipmaps)
|
||||
: LLViewerTexture(raw, usemipmaps)
|
||||
{
|
||||
init(TRUE) ;
|
||||
mFTType = f_type;
|
||||
}
|
||||
|
||||
LLViewerFetchedTexture::LLViewerFetchedTexture(const std::string& url, const LLUUID& id, BOOL usemipmaps)
|
||||
LLViewerFetchedTexture::LLViewerFetchedTexture(const std::string& url, FTType f_type, const LLUUID& id, BOOL usemipmaps)
|
||||
: LLViewerTexture(id, usemipmaps),
|
||||
mUrl(url)
|
||||
{
|
||||
init(TRUE) ;
|
||||
mFTType = f_type;
|
||||
generateGLTexture() ;
|
||||
mGLTexturep->setNeedsAlphaAndPickMask(TRUE) ;
|
||||
}
|
||||
@@ -1054,6 +1084,7 @@ void LLViewerFetchedTexture::init(bool firstinit)
|
||||
mKeptSavedRawImageTime = 0.f ;
|
||||
mLastCallBackActiveTime = 0.f;
|
||||
mForceCallbackFetch = FALSE;
|
||||
mFTType = FTT_UNKNOWN;
|
||||
}
|
||||
|
||||
LLViewerFetchedTexture::~LLViewerFetchedTexture()
|
||||
@@ -1071,7 +1102,12 @@ LLViewerFetchedTexture::~LLViewerFetchedTexture()
|
||||
//virtual
|
||||
S8 LLViewerFetchedTexture::getType() const
|
||||
{
|
||||
return LLViewerTexture::FETCHED_TEXTURE ;
|
||||
return LLViewerTexture::FETCHED_TEXTURE;
|
||||
}
|
||||
|
||||
FTType LLViewerFetchedTexture::getFTType() const
|
||||
{
|
||||
return mFTType;
|
||||
}
|
||||
|
||||
void LLViewerFetchedTexture::cleanup()
|
||||
@@ -1896,10 +1932,14 @@ bool LLViewerFetchedTexture::updateFetch()
|
||||
// We finished but received no data
|
||||
if (getDiscardLevel() < 0)
|
||||
{
|
||||
LL_WARNS() << "!mIsFetching, setting as missing, decode_priority " << decode_priority
|
||||
<< " mRawDiscardLevel " << mRawDiscardLevel
|
||||
<< " current_discard " << current_discard
|
||||
<< LL_ENDL;
|
||||
if (getFTType() != FTT_MAP_TILE)
|
||||
{
|
||||
LL_WARNS() << mID
|
||||
<< " Fetch failure, setting as missing, decode_priority " << decode_priority
|
||||
<< " mRawDiscardLevel " << mRawDiscardLevel
|
||||
<< " current_discard " << current_discard
|
||||
<< LL_ENDL;
|
||||
}
|
||||
setIsMissingAsset();
|
||||
desired_discard = -1;
|
||||
}
|
||||
@@ -2022,7 +2062,7 @@ bool LLViewerFetchedTexture::updateFetch()
|
||||
|
||||
// bypass texturefetch directly by pulling from LLTextureCache
|
||||
bool fetch_request_created = false;
|
||||
fetch_request_created = LLAppViewer::getTextureFetch()->createRequest(mUrl, getID(),getTargetHost(), decode_priority,
|
||||
fetch_request_created = LLAppViewer::getTextureFetch()->createRequest(mFTType, mUrl, getID(), getTargetHost(), decode_priority,
|
||||
w, h, c, desired_discard, needsAux(), mCanUseHTTP);
|
||||
|
||||
if (fetch_request_created)
|
||||
@@ -2103,7 +2143,10 @@ void LLViewerFetchedTexture::setIsMissingAsset(BOOL is_missing)
|
||||
// This may or may not be an error - it is normal to have no
|
||||
// map tile on an empty region, but bad if we're failing on a
|
||||
// server bake texture.
|
||||
if (getFTType() != FTT_MAP_TILE)
|
||||
{
|
||||
LL_WARNS() << mUrl << ": Marking image as missing" << LL_ENDL;
|
||||
}
|
||||
}
|
||||
if (mHasFetcher)
|
||||
{
|
||||
@@ -2341,6 +2384,15 @@ bool LLViewerFetchedTexture::doLoadedCallbacks()
|
||||
}
|
||||
if(sCurrentTime - mLastCallBackActiveTime > MAX_INACTIVE_TIME && !mIsFetching)
|
||||
{
|
||||
if (mFTType == FTT_SERVER_BAKE)
|
||||
{
|
||||
//output some debug info
|
||||
LL_INFOS() << "baked texture: " << mID << "clears all call backs due to inactivity." << LL_ENDL;
|
||||
LL_INFOS() << mUrl << LL_ENDL;
|
||||
LL_INFOS() << "current discard: " << getDiscardLevel() << " current discard for fetch: " << getCurrentDiscardLevelForFetching() <<
|
||||
" Desired discard: " << getDesiredDiscardLevel() << "decode Pri: " << getDecodePriority() << LL_ENDL;
|
||||
}
|
||||
|
||||
clearCallbackEntryList() ; //remove all callbacks.
|
||||
return false ;
|
||||
}
|
||||
@@ -2349,6 +2401,13 @@ bool LLViewerFetchedTexture::doLoadedCallbacks()
|
||||
|
||||
if (isMissingAsset())
|
||||
{
|
||||
if (mFTType == FTT_SERVER_BAKE)
|
||||
{
|
||||
//output some debug info
|
||||
LL_INFOS() << "baked texture: " << mID << "is missing." << LL_ENDL;
|
||||
LL_INFOS() << mUrl << LL_ENDL;
|
||||
}
|
||||
|
||||
for(callback_list_t::iterator iter = mLoadedCallbackList.begin();
|
||||
iter != mLoadedCallbackList.end(); )
|
||||
{
|
||||
@@ -3087,16 +3146,16 @@ BOOL LLViewerFetchedTexture::insertToAtlas()
|
||||
//----------------------------------------------------------------------------------------------
|
||||
//start of LLViewerLODTexture
|
||||
//----------------------------------------------------------------------------------------------
|
||||
LLViewerLODTexture::LLViewerLODTexture(const LLUUID& id, const LLHost& host, BOOL usemipmaps)
|
||||
: LLViewerFetchedTexture(id, host, usemipmaps)
|
||||
LLViewerLODTexture::LLViewerLODTexture(const LLUUID& id, FTType f_type, const LLHost& host, BOOL usemipmaps)
|
||||
: LLViewerFetchedTexture(id, f_type, host, usemipmaps)
|
||||
{
|
||||
init(TRUE) ;
|
||||
init(TRUE);
|
||||
}
|
||||
|
||||
LLViewerLODTexture::LLViewerLODTexture(const std::string& url, const LLUUID& id, BOOL usemipmaps)
|
||||
: LLViewerFetchedTexture(url, id, usemipmaps)
|
||||
LLViewerLODTexture::LLViewerLODTexture(const std::string& url, FTType f_type, const LLUUID& id, BOOL usemipmaps)
|
||||
: LLViewerFetchedTexture(url, f_type, id, usemipmaps)
|
||||
{
|
||||
init(TRUE) ;
|
||||
init(TRUE);
|
||||
}
|
||||
|
||||
void LLViewerLODTexture::init(bool firstinit)
|
||||
|
||||
@@ -247,6 +247,18 @@ public:
|
||||
};
|
||||
|
||||
|
||||
enum FTType
|
||||
{
|
||||
FTT_UNKNOWN = -1,
|
||||
FTT_DEFAULT = 0, // standard texture fetched by id.
|
||||
FTT_SERVER_BAKE, // texture produced by appearance service and fetched from there.
|
||||
FTT_HOST_BAKE, // old-style baked texture uploaded by viewer and fetched from avatar's host.
|
||||
FTT_MAP_TILE, // tiles are fetched from map server directly.
|
||||
FTT_LOCAL_FILE // fetch directly from a local file.
|
||||
};
|
||||
|
||||
const std::string& fttype_to_string(const FTType& fttype);
|
||||
|
||||
//
|
||||
//textures are managed in gTextureList.
|
||||
//raw image data is fetched from remote or local cache
|
||||
@@ -260,9 +272,9 @@ class LLViewerFetchedTexture : public LLViewerTexture
|
||||
protected:
|
||||
/*virtual*/ ~LLViewerFetchedTexture();
|
||||
public:
|
||||
LLViewerFetchedTexture(const LLUUID& id, const LLHost& host = LLHost::invalid, BOOL usemipmaps = TRUE);
|
||||
LLViewerFetchedTexture(const LLImageRaw* raw, BOOL usemipmaps);
|
||||
LLViewerFetchedTexture(const std::string& url, const LLUUID& id, BOOL usemipmaps = TRUE);
|
||||
LLViewerFetchedTexture(const LLUUID& id, FTType f_type, const LLHost& host = LLHost::invalid, BOOL usemipmaps = TRUE);
|
||||
LLViewerFetchedTexture(const LLImageRaw* raw, FTType f_type, BOOL usemipmaps);
|
||||
LLViewerFetchedTexture(const std::string& url, FTType f_type, const LLUUID& id, BOOL usemipmaps = TRUE);
|
||||
|
||||
public:
|
||||
static F32 maxDecodePriority();
|
||||
@@ -287,6 +299,7 @@ public:
|
||||
|
||||
public:
|
||||
/*virtual*/ S8 getType() const ;
|
||||
FTType getFTType() const;
|
||||
/*virtual*/ void forceImmediateUpdate() ;
|
||||
/*virtual*/ void dump() ;
|
||||
|
||||
@@ -454,7 +467,8 @@ protected:
|
||||
S8 mHasFetcher; // We've made a fecth request
|
||||
S8 mIsFetching; // Fetch request is active
|
||||
bool mCanUseHTTP ; //This texture can be fetched through http if true.
|
||||
|
||||
|
||||
FTType mFTType; // What category of image is this - map tile, server bake, etc?
|
||||
mutable S8 mIsMissingAsset; // True if we know that there is no image asset with this image id in the database.
|
||||
|
||||
typedef std::list<LLLoadedCallbackEntry*> callback_list_t;
|
||||
@@ -515,8 +529,8 @@ protected:
|
||||
/*virtual*/ ~LLViewerLODTexture(){}
|
||||
|
||||
public:
|
||||
LLViewerLODTexture(const LLUUID& id, const LLHost& host = LLHost::invalid, BOOL usemipmaps = TRUE);
|
||||
LLViewerLODTexture(const std::string& url, const LLUUID& id, BOOL usemipmaps = TRUE);
|
||||
LLViewerLODTexture(const LLUUID& id, FTType f_type, const LLHost& host = LLHost::invalid, BOOL usemipmaps = TRUE);
|
||||
LLViewerLODTexture(const std::string& url, FTType f_type, const LLUUID& id, BOOL usemipmaps = TRUE);
|
||||
|
||||
/*virtual*/ S8 getType() const;
|
||||
// Process image stats to determine priority/quality requirements.
|
||||
@@ -632,6 +646,7 @@ public:
|
||||
static LLPointer<LLViewerTexture> getLocalTexture(const U32 width, const U32 height, const U8 components, BOOL usemipmaps, BOOL generate_gl_tex = TRUE) ;
|
||||
|
||||
static LLViewerFetchedTexture* getFetchedTexture(const LLUUID &image_id,
|
||||
FTType f_type = FTT_DEFAULT,
|
||||
BOOL usemipmap = TRUE,
|
||||
LLViewerTexture::EBoostLevel boost_priority = LLGLTexture::BOOST_NONE, // Get the requested level immediately upon creation.
|
||||
S8 texture_type = LLViewerTexture::FETCHED_TEXTURE,
|
||||
@@ -641,6 +656,7 @@ public:
|
||||
);
|
||||
|
||||
static LLViewerFetchedTexture* getFetchedTextureFromFile(const std::string& filename,
|
||||
FTType f_type = FTT_LOCAL_FILE,
|
||||
BOOL usemipmap = TRUE,
|
||||
LLViewerTexture::EBoostLevel boost_priority = LLGLTexture::BOOST_NONE,
|
||||
S8 texture_type = LLViewerTexture::FETCHED_TEXTURE,
|
||||
@@ -650,6 +666,7 @@ public:
|
||||
);
|
||||
|
||||
static LLViewerFetchedTexture* getFetchedTextureFromUrl(const std::string& url,
|
||||
FTType f_type,
|
||||
BOOL usemipmap = TRUE,
|
||||
LLViewerTexture::EBoostLevel boost_priority = LLGLTexture::BOOST_NONE,
|
||||
S8 texture_type = LLViewerTexture::FETCHED_TEXTURE,
|
||||
@@ -658,7 +675,7 @@ public:
|
||||
const LLUUID& force_id = LLUUID::null
|
||||
);
|
||||
|
||||
static LLViewerFetchedTexture* getFetchedTextureFromHost(const LLUUID& image_id, LLHost host) ;
|
||||
static LLViewerFetchedTexture* getFetchedTextureFromHost(const LLUUID& image_id, FTType f_type, LLHost host) ;
|
||||
|
||||
static void init() ;
|
||||
static void cleanup() ;
|
||||
|
||||
@@ -67,6 +67,8 @@
|
||||
#include "llxuiparser.h"
|
||||
#include "llagent.h"
|
||||
#include "llviewerdisplay.h"
|
||||
#include "llviewerwindow.h"
|
||||
#include "llprogressview.h"
|
||||
#include "llflexibleobject.h"
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////
|
||||
@@ -120,14 +122,14 @@ void LLViewerTextureList::doPreloadImages()
|
||||
llassert_always(mUUIDMap.empty()) ;
|
||||
|
||||
// Set the "missing asset" image
|
||||
LLViewerFetchedTexture::sMissingAssetImagep = LLViewerTextureManager::getFetchedTextureFromFile("missing_asset.tga", MIPMAP_NO, LLViewerFetchedTexture::BOOST_UI);
|
||||
LLViewerFetchedTexture::sMissingAssetImagep = LLViewerTextureManager::getFetchedTextureFromFile("missing_asset.tga", FTT_LOCAL_FILE, MIPMAP_NO, LLViewerFetchedTexture::BOOST_UI);
|
||||
|
||||
// Set the "white" image
|
||||
LLViewerFetchedTexture::sWhiteImagep = LLViewerTextureManager::getFetchedTextureFromFile("white.tga", MIPMAP_NO, LLViewerFetchedTexture::BOOST_UI);
|
||||
LLViewerFetchedTexture::sWhiteImagep = LLViewerTextureManager::getFetchedTextureFromFile("white.tga", FTT_LOCAL_FILE, MIPMAP_NO, LLViewerFetchedTexture::BOOST_UI);
|
||||
LLTexUnit::sWhiteTexture = LLViewerFetchedTexture::sWhiteImagep->getTexName();
|
||||
LLUIImageList* image_list = LLUIImageList::getInstance();
|
||||
|
||||
LLViewerFetchedTexture::sFlatNormalImagep = LLViewerTextureManager::getFetchedTextureFromFile("flatnormal.tga", MIPMAP_NO, LLViewerFetchedTexture::BOOST_BUMP);
|
||||
LLViewerFetchedTexture::sFlatNormalImagep = LLViewerTextureManager::getFetchedTextureFromFile("flatnormal.tga", FTT_LOCAL_FILE, MIPMAP_NO, LLViewerFetchedTexture::BOOST_BUMP);
|
||||
image_list->initFromFile();
|
||||
|
||||
// turn off clamping and bilinear filtering for uv picking images
|
||||
@@ -139,47 +141,47 @@ void LLViewerTextureList::doPreloadImages()
|
||||
//uv_test->setMipFilterNearest(TRUE, TRUE);
|
||||
|
||||
// prefetch specific UUIDs
|
||||
LLViewerTextureManager::getFetchedTexture(IMG_SHOT, TRUE);
|
||||
LLViewerTextureManager::getFetchedTexture(IMG_SMOKE_POOF, TRUE);
|
||||
LLViewerFetchedTexture* image = LLViewerTextureManager::getFetchedTextureFromFile("silhouette.j2c", MIPMAP_YES, LLViewerFetchedTexture::BOOST_UI);
|
||||
LLViewerTextureManager::getFetchedTexture(IMG_SHOT);
|
||||
LLViewerTextureManager::getFetchedTexture(IMG_SMOKE_POOF);
|
||||
LLViewerFetchedTexture* image = LLViewerTextureManager::getFetchedTextureFromFile("silhouette.j2c", FTT_LOCAL_FILE, MIPMAP_YES, LLViewerFetchedTexture::BOOST_UI);
|
||||
if (image)
|
||||
{
|
||||
image->setAddressMode(LLTexUnit::TAM_WRAP);
|
||||
mImagePreloads.insert(image);
|
||||
}
|
||||
image = LLViewerTextureManager::getFetchedTextureFromFile("noentrylines.j2c"/*"world/NoEntryLines.png"*/, MIPMAP_YES, LLViewerFetchedTexture::BOOST_UI);
|
||||
image = LLViewerTextureManager::getFetchedTextureFromFile("world/NoEntryLines.png", FTT_LOCAL_FILE, MIPMAP_YES, LLViewerFetchedTexture::BOOST_UI);
|
||||
if (image)
|
||||
{
|
||||
image->setAddressMode(LLTexUnit::TAM_WRAP);
|
||||
mImagePreloads.insert(image);
|
||||
}
|
||||
image = LLViewerTextureManager::getFetchedTextureFromFile("noentrypasslines.j2c"/*"world/NoEntryPassLines.png"*/, MIPMAP_YES, LLViewerFetchedTexture::BOOST_UI);
|
||||
image = LLViewerTextureManager::getFetchedTextureFromFile("world/NoEntryPassLines.png", FTT_LOCAL_FILE, MIPMAP_YES, LLViewerFetchedTexture::BOOST_UI);
|
||||
if (image)
|
||||
{
|
||||
image->setAddressMode(LLTexUnit::TAM_WRAP);
|
||||
mImagePreloads.insert(image);
|
||||
}
|
||||
image = LLViewerTextureManager::getFetchedTexture(DEFAULT_WATER_NORMAL, MIPMAP_YES, LLViewerFetchedTexture::BOOST_UI);
|
||||
image = LLViewerTextureManager::getFetchedTexture(DEFAULT_WATER_NORMAL, FTT_DEFAULT, MIPMAP_YES, LLViewerFetchedTexture::BOOST_UI);
|
||||
if (image)
|
||||
{
|
||||
image->setAddressMode(LLTexUnit::TAM_WRAP);
|
||||
mImagePreloads.insert(image);
|
||||
}
|
||||
image = LLViewerTextureManager::getFetchedTextureFromFile("transparent.j2c", MIPMAP_YES, LLViewerFetchedTexture::BOOST_UI, LLViewerTexture::FETCHED_TEXTURE,
|
||||
image = LLViewerTextureManager::getFetchedTextureFromFile("transparent.j2c", FTT_LOCAL_FILE, MIPMAP_YES, LLViewerFetchedTexture::BOOST_UI, LLViewerTexture::FETCHED_TEXTURE,
|
||||
0,0,LLUUID("8dcd4a48-2d37-4909-9f78-f7a9eb4ef903"));
|
||||
if (image)
|
||||
{
|
||||
image->setAddressMode(LLTexUnit::TAM_WRAP);
|
||||
mImagePreloads.insert(image);
|
||||
}
|
||||
image = LLViewerTextureManager::getFetchedTextureFromFile("transparent.j2c", MIPMAP_YES, LLViewerFetchedTexture::BOOST_UI, LLViewerTexture::FETCHED_TEXTURE,
|
||||
image = LLViewerTextureManager::getFetchedTextureFromFile("transparent.j2c", FTT_LOCAL_FILE, MIPMAP_YES, LLViewerFetchedTexture::BOOST_UI, LLViewerTexture::FETCHED_TEXTURE,
|
||||
0,0,LLUUID("e97cf410-8e61-7005-ec06-629eba4cd1fb"));
|
||||
if (image)
|
||||
{
|
||||
image->setAddressMode(LLTexUnit::TAM_WRAP);
|
||||
mImagePreloads.insert(image);
|
||||
}
|
||||
image = LLViewerTextureManager::getFetchedTextureFromFile("transparent.j2c", MIPMAP_YES, LLViewerFetchedTexture::BOOST_UI, LLViewerTexture::FETCHED_TEXTURE,
|
||||
image = LLViewerTextureManager::getFetchedTextureFromFile("transparent.j2c", FTT_LOCAL_FILE, MIPMAP_YES, LLViewerFetchedTexture::BOOST_UI, LLViewerTexture::FETCHED_TEXTURE,
|
||||
0,0,LLUUID("38b86f85-2575-52a9-a531-23108d8da837"));
|
||||
if (image)
|
||||
{
|
||||
@@ -188,7 +190,7 @@ void LLViewerTextureList::doPreloadImages()
|
||||
}
|
||||
//Hideous hack to set filtering and address modes without messing with our texture classes.
|
||||
{
|
||||
LLPointer<LLUIImage> temp_image = image_list->getUIImage("checkerboard.tga",LLViewerFetchedTexture::BOOST_UI);
|
||||
LLPointer<LLUIImage> temp_image = image_list->getUIImage("checkerboard.tga", LLViewerFetchedTexture::BOOST_UI);
|
||||
if(temp_image.notNull() && temp_image->getImage().notNull())
|
||||
{
|
||||
LLViewerTexture *tex = (LLViewerTexture*)temp_image->getImage().get();
|
||||
@@ -240,7 +242,7 @@ void LLViewerTextureList::doPrefetchImages()
|
||||
|
||||
if(LLViewerTexture::FETCHED_TEXTURE == texture_type || LLViewerTexture::LOD_TEXTURE == texture_type)
|
||||
{
|
||||
LLViewerFetchedTexture* image = LLViewerTextureManager::getFetchedTexture(uuid, MIPMAP_TRUE, LLGLTexture::BOOST_NONE, texture_type);
|
||||
LLViewerFetchedTexture* image = LLViewerTextureManager::getFetchedTexture(uuid, FTT_DEFAULT, MIPMAP_TRUE, LLGLTexture::BOOST_NONE, texture_type);
|
||||
if (image)
|
||||
{
|
||||
texture_count += 1;
|
||||
@@ -368,6 +370,7 @@ void LLViewerTextureList::restoreGL()
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
LLViewerFetchedTexture* LLViewerTextureList::getImageFromFile(const std::string& filename,
|
||||
FTType f_type,
|
||||
BOOL usemipmaps,
|
||||
LLViewerTexture::EBoostLevel boost_priority,
|
||||
S8 texture_type,
|
||||
@@ -384,15 +387,16 @@ LLViewerFetchedTexture* LLViewerTextureList::getImageFromFile(const std::string&
|
||||
if (full_path.empty())
|
||||
{
|
||||
LL_WARNS() << "Failed to find local image file: " << filename << LL_ENDL;
|
||||
return LLViewerTextureManager::getFetchedTexture(IMG_DEFAULT, TRUE, LLGLTexture::BOOST_UI);
|
||||
return LLViewerTextureManager::getFetchedTexture(IMG_DEFAULT, FTT_DEFAULT, TRUE, LLGLTexture::BOOST_UI);
|
||||
}
|
||||
|
||||
std::string url = "file://" + full_path;
|
||||
|
||||
return getImageFromUrl(url, usemipmaps, boost_priority, texture_type, internal_format, primary_format, force_id);
|
||||
return getImageFromUrl(url, f_type, usemipmaps, boost_priority, texture_type, internal_format, primary_format, force_id);
|
||||
}
|
||||
|
||||
LLViewerFetchedTexture* LLViewerTextureList::getImageFromUrl(const std::string& url,
|
||||
FTType f_type,
|
||||
BOOL usemipmaps,
|
||||
LLViewerTexture::EBoostLevel boost_priority,
|
||||
S8 texture_type,
|
||||
@@ -409,7 +413,7 @@ LLViewerFetchedTexture* LLViewerTextureList::getImageFromUrl(const std::string&
|
||||
{
|
||||
// Never mind that this ignores image_set_id;
|
||||
// getImage() will handle that later.
|
||||
return LLViewerTextureManager::getFetchedTexture(IMG_DEFAULT, TRUE, LLGLTexture::BOOST_UI);
|
||||
return LLViewerTextureManager::getFetchedTexture(IMG_DEFAULT, FTT_DEFAULT, TRUE, LLGLTexture::BOOST_UI);
|
||||
}
|
||||
|
||||
// generate UUID based on hash of filename
|
||||
@@ -447,10 +451,10 @@ LLViewerFetchedTexture* LLViewerTextureList::getImageFromUrl(const std::string&
|
||||
switch(texture_type)
|
||||
{
|
||||
case LLViewerTexture::FETCHED_TEXTURE:
|
||||
imagep = new LLViewerFetchedTexture(url, new_id, usemipmaps);
|
||||
imagep = new LLViewerFetchedTexture(url, f_type, new_id, usemipmaps);
|
||||
break ;
|
||||
case LLViewerTexture::LOD_TEXTURE:
|
||||
imagep = new LLViewerLODTexture(url, new_id, usemipmaps);
|
||||
imagep = new LLViewerLODTexture(url, f_type, new_id, usemipmaps);
|
||||
break ;
|
||||
default:
|
||||
LL_ERRS() << "Invalid texture type " << texture_type << LL_ENDL ;
|
||||
@@ -480,7 +484,8 @@ LLViewerFetchedTexture* LLViewerTextureList::getImageFromUrl(const std::string&
|
||||
}
|
||||
|
||||
|
||||
LLViewerFetchedTexture* LLViewerTextureList::getImage(const LLUUID &image_id,
|
||||
LLViewerFetchedTexture* LLViewerTextureList::getImage(const LLUUID &image_id,
|
||||
FTType f_type,
|
||||
BOOL usemipmaps,
|
||||
LLViewerTexture::EBoostLevel boost_priority,
|
||||
S8 texture_type,
|
||||
@@ -499,7 +504,7 @@ LLViewerFetchedTexture* LLViewerTextureList::getImage(const LLUUID &image_id,
|
||||
|
||||
if ((&image_id == NULL) || image_id.isNull())
|
||||
{
|
||||
return (LLViewerTextureManager::getFetchedTexture(IMG_DEFAULT, TRUE, LLGLTexture::BOOST_UI));
|
||||
return (LLViewerTextureManager::getFetchedTexture(IMG_DEFAULT, FTT_DEFAULT, TRUE, LLGLTexture::BOOST_UI));
|
||||
}
|
||||
|
||||
LLPointer<LLViewerFetchedTexture> imagep = findImage(image_id);
|
||||
@@ -518,11 +523,15 @@ LLViewerFetchedTexture* LLViewerTextureList::getImage(const LLUUID &image_id,
|
||||
LL_WARNS() << "Requested texture " << image_id << " already exists with a different target host, requested: "
|
||||
<< request_from_host << " current: " << texture->getTargetHost() << LL_ENDL;
|
||||
}
|
||||
if (f_type != FTT_DEFAULT && imagep->getFTType() != f_type)
|
||||
{
|
||||
LL_WARNS() << "FTType mismatch: requested " << f_type << " image has " << imagep->getFTType() << LL_ENDL;
|
||||
}
|
||||
|
||||
}
|
||||
if (imagep.isNull())
|
||||
{
|
||||
imagep = createImage(image_id, usemipmaps, boost_priority, texture_type, internal_format, primary_format, request_from_host) ;
|
||||
imagep = createImage(image_id, f_type, usemipmaps, boost_priority, texture_type, internal_format, primary_format, request_from_host) ;
|
||||
}
|
||||
|
||||
imagep->setGLTextureCreated(true);
|
||||
@@ -532,6 +541,7 @@ LLViewerFetchedTexture* LLViewerTextureList::getImage(const LLUUID &image_id,
|
||||
|
||||
//when this function is called, there is no such texture in the gTextureList with image_id.
|
||||
LLViewerFetchedTexture* LLViewerTextureList::createImage(const LLUUID &image_id,
|
||||
FTType f_type,
|
||||
BOOL usemipmaps,
|
||||
LLViewerTexture::EBoostLevel boost_priority,
|
||||
S8 texture_type,
|
||||
@@ -543,10 +553,10 @@ LLViewerFetchedTexture* LLViewerTextureList::createImage(const LLUUID &image_id,
|
||||
switch(texture_type)
|
||||
{
|
||||
case LLViewerTexture::FETCHED_TEXTURE:
|
||||
imagep = new LLViewerFetchedTexture(image_id, request_from_host, usemipmaps);
|
||||
imagep = new LLViewerFetchedTexture(image_id, f_type, request_from_host, usemipmaps);
|
||||
break ;
|
||||
case LLViewerTexture::LOD_TEXTURE:
|
||||
imagep = new LLViewerLODTexture(image_id, request_from_host, usemipmaps);
|
||||
imagep = new LLViewerLODTexture(image_id, f_type, request_from_host, usemipmaps);
|
||||
break ;
|
||||
default:
|
||||
LL_ERRS() << "Invalid texture type " << texture_type << LL_ENDL ;
|
||||
@@ -593,16 +603,18 @@ void LLViewerTextureList::addImageToList(LLViewerFetchedTexture *image)
|
||||
llassert_always(mInitialized) ;
|
||||
llassert(image);
|
||||
if (image->isInImageList())
|
||||
{
|
||||
LL_ERRS() << "LLViewerTextureList::addImageToList - Image already in list" << LL_ENDL;
|
||||
{ // Flag is already set?
|
||||
LL_WARNS() << "LLViewerTextureList::addImageToList - image " << image->getID() << " already in list" << LL_ENDL;
|
||||
}
|
||||
else
|
||||
{
|
||||
if((mImageList.insert(image)).second != true)
|
||||
{
|
||||
LL_ERRS() << "Error happens when insert image to mImageList!" << LL_ENDL ;
|
||||
LL_WARNS() << "Error happens when insert image " << image->getID() << " into mImageList!" << LL_ENDL ;
|
||||
}
|
||||
|
||||
image->setInImageList(TRUE) ;
|
||||
}
|
||||
}
|
||||
|
||||
void LLViewerTextureList::removeImageFromList(LLViewerFetchedTexture *image)
|
||||
{
|
||||
@@ -664,7 +676,7 @@ void LLViewerTextureList::addImage(LLViewerFetchedTexture *new_image)
|
||||
LLViewerFetchedTexture *image = findImage(image_id);
|
||||
if (image)
|
||||
{
|
||||
LL_WARNS() << "Image with ID " << image_id << " already in list" << LL_ENDL;
|
||||
LL_INFOS() << "Image with ID " << image_id << " already in list" << LL_ENDL;
|
||||
}
|
||||
sNumImages++;
|
||||
|
||||
@@ -819,6 +831,13 @@ void LLViewerTextureList::updateImagesDecodePriorities()
|
||||
{
|
||||
// Update the decode priority for N images each frame
|
||||
{
|
||||
F32 lazy_flush_timeout = 30.f; // stop decoding
|
||||
F32 max_inactive_time = 20.f; // actually delete
|
||||
S32 min_refs = 3; // 1 for mImageList, 1 for mUUIDMap, 1 for local reference
|
||||
|
||||
//reset imagep->getLastReferencedTimer() when screen is showing the progress view to avoid removing pre-fetched textures too soon.
|
||||
bool reset_timer = gViewerWindow->getProgressView()->getVisible();
|
||||
|
||||
static const S32 MAX_PRIO_UPDATES = gSavedSettings.getS32("TextureFetchUpdatePriorities"); // default: 32
|
||||
const size_t max_update_count = llmin((S32) (MAX_PRIO_UPDATES*MAX_PRIO_UPDATES*gFrameIntervalSeconds) + 1, MAX_PRIO_UPDATES);
|
||||
S32 update_counter = llmin(max_update_count, mUUIDMap.size());
|
||||
@@ -836,14 +855,14 @@ void LLViewerTextureList::updateImagesDecodePriorities()
|
||||
//
|
||||
// Flush formatted images using a lazy flush
|
||||
//
|
||||
const F32 LAZY_FLUSH_TIMEOUT = 30.f; // stop decoding
|
||||
const F32 MAX_INACTIVE_TIME = 50.f; // actually delete
|
||||
S32 min_refs = 3; // 1 for mImageList, 1 for mUUIDMap, 1 for local reference
|
||||
|
||||
S32 num_refs = imagep->getNumRefs();
|
||||
if (num_refs == min_refs)
|
||||
{
|
||||
if (imagep->getLastReferencedTimer()->getElapsedTimeF32() > LAZY_FLUSH_TIMEOUT)
|
||||
if(reset_timer)
|
||||
{
|
||||
imagep->getLastReferencedTimer()->reset();
|
||||
}
|
||||
else if (imagep->getLastReferencedTimer()->getElapsedTimeF32() > lazy_flush_timeout)
|
||||
{
|
||||
// Remove the unused image from the image list
|
||||
deleteImage(imagep);
|
||||
@@ -855,7 +874,7 @@ void LLViewerTextureList::updateImagesDecodePriorities()
|
||||
{
|
||||
if(imagep->hasSavedRawImage())
|
||||
{
|
||||
if(imagep->getElapsedLastReferencedSavedRawImageTime() > MAX_INACTIVE_TIME)
|
||||
if(imagep->getElapsedLastReferencedSavedRawImageTime() > max_inactive_time)
|
||||
{
|
||||
imagep->destroySavedRawImage() ;
|
||||
}
|
||||
@@ -872,7 +891,11 @@ void LLViewerTextureList::updateImagesDecodePriorities()
|
||||
}
|
||||
else if(imagep->isInactive())
|
||||
{
|
||||
if (imagep->getLastReferencedTimer()->getElapsedTimeF32() > MAX_INACTIVE_TIME)
|
||||
if(reset_timer)
|
||||
{
|
||||
imagep->getLastReferencedTimer()->reset();
|
||||
}
|
||||
else if (imagep->getLastReferencedTimer()->getElapsedTimeF32() > max_inactive_time)
|
||||
{
|
||||
imagep->setDeletionCandidate() ;
|
||||
}
|
||||
@@ -1421,7 +1444,7 @@ void LLViewerTextureList::receiveImageHeader(LLMessageSystem *msg, void **user_d
|
||||
U8 *data = new U8[data_size];
|
||||
msg->getBinaryDataFast(_PREHASH_ImageData, _PREHASH_Data, data, data_size);
|
||||
|
||||
LLViewerFetchedTexture *image = LLViewerTextureManager::getFetchedTexture(id, TRUE, LLGLTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE);
|
||||
LLViewerFetchedTexture *image = LLViewerTextureManager::getFetchedTexture(id, FTT_DEFAULT, TRUE, LLGLTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE);
|
||||
if (!image)
|
||||
{
|
||||
delete [] data;
|
||||
@@ -1493,7 +1516,7 @@ void LLViewerTextureList::receiveImagePacket(LLMessageSystem *msg, void **user_d
|
||||
U8 *data = new U8[data_size];
|
||||
msg->getBinaryDataFast(_PREHASH_ImageData, _PREHASH_Data, data, data_size);
|
||||
|
||||
LLViewerFetchedTexture *image = LLViewerTextureManager::getFetchedTexture(id, TRUE, LLGLTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE);
|
||||
LLViewerFetchedTexture *image = LLViewerTextureManager::getFetchedTexture(id, FTT_DEFAULT, TRUE, LLGLTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE);
|
||||
if (!image)
|
||||
{
|
||||
delete [] data;
|
||||
@@ -1581,7 +1604,7 @@ LLUIImagePtr LLUIImageList::loadUIImageByName(const std::string& name, const std
|
||||
{
|
||||
boost_priority = LLGLTexture::BOOST_UI;
|
||||
}
|
||||
LLViewerFetchedTexture* imagep = LLViewerTextureManager::getFetchedTextureFromFile(filename, MIPMAP_NO, boost_priority);
|
||||
LLViewerFetchedTexture* imagep = LLViewerTextureManager::getFetchedTextureFromFile(filename, FTT_LOCAL_FILE, MIPMAP_NO, boost_priority);
|
||||
return loadUIImage(imagep, name, use_mips, scale_rect, clip_rect, scale_style);
|
||||
}
|
||||
|
||||
@@ -1593,7 +1616,7 @@ LLUIImagePtr LLUIImageList::loadUIImageByID(const LLUUID& id,
|
||||
{
|
||||
boost_priority = LLGLTexture::BOOST_UI;
|
||||
}
|
||||
LLViewerFetchedTexture* imagep = LLViewerTextureManager::getFetchedTexture(id, MIPMAP_NO, boost_priority);
|
||||
LLViewerFetchedTexture* imagep = LLViewerTextureManager::getFetchedTexture(id, FTT_DEFAULT, MIPMAP_NO, boost_priority);
|
||||
return loadUIImage(imagep, id.asString(), use_mips, scale_rect, clip_rect, scale_style);
|
||||
}
|
||||
|
||||
|
||||
@@ -129,6 +129,7 @@ private:
|
||||
void removeImageFromList(LLViewerFetchedTexture *image);
|
||||
|
||||
LLViewerFetchedTexture * getImage(const LLUUID &image_id,
|
||||
FTType f_type = FTT_DEFAULT,
|
||||
BOOL usemipmap = TRUE,
|
||||
LLViewerTexture::EBoostLevel boost_priority = LLGLTexture::BOOST_NONE, // Get the requested level immediately upon creation.
|
||||
S8 texture_type = LLViewerTexture::FETCHED_TEXTURE,
|
||||
@@ -138,6 +139,7 @@ private:
|
||||
);
|
||||
|
||||
LLViewerFetchedTexture * getImageFromFile(const std::string& filename,
|
||||
FTType f_type = FTT_LOCAL_FILE,
|
||||
BOOL usemipmap = TRUE,
|
||||
LLViewerTexture::EBoostLevel boost_priority = LLGLTexture::BOOST_NONE, // Get the requested level immediately upon creation.
|
||||
S8 texture_type = LLViewerTexture::FETCHED_TEXTURE,
|
||||
@@ -147,6 +149,7 @@ private:
|
||||
);
|
||||
|
||||
LLViewerFetchedTexture* getImageFromUrl(const std::string& url,
|
||||
FTType f_type,
|
||||
BOOL usemipmap = TRUE,
|
||||
LLViewerTexture::EBoostLevel boost_priority = LLGLTexture::BOOST_NONE, // Get the requested level immediately upon creation.
|
||||
S8 texture_type = LLViewerTexture::FETCHED_TEXTURE,
|
||||
@@ -156,6 +159,7 @@ private:
|
||||
);
|
||||
|
||||
LLViewerFetchedTexture* createImage(const LLUUID &image_id,
|
||||
FTType f_type,
|
||||
BOOL usemipmap = TRUE,
|
||||
LLViewerTexture::EBoostLevel boost_priority = LLGLTexture::BOOST_NONE, // Get the requested level immediately upon creation.
|
||||
S8 texture_type = LLViewerTexture::FETCHED_TEXTURE,
|
||||
@@ -166,8 +170,8 @@ private:
|
||||
|
||||
// Request image from a specific host, used for baked avatar textures.
|
||||
// Implemented in header in case someone changes default params above. JC
|
||||
LLViewerFetchedTexture* getImageFromHost(const LLUUID& image_id, LLHost host)
|
||||
{ return getImage(image_id, TRUE, LLGLTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE, 0, 0, host); }
|
||||
LLViewerFetchedTexture* getImageFromHost(const LLUUID& image_id, FTType f_type, LLHost host)
|
||||
{ return getImage(image_id, f_type, TRUE, LLGLTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE, 0, 0, host); }
|
||||
|
||||
public:
|
||||
typedef std::set<LLPointer<LLViewerFetchedTexture> > image_list_t;
|
||||
|
||||
@@ -368,7 +368,7 @@ void LLViewerWearable::writeToAvatar(LLAvatarAppearance *avatarp)
|
||||
{
|
||||
image_id = getDefaultTextureImageID((ETextureIndex) te);
|
||||
}
|
||||
LLViewerTexture* image = LLViewerTextureManager::getFetchedTexture( image_id, TRUE, LLGLTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE );
|
||||
LLViewerTexture* image = LLViewerTextureManager::getFetchedTexture( image_id, FTT_DEFAULT, TRUE, LLGLTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE );
|
||||
// MULTI-WEARABLE: assume index 0 will be used when writing to avatar. TODO: eliminate the need for this.
|
||||
viewer_avatar->setLocalTextureTE(te, image, 0);
|
||||
}
|
||||
|
||||
@@ -2424,9 +2424,9 @@ LLViewerFetchedTexture *LLVOAvatar::getBakedTextureImage(const U8 te, const LLUU
|
||||
|
||||
if (!url.empty())
|
||||
{
|
||||
LL_DEBUGS("Avatar") << avString() << "from URL " << url << LL_ENDL;
|
||||
LL_DEBUGS("Avatar") << avString() << "get server-bake image from URL " << url << LL_ENDL;
|
||||
result = LLViewerTextureManager::getFetchedTextureFromUrl(
|
||||
url, TRUE, LLGLTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE, 0, 0, uuid);
|
||||
url, FTT_SERVER_BAKE, TRUE, LLGLTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE, 0, 0, uuid);
|
||||
if (result->isMissingAsset())
|
||||
{
|
||||
result->setIsMissingAsset(false);
|
||||
@@ -2437,7 +2437,7 @@ LLViewerFetchedTexture *LLVOAvatar::getBakedTextureImage(const U8 te, const LLUU
|
||||
LL_DEBUGS("Avatar") << avString() << "from host " << uuid << LL_ENDL;
|
||||
LLHost host = getObjectHost();
|
||||
result = LLViewerTextureManager::getFetchedTexture(
|
||||
uuid, TRUE, LLGLTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE, 0, 0, host);
|
||||
uuid, FTT_SERVER_BAKE, TRUE, LLGLTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE, 0, 0, host);
|
||||
}
|
||||
}
|
||||
return result;
|
||||
@@ -7650,7 +7650,7 @@ void LLVOAvatar::updateMeshTextures()
|
||||
const std::string url = getImageURL(te, mBakedTextureDatas[i].mLastTextureID);
|
||||
if (!url.empty())
|
||||
{
|
||||
baked_img = LLViewerTextureManager::getFetchedTextureFromUrl(url, TRUE, LLGLTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE, 0, 0, mBakedTextureDatas[i].mLastTextureID);
|
||||
baked_img = LLViewerTextureManager::getFetchedTextureFromUrl(url, FTT_HOST_BAKE, TRUE, LLGLTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE, 0, 0, mBakedTextureDatas[i].mLastTextureID);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -7661,7 +7661,7 @@ void LLVOAvatar::updateMeshTextures()
|
||||
LL_WARNS() << "updateMeshTextures: invalid host for object: " << getID() << LL_ENDL;
|
||||
}
|
||||
|
||||
baked_img = LLViewerTextureManager::getFetchedTextureFromHost( mBakedTextureDatas[i].mLastTextureID, target_host );
|
||||
baked_img = LLViewerTextureManager::getFetchedTextureFromHost( mBakedTextureDatas[i].mLastTextureID, FTT_HOST_BAKE, target_host );
|
||||
}
|
||||
llassert(baked_img == existing_baked_img);
|
||||
|
||||
@@ -8428,7 +8428,7 @@ void LLVOAvatar::processAvatarAppearance( LLMessageSystem* mesgsys )
|
||||
{
|
||||
LL_DEBUGS("Avatar") << avString() << " baked_index " << (S32) baked_index << " using mLastTextureID " << mBakedTextureDatas[baked_index].mLastTextureID << LL_ENDL;
|
||||
setTEImage(mBakedTextureDatas[baked_index].mTextureIndex,
|
||||
LLViewerTextureManager::getFetchedTexture(mBakedTextureDatas[baked_index].mLastTextureID, TRUE, LLGLTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE));
|
||||
LLViewerTextureManager::getFetchedTexture(mBakedTextureDatas[baked_index].mLastTextureID, FTT_HOST_BAKE, TRUE, LLGLTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE));
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@@ -2742,7 +2742,7 @@ void LLVOAvatarSelf::setNewBakedTexture( ETextureIndex te, const LLUUID& uuid )
|
||||
{
|
||||
// Baked textures live on other sims.
|
||||
LLHost target_host = getObjectHost();
|
||||
setTEImage( te, LLViewerTextureManager::getFetchedTextureFromHost( uuid, target_host ) );
|
||||
setTEImage( te, LLViewerTextureManager::getFetchedTextureFromHost( uuid, FTT_HOST_BAKE, target_host ) );
|
||||
updateMeshTextures();
|
||||
dirtyMesh();
|
||||
|
||||
|
||||
@@ -111,7 +111,7 @@ void LLVOGrass::updateSpecies()
|
||||
SpeciesMap::const_iterator it = sSpeciesTable.begin();
|
||||
mSpecies = (*it).first;
|
||||
}
|
||||
setTEImage(0, LLViewerTextureManager::getFetchedTexture(sSpeciesTable[mSpecies]->mTextureID, TRUE, LLGLTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE));
|
||||
setTEImage(0, LLViewerTextureManager::getFetchedTexture(sSpeciesTable[mSpecies]->mTextureID, FTT_DEFAULT, TRUE, LLGLTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE));
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -142,7 +142,7 @@ LLVoiceVisualizer::LLVoiceVisualizer( const U8 type )
|
||||
for (int i=0; i<NUM_VOICE_SYMBOL_WAVES; i++)
|
||||
{
|
||||
mSoundSymbol.mWaveFadeOutStartTime [i] = mCurrentTime;
|
||||
mSoundSymbol.mTexture [i] = LLViewerTextureManager::getFetchedTextureFromFile(sound_level_img[i], FALSE, LLGLTexture::BOOST_UI);
|
||||
mSoundSymbol.mTexture [i] = LLViewerTextureManager::getFetchedTextureFromFile(sound_level_img[i], FTT_LOCAL_FILE, FALSE, LLGLTexture::BOOST_UI);
|
||||
mSoundSymbol.mWaveActive [i] = false;
|
||||
mSoundSymbol.mWaveOpacity [i] = 1.0f;
|
||||
mSoundSymbol.mWaveExpansion [i] = 1.0f;
|
||||
|
||||
@@ -384,9 +384,9 @@ LLVOSky::LLVOSky(const LLUUID &id, const LLPCode pcode, LLViewerRegion *regionp)
|
||||
mSun.setIntensity(SUN_INTENSITY);
|
||||
mMoon.setIntensity(0.1f * SUN_INTENSITY);
|
||||
|
||||
mSunTexturep = LLViewerTextureManager::getFetchedTexture(gSunTextureID, TRUE, LLGLTexture::BOOST_UI);
|
||||
mSunTexturep = LLViewerTextureManager::getFetchedTexture(gSunTextureID, FTT_DEFAULT, TRUE, LLGLTexture::BOOST_UI);
|
||||
mSunTexturep->setAddressMode(LLTexUnit::TAM_CLAMP);
|
||||
mMoonTexturep = LLViewerTextureManager::getFetchedTexture(gMoonTextureID, TRUE, LLGLTexture::BOOST_UI);
|
||||
mMoonTexturep = LLViewerTextureManager::getFetchedTexture(gMoonTextureID, FTT_DEFAULT, TRUE, LLGLTexture::BOOST_UI);
|
||||
mMoonTexturep->setAddressMode(LLTexUnit::TAM_CLAMP);
|
||||
mBloomTexturep = LLViewerTextureManager::getFetchedTexture(IMG_BLOOM1);
|
||||
mBloomTexturep->setNoDelete() ;
|
||||
@@ -478,9 +478,9 @@ void LLVOSky::restoreGL()
|
||||
{
|
||||
mSkyTex[i].restoreGL();
|
||||
}
|
||||
mSunTexturep = LLViewerTextureManager::getFetchedTexture(gSunTextureID, TRUE, LLGLTexture::BOOST_UI);
|
||||
mSunTexturep = LLViewerTextureManager::getFetchedTexture(gSunTextureID, FTT_DEFAULT, TRUE, LLGLTexture::BOOST_UI);
|
||||
mSunTexturep->setAddressMode(LLTexUnit::TAM_CLAMP);
|
||||
mMoonTexturep = LLViewerTextureManager::getFetchedTexture(gMoonTextureID, TRUE, LLGLTexture::BOOST_UI);
|
||||
mMoonTexturep = LLViewerTextureManager::getFetchedTexture(gMoonTextureID, FTT_DEFAULT, TRUE, LLGLTexture::BOOST_UI);
|
||||
mMoonTexturep->setAddressMode(LLTexUnit::TAM_CLAMP);
|
||||
mBloomTexturep = LLViewerTextureManager::getFetchedTexture(IMG_BLOOM1);
|
||||
mBloomTexturep->setNoDelete() ;
|
||||
|
||||
@@ -337,7 +337,7 @@ U32 LLVOTree::processUpdateMessage(LLMessageSystem *mesgsys,
|
||||
// Load Species-Specific data
|
||||
//
|
||||
static const S32 MAX_TREE_TEXTURE_VIRTUAL_SIZE_RESET_INTERVAL = 32 ; //frames.
|
||||
mTreeImagep = LLViewerTextureManager::getFetchedTexture(sSpeciesTable[mSpecies]->mTextureID, TRUE, LLGLTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE);
|
||||
mTreeImagep = LLViewerTextureManager::getFetchedTexture(sSpeciesTable[mSpecies]->mTextureID, FTT_DEFAULT, TRUE, LLGLTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE);
|
||||
mTreeImagep->setMaxVirtualSizeResetInterval(MAX_TREE_TEXTURE_VIRTUAL_SIZE_RESET_INTERVAL); //allow to wait for at most 16 frames to reset virtual size.
|
||||
|
||||
mBranchLength = sSpeciesTable[mSpecies]->mBranchLength;
|
||||
|
||||
@@ -1006,7 +1006,7 @@ BOOL LLVOVolume::setVolume(const LLVolumeParams ¶ms_in, const S32 detail, bo
|
||||
|
||||
if (is404)
|
||||
{
|
||||
setIcon(LLViewerTextureManager::getFetchedTextureFromFile("inv_item_mesh.tga", TRUE, LLGLTexture::BOOST_UI));
|
||||
setIcon(LLViewerTextureManager::getFetchedTextureFromFile("inv_item_mesh.tga", FTT_LOCAL_FILE, TRUE, LLGLTexture::BOOST_UI));
|
||||
//render prim proxy when mesh loading attempts give up
|
||||
volume_params.setSculptID(LLUUID::null, LL_SCULPT_TYPE_NONE);
|
||||
|
||||
@@ -1090,7 +1090,7 @@ void LLVOVolume::updateSculptTexture()
|
||||
LLUUID id = sculpt_params->getSculptTexture();
|
||||
if (id.notNull())
|
||||
{
|
||||
mSculptTexture = LLViewerTextureManager::getFetchedTexture(id, TRUE, LLGLTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE);
|
||||
mSculptTexture = LLViewerTextureManager::getFetchedTexture(id, FTT_DEFAULT, TRUE, LLGLTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE);
|
||||
}
|
||||
}
|
||||
else
|
||||
|
||||
@@ -104,7 +104,7 @@ void LLSimInfo::setLandForSaleImage (LLUUID image_id)
|
||||
// Fetch the image
|
||||
if (mMapImageID[SIM_LAYER_OVERLAY].notNull())
|
||||
{
|
||||
mLayerImage[SIM_LAYER_OVERLAY] = LLViewerTextureManager::getFetchedTexture(mMapImageID[SIM_LAYER_OVERLAY], MIPMAP_TRUE, LLGLTexture::BOOST_MAP, LLViewerTexture::LOD_TEXTURE);
|
||||
mLayerImage[SIM_LAYER_OVERLAY] = LLViewerTextureManager::getFetchedTexture(mMapImageID[SIM_LAYER_OVERLAY], FTT_DEFAULT, MIPMAP_TRUE, LLGLTexture::BOOST_MAP, LLViewerTexture::LOD_TEXTURE);
|
||||
if (is_aurora) mLayerImage[SIM_LAYER_OVERLAY]->forceImmediateUpdate();
|
||||
mLayerImage[SIM_LAYER_OVERLAY]->setAddressMode(LLTexUnit::TAM_CLAMP);
|
||||
}
|
||||
@@ -119,7 +119,7 @@ LLPointer<LLViewerFetchedTexture> LLSimInfo::getLandForSaleImage ()
|
||||
if (mLayerImage[SIM_LAYER_OVERLAY].isNull() && mMapImageID[SIM_LAYER_OVERLAY].notNull())
|
||||
{
|
||||
// Fetch the image if it hasn't been done yet (unlikely but...)
|
||||
mLayerImage[SIM_LAYER_OVERLAY] = LLViewerTextureManager::getFetchedTexture(mMapImageID[SIM_LAYER_OVERLAY], MIPMAP_TRUE, LLGLTexture::BOOST_MAP, LLViewerTexture::LOD_TEXTURE);
|
||||
mLayerImage[SIM_LAYER_OVERLAY] = LLViewerTextureManager::getFetchedTexture(mMapImageID[SIM_LAYER_OVERLAY], FTT_DEFAULT, MIPMAP_TRUE, LLGLTexture::BOOST_MAP, LLViewerTexture::LOD_TEXTURE);
|
||||
mLayerImage[SIM_LAYER_OVERLAY]->setAddressMode(LLTexUnit::TAM_CLAMP);
|
||||
}
|
||||
if (!mLayerImage[SIM_LAYER_OVERLAY].isNull())
|
||||
@@ -517,7 +517,7 @@ void LLWorldMap::processMapLayerReply(LLMessageSystem* msg, void**)
|
||||
msg->getU32Fast(_PREHASH_LayerData, _PREHASH_Top, top, block);
|
||||
msg->getU32Fast(_PREHASH_LayerData, _PREHASH_Bottom, bottom, block);
|
||||
|
||||
new_layer.LayerImage = LLViewerTextureManager::getFetchedTexture(new_layer.LayerImageID, MIPMAP_TRUE, LLGLTexture::BOOST_MAP, LLViewerTexture::LOD_TEXTURE);
|
||||
new_layer.LayerImage = LLViewerTextureManager::getFetchedTexture(new_layer.LayerImageID, FTT_MAP_TILE, MIPMAP_TRUE, LLGLTexture::BOOST_MAP, LLViewerTexture::LOD_TEXTURE);
|
||||
|
||||
gGL.getTexUnit(0)->bind(new_layer.LayerImage.get());
|
||||
new_layer.LayerImage->setAddressMode(LLTexUnit::TAM_CLAMP);
|
||||
|
||||
@@ -890,7 +890,7 @@ F32 LLWorldMapView::drawLegacySimTile(LLSimInfo& sim_info, S32 left, S32 top, S3
|
||||
(textures_requested_this_tick < MAX_REQUEST_PER_TICK)))
|
||||
{
|
||||
textures_requested_this_tick++;
|
||||
simimage = sim_info.mLayerImage[SIM_LAYER_COMPOSITE] = LLViewerTextureManager::getFetchedTexture(sim_info.mMapImageID[SIM_LAYER_COMPOSITE], MIPMAP_TRUE, LLGLTexture::BOOST_MAP, LLViewerTexture::LOD_TEXTURE);
|
||||
simimage = sim_info.mLayerImage[SIM_LAYER_COMPOSITE] = LLViewerTextureManager::getFetchedTexture(sim_info.mMapImageID[SIM_LAYER_COMPOSITE], FTT_MAP_TILE, MIPMAP_TRUE, LLGLTexture::BOOST_MAP, LLViewerTexture::LOD_TEXTURE);
|
||||
simimage->setAddressMode(LLTexUnit::TAM_CLAMP);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -198,7 +198,7 @@ LLPointer<LLViewerFetchedTexture> LLWorldMipmap::loadObjectsTile(U32 grid_x, U32
|
||||
// END DEBUG
|
||||
//LL_INFOS("World Map") << "LLWorldMipmap::loadObjectsTile(), URL = " << imageurl << LL_ENDL;
|
||||
|
||||
LLPointer<LLViewerFetchedTexture> img = LLViewerTextureManager::getFetchedTextureFromUrl(imageurl, TRUE, LLGLTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE);
|
||||
LLPointer<LLViewerFetchedTexture> img = LLViewerTextureManager::getFetchedTextureFromUrl(imageurl, FTT_MAP_TILE, TRUE, LLGLTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE);
|
||||
img->setBoostLevel(LLGLTexture::BOOST_MAP);
|
||||
|
||||
// Return the smart pointer
|
||||
|
||||
Reference in New Issue
Block a user