void LLVOTextBubble::updateTextures(LLAgent &agent) { // Update the image levels of all textures... // First we do some quick checks. U32 i; // This doesn't take into account whether the object is in front // or behind... LLVector3 position_local = getPositionAgent() - agent.getCameraPositionAgent(); F32 dot_product = position_local * agent.getFrameAgent().getAtAxis(); F32 cos_angle = dot_product / position_local.magVec(); if (cos_angle > 1.f) { cos_angle = 1.f; } for (i = 0; i < getNumTEs(); i++) { const LLTextureEntry *te = getTE(i); F32 texel_area_ratio = fabs(te->mScaleS * te->mScaleT); LLViewerImage *imagep = getTEImage(i); if (imagep) { imagep->addTextureStats(mPixelArea, texel_area_ratio, cos_angle); } } }
void LLViewerImageList::doPrefetchImages() { #if 1 if (LLAppViewer::instance()->getPurgeCache()) { // cache was purged, no point return; } // Pre-fetch textures from last logout LLSD imagelist; std::string filename = gDirUtilp->getExpandedFilename(LL_PATH_PER_SL_ACCOUNT, get_texture_list_name()); llifstream file; file.open(filename); if (file.is_open()) { LLSDSerialize::fromXML(imagelist, file); } for (LLSD::array_iterator iter = imagelist.beginArray(); iter != imagelist.endArray(); ++iter) { LLSD imagesd = *iter; LLUUID uuid = imagesd["uuid"]; S32 pixel_area = imagesd["area"]; LLViewerImage* image = getImage(uuid, MIPMAP_TRUE, FALSE); if (image) { image->addTextureStats((F32)pixel_area); } } #endif }
void LLVOTextBubble::updateTextures() { // Update the image levels of all textures... for (U32 i = 0; i < getNumTEs(); i++) { const LLTextureEntry *te = getTE(i); F32 texel_area_ratio = fabs(te->mScaleS * te->mScaleT); texel_area_ratio = llclamp(texel_area_ratio, .125f, 16.f); LLViewerImage *imagep = getTEImage(i); if (imagep) { imagep->addTextureStats(mPixelArea / texel_area_ratio); } } }