Merge branch 'DirectImageFileOption' of https://github.com/Areloch/Torque3D into development

This commit is contained in:
JeffR 2025-05-30 00:08:29 -05:00
commit 5397c168bc
10 changed files with 65 additions and 149 deletions

View file

@ -289,7 +289,7 @@ StringTableEntry ImageAsset::getAssetIdByFilename(StringTableEntry fileName)
Torque::Path temp1 = temp->getImageFile(); Torque::Path temp1 = temp->getImageFile();
Torque::Path temp2 = fileName; Torque::Path temp2 = fileName;
if (temp1.getFileName() == temp2.getFileName()) if (temp1.getPath() == temp2.getPath() && temp1.getFileName() == temp2.getFileName())
{ {
return imgAsset; return imgAsset;
} }

View file

@ -244,7 +244,8 @@ DefineEnumType(ImageAssetType);
#define DECLARE_IMAGEASSET(className, name, profile) \ #define DECLARE_IMAGEASSET(className, name, profile) \
private: \ private: \
AssetPtr<ImageAsset> m##name##Asset; \ AssetPtr<ImageAsset> m##name##Asset;\
String m##name##File;\
public: \ public: \
void _set##name(StringTableEntry _in){ \ void _set##name(StringTableEntry _in){ \
if(m##name##Asset.getAssetId() == _in) \ if(m##name##Asset.getAssetId() == _in) \
@ -263,7 +264,7 @@ public:
{ \ { \
imageAssetId = query.mAssetList[0]; \ imageAssetId = query.mAssetList[0]; \
} \ } \
else if(Torque::FS::IsFile(_in) || (_in[0] == '$' || _in[0] == '#')) \ else if(Torque::FS::IsFile(_in) || (_in[0] == '$' || _in[0] == '#')) \
{ \ { \
imageAssetId = ImageAsset::getAssetIdByFilename(_in); \ imageAssetId = ImageAsset::getAssetIdByFilename(_in); \
if (imageAssetId == ImageAsset::smNoImageAssetFallback) \ if (imageAssetId == ImageAsset::smNoImageAssetFallback) \
@ -296,6 +297,7 @@ public:
#define DECLARE_IMAGEASSET_NET(className, name, profile, mask) \ #define DECLARE_IMAGEASSET_NET(className, name, profile, mask) \
private: \ private: \
AssetPtr<ImageAsset> m##name##Asset; \ AssetPtr<ImageAsset> m##name##Asset; \
String m##name##File;\
public: \ public: \
void _set##name(StringTableEntry _in){ \ void _set##name(StringTableEntry _in){ \
if(m##name##Asset.getAssetId() == _in) \ if(m##name##Asset.getAssetId() == _in) \
@ -347,12 +349,14 @@ public:
#define INITPERSISTFIELD_IMAGEASSET(name, consoleClass, docs) \ #define INITPERSISTFIELD_IMAGEASSET(name, consoleClass, docs) \
addProtectedField(assetText(name, Asset), TypeImageAssetPtr, Offset(m##name##Asset, consoleClass), _set##name##Data, &defaultProtectedGetFn, assetDoc(name, asset docs.)); addProtectedField(assetText(name, Asset), TypeImageAssetPtr, Offset(m##name##Asset, consoleClass), _set##name##Data, &defaultProtectedGetFn, assetDoc(name, asset docs.)); \
addProtectedField(assetText(name, File), TypeFilename, Offset(m##name##File, consoleClass), _set##name##Data, &defaultProtectedGetFn, assetDoc(name, file docs.));
#define DECLARE_IMAGEASSET_ARRAY(className, name, profile, max) \ #define DECLARE_IMAGEASSET_ARRAY(className, name, profile, max) \
private: \ private: \
AssetPtr<ImageAsset> m##name##Asset[max]; \ AssetPtr<ImageAsset> m##name##Asset[max]; \
String m##name##File[max];\
public: \ public: \
void _set##name(StringTableEntry _in, const U32& index){ \ void _set##name(StringTableEntry _in, const U32& index){ \
if(m##name##Asset[index].getAssetId() == _in) \ if(m##name##Asset[index].getAssetId() == _in) \
@ -405,6 +409,7 @@ public:
#define DECLARE_IMAGEASSET_ARRAY_NET(className, name, profile, max, mask) \ #define DECLARE_IMAGEASSET_ARRAY_NET(className, name, profile, max, mask) \
private: \ private: \
AssetPtr<ImageAsset> m##name##Asset[max]; \ AssetPtr<ImageAsset> m##name##Asset[max]; \
String m##name##File[max];\
public: \ public: \
void _set##name(StringTableEntry _in, const U32& index){ \ void _set##name(StringTableEntry _in, const U32& index){ \
if(m##name##Asset[index].getAssetId() == _in) \ if(m##name##Asset[index].getAssetId() == _in) \

View file

@ -626,28 +626,13 @@ const char* ShapeAsset::generateCachedPreviewImage(S32 resolution, String overri
delete imposterCap; delete imposterCap;
delete shape; delete shape;
String dumpPath = String(mFilePath) + "_Preview.dds"; String dumpPath = String(mFilePath) + ".png";
char* returnBuffer = Con::getReturnBuffer(128); char* returnBuffer = Con::getReturnBuffer(128);
dSprintf(returnBuffer, 128, "%s", dumpPath.c_str()); dSprintf(returnBuffer, 128, "%s", dumpPath.c_str());
/*FileStream stream; imposter->writeBitmap("png", dumpPath);
if (stream.open(dumpPath, Torque::FS::File::Write))
destBmp.writeBitmap("png", stream);
stream.close();*/
DDSFile* ddsDest = DDSFile::createDDSFileFromGBitmap(imposter);
ImageUtil::ddsCompress(ddsDest, GFXFormatBC2);
// Finally save the imposters to disk.
FileStream fs;
if (fs.open(returnBuffer, Torque::FS::File::Write))
{
ddsDest->write(fs);
fs.close();
}
delete ddsDest;
delete imposter; delete imposter;
delete imposterNrml; delete imposterNrml;

View file

@ -118,7 +118,11 @@ class GuiBitmapButtonCtrl : public GuiButtonCtrl, protected AssetPtrCallback
/// ///
BitmapMode mBitmapMode; BitmapMode mBitmapMode;
private: AssetPtr<ImageAsset> mBitmapAsset; public: void _setBitmap(StringTableEntry _in) { private:
AssetPtr<ImageAsset> mBitmapAsset;
String mBitmapFile;
public:
void _setBitmap(StringTableEntry _in) {
if (mBitmapAsset.getAssetId() == _in) return; if (!AssetDatabase.isDeclaredAsset(_in)) { if (mBitmapAsset.getAssetId() == _in) return; if (!AssetDatabase.isDeclaredAsset(_in)) {
StringTableEntry imageAssetId = ImageAsset::smNoImageAssetFallback; AssetQuery query; S32 foundAssetcount = AssetDatabase.findAssetLooseFile(&query, _in); if (foundAssetcount != 0) { StringTableEntry imageAssetId = ImageAsset::smNoImageAssetFallback; AssetQuery query; S32 foundAssetcount = AssetDatabase.findAssetLooseFile(&query, _in); if (foundAssetcount != 0) {
imageAssetId = query.mAssetList[0]; imageAssetId = query.mAssetList[0];

View file

@ -121,7 +121,7 @@ void GuiBitmapCtrl::setBitmap(const char* name, bool resize)
if (assetId != StringTable->EmptyString()) if (assetId != StringTable->EmptyString())
_setBitmap(assetId); _setBitmap(assetId);
else else
return; _setBitmap(name);
} }
mBitmap = mBitmapAsset->getTexture(&GFXDefaultGUIProfile); mBitmap = mBitmapAsset->getTexture(&GFXDefaultGUIProfile);

View file

@ -740,7 +740,7 @@ function AssetBrowser::buildAssetPreview( %this, %asset, %moduleName )
%previewButton.assetType = %assetType; %previewButton.assetType = %assetType;
%previewButton.assetBrowser = %this; %previewButton.assetBrowser = %this;
%previewButton.bitmapAsset = %this.previewData.previewImage; %previewButton.setBitmap(%this.previewData.previewImage);
%previewButton.profile = "AssetBrowserPreview" @ %previewButton.assetType; %previewButton.profile = "AssetBrowserPreview" @ %previewButton.assetType;
%previewButton.tooltip = %this.previewData.tooltip; %previewButton.tooltip = %this.previewData.tooltip;
@ -789,21 +789,15 @@ function AssetBrowser::doRefresh(%this)
function AssetBrowser::populatePreviewImages(%this) function AssetBrowser::populatePreviewImages(%this)
{ {
if (AssetPreviewArray.count()>0)
echo("AssetBrowser::populatePreviewImages() - Previews to generate: " @ AssetPreviewArray.count());
for(%i=0; %i < AssetPreviewArray.count(); %i++) for(%i=0; %i < AssetPreviewArray.count(); %i++)
{ {
%previewButton = AssetPreviewArray.getKey(%i); %previewButton = AssetPreviewArray.getKey(%i);
%assetType = %previewButton.assetType; %assetType = %previewButton.assetType;
echo(" - Generating preview for asset: " @ %previewButton.moduleName @ ":" @ %previewButton.assetName);
%this.callAssetTypeFunc(%assetType, "generatePreviewImage", %previewButton.moduleName, %previewButton.assetName, %previewButton); %this.callAssetTypeFunc(%assetType, "generatePreviewImage", %previewButton.moduleName, %previewButton.assetName, %previewButton);
AssetPreviewArray.erase(%i); AssetPreviewArray.erase(%i);
echo(" - done, scheduling another pass");
%this.schedule(32, "populatePreviewImages"); %this.schedule(32, "populatePreviewImages");
return; return;
} }
@ -2764,12 +2758,13 @@ function getAssetPreviewImage(%asset)
{ {
%moduleName = AssetDatabase.getAssetModule(%asset).ModuleId; %moduleName = AssetDatabase.getAssetModule(%asset).ModuleId;
%assetName = AssetDatabase.getAssetName(%asset); %assetName = AssetDatabase.getAssetName(%asset);
%previewAssetName = "ToolsModule:" @ %moduleName @ "_" @ %assetName @ "_PreviewImage";
if(AssetDatabase.isDeclaredAsset(%previewAssetName)) %previewPath = "tools/resources/previewCache/" @ %moduleName @ "/";
%previewFilePath = %previewPath @ %assetName @ ".png";
if(isFile(%previewFilePath))
{ {
%previewDef = AssetDatabase.acquireAsset(%previewAssetName); %previewPath = %previewFilePath;
%previewPath = %previewDef.getImagePath();
AssetDatabase.releaseAsset(%previewAssetName);
} }
else else
{ {
@ -2783,7 +2778,7 @@ function getAssetPreviewImage(%asset)
if(%previewPath $= "") if(%previewPath $= "")
%previewPath = "ToolsModule:unknownImage_image"; %previewPath = "ToolsModule:unknownImage_image";
return %previewPath; return %previewPath;
} }

View file

@ -4,7 +4,17 @@ function ImageAsset::buildBrowserElement(%this, %previewData)
{ {
//%module = %this.dirHandler.getModuleFromAddress(makeRelativePath(filePath(%assetDef.getImagePath()))); //%module = %this.dirHandler.getModuleFromAddress(makeRelativePath(filePath(%assetDef.getImagePath())));
%previewData.previewImage = %this.isNamedTarget() ? "Core_Rendering:namedTarget_image" : "ToolsModule:genericAssetIcon_image"; if( %this.isNamedTarget())
%previewImage = "Core_Rendering:namedTarget_image";
else
{
%previewImage = getAssetPreviewImage(%this.getAssetId());
if(!isFile(%previewImage))
%previewImage = "ToolsModule:genericAssetIcon_image";
}
%previewData.previewImage = %previewImage;
%previewData.previewLoaded = %this.isNamedTarget() ? true : false;//this marks it for loading progressively later %previewData.previewLoaded = %this.isNamedTarget() ? true : false;//this marks it for loading progressively later
%previewData.assetName = %this.assetName; %previewData.assetName = %this.assetName;
@ -39,55 +49,21 @@ function ImageAsset::generatePreviewImage(%this, %previewButton, %forceRegenerat
$CurrentAssetBrowser.dirHandler.createFolder(%previewPath); $CurrentAssetBrowser.dirHandler.createFolder(%previewPath);
} }
%previewFilePath = %previewPath @ %this.assetName @ "_Preview.png"; %previewFilePath = %previewPath @ %this.assetName @ ".png";
if(!isFile(%previewFilePath) || (compareFileTimes(%this.getImagePath(), %previewFilePath) == 1)) if(!isFile(%previewFilePath) || (compareFileTimes(%this.getImagePath(), %previewFilePath) == 1))
{ {
%generatePreview = true; %generatePreview = true;
} }
%previewAssetName = %previewButton.moduleName @ "_" @ %this.assetName @ "_PreviewImage";
if(%generatePreview || %forceRegenerate) if(%generatePreview || %forceRegenerate)
{ {
%success = saveScaledImage(%this.getImagePath(), %previewFilePath, EditorSettings.value("Assets/Browser/PreviewImageSize")); %success = saveScaledImage(%this.getImagePath(), %previewFilePath, EditorSettings.value("Assets/Browser/PreviewImageSize"));
if(%success) if(%success)
{ %previewButton.setBitmap(%previewFilePath);
if(!AssetDatabase.isDeclaredAsset("ToolsModule:" @ %previewAssetName))
{ return %success;
%previewAsset = new ImageAsset()
{
assetName = %previewAssetName;
versionId = 1;
imageFile = makeFullPath(%previewFilePath);
};
%previewAssetName = "ToolsModule:" @ %previewAssetName;
%previewImgAssetPath = %previewPath @ %previewAsset.assetName @ ".asset.taml";
%assetImportSuccessful = TAMLWrite(%previewAsset, %previewImgAssetPath);
%toolsModuleDef = ModuleDatabase.findModule("ToolsModule",1);
%success = AssetDatabase.addDeclaredAsset(%toolsModuleDef, %previewImgAssetPath);
if(!%success)
{
return false; //failed to register the preview image for some reason?
}
}
%previewButton.bitmapAsset = %previewAssetName;
return true;
}
}
else
{
//just map the existing one then
if(AssetDatabase.isDeclaredAsset("ToolsModule:" @ %previewAssetName))
{
%previewButton.bitmapAsset = "ToolsModule:" @ %previewAssetName;
return true;
}
} }
return false; return false;

View file

@ -64,7 +64,10 @@ function AssetBrowser::renameMaterialAsset(%this, %assetDef, %newAssetName)
function MaterialAsset::buildBrowserElement(%this, %previewData) function MaterialAsset::buildBrowserElement(%this, %previewData)
{ {
%previewData.previewImage = "ToolsModule:genericAssetIcon_image"; %previewImage = getAssetPreviewImage(%this.getAssetId());
%previewData.previewImage = isFile(%previewImage) ? %previewImage : "ToolsModule:genericAssetIcon_image";
%previewData.previewLoaded = false; //this marks it for loading progressively later %previewData.previewLoaded = false; //this marks it for loading progressively later
%previewData.assetName = %this.assetName; %previewData.assetName = %this.assetName;
@ -108,7 +111,7 @@ function MaterialAsset::generatePreviewImage(%this, %previewButton, %forceRegene
%generatePreview = false; %generatePreview = false;
%previewFilePath = %previewPath @ %this.assetName @ "_Preview.dds"; %previewFilePath = %previewPath @ %this.assetName @ ".png";
if(!isFile(%previewFilePath)) if(!isFile(%previewFilePath))
{ {
%generatePreview = true; %generatePreview = true;
@ -123,8 +126,6 @@ function MaterialAsset::generatePreviewImage(%this, %previewButton, %forceRegene
} }
} }
%previewAssetName = %module.moduleId @ "_" @ %this.assetName @ "_PreviewImage";
if(%generatePreview || %forceRegenerate) if(%generatePreview || %forceRegenerate)
{ {
if(isObject(%this.materialDefinitionName)) if(isObject(%this.materialDefinitionName))
@ -142,39 +143,13 @@ function MaterialAsset::generatePreviewImage(%this, %previewButton, %forceRegene
pathCopy(%generatedFilePath, %previewFilePath, false); pathCopy(%generatedFilePath, %previewFilePath, false);
fileDelete(%generatedFilePath); fileDelete(%generatedFilePath);
if(!AssetDatabase.isDeclaredAsset("ToolsModule:" @ %previewAssetName)) if(isFile(%previewFilePath))
{ {
%previewAsset = new ImageAsset() %previewButton.setBitmap(%previewFilePath);
{ return true;
assetName = %previewAssetName;
versionId = 1;
imageFile = makeFullPath(%previewFilePath);
};
%previewImgAssetPath = %previewPath @ %previewAsset.assetName @ ".asset.taml";
%assetImportSuccessful = TAMLWrite(%previewAsset, %previewImgAssetPath);
%toolsModuleDef = ModuleDatabase.findModule("ToolsModule",1);
%success = AssetDatabase.addDeclaredAsset(%toolsModuleDef, %previewImgAssetPath);
if(!%success)
{
return false; //failed to register the preview image for some reason?
}
} }
%previewButton.bitmapAsset = "ToolsModule:" @ %previewAssetName; return false;
return true;
}
}
else
{
//just map the existing one then
if(AssetDatabase.isDeclaredAsset("ToolsModule:" @ %previewAssetName))
{
%previewButton.bitmapAsset = "ToolsModule:" @ %previewAssetName;
return true;
} }
} }

View file

@ -28,7 +28,7 @@ function ShapeAsset::onDelete(%this)
{ {
//Special handle the cache preview image //Special handle the cache preview image
%module = $CurrentAssetBrowser.dirHandler.getModuleFromAddress(makeRelativePath(filePath(%this.getShapePath()))); %module = $CurrentAssetBrowser.dirHandler.getModuleFromAddress(makeRelativePath(filePath(%this.getShapePath())));
%previewPath = "tools/resources/previewCache/" @ %module.moduleId @ "/" @ %this.assetName @ "_Preview.dds"; %previewPath = "tools/resources/previewCache/" @ %module.moduleId @ "/" @ %this.assetName @ ".dds";
if(isFile(%previewPath)) if(isFile(%previewPath))
{ {
@ -41,7 +41,9 @@ function ShapeAsset::onDelete(%this)
function ShapeAsset::buildBrowserElement(%this, %previewData) function ShapeAsset::buildBrowserElement(%this, %previewData)
{ {
%previewData.previewImage = "ToolsModule:genericAssetIcon_image"; %previewImage = getAssetPreviewImage(%this.getAssetId());
%previewData.previewImage = isFile(%previewImage) ? %previewImage : "ToolsModule:genericAssetIcon_image";
%previewData.previewLoaded = false; //this marks it for loading progressively later %previewData.previewLoaded = false; //this marks it for loading progressively later
%previewData.assetName = %this.assetName; %previewData.assetName = %this.assetName;
@ -88,18 +90,15 @@ function ShapeAsset::generatePreviewImage(%this, %previewButton, %forceRegenerat
%generatePreview = false; %generatePreview = false;
%previewFilePath = %previewPath @ %this.assetName @ "_Preview.dds"; %previewFilePath = %previewPath @ %this.assetName @ ".png";
if(!isFile(%previewFilePath) || (compareFileTimes(%this.getShapePath(), %previewFilePath) == 1)) if(!isFile(%previewFilePath) || (compareFileTimes(%this.getShapePath(), %previewFilePath) == 1))
{ {
%generatePreview = true; %generatePreview = true;
} }
%previewAssetName = %module.moduleId @ "_" @ %this.assetName @ "_PreviewImage";
if(%generatePreview || %forceRegenerate) if(%generatePreview || %forceRegenerate)
{ {
//real fast, we'll be 100% sure that the image resource we need is loaded //real fast, we'll be 100% sure that the image resource we need is loaded
%matSlot0AssetId = %this.materialSlot0; %matSlot0AssetId = %this.materialSlot0;
if(AssetDatabase.isDeclaredAsset(%matSlot0AssetId)) if(AssetDatabase.isDeclaredAsset(%matSlot0AssetId))
{ {
@ -115,39 +114,13 @@ function ShapeAsset::generatePreviewImage(%this, %previewButton, %forceRegenerat
pathCopy(%filePath, %previewFilePath, false); pathCopy(%filePath, %previewFilePath, false);
fileDelete(%filePath); //cleanup fileDelete(%filePath); //cleanup
if(!AssetDatabase.isDeclaredAsset("ToolsModule:" @ %previewAssetName)) if(isFile(%previewFilePath))
{ {
%previewAsset = new ImageAsset() %previewButton.setBitmap(%previewFilePath);
{
assetName = %previewAssetName;
versionId = 1;
imageFile = makeFullPath(%previewFilePath);
};
%previewImgAssetPath = %previewPath @ %previewAsset.assetName @ ".asset.taml";
%assetImportSuccessful = TAMLWrite(%previewAsset, %previewImgAssetPath);
%toolsModuleDef = ModuleDatabase.findModule("ToolsModule",1);
%success = AssetDatabase.addDeclaredAsset(%toolsModuleDef, %previewImgAssetPath);
if(!%success)
{
return false; //failed to register the preview image for some reason?
}
}
%previewButton.bitmapAsset = "ToolsModule:" @ %previewAssetName;
return true;
}
else
{
//just map the existing one then
if(AssetDatabase.isDeclaredAsset("ToolsModule:" @ %previewAssetName))
{
%previewButton.bitmapAsset = "ToolsModule:" @ %previewAssetName;
return true; return true;
} }
return false;
} }
return false; return false;

View file

@ -40,6 +40,9 @@ function directoryHandler::loadFolders(%this, %path, %parentId)
if(%parentName $= "Data" && (%folderName $= "shaderCache" || %folderName $= "cache")) if(%parentName $= "Data" && (%folderName $= "shaderCache" || %folderName $= "cache"))
continue; continue;
if(%folderName $= "previewCache")
continue;
if(%folderName $= ".git") if(%folderName $= ".git")
continue; continue;