DAVA::uint32 TextureHelper::EnumerateSceneTexturesFileSize(DAVA::Scene* scene, const String& scenePath) { Map<String, Texture *> textureMap; EnumerateTextures(scene, textureMap); String projectPath = scenePath; uint32 sceneTextureFilesSize = 0; for(Map<String, Texture *>::const_iterator it = textureMap.begin(); it != textureMap.end(); ++it) { Texture *t = it->second; if(String::npos == t->GetPathname().find(projectPath)) { // skip all textures that are not related the scene continue; } if(String::npos != t->GetPathname().find(projectPath)) { //We need real info about textures size. In Editor on desktop pvr textures are decompressed to RGBA8888, so they have not real size. String imageFileName = TextureDescriptor::GetPathnameForFormat(t->GetPathname(), t->GetSourceFileFormat()); File * textureFile = File::Create(imageFileName, File::OPEN | File::READ); sceneTextureFilesSize += textureFile->GetSize(); SafeRelease(textureFile); } } return sceneTextureFilesSize; }
DAVA::uint32 TextureHelper::EnumerateSceneTexturesFileSize(DAVA::Scene* scene) { Map<String, Texture *> textureMap; EnumerateTextures(scene, textureMap); uint32 sceneTextureFilesSize = 0; for(Map<String, Texture *>::const_iterator it = textureMap.begin(); it != textureMap.end(); ++it) { Texture *t = it->second; TextureDescriptor *descriptor = TextureDescriptor::CreateFromFile(t->GetPathname()); if(descriptor) { FilePath imageFileName = GPUFamilyDescriptor::CreatePathnameForGPU(descriptor, (eGPUFamily)descriptor->exportedAsGpuFamily); File * textureFile = File::Create(imageFileName, File::OPEN | File::READ); if(textureFile) { sceneTextureFilesSize += textureFile->GetSize(); textureFile->Release(); } delete descriptor; } } return sceneTextureFilesSize; }
uint32 TextureHelper::EnumerateSceneTextures(DAVA::Scene* scene) { Map<String, Texture *> textureMap; EnumerateTextures(scene, textureMap); uint32 sceneTextureMemory = 0; for(Map<String, Texture *>::const_iterator it = textureMap.begin(); it != textureMap.end(); ++it) { Texture *t = it->second; //We need real info about textures size. In Editor on desktop pvr textures are decompressed to RGBA8888, so they have not real size. TextureDescriptor *descriptor = TextureDescriptor::CreateFromFile(t->GetPathname()); if(descriptor) { FilePath imageFileName = GPUFamilyDescriptor::CreatePathnameForGPU(descriptor, (eGPUFamily)descriptor->exportedAsGpuFamily); if(imageFileName.IsEqualToExtension(".pvr")) { sceneTextureMemory += LibPVRHelper::GetDataSize(imageFileName); } else if(imageFileName.IsEqualToExtension(".dds")) { sceneTextureMemory += LibDxtHelper::GetDataSize(imageFileName); } else { sceneTextureMemory += t->GetDataSize(); } delete descriptor; } } return sceneTextureMemory; }
uint32 TextureHelper::EnumerateSceneTextures(DAVA::Scene* scene, const String& scenePath) { Map<String, Texture *> textureMap; EnumerateTextures(scene, textureMap); String projectPath = scenePath; uint32 sceneTextureMemory = 0; for(Map<String, Texture *>::const_iterator it = textureMap.begin(); it != textureMap.end(); ++it) { Texture *t = it->second; if(String::npos == t->GetPathname().find(projectPath)) { // skip all textures that are not related the scene continue; } if(String::npos != t->GetPathname().find(projectPath)) { //We need real info about textures size. In Editor on desktop pvr textures are decompressed to RGBA8888, so they have not real size. String imageFileName = TextureDescriptor::GetPathnameForFormat(t->GetPathname(), t->GetSourceFileFormat()); switch (t->GetSourceFileFormat()) { case DAVA::PVR_FILE: { sceneTextureMemory += LibPVRHelper::GetDataLength(imageFileName); break; } case DAVA::DXT_FILE: { sceneTextureMemory += (int32)LibDxtHelper::GetDataSize(imageFileName); break; } default: sceneTextureMemory += t->GetDataSize(); break; } } } return sceneTextureMemory; }
void TextureHelper::EnumerateTextures(DAVA::Entity *forNode, Map<String, Texture *> &textures) { if(!forNode) return; Vector<Entity *> nodes; forNode->GetChildNodes(nodes); nodes.push_back(forNode); for(int32 n = 0; n < (int32)nodes.size(); ++n) { RenderComponent *rc = static_cast<RenderComponent *>(nodes[n]->GetComponent(Component::RENDER_COMPONENT)); if(!rc) continue; RenderObject *ro = rc->GetRenderObject(); if(!ro) continue; uint32 count = ro->GetRenderBatchCount(); for(uint32 b = 0; b < count; ++b) { RenderBatch *renderBatch = ro->GetRenderBatch(b); NMaterial *material = renderBatch->GetMaterial(); if(material) { for(int32 t = 0; t < material->GetTextureCount(); ++t) { Texture* tx = material->GetTexture(t); CollectTexture(textures, tx->GetPathname(), tx); } } /*InstanceMaterialState *instanceMaterial = renderBatch->GetMaterialInstance(); if(instanceMaterial) { CollectTexture(textures, instanceMaterial->GetLightmapName(), instanceMaterial->GetLightmap()); }*/ } Landscape *land = dynamic_cast<Landscape *>(ro); if(land) { CollectLandscapeTextures(textures, land); } } }
void LandscapeEditorHeightmap::CreateTilemaskImage() { SafeRelease(tilemaskImage); SafeRelease(toolImageTile); SafeRelease(tilemaskTexture); tilemaskWasChanged = false; prevToolSize = -1; copyFromCenter = Vector2(-1.0f, -1.0f); copyToCenter = Vector2(-1.0f, -1.0f); Texture *mask = workingLandscape->GetTexture(Landscape::TEXTURE_TILE_MASK); if(mask) { tilemaskPathname = mask->GetPathname(); tilemaskImage = CreateTopLevelImage(TextureDescriptor::GetPathnameForFormat(tilemaskPathname, (ImageFileFormat)EditorSettings::Instance()->GetTextureViewFileFormat())); tilemaskTexture = Texture::CreateFromData(tilemaskImage->format, tilemaskImage->GetData(), tilemaskImage->GetWidth(), tilemaskImage->GetHeight(), false); } workingLandscape->SetTexture(Landscape::TEXTURE_TILE_MASK, tilemaskTexture); workingLandscape->UpdateFullTiledTexture(); }