/
redgpu
/
ezEngine
Обзор
Документация
Войти
/
redgpu
/
ezEngine
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
dev
Code/EditorPlugins/Assets/EditorPluginAssets/ImageDataAsset/ImageDataAsset.cpp
134 строки
4 KB
Sanakan8472
AssetProcessor timeline widget (#1769)
17 янв 2026, 16:08
Не верифицирован
17 янв 2026, 16:08
e6fbaf3
Код
Авторство
О чём код?
#include <EditorPluginAssets/EditorPluginAssetsPCH.h> #include <EditorFramework/Assets/AssetCurator.h> #include <EditorPluginAssets/ImageDataAsset/ImageDataAsset.h> // clang-format off EZ_BEGIN_DYNAMIC_REFLECTED_TYPE(ezImageDataAssetDocument, 1, ezRTTINoAllocator) EZ_END_DYNAMIC_REFLECTED_TYPE; // clang-format on ezImageDataAssetDocument::ezImageDataAssetDocument(ezStringView sDocumentPath) : ezSimpleAssetDocument<ezImageDataAssetProperties>(sDocumentPath, ezAssetDocEngineConnection::None) { } ezTransformStatus ezImageDataAssetDocument::InternalTransformAsset(const char* szTargetFile, ezStringView sOutputTag, const ezPlatformProfile* pAssetProfile, const ezAssetFileHeader& AssetHeader, ezBitflags<ezTransformFlags> transformFlags) { const bool bUpdateThumbnail = pAssetProfile == ezAssetCurator::GetSingleton()->GetDevelopmentAssetProfile(); ezStatus result = RunTexConv(szTargetFile, AssetHeader, bUpdateThumbnail); ezFileStats stat; if (ezOSFile::GetFileStats(szTargetFile, stat).Succeeded() && stat.m_uiFileSize == 0) { // if the file was touched, but nothing written to it, delete the file // might happen if TexConv crashed or had an error ezOSFile::DeleteFile(szTargetFile).IgnoreResult(); result = ezStatus(ezFmt("File does not exist: {}", szTargetFile)); } if (result.Succeeded()) { ezImageDataAssetEvent e; e.m_Type = ezImageDataAssetEvent::Type::Transformed; m_Events.Broadcast(e); } return result; } ezStatus ezImageDataAssetDocument::RunTexConv(const char* szTargetFile, const ezAssetFileHeader& AssetHeader, bool bUpdateThumbnail) { const ezImageDataAssetProperties* pProp = GetProperties(); QStringList arguments; ezStringBuilder temp; // Asset Version { arguments << "-assetVersion"; arguments << ezConversionUtils::ToString(AssetHeader.GetFileVersion(), temp).GetData(); } // Asset Hash { const ezUInt64 uiHash64 = AssetHeader.GetFileHash(); const ezUInt32 uiHashLow32 = uiHash64 & 0xFFFFFFFF; const ezUInt32 uiHashHigh32 = (uiHash64 >> 32) & 0xFFFFFFFF; temp.SetFormat("{0}", ezArgU(uiHashLow32, 8, true, 16, true)); arguments << "-assetHashLow"; arguments << temp.GetData(); temp.SetFormat("{0}", ezArgU(uiHashHigh32, 8, true, 16, true)); arguments << "-assetHashHigh"; arguments << temp.GetData(); } arguments << "-out"; arguments << szTargetFile; const ezStringBuilder sThumbnail = GetThumbnailFilePath(); if (bUpdateThumbnail) { // Thumbnail const ezStringBuilder sDir = sThumbnail.GetFileDirectory(); ezOSFile::CreateDirectoryStructure(sDir).IgnoreResult(); arguments << "-thumbnailRes"; arguments << "256"; arguments << "-thumbnailOut"; arguments << QString::fromUtf8(sThumbnail.GetData()); } arguments << "-mipmaps"; arguments << "None"; arguments << "-type"; arguments << "2D"; arguments << "-compression"; arguments << "None"; arguments << "-usage"; arguments << "Linear"; // arguments << "-maxRes" << QString::number(pAssetConfig->m_uiMaxResolution); { arguments << "-in0"; ezStringBuilder sPath = pProp->m_sInputFile; sPath.MakeCleanPath(); if (!sPath.IsAbsolutePath()) { ezQtEditorApp::GetSingleton()->MakeDataDirectoryRelativePathAbsolute(sPath); } arguments << QString(sPath.GetData()); } arguments << "-rgba"; arguments << "in0.rgba"; EZ_SUCCEED_OR_RETURN(ezQtEditorApp::GetSingleton()->ExecuteTool("ezTexConv", arguments, 180, ezLog::GetThreadLocalLogSystem())); if (bUpdateThumbnail) { ezUInt64 uiThumbnailHash = ezAssetCurator::GetSingleton()->GetAssetThumbnailHash(GetGuid()); EZ_ASSERT_DEV(uiThumbnailHash != 0, "Thumbnail hash should never be zero when reaching this point!"); ThumbnailInfo thumbnailInfo; thumbnailInfo.SetFileHashAndVersion(uiThumbnailHash, GetAssetTypeVersion()); AppendThumbnailInfo(sThumbnail, thumbnailInfo); InvalidateAssetThumbnail(); } return ezStatus(EZ_SUCCESS); }