iTextureCube* iResLoader::loadTextureCube(dArrayT<dString*>* filePaths, const dArrayT<dDictT<dValue*, dString*>*>* pvrtcParams) { CL_THROW_IF_NIL(filePaths); CL_THROW_IF_TRUE(filePaths->count() != kCubeSideCount); typedef dDictT<dValue*, dString*> PvrtcData; dobj_ptr<dArrayT<iTextureData*> > texData(CL_NEW(dArrayT<iTextureData*>)); for (dUInteger i = 0, cnt = filePaths->count(); i < cnt; ++i) { PvrtcData* pvrtc = nil; if (pvrtcParams && pvrtcParams->count() > i) pvrtc = pvrtcParams->objectAtIndex(i); pvrtc = (CL_NULL(PvrtcData) != pvrtc) ? pvrtc : nil; texData->addObject(_texDataFromPath(filePaths->objectAtIndex(i), pvrtc)); } return iTextureCube::alloc()->initWithTextureDataArray(texData.get())->autorelease(); }
DiTexturePtr DiK2Configs::GetTexture(const DiString& relPath) { DiString baseName = relPath.ExtractFileName(); if (baseName.empty() || baseName[0] == '$') return DiK2Configs::GetSpecialTexture(baseName); DiTexturePtr ret = DiAssetManager::GetInstance().FindAsset<DiTexture>(relPath); if (ret) return ret; bool needprefix = !TEXTURE_PACK_PREFIX_FOLDER.empty(); if(DiString::StartsWith(relPath, TEXTURE_PACK_PREFIX_FOLDER)) { needprefix = false; } DiString full = GetK2MediaPath(relPath, true); if(full.empty()) { DI_WARNING("Empty texture file!, using default texture instead"); return DiTexture::GetDefaultTexture(); } #if 0 if (TEXTURE_PACK && full[0] != '\\' && full[0] != '/') { full = "/"+full; } #endif DiString tgaExt = ".tga"; #if DEMI_PLATFORM == DEMI_PLATFORM_IOS DiString compExt = ".pvr"; #else DiString compExt = ".dds"; #endif DiString tgaFile = full + tgaExt; DiString ddsFile = full + compExt; bool useTga = false; if (TEXTURE_PACK) { DiDataStreamPtr data; /// TODO read the descriptor file if(needprefix) { tgaFile = DiK2Configs::TEXTURE_PACK_PREFIX_FOLDER + tgaFile; ddsFile = DiK2Configs::TEXTURE_PACK_PREFIX_FOLDER + ddsFile; } if (TEXTURE_PACK->HasFile(ddsFile)) data = TEXTURE_PACK->Open(ddsFile); else { data = TEXTURE_PACK->Open(tgaFile); useTga = true; } if (!data) { DI_WARNING("Cannot open the texture file: %s, using default texture", ddsFile.c_str()); return DiTexture::GetDefaultTexture(); } #ifdef _K2_RECORD_USED_RESOURCE sUsedResources.insert(relPath + (useTga ? tgaExt : compExt)); #endif ret = DiAssetManager::GetInstance().CreateOrReplaceAsset<DiTexture>(relPath); ret->Load(data); return ret; } else { FILE* fp = nullptr; // try dds fp = fopen(ddsFile.c_str(), "rb"); // try tga if (!fp) { fp = fopen(tgaFile.c_str(), "rb"); useTga = true; } if (!fp) { DI_WARNING("Cannot open the texture file: %s, using default texture", ddsFile.c_str()); return DiTexture::GetDefaultTexture(); } #ifdef _K2_RECORD_USED_RESOURCE sUsedResources.insert(relPath + (useTga ? tgaExt : compExt)); #endif DiDataStreamPtr texData(DI_NEW DiFileHandleDataStream(relPath, fp)); ret = DiAssetManager::GetInstance().CreateOrReplaceAsset<DiTexture>(relPath); ret->Load(texData); return ret; } }