Browse Source

Reimplements ability to utilize direct file load alongside ImageAsset fields when utilizing the ImageAsset macros
Updates Asset Browser generated preview images to not utilize full assets, but just the preview image files themselves

JeffR 4 months ago
parent
commit
0fa8b97f91

+ 8 - 3
Engine/source/T3D/assets/ImageAsset.h

@@ -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))                                                                                                                                     \
          {                                                                                                                                                                    \
          {                                                                                                                                                                    \
             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)                                                                                                                           \

+ 5 - 1
Engine/source/gui/buttons/guiBitmapButtonCtrl.h

@@ -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];

+ 1 - 1
Engine/source/gui/controls/guiBitmapCtrl.cpp

@@ -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);

+ 8 - 13
Templates/BaseGame/game/tools/assetBrowser/scripts/assetBrowser.tscript

@@ -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 = %previewDef.getImagePath();
-         AssetDatabase.releaseAsset(%previewAssetName);
+         %previewPath = %previewFilePath;
       }
       }
       else
       else
       {
       {

+ 16 - 41
Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/image.tscript

@@ -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,20 @@ 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)
-      {
-         if(!AssetDatabase.isDeclaredAsset("ToolsModule:" @ %previewAssetName))
-         {
-            %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;
-      }
+         %previewButton.setBitmap(%previewFilePath);
+      
+      return %success;
    }
    }
    
    
    return false;
    return false;

+ 9 - 35
Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/material.tscript

@@ -64,7 +64,9 @@ 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 +110,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 +125,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 +142,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()
-            {
-               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.setBitmap(%previewFilePath);
+            return true;
          }
          }
-      
-         %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 false;
       }
       }
    }
    }
       
       

+ 9 - 36
Templates/BaseGame/game/tools/assetBrowser/scripts/assetTypes/shape.tscript

@@ -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 @ ".png";
 
 
    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))
-      {
-         %previewAsset = new ImageAsset()
-         {
-            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))
+      if(isFile(%previewFilePath))
       {
       {
-         %previewButton.bitmapAsset = "ToolsModule:" @ %previewAssetName;
+         %previewButton.setBitmap(%previewFilePath);
          return true;
          return true;
       }
       }
+
+      return false;
    }
    }
    
    
    return false;
    return false;