|
@@ -10,6 +10,9 @@
|
|
#include <Atom/RPI.Edit/Common/AssetUtils.h>
|
|
#include <Atom/RPI.Edit/Common/AssetUtils.h>
|
|
#include <Atom/RPI.Edit/Material/MaterialTypeSourceData.h>
|
|
#include <Atom/RPI.Edit/Material/MaterialTypeSourceData.h>
|
|
#include <Atom/RPI.Public/Material/Material.h>
|
|
#include <Atom/RPI.Public/Material/Material.h>
|
|
|
|
+#include <Atom/RPI.Reflect/Material/MaterialAsset.h>
|
|
|
|
+#include <Atom/RPI.Reflect/Image/AttachmentImageAsset.h>
|
|
|
|
+#include <Atom/RPI.Reflect/Image/StreamingImageAsset.h>
|
|
#include <AtomToolsFramework/Document/AtomToolsDocumentSystemRequestBus.h>
|
|
#include <AtomToolsFramework/Document/AtomToolsDocumentSystemRequestBus.h>
|
|
#include <AzToolsFramework/AssetBrowser/AssetBrowserEntry.h>
|
|
#include <AzToolsFramework/AssetBrowser/AssetBrowserEntry.h>
|
|
#include <AzCore/Settings/SettingsRegistryMergeUtils.h>
|
|
#include <AzCore/Settings/SettingsRegistryMergeUtils.h>
|
|
@@ -110,39 +113,6 @@ namespace ShaderManagementConsole
|
|
|
|
|
|
m_window.reset(aznew ShaderManagementConsoleWindow(m_toolId));
|
|
m_window.reset(aznew ShaderManagementConsoleWindow(m_toolId));
|
|
m_window->show();
|
|
m_window->show();
|
|
-
|
|
|
|
- using namespace AtomToolsFramework;
|
|
|
|
- using namespace AzToolsFramework;
|
|
|
|
- m_assetBrowserInteractions->RegisterContextMenuActions(
|
|
|
|
- [](const AtomToolsAssetBrowserInteractions::AssetBrowserEntryVector& entries)
|
|
|
|
- {
|
|
|
|
- return entries.front()->GetEntryType() == AssetBrowser::AssetBrowserEntry::AssetEntryType::Source;
|
|
|
|
- },
|
|
|
|
- [this]([[maybe_unused]] QWidget* caller, QMenu* menu, const AtomToolsAssetBrowserInteractions::AssetBrowserEntryVector& entries)
|
|
|
|
- {
|
|
|
|
- const auto* entry = entries.empty() ? nullptr : entries.front();
|
|
|
|
- if (!entry)
|
|
|
|
- {
|
|
|
|
- return;
|
|
|
|
- }
|
|
|
|
- QFileInfo fileInfo(entry->GetFullPath().c_str());
|
|
|
|
- QString extension = fileInfo.completeSuffix();
|
|
|
|
- if (extension == "shader")
|
|
|
|
- {
|
|
|
|
- AZStd::string savePath = entry->GetFullPath();
|
|
|
|
- AzFramework::StringFunc::Path::ReplaceExtension(savePath, AZ::RPI::ShaderVariantListSourceData::Extension);
|
|
|
|
- menu->addAction(
|
|
|
|
- "Create New Variant List (side by side to source)",
|
|
|
|
- [entry, savePath, this]()
|
|
|
|
- {
|
|
|
|
- AtomToolsFramework::AtomToolsDocumentSystemRequestBus::Event(
|
|
|
|
- m_toolId,
|
|
|
|
- &AtomToolsFramework::AtomToolsDocumentSystemRequestBus::Handler::CreateDocumentFromFilePath,
|
|
|
|
- entry->GetFullPath().c_str(),
|
|
|
|
- savePath);
|
|
|
|
- });
|
|
|
|
- }
|
|
|
|
- });
|
|
|
|
}
|
|
}
|
|
|
|
|
|
void ShaderManagementConsoleApplication::Destroy()
|
|
void ShaderManagementConsoleApplication::Destroy()
|
|
@@ -236,23 +206,34 @@ namespace ShaderManagementConsole
|
|
AZStd::vector<AZ::RPI::ShaderCollection::Item> ShaderManagementConsoleApplication::GetMaterialInstanceShaderItems(
|
|
AZStd::vector<AZ::RPI::ShaderCollection::Item> ShaderManagementConsoleApplication::GetMaterialInstanceShaderItems(
|
|
const AZ::Data::AssetId& materialAssetId)
|
|
const AZ::Data::AssetId& materialAssetId)
|
|
{
|
|
{
|
|
- auto materialAsset =
|
|
|
|
- AZ::RPI::AssetUtils::LoadAssetById<AZ::RPI::MaterialAsset>(materialAssetId, AZ::RPI::AssetUtils::TraceLevel::Error);
|
|
|
|
- if (!materialAsset.IsReady())
|
|
|
|
|
|
+ const AZ::Data::AssetLoadParameters dontLoadImageAssets{
|
|
|
|
+ [](const AZ::Data::AssetFilterInfo& filterInfo)
|
|
|
|
+ {
|
|
|
|
+ return
|
|
|
|
+ filterInfo.m_assetType != AZ::AzTypeInfo<AZ::RPI::StreamingImageAsset>::Uuid() &&
|
|
|
|
+ filterInfo.m_assetType != AZ::AzTypeInfo<AZ::RPI::AttachmentImageAsset>::Uuid() &&
|
|
|
|
+ filterInfo.m_assetType != AZ::AzTypeInfo<AZ::RPI::ImageAsset>::Uuid();
|
|
|
|
+ }
|
|
|
|
+ };
|
|
|
|
+
|
|
|
|
+ const auto materialAssetOutcome = AZ::RPI::AssetUtils::LoadAsset<AZ::RPI::MaterialAsset>(
|
|
|
|
+ materialAssetId, AZ::RPI::AssetUtils::TraceLevel::Error, dontLoadImageAssets);
|
|
|
|
+ if (!materialAssetOutcome)
|
|
{
|
|
{
|
|
AZ_Error(
|
|
AZ_Error(
|
|
"ShaderManagementConsole", false, "Failed to load material asset from asset id: %s",
|
|
"ShaderManagementConsole", false, "Failed to load material asset from asset id: %s",
|
|
materialAssetId.ToFixedString().c_str());
|
|
materialAssetId.ToFixedString().c_str());
|
|
- return AZStd::vector<AZ::RPI::ShaderCollection::Item>();
|
|
|
|
|
|
+ return {};
|
|
}
|
|
}
|
|
|
|
|
|
- auto materialInstance = AZ::RPI::Material::Create(materialAsset);
|
|
|
|
|
|
+ const auto materialAsset = materialAssetOutcome.GetValue();
|
|
|
|
+ const auto materialInstance = AZ::RPI::Material::FindOrCreate(materialAsset);
|
|
if (!materialInstance)
|
|
if (!materialInstance)
|
|
{
|
|
{
|
|
AZ_Error(
|
|
AZ_Error(
|
|
"ShaderManagementConsole", false, "Failed to create material instance from asset: %s",
|
|
"ShaderManagementConsole", false, "Failed to create material instance from asset: %s",
|
|
materialAsset.ToString<AZStd::string>().c_str());
|
|
materialAsset.ToString<AZStd::string>().c_str());
|
|
- return AZStd::vector<AZ::RPI::ShaderCollection::Item>();
|
|
|
|
|
|
+ return {};
|
|
}
|
|
}
|
|
|
|
|
|
AZStd::vector<AZ::RPI::ShaderCollection::Item> shaderItems;
|
|
AZStd::vector<AZ::RPI::ShaderCollection::Item> shaderItems;
|