From a371edd07fa94d1c231162cc24062eb3452a95bb Mon Sep 17 00:00:00 2001 From: srikappa Date: Wed, 14 Apr 2021 17:26:14 -0700 Subject: [PATCH 01/68] Initial commit of CreatePrefab work --- .../PrefabEditorEntityOwnershipService.cpp | 25 ++- .../PrefabEditorEntityOwnershipService.h | 2 +- .../Prefab/Instance/Instance.cpp | 2 +- .../Instance/InstanceUpdateExecutor.cpp | 57 ++++- .../Prefab/Instance/InstanceUpdateExecutor.h | 14 ++ .../Prefab/PrefabPublicHandler.cpp | 211 ++++++++++++------ .../Prefab/PrefabPublicHandler.h | 5 +- .../Prefab/PrefabPublicInterface.h | 2 +- .../Prefab/PrefabSystemComponent.cpp | 33 ++- .../UI/Prefab/PrefabIntegrationManager.cpp | 16 +- .../UI/Prefab/PrefabIntegrationManager.h | 4 + 11 files changed, 281 insertions(+), 90 deletions(-) diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Entity/PrefabEditorEntityOwnershipService.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/Entity/PrefabEditorEntityOwnershipService.cpp index 4b23b46ffd..2424658ecf 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Entity/PrefabEditorEntityOwnershipService.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Entity/PrefabEditorEntityOwnershipService.cpp @@ -279,18 +279,29 @@ namespace AzToolsFramework AZStd::unique_ptr createdPrefabInstance = m_prefabSystemComponent->CreatePrefab(entities, AZStd::move(nestedPrefabInstances), filePath); - if (!instanceToParentUnder) - { - instanceToParentUnder = *m_rootInstance; - } - if (createdPrefabInstance) { + if (!instanceToParentUnder) + { + instanceToParentUnder = *m_rootInstance; + } + Prefab::Instance& addedInstance = instanceToParentUnder->get().AddInstance(AZStd::move(createdPrefabInstance)); - HandleEntitiesAdded({addedInstance.m_containerEntity.get()}); + AZ::Entity* containerEntity = addedInstance.m_containerEntity.get(); + containerEntity->AddComponent(aznew Prefab::EditorPrefabComponent()); + HandleEntitiesAdded({containerEntity}); + HandleEntitiesAdded(entities); + + // Update the template of the instance since we modified the entities of the instance by calling HandleEntitiesAdded. + Prefab::PrefabDom serializedInstance; + if (Prefab::PrefabDomUtils::StoreInstanceInPrefabDom(addedInstance, serializedInstance)) + { + m_prefabSystemComponent->UpdatePrefabTemplate(addedInstance.GetTemplateId(), serializedInstance); + } + return addedInstance; } - HandleEntitiesAdded(entities); + return AZStd::nullopt; } diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Entity/PrefabEditorEntityOwnershipService.h b/Code/Framework/AzToolsFramework/AzToolsFramework/Entity/PrefabEditorEntityOwnershipService.h index ad11547506..36a60cc501 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Entity/PrefabEditorEntityOwnershipService.h +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Entity/PrefabEditorEntityOwnershipService.h @@ -186,7 +186,7 @@ namespace AzToolsFramework PlayInEditorData m_playInEditorData; ////////////////////////////////////////////////////////////////////////// - // PrefabSystemComponentInterface interface implementation + // PrefabEditorEntityOwnershipInterface implementation Prefab::InstanceOptionalReference CreatePrefab( const AZStd::vector& entities, AZStd::vector>&& nestedPrefabInstances, AZ::IO::PathView filePath, Prefab::InstanceOptionalReference instanceToParentUnder) override; diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/Instance/Instance.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/Instance/Instance.cpp index 0a5b43482e..bd4c343a3c 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/Instance/Instance.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/Instance/Instance.cpp @@ -283,7 +283,7 @@ namespace AzToolsFramework { if (!m_instanceEntityMapper->RegisterEntityToInstance(entityId, *this)) { - AZ_Assert(false, + AZ_Error("Prefab", false, "Prefab - Failed to register entity with id %s with a Prefab Instance derived from source asset %s " "This entity is likely already registered. Check for a double add.", entityId.ToString().c_str(), diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/Instance/InstanceUpdateExecutor.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/Instance/InstanceUpdateExecutor.cpp index 65de6b713c..7df1602bff 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/Instance/InstanceUpdateExecutor.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/Instance/InstanceUpdateExecutor.cpp @@ -15,6 +15,7 @@ #include #include #include +#include #include #include #include @@ -117,6 +118,8 @@ namespace AzToolsFramework currentTemplateId); isUpdateSuccessful = false; + m_instancesUpdateQueue.pop(); + continue; } } @@ -139,9 +142,16 @@ namespace AzToolsFramework } m_instancesUpdateQueue.pop(); - } + for (auto entityIdIterator = selectedEntityIds.begin(); entityIdIterator != selectedEntityIds.end(); entityIdIterator++) + { + AZ::Entity* entity = GetEntityById(*entityIdIterator); + if (entity == nullptr) + { + selectedEntityIds.erase(entityIdIterator--); + } + } ToolsApplicationRequestBus::Broadcast(&ToolsApplicationRequests::SetSelectedEntities, selectedEntityIds); // Enable the Outliner @@ -163,5 +173,50 @@ namespace AzToolsFramework return isUpdateSuccessful; } + + Instance* InstanceUpdateExecutor::UniqueInstanceQueue::front() + { + return m_instancesQueue.front(); + } + + void InstanceUpdateExecutor::UniqueInstanceQueue::pop() + { + m_instancesSet.erase(m_instancesQueue.front()); + m_instancesQueue.pop(); + } + + void InstanceUpdateExecutor::UniqueInstanceQueue::emplace(Instance* instance) + { + Instance* ancestorInstance = instance; + + while (ancestorInstance != nullptr) + { + if (m_instancesSet.contains(ancestorInstance)) + { + return; + } + + auto parent = ancestorInstance->GetParentInstance(); + if (parent.has_value()) + { + ancestorInstance = &(parent->get()); + } + else + { + ancestorInstance = nullptr; + } + } + + // TODO - remove child instances too? + // Optimization. + + m_instancesQueue.emplace(instance); + m_instancesSet.emplace(instance); + } + + size_t InstanceUpdateExecutor::UniqueInstanceQueue::size() + { + return m_instancesQueue.size(); + } } } diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/Instance/InstanceUpdateExecutor.h b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/Instance/InstanceUpdateExecutor.h index 04bd189816..a29e19dc8a 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/Instance/InstanceUpdateExecutor.h +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/Instance/InstanceUpdateExecutor.h @@ -15,6 +15,7 @@ #include #include #include +#include #include #include @@ -45,6 +46,19 @@ namespace AzToolsFramework PrefabSystemComponentInterface* m_prefabSystemComponentInterface = nullptr; TemplateInstanceMapperInterface* m_templateInstanceMapperInterface = nullptr; int m_instanceCountToUpdateInBatch = 0; + + class UniqueInstanceQueue + { + public: + Instance* front(); + void pop(); + void emplace(Instance* instance); + size_t size(); + private: + AZStd::queue m_instancesQueue; + AZStd::unordered_set m_instancesSet; + }; + //UniqueInstanceQueue m_instancesUpdateQueue; AZStd::queue m_instancesUpdateQueue; bool m_updatingTemplateInstancesInQueue { false }; }; diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabPublicHandler.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabPublicHandler.cpp index 417a524e77..292ee3c7f8 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabPublicHandler.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabPublicHandler.cpp @@ -15,15 +15,16 @@ #include #include +#include #include #include #include #include -#include #include #include #include #include +#include #include #include #include @@ -37,12 +38,14 @@ namespace AzToolsFramework void PrefabPublicHandler::RegisterPrefabPublicHandlerInterface() { m_instanceEntityMapperInterface = AZ::Interface::Get(); - AZ_Assert( - m_instanceEntityMapperInterface, "PrefabPublicHandler - Could not retrieve instance of InstanceEntityMapperInterface"); + AZ_Assert(m_instanceEntityMapperInterface, "PrefabPublicHandler - Could not retrieve instance of InstanceEntityMapperInterface"); m_instanceToTemplateInterface = AZ::Interface::Get(); AZ_Assert(m_instanceToTemplateInterface, "PrefabPublicHandler - Could not retrieve instance of InstanceToTemplateInterface"); + m_prefabLoaderInterface = AZ::Interface::Get(); + AZ_Assert(m_prefabLoaderInterface, "Could not get PrefabLoaderInterface on PrefabPublicHandler construction."); + m_prefabSystemComponentInterface = AZ::Interface::Get(); AZ_Assert(m_prefabSystemComponentInterface, "Could not get PrefabSystemComponentInterface on PrefabPublicHandler construction."); @@ -58,7 +61,7 @@ namespace AzToolsFramework m_prefabUndoCache.Destroy(); } - PrefabOperationResult PrefabPublicHandler::CreatePrefab(const AZStd::vector& entityIds, AZStd::string_view filePath) + PrefabOperationResult PrefabPublicHandler::CreatePrefab(const AZStd::vector& entityIds, AZ::IO::PathView filePath) { // Retrieve entityList from entityIds EntityList inputEntityList; @@ -70,17 +73,14 @@ namespace AzToolsFramework EntityList topLevelEntities; AzToolsFramework::ToolsApplicationRequests::Bus::BroadcastResult( - entitiesHaveCommonRoot, - &AzToolsFramework::ToolsApplicationRequests::FindCommonRootInactive, - inputEntityList, - commonRootEntityId, - &topLevelEntities - ); + entitiesHaveCommonRoot, &AzToolsFramework::ToolsApplicationRequests::FindCommonRootInactive, inputEntityList, + commonRootEntityId, &topLevelEntities); // Bail if entities don't share a common root if (!entitiesHaveCommonRoot) { - return AZ::Failure(AZStd::string("Could not create a new prefab out of the entities provided - entities do not share a common root.")); + return AZ::Failure( + AZStd::string("Could not create a new prefab out of the entities provided - entities do not share a common root.")); } AZ::Entity* commonRootEntity = nullptr; @@ -91,58 +91,139 @@ namespace AzToolsFramework // Retrieve the owning instance of the common root entity, which will be our new instance's parent instance. InstanceOptionalReference commonRootEntityOwningInstance = GetOwnerInstanceByEntityId(commonRootEntityId); - AZ_Assert(commonRootEntityOwningInstance.has_value(), "Failed to create prefab : " + AZ_Assert( + commonRootEntityOwningInstance.has_value(), + "Failed to create prefab : " "Couldn't get a valid owning instance for the common root entity of the enities provided"); AZStd::vector entities; AZStd::vector> instances; - // Retrieve all entities affected and identify Instances - if (!RetrieveAndSortPrefabEntitiesAndInstances(inputEntityList, commonRootEntityOwningInstance->get(), entities, instances)) + InstanceOptionalReference instance; + { - return AZ::Failure(AZStd::string("Could not create a new prefab out of the entities provided - entities do not share a common root.")); + // Initialize Undo Batch object + ScopedUndoBatch undoBatch("Create Prefab"); + + TemplateId commonRootOwningTemplateId = commonRootEntityOwningInstance->get().GetTemplateId(); + + PrefabDom commonRootInstanceDomBeforeCreate; + m_instanceToTemplateInterface->GenerateDomForInstance( + commonRootInstanceDomBeforeCreate, commonRootEntityOwningInstance->get()); + + // Retrieve all entities affected and identify Instances + if (!RetrieveAndSortPrefabEntitiesAndInstances(inputEntityList, commonRootEntityOwningInstance->get(), entities, instances)) + { + return AZ::Failure( + AZStd::string("Could not create a new prefab out of the entities provided - entities do not share a common root.")); + } + + auto prefabEditorEntityOwnershipInterface = AZ::Interface::Get(); + if (!prefabEditorEntityOwnershipInterface) + { + return AZ::Failure(AZStd::string("Could not create a new prefab out of the entities provided - internal error " + "(PrefabEditorEntityOwnershipInterface unavailable).")); + } + + // When you move instances from another template, you have to remove the links and propagate changes to target template. + auto linkRemoveUndo = aznew PrefabUndoInstanceLink("Undo Link Remove Node"); + for (auto& nestedInstance : instances) + { + PrefabDom emptyLinkDom; + linkRemoveUndo->Capture( + commonRootOwningTemplateId, nestedInstance->GetTemplateId(), nestedInstance->GetInstanceAlias(), emptyLinkDom, + nestedInstance->GetLinkId()); + linkRemoveUndo->SetParent(undoBatch.GetUndoBatch()); + } + + // Create the Prefab + instance = prefabEditorEntityOwnershipInterface->CreatePrefab( + entities, AZStd::move(instances), filePath, commonRootEntityOwningInstance); + + if (!instance) + { + return AZ::Failure(AZStd::string("Could not create a new prefab out of the entities provided - internal error " + "(A null instance is returned).")); + } + + PrefabDom commonRootInstanceDomAfterCreate; + m_instanceToTemplateInterface->GenerateDomForInstance( + commonRootInstanceDomAfterCreate, commonRootEntityOwningInstance->get()); + + auto commonRootInstanceUndoNode = aznew PrefabUndoInstance("Undo Instance Node"); + commonRootInstanceUndoNode->Capture( + commonRootInstanceDomBeforeCreate, commonRootInstanceDomAfterCreate, commonRootOwningTemplateId); + commonRootInstanceUndoNode->SetParent(undoBatch.GetUndoBatch()); + commonRootInstanceUndoNode->Redo(); + + linkRemoveUndo->Redo(); + + + AZ::EntityId containerEntityId = instance->get().GetContainerEntityId(); + AZ::Entity* containerEntity = GetEntityById(containerEntityId); + + // Apply Transform changes as overrides + { + Prefab::PrefabDom containerEntityDomBefore; + m_instanceToTemplateInterface->GenerateDomForEntity(containerEntityDomBefore, *containerEntity); + + AZ::Vector3 containerEntityTranslation(AZ::Vector3::CreateZero()); + AZ::Quaternion containerEntityRotation(AZ::Quaternion::CreateZero()); + + // Set the transform (translation, rotation) of the container entity + GenerateContainerEntityTransform(topLevelEntities, containerEntityTranslation, containerEntityRotation); + + // Set container entity to be child of common root + AZ::TransformBus::Event(containerEntityId, &AZ::TransformBus::Events::SetParent, commonRootEntityId); + + AZ::TransformBus::Event(containerEntityId, &AZ::TransformBus::Events::SetLocalTranslation, containerEntityTranslation); + AZ::TransformBus::Event(containerEntityId, &AZ::TransformBus::Events::SetLocalRotationQuaternion, containerEntityRotation); + + PrefabDom containerEntityDomAfter; + m_instanceToTemplateInterface->GenerateDomForEntity(containerEntityDomAfter, *containerEntity); + + PrefabDom patch; + m_instanceToTemplateInterface->GeneratePatch(patch, containerEntityDomBefore, containerEntityDomAfter); + + m_instanceToTemplateInterface->AppendEntityAliasToPatchPaths(patch, containerEntityId); + + + auto linkAddUndo = aznew PrefabUndoInstanceLink("Undo Link Add Node"); + linkAddUndo->Capture( + commonRootEntityOwningInstance->get().GetTemplateId(), instance->get().GetTemplateId(), instance->get().GetInstanceAlias(), + patch, InvalidLinkId); + linkAddUndo->SetParent(undoBatch.GetUndoBatch()); + + linkAddUndo->Redo(); + + // Update the cache - this prevents these changes from being stored in the regular undo/redo nodes + m_prefabUndoCache.Store(containerEntityId, AZStd::move(containerEntityDomAfter)); + } + + // Change top level entities to be parented to the container entity + // Mark them as dirty so this change is correctly applied to the template + for (AZ::Entity* topLevelEntity : topLevelEntities) + { + m_prefabUndoCache.UpdateCache(topLevelEntity->GetId()); + undoBatch.MarkEntityDirty(topLevelEntity->GetId()); + AZ::TransformBus::Event(topLevelEntity->GetId(), &AZ::TransformBus::Events::SetParent, containerEntityId); + } + + /* + // Select Container Entity + { + auto selectionUndo = aznew SelectionCommand({containerEntityId}, "Select Prefab Container Entity"); + selectionUndo->SetParent(undoBatch.GetUndoBatch()); + + ToolsApplicationRequestBus::Broadcast(&ToolsApplicationRequestBus::Events::RunRedoSeparately, selectionUndo); + }*/ } - auto prefabEditorEntityOwnershipInterface = AZ::Interface::Get(); - if (!prefabEditorEntityOwnershipInterface) - { - return AZ::Failure(AZStd::string("Could not create a new prefab out of the entities provided - internal error " - "(PrefabEditorEntityOwnershipInterface unavailable).")); - } + // Save Template to file + m_prefabLoaderInterface->SaveTemplate(instance->get().GetTemplateId()); - InstanceOptionalReference instance = prefabEditorEntityOwnershipInterface->CreatePrefab( - entities, AZStd::move(instances), filePath, commonRootEntityOwningInstance); - - if (!instance) - { - return AZ::Failure(AZStd::string("Could not create a new prefab out of the entities provided - internal error " - "(A null instance is returned).")); - } - - AZ::EntityId containerEntityId = instance->get().GetContainerEntityId(); - AZ::Vector3 containerEntityTranslation(AZ::Vector3::CreateZero()); - AZ::Quaternion containerEntityRotation(AZ::Quaternion::CreateZero()); - - // Set the transform (translation, rotation) of the container entity - GenerateContainerEntityTransform(topLevelEntities, containerEntityTranslation, containerEntityRotation); - - AZ::TransformBus::Event(containerEntityId, &AZ::TransformBus::Events::SetLocalTranslation, containerEntityTranslation); - AZ::TransformBus::Event(containerEntityId, &AZ::TransformBus::Events::SetLocalRotationQuaternion, containerEntityRotation); - - // Set container entity to be child of common root - AZ::TransformBus::Event(containerEntityId, &AZ::TransformBus::Events::SetParent, commonRootEntityId); - - // Assign the EditorPrefabComponent to the instance container - EntityCompositionRequests::AddComponentsOutcome outcome; - EntityCompositionRequestBus::BroadcastResult( - outcome, &EntityCompositionRequests::AddComponentsToEntities, EntityIdList{containerEntityId}, - AZ::ComponentTypeList{azrtti_typeid()}); - - // Change top level entities to be parented to the container entity - for (AZ::Entity* topLevelEntity : topLevelEntities) - { - AZ::TransformBus::Event(topLevelEntity->GetId(), &AZ::TransformBus::Events::SetParent, containerEntityId); - } + // This function does not support undo/redo yet, so clear the undo stack to prevent issues. + //AzToolsFramework::ToolsApplicationRequestBus::Broadcast(&AzToolsFramework::ToolsApplicationRequestBus::Events::FlushUndo); return AZ::Success(); } @@ -174,14 +255,7 @@ namespace AzToolsFramework AZStd::string("SavePrefab - Path error. Path could be invalid, or the prefab may not be loaded in this level.")); } - auto prefabLoaderInterface = AZ::Interface::Get(); - if (prefabLoaderInterface == nullptr) - { - return AZ::Failure(AZStd::string( - "Could not save prefab - internal error (PrefabLoaderInterface unavailable).")); - } - - if (!prefabLoaderInterface->SaveTemplate(templateId)) + if (!m_prefabLoaderInterface->SaveTemplate(templateId)) { return AZ::Failure(AZStd::string("Could not save prefab - internal error (Json write operation failure).")); } @@ -260,15 +334,15 @@ namespace AzToolsFramework // Create Undo node on entities if they belong to an instance InstanceOptionalReference instanceOptionalReference = m_instanceEntityMapperInterface->FindOwningInstance(entityId); - if (instanceOptionalReference.has_value()) + if (instanceOptionalReference.has_value() && !IsInstanceContainerEntity(entityId)) { - PrefabDom beforeState; - m_prefabUndoCache.Retrieve(entityId, beforeState); - PrefabDom afterState; AZ::Entity* entity = GetEntityById(entityId); if (entity) { + PrefabDom beforeState; + m_prefabUndoCache.Retrieve(entityId, beforeState); + m_instanceToTemplateInterface->GenerateDomForEntity(afterState, *entity); PrefabDom patch; @@ -287,7 +361,10 @@ namespace AzToolsFramework // Update the cache m_prefabUndoCache.Store(entityId, AZStd::move(afterState)); } - + else + { + m_prefabUndoCache.PurgeCache(entityId); + } } } diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabPublicHandler.h b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabPublicHandler.h index 46a7f946ba..de892470ab 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabPublicHandler.h +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabPublicHandler.h @@ -27,8 +27,10 @@ namespace AzToolsFramework namespace Prefab { class Instance; + class InstanceEntityMapperInterface; class InstanceToTemplateInterface; + class PrefabLoaderInterface; class PrefabSystemComponentInterface; class PrefabPublicHandler final @@ -42,7 +44,7 @@ namespace AzToolsFramework void UnregisterPrefabPublicHandlerInterface(); // PrefabPublicInterface... - PrefabOperationResult CreatePrefab(const AZStd::vector& entityIds, AZStd::string_view filePath) override; + PrefabOperationResult CreatePrefab(const AZStd::vector& entityIds, AZ::IO::PathView filePath) override; PrefabOperationResult InstantiatePrefab(AZStd::string_view filePath, AZ::EntityId parent, AZ::Vector3 position) override; PrefabOperationResult SavePrefab(AZ::IO::Path filePath) override; PrefabEntityResult CreateEntity(AZ::EntityId parentId, const AZ::Vector3& position) override; @@ -74,6 +76,7 @@ namespace AzToolsFramework InstanceEntityMapperInterface* m_instanceEntityMapperInterface = nullptr; InstanceToTemplateInterface* m_instanceToTemplateInterface = nullptr; + PrefabLoaderInterface* m_prefabLoaderInterface = nullptr; PrefabSystemComponentInterface* m_prefabSystemComponentInterface = nullptr; // Caches entity states for undo/redo purposes diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabPublicInterface.h b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabPublicInterface.h index 81a5258d91..4e59729ab2 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabPublicInterface.h +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabPublicInterface.h @@ -49,7 +49,7 @@ namespace AzToolsFramework * @param filePath The path for the new prefab file. * @return An outcome object; on failure, it comes with an error message detailing the cause of the error. */ - virtual PrefabOperationResult CreatePrefab(const AZStd::vector& entityIds, AZStd::string_view filePath) = 0; + virtual PrefabOperationResult CreatePrefab(const AZStd::vector& entityIds, AZ::IO::PathView filePath) = 0; /** * Instantiate a prefab from a prefab file. diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabSystemComponent.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabSystemComponent.cpp index bf9fd658c6..37620ed9ec 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabSystemComponent.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabSystemComponent.cpp @@ -104,7 +104,6 @@ namespace AzToolsFramework return nullptr; } - AZStd::unique_ptr newInstance = AZStd::make_unique(AZStd::move(containerEntity)); for (AZ::Entity* entity : entities) @@ -120,8 +119,11 @@ namespace AzToolsFramework newInstance->AddInstance(AZStd::move(instance)); } - - newInstance->SetTemplateSourcePath(relativeFilePath); + /* + AzToolsFramework::EditorEntityContextRequestBus::Broadcast( + &AzToolsFramework::EditorEntityContextRequests::HandleEntitiesAdded, EntityList{containerEntity->GetId()}); + */ + newInstance->SetTemplateSourcePath(filePath); TemplateId newTemplateId = CreateTemplateFromInstance(*newInstance); if (newTemplateId == InvalidTemplateId) @@ -157,11 +159,16 @@ namespace AzToolsFramework void PrefabSystemComponent::UpdatePrefabTemplate(TemplateId templateId, const PrefabDom& updatedDom) { - PrefabDom& templateDomToUpdate = FindTemplateDom(templateId); - if (AZ::JsonSerialization::Compare(templateDomToUpdate, updatedDom) != AZ::JsonSerializerCompareResult::Equal) + auto templateRef = FindTemplate(templateId); + if (templateRef.has_value()) { - templateDomToUpdate.CopyFrom(updatedDom, templateDomToUpdate.GetAllocator()); - PropagateTemplateChanges(templateId); + PrefabDom& templateDomToUpdate = templateRef->get().GetPrefabDom(); + if (AZ::JsonSerialization::Compare(templateDomToUpdate, updatedDom) != AZ::JsonSerializerCompareResult::Equal) + { + templateDomToUpdate.CopyFrom(updatedDom, templateDomToUpdate.GetAllocator()); + templateRef->get().MarkAsDirty(true); + PropagateTemplateChanges(templateId); + } } } @@ -615,7 +622,12 @@ namespace AzToolsFramework instancesValue = memberFound->value; } - instancesValue->get().AddMember(rapidjson::StringRef(instanceAlias.c_str()), PrefabDomValue(), targetTemplateDom.GetAllocator()); + // Only add the instance if it's not there already + if (instancesValue->get().FindMember(rapidjson::StringRef(instanceAlias.c_str())) == instancesValue->get().MemberEnd()) + { + instancesValue->get().AddMember( + rapidjson::StringRef(instanceAlias.c_str()), PrefabDomValue(), targetTemplateDom.GetAllocator()); + } Template& sourceTemplate = sourceTemplateRef->get(); @@ -628,9 +640,12 @@ namespace AzToolsFramework newLink.GetLinkDom().AddMember(rapidjson::StringRef(PrefabDomUtils::SourceName), rapidjson::StringRef(sourceTemplate.GetFilePath().c_str()), newLink.GetLinkDom().GetAllocator()); + PrefabDom linkPatchCopy; + linkPatchCopy.CopyFrom(linkPatch->get(), newLink.GetLinkDom().GetAllocator()); + if (linkPatch && linkPatch->get().IsArray() && !(linkPatch->get().Empty())) { - m_instanceToTemplatePropagator.AddPatchesToLink(linkPatch.value(), newLink); + m_instanceToTemplatePropagator.AddPatchesToLink(linkPatchCopy, newLink); } //update the target template dom to have the proper values for the source template dom diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Prefab/PrefabIntegrationManager.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Prefab/PrefabIntegrationManager.cpp index 1e71b545b5..6ce3fdc755 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Prefab/PrefabIntegrationManager.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Prefab/PrefabIntegrationManager.cpp @@ -24,6 +24,7 @@ #include #include #include +#include #include #include #include @@ -39,9 +40,12 @@ namespace AzToolsFramework { namespace Prefab { + EditorEntityUiInterface* PrefabIntegrationManager::s_editorEntityUiInterface = nullptr; PrefabPublicInterface* PrefabIntegrationManager::s_prefabPublicInterface = nullptr; PrefabEditInterface* PrefabIntegrationManager::s_prefabEditInterface = nullptr; + PrefabLoaderInterface* PrefabIntegrationManager::s_prefabLoaderInterface = nullptr; + const AZStd::string PrefabIntegrationManager::s_prefabFileExtension = ".prefab"; void PrefabUserSettings::Reflect(AZ::ReflectContext* context) @@ -79,6 +83,13 @@ namespace AzToolsFramework return; } + s_prefabLoaderInterface = AZ::Interface::Get(); + if (s_prefabLoaderInterface == nullptr) + { + AZ_Assert(false, "Prefab - could not get PrefabLoaderInterface on PrefabIntegrationManager construction."); + return; + } + EditorContextMenuBus::Handler::BusConnect(); PrefabInstanceContainerNotificationBus::Handler::BusConnect(); AZ::Interface::Register(this); @@ -320,14 +331,15 @@ namespace AzToolsFramework GenerateSuggestedFilenameFromEntities(prefabRootEntities, suggestedName); - if (!QueryUserForPrefabSaveLocation(suggestedName, targetDirectory, AZ_CRC("PrefabUserSettings"), activeWindow, prefabName, prefabFilePath)) + if (!QueryUserForPrefabSaveLocation( + suggestedName, targetDirectory, AZ_CRC("PrefabUserSettings"), activeWindow, prefabName, prefabFilePath)) { // User canceled prefab creation, or error prevented continuation. return; } } - auto createPrefabOutcome = s_prefabPublicInterface->CreatePrefab(selectedEntities, prefabFilePath); + auto createPrefabOutcome = s_prefabPublicInterface->CreatePrefab(selectedEntities, s_prefabLoaderInterface->GetRelativePathToProject(prefabFilePath.data())); if (!createPrefabOutcome.IsSuccess()) { diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Prefab/PrefabIntegrationManager.h b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Prefab/PrefabIntegrationManager.h index 66a047df28..c9b846aa5b 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Prefab/PrefabIntegrationManager.h +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Prefab/PrefabIntegrationManager.h @@ -29,6 +29,9 @@ namespace AzToolsFramework { namespace Prefab { + + class PrefabLoaderInterface; + //! Structure for saving/retrieving user settings related to prefab workflows. class PrefabUserSettings : public AZ::UserSettings @@ -129,6 +132,7 @@ namespace AzToolsFramework static EditorEntityUiInterface* s_editorEntityUiInterface; static PrefabPublicInterface* s_prefabPublicInterface; static PrefabEditInterface* s_prefabEditInterface; + static PrefabLoaderInterface* s_prefabLoaderInterface; }; } } From 778d60bd0c47ad25e43b166928dfa64e54202167 Mon Sep 17 00:00:00 2001 From: srikappa Date: Thu, 15 Apr 2021 18:45:48 -0700 Subject: [PATCH 02/68] Replaced unique instance queue with checks in template to instance mapper --- .../Instance/InstanceUpdateExecutor.cpp | 54 ++++--------------- .../Prefab/Instance/InstanceUpdateExecutor.h | 14 ----- .../Prefab/PrefabPublicHandler.cpp | 2 +- .../Prefab/PrefabSystemComponent.cpp | 5 +- 4 files changed, 14 insertions(+), 61 deletions(-) diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/Instance/InstanceUpdateExecutor.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/Instance/InstanceUpdateExecutor.cpp index 7df1602bff..d84edd6212 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/Instance/InstanceUpdateExecutor.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/Instance/InstanceUpdateExecutor.cpp @@ -123,6 +123,15 @@ namespace AzToolsFramework } } + auto findInstancesResult = m_templateInstanceMapperInterface->FindInstancesOwnedByTemplate(instanceTemplateId)->get(); + + if (findInstancesResult.find(instanceToUpdate) == findInstancesResult.end()) + { + isUpdateSuccessful = false; + m_instancesUpdateQueue.pop(); + continue; + } + Template& currentTemplate = currentTemplateReference->get(); Instance::EntityList newEntities; if (PrefabDomUtils::LoadInstanceFromPrefabDom(*instanceToUpdate, newEntities, currentTemplate.GetPrefabDom())) @@ -173,50 +182,5 @@ namespace AzToolsFramework return isUpdateSuccessful; } - - Instance* InstanceUpdateExecutor::UniqueInstanceQueue::front() - { - return m_instancesQueue.front(); - } - - void InstanceUpdateExecutor::UniqueInstanceQueue::pop() - { - m_instancesSet.erase(m_instancesQueue.front()); - m_instancesQueue.pop(); - } - - void InstanceUpdateExecutor::UniqueInstanceQueue::emplace(Instance* instance) - { - Instance* ancestorInstance = instance; - - while (ancestorInstance != nullptr) - { - if (m_instancesSet.contains(ancestorInstance)) - { - return; - } - - auto parent = ancestorInstance->GetParentInstance(); - if (parent.has_value()) - { - ancestorInstance = &(parent->get()); - } - else - { - ancestorInstance = nullptr; - } - } - - // TODO - remove child instances too? - // Optimization. - - m_instancesQueue.emplace(instance); - m_instancesSet.emplace(instance); - } - - size_t InstanceUpdateExecutor::UniqueInstanceQueue::size() - { - return m_instancesQueue.size(); - } } } diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/Instance/InstanceUpdateExecutor.h b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/Instance/InstanceUpdateExecutor.h index a29e19dc8a..04bd189816 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/Instance/InstanceUpdateExecutor.h +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/Instance/InstanceUpdateExecutor.h @@ -15,7 +15,6 @@ #include #include #include -#include #include #include @@ -46,19 +45,6 @@ namespace AzToolsFramework PrefabSystemComponentInterface* m_prefabSystemComponentInterface = nullptr; TemplateInstanceMapperInterface* m_templateInstanceMapperInterface = nullptr; int m_instanceCountToUpdateInBatch = 0; - - class UniqueInstanceQueue - { - public: - Instance* front(); - void pop(); - void emplace(Instance* instance); - size_t size(); - private: - AZStd::queue m_instancesQueue; - AZStd::unordered_set m_instancesSet; - }; - //UniqueInstanceQueue m_instancesUpdateQueue; AZStd::queue m_instancesUpdateQueue; bool m_updatingTemplateInstancesInQueue { false }; }; diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabPublicHandler.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabPublicHandler.cpp index 292ee3c7f8..b97e9ebd98 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabPublicHandler.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabPublicHandler.cpp @@ -334,7 +334,7 @@ namespace AzToolsFramework // Create Undo node on entities if they belong to an instance InstanceOptionalReference instanceOptionalReference = m_instanceEntityMapperInterface->FindOwningInstance(entityId); - if (instanceOptionalReference.has_value() && !IsInstanceContainerEntity(entityId)) + if (instanceOptionalReference.has_value()) { PrefabDom afterState; AZ::Entity* entity = GetEntityById(entityId); diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabSystemComponent.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabSystemComponent.cpp index 37620ed9ec..7a9ec0a62e 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabSystemComponent.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabSystemComponent.cpp @@ -144,7 +144,6 @@ namespace AzToolsFramework void PrefabSystemComponent::PropagateTemplateChanges(TemplateId templateId) { - UpdatePrefabInstances(templateId); auto templateIdToLinkIdsIterator = m_templateToLinkIdsMap.find(templateId); if (templateIdToLinkIdsIterator != m_templateToLinkIdsMap.end()) { @@ -155,6 +154,10 @@ namespace AzToolsFramework templateIdToLinkIdsIterator->second.end())); UpdateLinkedInstances(linkIdsToUpdateQueue); } + else + { + UpdatePrefabInstances(templateId); + } } void PrefabSystemComponent::UpdatePrefabTemplate(TemplateId templateId, const PrefabDom& updatedDom) From 808fd1d3ba2843a2e0e19205726f4ca957e5fcd8 Mon Sep 17 00:00:00 2001 From: moraaar Date: Fri, 16 Apr 2021 18:24:29 +0100 Subject: [PATCH 03/68] Cloth works with Actors in Atom. Cloth system uses MeshAssetHelper to read model mesh information for actors too. --- .../Code/Source/AtomActorInstance.cpp | 48 +++++++------------ .../Code/Source/AtomActorInstance.h | 9 ---- .../ClothComponentMesh/ClothComponentMesh.cpp | 15 ++++-- .../NvCloth/Code/Source/Utils/AssetHelper.cpp | 26 ++-------- .../Code/Source/Utils/MeshAssetHelper.cpp | 6 +++ .../Code/Source/Utils/MeshAssetHelper.h | 4 +- 6 files changed, 41 insertions(+), 67 deletions(-) diff --git a/Gems/AtomLyIntegration/EMotionFXAtom/Code/Source/AtomActorInstance.cpp b/Gems/AtomLyIntegration/EMotionFXAtom/Code/Source/AtomActorInstance.cpp index 0a17a6444d..cd5f3bb6c5 100644 --- a/Gems/AtomLyIntegration/EMotionFXAtom/Code/Source/AtomActorInstance.cpp +++ b/Gems/AtomLyIntegration/EMotionFXAtom/Code/Source/AtomActorInstance.cpp @@ -212,19 +212,26 @@ namespace AZ void AtomActorInstance::SetModelAsset([[maybe_unused]] Data::Asset modelAsset) { - // Atom Actor Instance is not based on an actual Model Asset yet, - // it's created at runtime from an Actor Asset. + // Changing model asset is not supported by Atom Actor Instance. + // The model asset is obtained from the Actor inside the ActorAsset, + // which is passed to the constructor. To set a different model asset + // this instance should use a different Actor. + AZ_Assert(false, "AtomActorInstance::SetModelAsset not supported"); } const Data::Asset& AtomActorInstance::GetModelAsset() const { - return m_skinnedMeshInstance->m_model->GetModelAsset(); + AZ_Assert(GetActor(), "Expecting a Atom Actor Instance having a valid Actor."); + return GetActor()->GetMeshAsset(); } void AtomActorInstance::SetModelAssetId([[maybe_unused]] Data::AssetId modelAssetId) { - // Atom Actor Instance is not based on an actual Model Asset yet, - // it's created at runtime from an Actor Asset. + // Changing model asset is not supported by Atom Actor Instance. + // The model asset is obtained from the Actor inside the ActorAsset, + // which is passed to the constructor. To set a different model asset + // this instance should use a different Actor. + AZ_Assert(false, "AtomActorInstance::SetModelAssetId not supported"); } Data::AssetId AtomActorInstance::GetModelAssetId() const @@ -234,8 +241,11 @@ namespace AZ void AtomActorInstance::SetModelAssetPath([[maybe_unused]] const AZStd::string& modelAssetPath) { - // Atom Actor Instance is not based on an actual Model Asset yet, - // it's created at runtime from an Actor Asset. + // Changing model asset is not supported by Atom Actor Instance. + // The model asset is obtained from the Actor inside the ActorAsset, + // which is passed to the constructor. To set a different model asset + // this instance should use a different Actor. + AZ_Assert(false, "AtomActorInstance::SetModelAssetPath not supported"); } AZStd::string AtomActorInstance::GetModelAssetPath() const @@ -278,28 +288,6 @@ namespace AZ return IsVisible(); } - void AtomActorInstance::SetMeshAsset(const AZ::Data::AssetId& id) - { - AZ::Data::Asset asset = - AZ::Data::AssetManager::Instance().GetAsset( - id, m_actorAsset.GetAutoLoadBehavior()); - if (asset) - { - m_actorAsset = asset; - Create(); - } - } - - AZ::Data::Asset AtomActorInstance::GetMeshAsset() - { - return m_actorAsset; - } - - bool AtomActorInstance::GetVisibility() - { - return static_cast(*this).GetVisibility(); - } - AZ::u32 AtomActorInstance::GetJointCount() { return m_actorInstance->GetActor()->GetSkeleton()->GetNumNodes(); @@ -469,7 +457,6 @@ namespace AZ TransformNotificationBus::Handler::BusConnect(m_entityId); MaterialComponentNotificationBus::Handler::BusConnect(m_entityId); MeshComponentRequestBus::Handler::BusConnect(m_entityId); - LmbrCentral::MeshComponentRequestBus::Handler::BusConnect(m_entityId); const Data::Instance model = m_meshFeatureProcessor->GetModel(*m_meshHandle); MeshComponentNotificationBus::Event(m_entityId, &MeshComponentNotificationBus::Events::OnModelReady, model->GetModelAsset(), model); @@ -479,7 +466,6 @@ namespace AZ { MeshComponentNotificationBus::Event(m_entityId, &MeshComponentNotificationBus::Events::OnModelPreDestroy); - LmbrCentral::MeshComponentRequestBus::Handler::BusDisconnect(); MeshComponentRequestBus::Handler::BusDisconnect(); MaterialComponentNotificationBus::Handler::BusDisconnect(); TransformNotificationBus::Handler::BusDisconnect(); diff --git a/Gems/AtomLyIntegration/EMotionFXAtom/Code/Source/AtomActorInstance.h b/Gems/AtomLyIntegration/EMotionFXAtom/Code/Source/AtomActorInstance.h index e14a0a7c4f..a2cf042efa 100644 --- a/Gems/AtomLyIntegration/EMotionFXAtom/Code/Source/AtomActorInstance.h +++ b/Gems/AtomLyIntegration/EMotionFXAtom/Code/Source/AtomActorInstance.h @@ -62,7 +62,6 @@ namespace AZ , public AzFramework::BoundsRequestBus::Handler , public AZ::Render::MaterialComponentNotificationBus::Handler , public AZ::Render::MeshComponentRequestBus::Handler - , public LmbrCentral::MeshComponentRequestBus::Handler , private AZ::Render::SkinnedMeshFeatureProcessorNotificationBus::Handler , private AZ::Render::SkinnedMeshOutputStreamNotificationBus::Handler , private LmbrCentral::SkeletalHierarchyRequestBus::Handler @@ -143,14 +142,6 @@ namespace AZ bool GetVisibility() const override; // GetWorldBounds/GetLocalBounds already overridden by BoundsRequestBus::Handler - ////////////////////////////////////////////////////////////////////////// - // LmbrCentral::MeshComponentRequestBus::Handler - void SetMeshAsset(const AZ::Data::AssetId& id) override; - AZ::Data::Asset GetMeshAsset() override; - bool GetVisibility() override; - // SetVisibility already overridden by MeshComponentRequestBus::Handler - // GetWorldBounds/GetLocalBounds already overridden by BoundsRequestBus::Handler - ///////////////////////////////////////////////////////////////////////////////////////////////////////////////// // SkeletalHierarchyRequestBus::Handler overrides... AZ::u32 GetJointCount() override; diff --git a/Gems/NvCloth/Code/Source/Components/ClothComponentMesh/ClothComponentMesh.cpp b/Gems/NvCloth/Code/Source/Components/ClothComponentMesh/ClothComponentMesh.cpp index cf2593048f..92dbfdb89a 100644 --- a/Gems/NvCloth/Code/Source/Components/ClothComponentMesh/ClothComponentMesh.cpp +++ b/Gems/NvCloth/Code/Source/Components/ClothComponentMesh/ClothComponentMesh.cpp @@ -448,9 +448,18 @@ namespace NvCloth const auto& renderTangents = renderData.m_tangents; const auto& renderBitangents = renderData.m_bitangents; - AZ::Data::Asset modelAsset; - AZ::Render::MeshComponentRequestBus::EventResult( - modelAsset, m_entityId, &AZ::Render::MeshComponentRequestBus::Events::GetModelAsset); + // Since Atom has a 1:1 relation with between ModelAsset buffers and Model buffers, + // internally it created a new asset for the model instance. So it's important to + // get the asset from the model when we want to write to them, instead of getting the + // ModelAsset directly from the bus (which returns the original asset shared by all entities). + AZ::Data::Instance model; + AZ::Render::MeshComponentRequestBus::EventResult(model, m_entityId, &AZ::Render::MeshComponentRequestBus::Events::GetModel); + if (!model) + { + return; + } + + AZ::Data::Asset modelAsset = model->GetModelAsset(); if (!modelAsset.IsReady()) { return; diff --git a/Gems/NvCloth/Code/Source/Utils/AssetHelper.cpp b/Gems/NvCloth/Code/Source/Utils/AssetHelper.cpp index cb4d644065..c7558580b3 100644 --- a/Gems/NvCloth/Code/Source/Utils/AssetHelper.cpp +++ b/Gems/NvCloth/Code/Source/Utils/AssetHelper.cpp @@ -13,11 +13,7 @@ #include #include -#include -#include - -#include namespace NvCloth { @@ -30,25 +26,9 @@ namespace NvCloth AZStd::unique_ptr AssetHelper::CreateAssetHelper(AZ::EntityId entityId) { - // Does the entity have an Actor Asset? - EMotionFX::ActorInstance* actorInstance = nullptr; - EMotionFX::Integration::ActorComponentRequestBus::EventResult( - actorInstance, entityId, &EMotionFX::Integration::ActorComponentRequestBus::Events::GetActorInstance); - if (actorInstance) - { - return AZStd::make_unique(entityId); - } - - AZ::Data::Asset modelAsset; - AZ::Render::MeshComponentRequestBus::EventResult( - modelAsset, entityId, &AZ::Render::MeshComponentRequestBus::Events::GetModelAsset); - if (modelAsset.GetId().IsValid()) - { - return AZStd::make_unique(entityId); - } - - AZ_Warning("AssetHelper", false, "Unexpected asset type"); - return nullptr; + return entityId.IsValid() + ? AZStd::make_unique(entityId) + : nullptr; } float AssetHelper::ConvertBackstopOffset(float backstopOffset) diff --git a/Gems/NvCloth/Code/Source/Utils/MeshAssetHelper.cpp b/Gems/NvCloth/Code/Source/Utils/MeshAssetHelper.cpp index fa8d6e5455..6852d245d2 100644 --- a/Gems/NvCloth/Code/Source/Utils/MeshAssetHelper.cpp +++ b/Gems/NvCloth/Code/Source/Utils/MeshAssetHelper.cpp @@ -14,11 +14,17 @@ #include +#include + namespace NvCloth { MeshAssetHelper::MeshAssetHelper(AZ::EntityId entityId) : AssetHelper(entityId) { + EMotionFX::ActorInstance* actorInstance = nullptr; + EMotionFX::Integration::ActorComponentRequestBus::EventResult( + actorInstance, entityId, &EMotionFX::Integration::ActorComponentRequestBus::Events::GetActorInstance); + m_supportSkinnedAnimation = actorInstance != nullptr; } void MeshAssetHelper::GatherClothMeshNodes(MeshNodeList& meshNodes) diff --git a/Gems/NvCloth/Code/Source/Utils/MeshAssetHelper.h b/Gems/NvCloth/Code/Source/Utils/MeshAssetHelper.h index b558519bd4..a7849583e7 100644 --- a/Gems/NvCloth/Code/Source/Utils/MeshAssetHelper.h +++ b/Gems/NvCloth/Code/Source/Utils/MeshAssetHelper.h @@ -35,12 +35,14 @@ namespace NvCloth MeshClothInfo& meshClothInfo) override; bool DoesSupportSkinnedAnimation() const override { - return false; + return m_supportSkinnedAnimation; } private: bool CopyDataFromMeshes( const AZStd::vector& meshes, MeshClothInfo& meshClothInfo); + + bool m_supportSkinnedAnimation = false; }; } // namespace NvCloth From 9e6a5ecbaf3e8619bffd11f2d4944145a42560cf Mon Sep 17 00:00:00 2001 From: moraaar Date: Fri, 16 Apr 2021 18:25:24 +0100 Subject: [PATCH 04/68] Fix cloth chicken actor asset in NvCloth gem. --- .../cloth/Chicken/Actor/chicken.fbx.assetinfo | 534 ++++++------------ 1 file changed, 172 insertions(+), 362 deletions(-) diff --git a/Gems/NvCloth/Assets/Objects/cloth/Chicken/Actor/chicken.fbx.assetinfo b/Gems/NvCloth/Assets/Objects/cloth/Chicken/Actor/chicken.fbx.assetinfo index 808b024189..a6024e0c5f 100644 --- a/Gems/NvCloth/Assets/Objects/cloth/Chicken/Actor/chicken.fbx.assetinfo +++ b/Gems/NvCloth/Assets/Objects/cloth/Chicken/Actor/chicken.fbx.assetinfo @@ -1,362 +1,172 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +{ + "values": [ + { + "$type": "ActorGroup", + "name": "chicken", + "id": "{C086F309-EE7E-5AFD-A9C2-69DE5BA48461}", + "rules": { + "rules": [ + { + "$type": "MetaDataRule", + "metaData": "AdjustActor -actorID $(ACTORID) -name \"chicken\"\r\nActorSetCollisionMeshes -actorID $(ACTORID) -lod 0 -nodeList \"\"\r\nAdjustActor -actorID $(ACTORID) -nodesExcludedFromBounds \"\" -nodeAction \"select\"\r\nAdjustActor -actorID $(ACTORID) -nodeAction \"replace\" -attachmentNodes \"\"\r\n" + }, + { + "$type": "ActorPhysicsSetupRule", + "data": { + "config": { + "clothConfig": { + "nodes": [ + { + "name": "def_c_head_joint", + "shapes": [ + [ + { + "Visible": true, + "Position": [ + -0.08505599945783615, + 0.0, + 0.009370899759232998 + ], + "Rotation": [ + 0.7071437239646912, + 0.0, + 0.0, + 0.708984375 + ], + "propertyVisibilityFlags": 248 + }, + { + "$type": "CapsuleShapeConfiguration", + "Height": 0.191273495554924, + "Radius": 0.05063670128583908 + } + ] + ] + }, + { + "name": "def_c_neck_joint", + "shapes": [ + [ + { + "Visible": true, + "Position": [ + -0.03810190036892891, + 0.0, + -0.03132440149784088 + ], + "propertyVisibilityFlags": 248 + }, + { + "$type": "SphereShapeConfiguration", + "Radius": 0.16069939732551576 + } + ] + ] + }, + { + "name": "def_c_spine_end", + "shapes": [ + [ + { + "Visible": true, + "Position": [ + -2.0000000233721949e-7, + 0.012646200135350228, + -0.24104370176792146 + ], + "propertyVisibilityFlags": 248 + }, + { + "$type": "SphereShapeConfiguration", + "Radius": 0.24875959753990174 + } + ] + ] + } + ] + } + } + } + }, + { + "$type": "CoordinateSystemRule" + } + ] + } + }, + { + "$type": "{07B356B7-3635-40B5-878A-FAC4EFD5AD86} MeshGroup", + "name": "chicken", + "nodeSelectionList": { + "selectedNodes": [ + {}, + "RootNode", + "RootNode.chicken_skeleton", + "RootNode.chicken_feet_skin", + "RootNode.chicken_eyes_skin", + "RootNode.chicken_body_skin", + "RootNode.chicken_mohawk", + "RootNode.chicken_skeleton.def_c_chickenRoot_joint", + "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint", + "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_c_spine2_joint", + "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_l_uprLeg_joint", + "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_r_uprLeg_joint", + "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_c_spine2_joint.def_c_spine3_joint", + "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_l_uprLeg_joint.def_l_lwrLeg_joint", + "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_r_uprLeg_joint.def_r_lwrLeg_joint", + "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_c_spine2_joint.def_c_spine3_joint.def_c_spine_end", + "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_c_spine2_joint.def_c_spine3_joint.def_l_wing1_joint", + "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_c_spine2_joint.def_c_spine3_joint.def_r_wing1_joint", + "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_l_uprLeg_joint.def_l_lwrLeg_joint.def_l_foot_joint", + "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_r_uprLeg_joint.def_r_lwrLeg_joint.def_r_foot_joint", + "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_c_spine2_joint.def_c_spine3_joint.def_c_spine_end.def_c_tail1_joint", + "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_c_spine2_joint.def_c_spine3_joint.def_c_spine_end.def_c_neck_joint", + "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_c_spine2_joint.def_c_spine3_joint.def_l_wing1_joint.def_l_wing2_joint", + "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_c_spine2_joint.def_c_spine3_joint.def_r_wing1_joint.def_r_wing2_joint", + "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_l_uprLeg_joint.def_l_lwrLeg_joint.def_l_foot_joint.def_l_ball_joint", + "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_r_uprLeg_joint.def_r_lwrLeg_joint.def_r_foot_joint.def_r_ball_joint", + "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_c_spine2_joint.def_c_spine3_joint.def_c_spine_end.def_c_tail1_joint.def_c_tail2_joint", + "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_c_spine2_joint.def_c_spine3_joint.def_c_spine_end.def_c_neck_joint.def_c_head_joint", + "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_c_spine2_joint.def_c_spine3_joint.def_l_wing1_joint.def_l_wing2_joint.def_l_wing_end", + "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_c_spine2_joint.def_c_spine3_joint.def_r_wing1_joint.def_r_wing2_joint.def_r_wing_end", + "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_c_spine2_joint.def_c_spine3_joint.def_c_spine_end.def_c_neck_joint.def_c_head_joint.def_c_feather1_joint", + "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_c_spine2_joint.def_c_spine3_joint.def_c_spine_end.def_c_neck_joint.def_c_head_joint.def_c_mouth_joint", + "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_c_spine2_joint.def_c_spine3_joint.def_c_spine_end.def_c_neck_joint.def_c_head_joint.def_c_waddle1_joint", + "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_c_spine2_joint.def_c_spine3_joint.def_c_spine_end.def_c_neck_joint.def_c_head_joint.def_c_feather1_joint.def_c_feather2_joint", + "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_c_spine2_joint.def_c_spine3_joint.def_c_spine_end.def_c_neck_joint.def_c_head_joint.def_c_mouth_joint.def_c_mouth_end", + "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_c_spine2_joint.def_c_spine3_joint.def_c_spine_end.def_c_neck_joint.def_c_head_joint.def_c_waddle1_joint.def_c_waddle2_joint", + "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_c_spine2_joint.def_c_spine3_joint.def_c_spine_end.def_c_neck_joint.def_c_head_joint.def_c_feather1_joint.def_c_feather2_joint.def_c_feather3_joint", + "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_c_spine2_joint.def_c_spine3_joint.def_c_spine_end.def_c_neck_joint.def_c_head_joint.def_c_waddle1_joint.def_c_waddle2_joint.def_c_waddle3_joint", + "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_c_spine2_joint.def_c_spine3_joint.def_c_spine_end.def_c_neck_joint.def_c_head_joint.def_c_feather1_joint.def_c_feather2_joint.def_c_feather3_joint.def_c_feather4_joint", + "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_c_spine2_joint.def_c_spine3_joint.def_c_spine_end.def_c_neck_joint.def_c_head_joint.def_c_waddle1_joint.def_c_waddle2_joint.def_c_waddle3_joint.def_c_waddle_end", + "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_c_spine2_joint.def_c_spine3_joint.def_c_spine_end.def_c_neck_joint.def_c_head_joint.def_c_feather1_joint.def_c_feather2_joint.def_c_feather3_joint.def_c_feather4_joint.def_c_feather_end" + ] + }, + "rules": { + "rules": [ + { + "$type": "SkinRule" + }, + { + "$type": "StaticMeshAdvancedRule", + "vertexColorStreamName": "Disabled" + }, + { + "$type": "MaterialRule" + }, + { + "$type": "CoordinateSystemRule" + }, + { + "$type": "ClothRule", + "meshNodeName": "RootNode.chicken_mohawk", + "inverseMassesStreamName": "colorSet1", + "motionConstraintsStreamName": "Default: 1.0", + "backstopStreamName": "None" + } + ] + }, + "id": "{55E26F74-B35F-4BC1-87BB-83E3DE85C346}" + } + ] +} \ No newline at end of file From 4b3662ac0a47cb6e962653e3acd838183c701eed Mon Sep 17 00:00:00 2001 From: moraaar Date: Fri, 16 Apr 2021 18:26:17 +0100 Subject: [PATCH 05/68] Sort out cloth tests after Actors work with model mesh assets. --- .../ActorClothCollidersTest.cpp | 10 ++-- .../ClothComponentMeshTest.cpp | 28 ++++++++--- .../Components/EditorClothComponentTest.cpp | 20 ++++---- Gems/NvCloth/Code/Tests/System/ClothTest.cpp | 2 +- .../Code/Tests/System/FabricCookerTest.cpp | 44 ++++++++-------- .../Code/Tests/Utils/ActorAssetHelperTest.cpp | 50 +++++++++++++------ 6 files changed, 96 insertions(+), 58 deletions(-) diff --git a/Gems/NvCloth/Code/Tests/Components/ClothComponentMesh/ActorClothCollidersTest.cpp b/Gems/NvCloth/Code/Tests/Components/ClothComponentMesh/ActorClothCollidersTest.cpp index 946f9e0af2..e3a321cebd 100644 --- a/Gems/NvCloth/Code/Tests/Components/ClothComponentMesh/ActorClothCollidersTest.cpp +++ b/Gems/NvCloth/Code/Tests/Components/ClothComponentMesh/ActorClothCollidersTest.cpp @@ -145,8 +145,8 @@ namespace UnitTest const AZStd::vector& capsuleColliders = actorClothColliders->GetCapsuleColliders(); const AZStd::vector& nativeCapsuleIndices = actorClothColliders->GetCapsuleIndices(); - EXPECT_EQ(sphereColliders.size(), 1); - EXPECT_EQ(nativeSpheres.size(), 1); + ASSERT_EQ(sphereColliders.size(), 1); + ASSERT_EQ(nativeSpheres.size(), 1); EXPECT_TRUE(capsuleColliders.empty()); EXPECT_TRUE(nativeCapsuleIndices.empty()); @@ -189,9 +189,9 @@ namespace UnitTest const AZStd::vector& nativeCapsuleIndices = actorClothColliders->GetCapsuleIndices(); EXPECT_TRUE(sphereColliders.empty()); - EXPECT_EQ(nativeSpheres.size(), 2); // Each capsule produces 2 spheres - EXPECT_EQ(capsuleColliders.size(), 1); - EXPECT_EQ(nativeCapsuleIndices.size(), 2); // Each capsule is 2 indices + ASSERT_EQ(nativeSpheres.size(), 2); // Each capsule produces 2 spheres + ASSERT_EQ(capsuleColliders.size(), 1); + ASSERT_EQ(nativeCapsuleIndices.size(), 2); // Each capsule is 2 indices EXPECT_NEAR(capsuleColliders[0].m_height, height, Tolerance); EXPECT_NEAR(capsuleColliders[0].m_radius, radius, Tolerance); diff --git a/Gems/NvCloth/Code/Tests/Components/ClothComponentMesh/ClothComponentMeshTest.cpp b/Gems/NvCloth/Code/Tests/Components/ClothComponentMesh/ClothComponentMeshTest.cpp index c463c30226..3d5b7713b3 100644 --- a/Gems/NvCloth/Code/Tests/Components/ClothComponentMesh/ClothComponentMeshTest.cpp +++ b/Gems/NvCloth/Code/Tests/Components/ClothComponentMesh/ClothComponentMeshTest.cpp @@ -144,8 +144,12 @@ namespace UnitTest EXPECT_TRUE(renderData.m_bitangents.empty()); EXPECT_TRUE(renderData.m_normals.empty()); } - - TEST_F(NvClothComponentMesh, ClothComponentMesh_InitWithEntityActorWithNoClothData_TriggersError) + + // [TODO LYN-1891] + // Revisit when Cloth Component Mesh works with Actors adapted to Atom models. + // Editor Cloth component now uses the new AZ::Render::MeshComponentNotificationBus::OnModelReady + // notification and this test does not setup a model yet. + TEST_F(NvClothComponentMesh, DISABLED_ClothComponentMesh_InitWithEntityActorWithNoClothData_TriggersError) { { auto actor = AZStd::make_unique("actor_test"); @@ -165,8 +169,12 @@ namespace UnitTest AZ_TEST_STOP_TRACE_SUPPRESSION(1); // Expect 1 error } - - TEST_F(NvClothComponentMesh, ClothComponentMesh_InitWithEntityActor_ReturnsValidRenderData) + + // [TODO LYN-1891] + // Revisit when Cloth Component Mesh works with Actors adapted to Atom models. + // Editor Cloth component now uses the new AZ::Render::MeshComponentNotificationBus::OnModelReady + // notification and this test does not setup a model yet. + TEST_F(NvClothComponentMesh, DISABLED_ClothComponentMesh_InitWithEntityActor_ReturnsValidRenderData) { { auto actor = AZStd::make_unique("actor_test"); @@ -265,7 +273,11 @@ namespace UnitTest EXPECT_TRUE(renderData.m_normals.empty()); } - TEST_F(NvClothComponentMesh, ClothComponentMesh_UpdateConfigurationDifferentEntity_ReturnsRenderDataFromNewEntity) + // [TODO LYN-1891] + // Revisit when Cloth Component Mesh works with Actors adapted to Atom models. + // Editor Cloth component now uses the new AZ::Render::MeshComponentNotificationBus::OnModelReady + // notification and this test does not setup a model yet. + TEST_F(NvClothComponentMesh, DISABLED_ClothComponentMesh_UpdateConfigurationDifferentEntity_ReturnsRenderDataFromNewEntity) { { auto actor = AZStd::make_unique("actor_test"); @@ -341,7 +353,11 @@ namespace UnitTest EXPECT_TRUE(renderData.m_normals.empty()); } - TEST_F(NvClothComponentMesh, ClothComponentMesh_UpdateConfigurationNewMeshNode_ReturnsRenderDataFromNewMeshNode) + // [TODO LYN-1891] + // Revisit when Cloth Component Mesh works with Actors adapted to Atom models. + // Editor Cloth component now uses the new AZ::Render::MeshComponentNotificationBus::OnModelReady + // notification and this test does not setup a model yet. + TEST_F(NvClothComponentMesh, DISABLED_ClothComponentMesh_UpdateConfigurationNewMeshNode_ReturnsRenderDataFromNewMeshNode) { const AZStd::string meshNode2Name = "cloth_node_2"; diff --git a/Gems/NvCloth/Code/Tests/Components/EditorClothComponentTest.cpp b/Gems/NvCloth/Code/Tests/Components/EditorClothComponentTest.cpp index bb3218a4f5..7dc191bd9a 100644 --- a/Gems/NvCloth/Code/Tests/Components/EditorClothComponentTest.cpp +++ b/Gems/NvCloth/Code/Tests/Components/EditorClothComponentTest.cpp @@ -184,7 +184,7 @@ namespace UnitTest const NvCloth::MeshNodeList& meshNodeList = editorClothComponent->GetMeshNodeList(); - EXPECT_EQ(meshNodeList.size(), 1); + ASSERT_EQ(meshNodeList.size(), 1); EXPECT_TRUE(meshNodeList[0] == NvCloth::Internal::StatusMessageNoAsset); } @@ -208,7 +208,7 @@ namespace UnitTest const NvCloth::MeshNodeList& meshNodeList = editorClothComponent->GetMeshNodeList(); - EXPECT_EQ(meshNodeList.size(), 1); + ASSERT_EQ(meshNodeList.size(), 1); EXPECT_TRUE(meshNodeList[0] == NvCloth::Internal::StatusMessageNoClothNodes); } @@ -234,7 +234,7 @@ namespace UnitTest const NvCloth::MeshNodeList& meshNodeList = editorClothComponent->GetMeshNodeList(); - EXPECT_EQ(meshNodeList.size(), 1); + ASSERT_EQ(meshNodeList.size(), 1); EXPECT_TRUE(meshNodeList[0] == NvCloth::Internal::StatusMessageNoClothNodes); } @@ -261,7 +261,7 @@ namespace UnitTest const NvCloth::MeshNodeList& meshNodeList = editorClothComponent->GetMeshNodeList(); - EXPECT_EQ(meshNodeList.size(), 2); + ASSERT_EQ(meshNodeList.size(), 2); EXPECT_TRUE(meshNodeList[0] == NvCloth::Internal::StatusMessageSelectNode); EXPECT_TRUE(meshNodeList[1] == MeshNodeName); } @@ -322,9 +322,11 @@ namespace UnitTest EXPECT_TRUE(meshNodesWithBackstopData.find(MeshNodeName) != meshNodesWithBackstopData.end()); } - // [TODO LYN-2252] - // Enable test once OnModelDestroyed is available. - TEST_F(NvClothEditorClothComponent, DISABLED_EditorClothComponent_OnMeshDestroyed_ReturnsMeshNodeListWithNoAssetMessage) + // [TODO LYN-1891] + // Revisit when Cloth Component Mesh works with Actors adapted to Atom models. + // Editor Cloth component now uses the new AZ::Render::MeshComponentNotificationBus::OnModelReady + // notification and this test does not setup a model yet. + TEST_F(NvClothEditorClothComponent, DISABLED_EditorClothComponent_OnModelPreDestroy_ReturnsMeshNodeListWithNoAssetMessage) { auto editorEntity = CreateInactiveEditorEntity("ClothComponentEditorEntity"); auto* editorClothComponent = editorEntity->CreateComponent(); @@ -341,12 +343,12 @@ namespace UnitTest editorActorComponent->SetActorAsset(CreateAssetFromActor(AZStd::move(actor))); } - //editorClothComponent->OnModelDestroyed(); + editorClothComponent->OnModelPreDestroy(); const NvCloth::MeshNodeList& meshNodeList = editorClothComponent->GetMeshNodeList(); const auto& meshNodesWithBackstopData = editorClothComponent->GetMeshNodesWithBackstopData(); - EXPECT_EQ(meshNodeList.size(), 1); + ASSERT_EQ(meshNodeList.size(), 1); EXPECT_TRUE(meshNodeList[0] == NvCloth::Internal::StatusMessageNoAsset); EXPECT_TRUE(meshNodesWithBackstopData.empty()); } diff --git a/Gems/NvCloth/Code/Tests/System/ClothTest.cpp b/Gems/NvCloth/Code/Tests/System/ClothTest.cpp index 2c3ae610e4..08959a9196 100644 --- a/Gems/NvCloth/Code/Tests/System/ClothTest.cpp +++ b/Gems/NvCloth/Code/Tests/System/ClothTest.cpp @@ -506,7 +506,7 @@ namespace UnitTest EXPECT_EQ(initialParticles.size(), nvClothCurrentParticles.size()); EXPECT_EQ(initialParticles.size(), nvClothPreviousParticles.size()); - for (size_t i = 0; i < nvClothCurrentParticles.size(); ++i) + for (size_t i = 0; i < initialParticles.size(); ++i) { ExpectEq(initialParticles[i], nvClothCurrentParticles[i]); ExpectEq(initialParticles[i], nvClothPreviousParticles[i]); diff --git a/Gems/NvCloth/Code/Tests/System/FabricCookerTest.cpp b/Gems/NvCloth/Code/Tests/System/FabricCookerTest.cpp index 16a5d2efa3..d2d312c2ca 100644 --- a/Gems/NvCloth/Code/Tests/System/FabricCookerTest.cpp +++ b/Gems/NvCloth/Code/Tests/System/FabricCookerTest.cpp @@ -283,7 +283,7 @@ namespace UnitTest AZStd::vector remappedVertices; NvCloth::Internal::WeldVertices(vertices, indices, weldedVertices, weldedIndices, remappedVertices); - EXPECT_EQ(weldedVertices.size(), expectedSizeAfterWelding); + ASSERT_EQ(weldedVertices.size(), expectedSizeAfterWelding); EXPECT_THAT(weldedVertices[0].GetAsVector3(), IsCloseTolerance(vertexPosition, Tolerance)); EXPECT_NEAR(weldedVertices[0].GetW(), lowestInverseMass, Tolerance); } @@ -307,9 +307,9 @@ namespace UnitTest AZStd::vector remappedVertices; NvCloth::Internal::WeldVertices(vertices, indices, weldedVertices, weldedIndices, remappedVertices); - EXPECT_EQ(weldedVertices.size(), expectedSizeAfterWelding); - EXPECT_EQ(weldedIndices.size(), indices.size()); - EXPECT_EQ(remappedVertices.size(), vertices.size()); + ASSERT_EQ(weldedVertices.size(), expectedSizeAfterWelding); + ASSERT_EQ(weldedIndices.size(), indices.size()); + ASSERT_EQ(remappedVertices.size(), vertices.size()); for (size_t i = 0; i < remappedVertices.size(); ++i) { @@ -347,9 +347,9 @@ namespace UnitTest // The result after calling WeldVertices is expected to have the same size. // The vertices inside will be reordered though due to the welding process. - EXPECT_EQ(weldedVertices.size(), vertices.size()); - EXPECT_EQ(weldedIndices.size(), indices.size()); - EXPECT_EQ(remappedVertices.size(), vertices.size()); + ASSERT_EQ(weldedVertices.size(), vertices.size()); + ASSERT_EQ(weldedIndices.size(), indices.size()); + ASSERT_EQ(remappedVertices.size(), vertices.size()); for (size_t i = 0; i < remappedVertices.size(); ++i) { @@ -422,9 +422,9 @@ namespace UnitTest AZStd::vector remappedVertices; NvCloth::Internal::RemoveStaticTriangles(vertices, indices, simplifiedVertices, simplifiedIndices, remappedVertices); - EXPECT_EQ(simplifiedVertices.size(), expectedVerticesSizeAfterSimplification); - EXPECT_EQ(simplifiedIndices.size(), expectedIndicesSizeAfterSimplification); - EXPECT_EQ(remappedVertices.size(), vertices.size()); + ASSERT_EQ(simplifiedVertices.size(), expectedVerticesSizeAfterSimplification); + ASSERT_EQ(simplifiedIndices.size(), expectedIndicesSizeAfterSimplification); + ASSERT_EQ(remappedVertices.size(), vertices.size()); for (size_t i = 0; i < remappedVertices.size(); ++i) { @@ -477,9 +477,9 @@ namespace UnitTest AZStd::vector remappedVertices; NvCloth::Internal::RemoveStaticTriangles(vertices, indices, simplifiedVertices, simplifiedIndices, remappedVertices); - EXPECT_EQ(simplifiedVertices.size(), expectedVerticesSizeAfterSimplification); - EXPECT_EQ(simplifiedIndices.size(), expectedIndicesSizeAfterSimplification); - EXPECT_EQ(remappedVertices.size(), vertices.size()); + ASSERT_EQ(simplifiedVertices.size(), expectedVerticesSizeAfterSimplification); + ASSERT_EQ(simplifiedIndices.size(), expectedIndicesSizeAfterSimplification); + ASSERT_EQ(remappedVertices.size(), vertices.size()); for (size_t i = 0; i < remappedVertices.size(); ++i) { @@ -532,9 +532,9 @@ namespace UnitTest // The result after calling RemoveStaticTriangles is expected to have the same size. // The vertices will be reordered though due to the processing during simplification. - EXPECT_EQ(simplifiedVertices.size(), vertices.size()); - EXPECT_EQ(simplifiedIndices.size(), indices.size()); - EXPECT_EQ(remappedVertices.size(), vertices.size()); + ASSERT_EQ(simplifiedVertices.size(), vertices.size()); + ASSERT_EQ(simplifiedIndices.size(), indices.size()); + ASSERT_EQ(remappedVertices.size(), vertices.size()); for (size_t i = 0; i < remappedVertices.size(); ++i) { @@ -576,9 +576,9 @@ namespace UnitTest AZStd::vector remappedVertices; AZ::Interface::Get()->SimplifyMesh(vertices, indices, simplifiedVertices, simplifiedIndices, remappedVertices, removeStaticTriangles); - EXPECT_EQ(simplifiedVertices.size(), expectedVerticesSizeAfterSimplification); - EXPECT_EQ(simplifiedIndices.size(), expectedIndicesSizeAfterSimplification); - EXPECT_EQ(remappedVertices.size(), vertices.size()); + ASSERT_EQ(simplifiedVertices.size(), expectedVerticesSizeAfterSimplification); + ASSERT_EQ(simplifiedIndices.size(), expectedIndicesSizeAfterSimplification); + ASSERT_EQ(remappedVertices.size(), vertices.size()); for (size_t i = 0; i < remappedVertices.size(); ++i) { @@ -635,9 +635,9 @@ namespace UnitTest AZStd::vector remappedVertices; AZ::Interface::Get()->SimplifyMesh(vertices, indices, simplifiedVertices, simplifiedIndices, remappedVertices, removeStaticTriangles); - EXPECT_EQ(simplifiedVertices.size(), expectedVerticesSizeAfterSimplification); - EXPECT_EQ(simplifiedIndices.size(), expectedIndicesSizeAfterSimplification); - EXPECT_EQ(remappedVertices.size(), vertices.size()); + ASSERT_EQ(simplifiedVertices.size(), expectedVerticesSizeAfterSimplification); + ASSERT_EQ(simplifiedIndices.size(), expectedIndicesSizeAfterSimplification); + ASSERT_EQ(remappedVertices.size(), vertices.size()); for (size_t i = 0; i < remappedVertices.size(); ++i) { diff --git a/Gems/NvCloth/Code/Tests/Utils/ActorAssetHelperTest.cpp b/Gems/NvCloth/Code/Tests/Utils/ActorAssetHelperTest.cpp index 481bf70c67..de0ba9031e 100644 --- a/Gems/NvCloth/Code/Tests/Utils/ActorAssetHelperTest.cpp +++ b/Gems/NvCloth/Code/Tests/Utils/ActorAssetHelperTest.cpp @@ -15,7 +15,7 @@ #include #include -#include +#include #include #include @@ -24,7 +24,7 @@ namespace UnitTest { //! Fixture to setup entity with actor component and the tests data. - class NvClothActorAssetHelper + class NvClothMeshAssetHelper : public ::testing::Test { public: @@ -75,7 +75,7 @@ namespace UnitTest AZStd::unique_ptr m_entity; }; - void NvClothActorAssetHelper::SetUp() + void NvClothMeshAssetHelper::SetUp() { m_entity = AZStd::make_unique(); m_entity->CreateComponent(); @@ -84,14 +84,14 @@ namespace UnitTest m_entity->Activate(); } - void NvClothActorAssetHelper::TearDown() + void NvClothMeshAssetHelper::TearDown() { m_entity->Deactivate(); m_actorComponent = nullptr; m_entity.reset(); } - TEST_F(NvClothActorAssetHelper, ActorAssetHelper_CreateAssetHelperWithInvalidEntityId_ReturnsNull) + TEST_F(NvClothMeshAssetHelper, MeshAssetHelper_CreateAssetHelperWithInvalidEntityId_ReturnsNull) { AZ::EntityId entityId; @@ -100,7 +100,18 @@ namespace UnitTest EXPECT_TRUE(assetHelper.get() == nullptr); } - TEST_F(NvClothActorAssetHelper, ActorAssetHelper_CreateAssetHelperWithActor_ReturnsValidActorAssetHelper) + TEST_F(NvClothMeshAssetHelper, MeshAssetHelper_CreateAssetHelperWithValidEntityId_ReturnsValidMeshAssetHelper) + { + AZStd::unique_ptr entity = AZStd::make_unique(); + + AZStd::unique_ptr assetHelper = NvCloth::AssetHelper::CreateAssetHelper(entity->GetId()); + + EXPECT_TRUE(assetHelper.get() != nullptr); + EXPECT_TRUE(azrtti_cast(assetHelper.get()) != nullptr); + EXPECT_FALSE(assetHelper->DoesSupportSkinnedAnimation()); + } + + TEST_F(NvClothMeshAssetHelper, MeshAssetHelper_CreateAssetHelperWithActor_ReturnsValidMeshAssetHelper) { { auto actor = AZStd::make_unique("actor_test"); @@ -112,10 +123,11 @@ namespace UnitTest AZStd::unique_ptr assetHelper = NvCloth::AssetHelper::CreateAssetHelper(m_actorComponent->GetEntityId()); EXPECT_TRUE(assetHelper.get() != nullptr); - EXPECT_TRUE(azrtti_cast(assetHelper.get()) != nullptr); + EXPECT_TRUE(azrtti_cast(assetHelper.get()) != nullptr); + EXPECT_TRUE(assetHelper->DoesSupportSkinnedAnimation()); } - TEST_F(NvClothActorAssetHelper, ActorAssetHelper_DoesSupportSkinnedAnimation_ReturnsTrue) + TEST_F(NvClothMeshAssetHelper, MeshAssetHelper_DoesSupportSkinnedAnimation_ReturnsTrue) { { auto actor = AZStd::make_unique("actor_test"); @@ -129,7 +141,7 @@ namespace UnitTest EXPECT_TRUE(assetHelper->DoesSupportSkinnedAnimation()); } - TEST_F(NvClothActorAssetHelper, ActorAssetHelper_GatherClothMeshNodesWithEmptyActor_ReturnsEmptyInfo) + TEST_F(NvClothMeshAssetHelper, MeshAssetHelper_GatherClothMeshNodesWithEmptyActor_ReturnsEmptyInfo) { { auto actor = AZStd::make_unique("actor_test"); @@ -146,7 +158,7 @@ namespace UnitTest EXPECT_TRUE(meshNodes.empty()); } - TEST_F(NvClothActorAssetHelper, ActorAssetHelper_ObtainClothMeshNodeInfoWithEmptyActor_ReturnsFalse) + TEST_F(NvClothMeshAssetHelper, MeshAssetHelper_ObtainClothMeshNodeInfoWithEmptyActor_ReturnsFalse) { { auto actor = AZStd::make_unique("actor_test"); @@ -164,7 +176,11 @@ namespace UnitTest EXPECT_FALSE(infoObtained); } - TEST_F(NvClothActorAssetHelper, ActorAssetHelper_GatherClothMeshNodesWithActor_ReturnsCorrectMeshNodeList) + // [TODO LYN-1891] + // Revisit when Cloth Component Mesh works with Actors adapted to Atom models. + // Editor Cloth component now uses the new AZ::Render::MeshComponentNotificationBus::OnModelReady + // notification and this test does not setup a model yet. + TEST_F(NvClothMeshAssetHelper, DISABLED_MeshAssetHelper_GatherClothMeshNodesWithActor_ReturnsCorrectMeshNodeList) { { auto actor = AZStd::make_unique("actor_test"); @@ -185,12 +201,16 @@ namespace UnitTest NvCloth::MeshNodeList meshNodes; assetHelper->GatherClothMeshNodes(meshNodes); - EXPECT_EQ(meshNodes.size(), 2); + ASSERT_EQ(meshNodes.size(), 2); EXPECT_TRUE(meshNodes[0] == MeshNode1Name); EXPECT_TRUE(meshNodes[1] == MeshNode2Name); } - - TEST_F(NvClothActorAssetHelper, ActorAssetHelper_ObtainClothMeshNodeInfoWithActor_ReturnsCorrectClothInfo) + + // [TODO LYN-1891] + // Revisit when Cloth Component Mesh works with Actors adapted to Atom models. + // Editor Cloth component now uses the new AZ::Render::MeshComponentNotificationBus::OnModelReady + // notification and this test does not setup a model yet. + TEST_F(NvClothMeshAssetHelper, DISABLED_MeshAssetHelper_ObtainClothMeshNodeInfoWithActor_ReturnsCorrectClothInfo) { { auto actor = AZStd::make_unique("actor_test"); @@ -215,7 +235,7 @@ namespace UnitTest EXPECT_TRUE(infoObtained); EXPECT_EQ(meshNodeInfo.m_lodLevel, LodLevel); - EXPECT_EQ(meshNodeInfo.m_subMeshes.size(), 1); + ASSERT_EQ(meshNodeInfo.m_subMeshes.size(), 1); EXPECT_EQ(meshNodeInfo.m_subMeshes[0].m_primitiveIndex, 2); EXPECT_EQ(meshNodeInfo.m_subMeshes[0].m_verticesFirstIndex, 0); EXPECT_EQ(meshNodeInfo.m_subMeshes[0].m_numVertices, MeshVertices.size()); From 22d6e1ec0dfd41a49d2e8b37e4ee71566a274838 Mon Sep 17 00:00:00 2001 From: srikappa Date: Fri, 16 Apr 2021 16:18:34 -0700 Subject: [PATCH 06/68] Modularized undo instannce update undo operation and enabled setting container entity to be selected --- .../Prefab/PrefabPublicHandler.cpp | 20 ++++--------------- 1 file changed, 4 insertions(+), 16 deletions(-) diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabPublicHandler.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabPublicHandler.cpp index b97e9ebd98..0ce929217d 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabPublicHandler.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabPublicHandler.cpp @@ -146,15 +146,8 @@ namespace AzToolsFramework "(A null instance is returned).")); } - PrefabDom commonRootInstanceDomAfterCreate; - m_instanceToTemplateInterface->GenerateDomForInstance( - commonRootInstanceDomAfterCreate, commonRootEntityOwningInstance->get()); - - auto commonRootInstanceUndoNode = aznew PrefabUndoInstance("Undo Instance Node"); - commonRootInstanceUndoNode->Capture( - commonRootInstanceDomBeforeCreate, commonRootInstanceDomAfterCreate, commonRootOwningTemplateId); - commonRootInstanceUndoNode->SetParent(undoBatch.GetUndoBatch()); - commonRootInstanceUndoNode->Redo(); + PrefabUndoHelpers::UpdatePrefabInstance( + commonRootEntityOwningInstance->get(), "Undo detaching entity", commonRootInstanceDomBeforeCreate, undoBatch.GetUndoBatch()); linkRemoveUndo->Redo(); @@ -208,22 +201,17 @@ namespace AzToolsFramework undoBatch.MarkEntityDirty(topLevelEntity->GetId()); AZ::TransformBus::Event(topLevelEntity->GetId(), &AZ::TransformBus::Events::SetParent, containerEntityId); } - - /* + // Select Container Entity { auto selectionUndo = aznew SelectionCommand({containerEntityId}, "Select Prefab Container Entity"); selectionUndo->SetParent(undoBatch.GetUndoBatch()); - ToolsApplicationRequestBus::Broadcast(&ToolsApplicationRequestBus::Events::RunRedoSeparately, selectionUndo); - }*/ + } } // Save Template to file m_prefabLoaderInterface->SaveTemplate(instance->get().GetTemplateId()); - - // This function does not support undo/redo yet, so clear the undo stack to prevent issues. - //AzToolsFramework::ToolsApplicationRequestBus::Broadcast(&AzToolsFramework::ToolsApplicationRequestBus::Events::FlushUndo); return AZ::Success(); } From 007589a98de65718ef52ad623a4f05156049a61e Mon Sep 17 00:00:00 2001 From: dmcdiar Date: Mon, 19 Apr 2021 02:29:20 -0700 Subject: [PATCH 07/68] Added DiffuseProbeGridClassification pass. Updated RayTracing shaders to use the new light types. --- .../Assets/Passes/DiffuseProbeGridUpdate.pass | 4 + .../Assets/Passes/PassTemplates.azasset | 4 + .../RayTracingSceneSrg.azsli | 36 +- .../diffuseprobegridblenddistance.azshader | Bin 40240 -> 41674 bytes ...begridblenddistance_dx12_0.azshadervariant | Bin 11626 -> 12166 bytes ...begridblenddistance_null_0.azshadervariant | Bin 4502 -> 4502 bytes ...iffuseprobegridblenddistance_passsrg.azsrg | 328 ++++++++++++++-- ...gridblenddistance_vulkan_0.azshadervariant | Bin 11798 -> 12234 bytes .../diffuseprobegridblendirradiance.azshader | Bin 40262 -> 41696 bytes ...gridblendirradiance_dx12_0.azshadervariant | Bin 12102 -> 12630 bytes ...gridblendirradiance_null_0.azshadervariant | Bin 4502 -> 4502 bytes ...fuseprobegridblendirradiance_passsrg.azsrg | 328 ++++++++++++++-- ...idblendirradiance_vulkan_0.azshadervariant | Bin 12974 -> 13410 bytes ...iffuseprobegridborderupdatecolumn.azshader | Bin 10253 -> 10253 bytes ...dborderupdatecolumn_dx12_0.azshadervariant | Bin 8498 -> 8498 bytes ...dborderupdatecolumn_null_0.azshadervariant | Bin 4502 -> 4502 bytes ...orderupdatecolumn_vulkan_0.azshadervariant | Bin 6717 -> 6717 bytes .../diffuseprobegridborderupdaterow.azshader | Bin 10250 -> 10250 bytes ...gridborderupdaterow_dx12_0.azshadervariant | Bin 8314 -> 8314 bytes ...gridborderupdaterow_null_0.azshadervariant | Bin 4502 -> 4502 bytes ...idborderupdaterow_vulkan_0.azshadervariant | Bin 6238 -> 6238 bytes .../diffuseprobegridraytracing.azshader | Bin 75199 -> 79309 bytes ...probegridraytracing_dx12_0.azshadervariant | Bin 31618 -> 34086 bytes ...probegridraytracing_null_0.azshadervariant | Bin 4502 -> 4502 bytes ...obegridraytracing_vulkan_0.azshadervariant | Bin 33896 -> 36232 bytes ...fuseprobegridraytracingclosesthit.azshader | Bin 75209 -> 79319 bytes ...aytracingclosesthit_dx12_0.azshadervariant | Bin 16294 -> 16754 bytes ...aytracingclosesthit_null_0.azshadervariant | Bin 4502 -> 4502 bytes ...tracingclosesthit_vulkan_0.azshadervariant | Bin 8872 -> 9172 bytes ...raytracingcommon_raytracingglobalsrg.azsrg | 352 ++++++++++++++--- .../diffuseprobegridraytracingmiss.azshader | Bin 75203 -> 79313 bytes ...egridraytracingmiss_dx12_0.azshadervariant | Bin 16394 -> 16838 bytes ...egridraytracingmiss_null_0.azshadervariant | Bin 4502 -> 4502 bytes ...ridraytracingmiss_vulkan_0.azshadervariant | Bin 10276 -> 10364 bytes .../diffuseprobegridrelocation.azshader | Bin 42190 -> 42190 bytes ...probegridrelocation_dx12_0.azshadervariant | Bin 12098 -> 12098 bytes ...probegridrelocation_null_0.azshadervariant | Bin 4502 -> 4502 bytes ...obegridrelocation_vulkan_0.azshadervariant | Bin 13314 -> 13314 bytes .../diffuseprobegridrender.azshader | Bin 112069 -> 116296 bytes ...fuseprobegridrender_dx12_0.azshadervariant | Bin 33020 -> 33592 bytes ...fuseprobegridrender_null_0.azshadervariant | Bin 4854 -> 4854 bytes .../diffuseprobegridrender_objectsrg.azsrg | 354 +++++++++++++++--- ...seprobegridrender_vulkan_0.azshadervariant | Bin 24334 -> 24478 bytes .../Code/Source/CommonSystemComponent.cpp | 2 + .../DiffuseProbeGrid/DiffuseProbeGrid.cpp | 49 +++ .../DiffuseProbeGrid/DiffuseProbeGrid.h | 9 + .../DiffuseProbeGridBlendDistancePass.cpp | 10 + .../DiffuseProbeGridBlendIrradiancePass.cpp | 10 + .../DiffuseProbeGridFeatureProcessor.cpp | 1 + .../DiffuseProbeGridRayTracingPass.cpp | 13 + .../DiffuseProbeGridRenderPass.cpp | 10 + .../RayTracing/RayTracingFeatureProcessor.cpp | 20 +- .../Code/atom_feature_common_files.cmake | 2 + 53 files changed, 1361 insertions(+), 171 deletions(-) diff --git a/Gems/Atom/Feature/Common/Assets/Passes/DiffuseProbeGridUpdate.pass b/Gems/Atom/Feature/Common/Assets/Passes/DiffuseProbeGridUpdate.pass index 3d4057f6df..6852cc2d1a 100644 --- a/Gems/Atom/Feature/Common/Assets/Passes/DiffuseProbeGridUpdate.pass +++ b/Gems/Atom/Feature/Common/Assets/Passes/DiffuseProbeGridUpdate.pass @@ -26,6 +26,10 @@ { "Name": "DiffuseProbeGridRelocationPass", "TemplateName": "DiffuseProbeGridRelocationPassTemplate" + }, + { + "Name": "DiffuseProbeGridClassificationPass", + "TemplateName": "DiffuseProbeGridClassificationPassTemplate" } ] } diff --git a/Gems/Atom/Feature/Common/Assets/Passes/PassTemplates.azasset b/Gems/Atom/Feature/Common/Assets/Passes/PassTemplates.azasset index 3cedd78210..29ccb1db09 100644 --- a/Gems/Atom/Feature/Common/Assets/Passes/PassTemplates.azasset +++ b/Gems/Atom/Feature/Common/Assets/Passes/PassTemplates.azasset @@ -416,6 +416,10 @@ "Name": "DiffuseProbeGridRelocationPassTemplate", "Path": "Passes/DiffuseProbeGridRelocation.pass" }, + { + "Name": "DiffuseProbeGridClassificationPassTemplate", + "Path": "Passes/DiffuseProbeGridClassification.pass" + }, { "Name": "DiffuseGlobalIlluminationPassTemplate", "Path": "Passes/DiffuseGlobalIllumination.pass" diff --git a/Gems/Atom/Feature/Common/Assets/ShaderResourceGroups/RayTracingSceneSrg.azsli b/Gems/Atom/Feature/Common/Assets/ShaderResourceGroups/RayTracingSceneSrg.azsli index 2025e3b81b..0aeb43bcf2 100644 --- a/Gems/Atom/Feature/Common/Assets/ShaderResourceGroups/RayTracingSceneSrg.azsli +++ b/Gems/Atom/Feature/Common/Assets/ShaderResourceGroups/RayTracingSceneSrg.azsli @@ -18,7 +18,7 @@ partial ShaderResourceGroup RayTracingSceneSrg { RaytracingAccelerationStructure m_scene; - // directional Lights + // directional lights struct DirectionalLight { float3 m_direction; @@ -30,7 +30,33 @@ partial ShaderResourceGroup RayTracingSceneSrg StructuredBuffer m_directionalLights; uint m_directionalLightCount; - // point Lights + // simple point lights + struct SimplePointLight + { + float3 m_position; + float m_invAttenuationRadiusSquared; // For a radius at which this light no longer has an effect, 1 / radius^2. + float3 m_rgbIntensityCandelas; + float m_padding; // explicit padding. + }; + + StructuredBuffer m_simplePointLights; + uint m_simplePointLightCount; + + // simple spot lights + struct SimpleSpotLight + { + float3 m_position; + float m_invAttenuationRadiusSquared; // For a radius at which this light no longer has an effect, 1 / radius^2. + float3 m_direction; + float m_cosInnerConeAngle; // cosine of the outer cone angle + float3 m_rgbIntensityCandelas; + float m_cosOuterConeAngle; // cosine of the inner cone angle + }; + + StructuredBuffer m_simpleSpotLights; + uint m_simpleSpotLightCount; + + // point lights (sphere) struct PointLight { float3 m_position; @@ -42,7 +68,7 @@ partial ShaderResourceGroup RayTracingSceneSrg StructuredBuffer m_pointLights; uint m_pointLightCount; - // disk Lights + // disk lights struct DiskLight { float3 m_position; @@ -60,7 +86,7 @@ partial ShaderResourceGroup RayTracingSceneSrg StructuredBuffer m_diskLights; uint m_diskLightCount; - // capsule Lights + // capsule lights struct CapsuleLight { float3 m_startPoint; // one of the end points of the capsule @@ -74,7 +100,7 @@ partial ShaderResourceGroup RayTracingSceneSrg StructuredBuffer m_capsuleLights; uint m_capsuleLightCount; - // quad Lights + // quad lights struct QuadLight { float3 m_position; diff --git a/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridblenddistance.azshader b/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridblenddistance.azshader index ae07080eba08c4979c64374fc9d6e974c8e409d3..4a5edc370b5c1a1d22dd012739345fd0d299317c 100644 GIT binary patch delta 804 zcmdn6i|N!+rVUc;lN+b&xFzps2M`Ylq{L|_37dLmAo@5yW4&wCD5ZbI{cJejDWb4^lo8M*JWu}R% zf*FA!TIgssd97UxkadxJI+)a*eBM46EMq@efQMyrgF`S>{6nwurVD>(VD!kOk%QjnF&-xLDmo`0+T=BQUnxF^t7Mc;4d`! zPdQlJbs|*l1h*uZF86FGt3jj~%F3zco!rnXJh{pPW?D{l4p1)9b1q!1&}2KWL@4hp zoaGQIIr(iZOqWBb*yP$ef2b-DPoN%|r|k>lDKx;`v!Nl9nVErMvSYgT=KX$uMLEjT zBpu``aOV<+L&)IA}`z<4f+VYE! J7BMg|003+5B{Tp4 delta 561 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 HE!_Wa4Njx~ diff --git a/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridblenddistance_null_0.azshadervariant b/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridblenddistance_null_0.azshadervariant index 575eb94769774026fe913a0bdb9afdbac874c1ce..17b4f0c3cb5168b9654cfef4d9a121661a033107 100644 GIT binary patch delta 16 YcmbQHJWY8+pCE_Y@{5laF)%Oy05)9(>;M1& delta 16 XcmbQHJWY8+pCHFu$7Y|K3=9kaHRT1M diff --git a/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridblenddistance_passsrg.azsrg b/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridblenddistance_passsrg.azsrg index c050a315a1..45c0fc7efb 100644 --- a/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridblenddistance_passsrg.azsrg +++ b/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridblenddistance_passsrg.azsrg @@ -136,6 +136,44 @@ "value": "1" } ] + }, + { + "field": "element", + "typeName": "ShaderInputImageDescriptor", + "typeId": "{913DBF3C-5556-4524-B928-174A42516D31}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeStates" + }, + { + "field": "m_type", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "3" + }, + { + "field": "m_access", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "1" + }, + { + "field": "m_count", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "1" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "2" + } + ] } ] }, @@ -203,6 +241,26 @@ "value": "2" } ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "2" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "3" + } + ] } ] }, @@ -221,7 +279,7 @@ "field": "m_groupSizeForImages", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "2" + "value": "3" }, { "field": "m_groupSizeForBufferUnboundedArrays", @@ -318,6 +376,34 @@ ] } ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{DB3620EE-8854-52A8-B421-BFA17E6A687D}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeStates" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{5C8C0729-5D41-5299-80F1-395F79B02D70}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "2" + } + ] + } + ] } ] } @@ -2691,7 +2777,7 @@ "field": "m_hash", "typeName": "AZ::u64", "typeId": "{D6597933-47CD-4FC8-B911-63F3E2B0993A}", - "value": "10722138557170830784" + "value": "13399614758886099705" } ] } @@ -2818,6 +2904,44 @@ "value": "1" } ] + }, + { + "field": "element", + "typeName": "ShaderInputImageDescriptor", + "typeId": "{913DBF3C-5556-4524-B928-174A42516D31}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeStates" + }, + { + "field": "m_type", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "3" + }, + { + "field": "m_access", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "1" + }, + { + "field": "m_count", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "1" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "2" + } + ] } ] }, @@ -2885,6 +3009,26 @@ "value": "2" } ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "2" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "3" + } + ] } ] }, @@ -2903,7 +3047,7 @@ "field": "m_groupSizeForImages", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "2" + "value": "3" }, { "field": "m_groupSizeForBufferUnboundedArrays", @@ -3000,6 +3144,34 @@ ] } ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{DB3620EE-8854-52A8-B421-BFA17E6A687D}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeStates" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{5C8C0729-5D41-5299-80F1-395F79B02D70}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "2" + } + ] + } + ] } ] } @@ -5373,7 +5545,7 @@ "field": "m_hash", "typeName": "AZ::u64", "typeId": "{D6597933-47CD-4FC8-B911-63F3E2B0993A}", - "value": "10722138557170830784" + "value": "13399614758886099705" } ] } @@ -5500,6 +5672,44 @@ "value": "1" } ] + }, + { + "field": "element", + "typeName": "ShaderInputImageDescriptor", + "typeId": "{913DBF3C-5556-4524-B928-174A42516D31}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeStates" + }, + { + "field": "m_type", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "3" + }, + { + "field": "m_access", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "1" + }, + { + "field": "m_count", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "1" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "2" + } + ] } ] }, @@ -5567,6 +5777,26 @@ "value": "2" } ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "2" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "3" + } + ] } ] }, @@ -5585,7 +5815,7 @@ "field": "m_groupSizeForImages", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "2" + "value": "3" }, { "field": "m_groupSizeForBufferUnboundedArrays", @@ -5682,6 +5912,34 @@ ] } ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{DB3620EE-8854-52A8-B421-BFA17E6A687D}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeStates" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{5C8C0729-5D41-5299-80F1-395F79B02D70}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "2" + } + ] + } + ] } ] } @@ -5766,7 +6024,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "2" + "value": "3" } ] }, @@ -5798,7 +6056,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "2" + "value": "3" } ] }, @@ -5830,7 +6088,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "2" + "value": "3" } ] }, @@ -5862,7 +6120,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "2" + "value": "3" } ] }, @@ -5894,7 +6152,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "2" + "value": "3" } ] }, @@ -5926,7 +6184,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "2" + "value": "3" } ] }, @@ -5958,7 +6216,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "2" + "value": "3" } ] }, @@ -5990,7 +6248,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "2" + "value": "3" } ] }, @@ -6022,7 +6280,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "2" + "value": "3" } ] }, @@ -6054,7 +6312,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "2" + "value": "3" } ] }, @@ -6086,7 +6344,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "2" + "value": "3" } ] }, @@ -6118,7 +6376,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "2" + "value": "3" } ] }, @@ -6150,7 +6408,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "2" + "value": "3" } ] }, @@ -6182,7 +6440,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "2" + "value": "3" } ] }, @@ -6214,7 +6472,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "2" + "value": "3" } ] }, @@ -6246,7 +6504,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "2" + "value": "3" } ] }, @@ -6278,7 +6536,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "2" + "value": "3" } ] }, @@ -6310,7 +6568,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "2" + "value": "3" } ] }, @@ -6342,7 +6600,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "2" + "value": "3" } ] }, @@ -6374,7 +6632,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "2" + "value": "3" } ] }, @@ -6406,7 +6664,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "2" + "value": "3" } ] }, @@ -6438,7 +6696,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "2" + "value": "3" } ] }, @@ -6470,7 +6728,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "2" + "value": "3" } ] }, @@ -6502,7 +6760,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "2" + "value": "3" } ] }, @@ -6534,7 +6792,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "2" + "value": "3" } ] }, @@ -6566,7 +6824,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "2" + "value": "3" } ] }, @@ -6598,7 +6856,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "2" + "value": "3" } ] }, @@ -6630,7 +6888,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "2" + "value": "3" } ] } @@ -8011,7 +8269,7 @@ "field": "m_hash", "typeName": "AZ::u64", "typeId": "{D6597933-47CD-4FC8-B911-63F3E2B0993A}", - "value": "2959428625184507101" + "value": "8603598590297091788" } ] } @@ -8055,7 +8313,7 @@ "field": "m_hash", "typeName": "AZ::u64", "typeId": "{D6597933-47CD-4FC8-B911-63F3E2B0993A}", - "value": "6463331605863849001" + "value": "6181996982157220722" } ] } diff --git a/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridblenddistance_vulkan_0.azshadervariant b/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridblenddistance_vulkan_0.azshadervariant index d2fa9789ef0bb1494eba4c719068477bae03878b..8ed12bf81cb9a1f6114c2cbe8c8591cda346bb5a 100644 GIT binary patch literal 12234 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 diff --git a/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridblendirradiance.azshader b/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridblendirradiance.azshader index 3eb4955132e71c6976b1aacdb017bb9e8bd5da04..f0bfc085cbc871297e6fe760f7ab54a8d85ee4d8 100644 GIT binary patch delta 800 zcmX@Mi|N5prVR@0lP6|t^YP}!7Zl|ur3RNImZTO>=4VTvoM6qmS&5yAak4=X>tqXU zO-824jarh7%##zXy&0J|=W#SMPJZ9XHo22i6QBnx?TCtp{Qo2{+1{ z5X-F}NHV(5fQrsnP@lYB1ZH>cW#fMG+!7K$VWJKpVy4;Ch56^NJ@zd2_(5 zi4x9}8@&C2ViP4M0m+ATAQB|{OA;hn=w>y!p_y}XuN2JWeKNe0MWlhe&56=lVjSgZ z@}VtT*PWRhFnub=wR`<59oNMknrvVc4^%M0NR@Dsv;BX;X8Fg(r#1)9e#^+AwoIpL I4FdxM0MpF}wg3PC delta 593 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 delta 5263 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 bCe23VuIPr|P3W%s7rqX8D(roH4Xpncr%hMX diff --git a/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridblendirradiance_null_0.azshadervariant b/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridblendirradiance_null_0.azshadervariant index 594cb48e02f3b1a8b29efe53d2468c4f65c674ae..912946db79bad2bfb696b75275f5ce11e6de5ae3 100644 GIT binary patch delta 16 XcmbQHJWY8+pCE_YGM%b53=9kaFqj1B delta 16 YcmbQHJWY8+pCHFu$CIy)F)%Oy06J3!aR2}S diff --git a/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridblendirradiance_passsrg.azsrg b/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridblendirradiance_passsrg.azsrg index 062882a45b..4b7667c981 100644 --- a/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridblendirradiance_passsrg.azsrg +++ b/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridblendirradiance_passsrg.azsrg @@ -136,6 +136,44 @@ "value": "1" } ] + }, + { + "field": "element", + "typeName": "ShaderInputImageDescriptor", + "typeId": "{913DBF3C-5556-4524-B928-174A42516D31}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeStates" + }, + { + "field": "m_type", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "3" + }, + { + "field": "m_access", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "1" + }, + { + "field": "m_count", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "1" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "2" + } + ] } ] }, @@ -203,6 +241,26 @@ "value": "2" } ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "2" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "3" + } + ] } ] }, @@ -221,7 +279,7 @@ "field": "m_groupSizeForImages", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "2" + "value": "3" }, { "field": "m_groupSizeForBufferUnboundedArrays", @@ -318,6 +376,34 @@ ] } ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{DB3620EE-8854-52A8-B421-BFA17E6A687D}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeStates" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{5C8C0729-5D41-5299-80F1-395F79B02D70}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "2" + } + ] + } + ] } ] } @@ -2691,7 +2777,7 @@ "field": "m_hash", "typeName": "AZ::u64", "typeId": "{D6597933-47CD-4FC8-B911-63F3E2B0993A}", - "value": "2253369087368484601" + "value": "4760130259633911968" } ] } @@ -2818,6 +2904,44 @@ "value": "1" } ] + }, + { + "field": "element", + "typeName": "ShaderInputImageDescriptor", + "typeId": "{913DBF3C-5556-4524-B928-174A42516D31}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeStates" + }, + { + "field": "m_type", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "3" + }, + { + "field": "m_access", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "1" + }, + { + "field": "m_count", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "1" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "2" + } + ] } ] }, @@ -2885,6 +3009,26 @@ "value": "2" } ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "2" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "3" + } + ] } ] }, @@ -2903,7 +3047,7 @@ "field": "m_groupSizeForImages", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "2" + "value": "3" }, { "field": "m_groupSizeForBufferUnboundedArrays", @@ -3000,6 +3144,34 @@ ] } ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{DB3620EE-8854-52A8-B421-BFA17E6A687D}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeStates" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{5C8C0729-5D41-5299-80F1-395F79B02D70}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "2" + } + ] + } + ] } ] } @@ -5373,7 +5545,7 @@ "field": "m_hash", "typeName": "AZ::u64", "typeId": "{D6597933-47CD-4FC8-B911-63F3E2B0993A}", - "value": "2253369087368484601" + "value": "4760130259633911968" } ] } @@ -5500,6 +5672,44 @@ "value": "1" } ] + }, + { + "field": "element", + "typeName": "ShaderInputImageDescriptor", + "typeId": "{913DBF3C-5556-4524-B928-174A42516D31}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeStates" + }, + { + "field": "m_type", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "3" + }, + { + "field": "m_access", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "1" + }, + { + "field": "m_count", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "1" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "2" + } + ] } ] }, @@ -5567,6 +5777,26 @@ "value": "2" } ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "2" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "3" + } + ] } ] }, @@ -5585,7 +5815,7 @@ "field": "m_groupSizeForImages", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "2" + "value": "3" }, { "field": "m_groupSizeForBufferUnboundedArrays", @@ -5682,6 +5912,34 @@ ] } ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{DB3620EE-8854-52A8-B421-BFA17E6A687D}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeStates" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{5C8C0729-5D41-5299-80F1-395F79B02D70}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "2" + } + ] + } + ] } ] } @@ -5766,7 +6024,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "2" + "value": "3" } ] }, @@ -5798,7 +6056,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "2" + "value": "3" } ] }, @@ -5830,7 +6088,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "2" + "value": "3" } ] }, @@ -5862,7 +6120,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "2" + "value": "3" } ] }, @@ -5894,7 +6152,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "2" + "value": "3" } ] }, @@ -5926,7 +6184,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "2" + "value": "3" } ] }, @@ -5958,7 +6216,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "2" + "value": "3" } ] }, @@ -5990,7 +6248,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "2" + "value": "3" } ] }, @@ -6022,7 +6280,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "2" + "value": "3" } ] }, @@ -6054,7 +6312,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "2" + "value": "3" } ] }, @@ -6086,7 +6344,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "2" + "value": "3" } ] }, @@ -6118,7 +6376,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "2" + "value": "3" } ] }, @@ -6150,7 +6408,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "2" + "value": "3" } ] }, @@ -6182,7 +6440,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "2" + "value": "3" } ] }, @@ -6214,7 +6472,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "2" + "value": "3" } ] }, @@ -6246,7 +6504,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "2" + "value": "3" } ] }, @@ -6278,7 +6536,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "2" + "value": "3" } ] }, @@ -6310,7 +6568,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "2" + "value": "3" } ] }, @@ -6342,7 +6600,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "2" + "value": "3" } ] }, @@ -6374,7 +6632,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "2" + "value": "3" } ] }, @@ -6406,7 +6664,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "2" + "value": "3" } ] }, @@ -6438,7 +6696,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "2" + "value": "3" } ] }, @@ -6470,7 +6728,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "2" + "value": "3" } ] }, @@ -6502,7 +6760,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "2" + "value": "3" } ] }, @@ -6534,7 +6792,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "2" + "value": "3" } ] }, @@ -6566,7 +6824,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "2" + "value": "3" } ] }, @@ -6598,7 +6856,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "2" + "value": "3" } ] }, @@ -6630,7 +6888,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "2" + "value": "3" } ] } @@ -8011,7 +8269,7 @@ "field": "m_hash", "typeName": "AZ::u64", "typeId": "{D6597933-47CD-4FC8-B911-63F3E2B0993A}", - "value": "2959428625184507101" + "value": "8603598590297091788" } ] } @@ -8055,7 +8313,7 @@ "field": "m_hash", "typeName": "AZ::u64", "typeId": "{D6597933-47CD-4FC8-B911-63F3E2B0993A}", - "value": "1715809227613203910" + "value": "15482970526060535234" } ] } diff --git a/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridblendirradiance_vulkan_0.azshadervariant b/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridblendirradiance_vulkan_0.azshadervariant index 7178a643b1f1cd76ab68346dd62a662a9c6dee58..7e790aa0f1ad05e8cd022ea42dcf33fe3553b0be 100644 GIT binary patch literal 13410 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 SM9ZyRs>#3YW1VJg75_JVv_?Sy literal 12974 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 Zu*=Ho!@fAyYE#$R^8X@v-|@ZT{{~N!ATs~} diff --git a/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridborderupdatecolumn.azshader b/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridborderupdatecolumn.azshader index f2d6a2e169542edef0939d0ad69287d24b8aa11a..d70f7ac139958df72e00df283daa8d18f84925d5 100644 GIT binary patch delta 62 zcmV-E0Kxx_P>oQqc@7BL-{qy@s~IP=fes`L2x_S0a64~mOtY;TV+#oEiL^K2ZkMl< Ut{N({LMFoj2qvd;lcfLv0B%GY5dZ)H delta 62 zcmV-E0Kxx_P>oQqc@7BqulHUwJ5=AZfes`L2)KXA*v|pF diff --git a/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridborderupdatecolumn_dx12_0.azshadervariant b/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridborderupdatecolumn_dx12_0.azshadervariant index 16d5486bc2d8ec81a564bde07c8369b436f098bb..8d904928c902e29c9d1554d243b8d8f89155e982 100644 GIT binary patch delta 16 Xcmdnww8?3MmLiAR@}kL085kGN8nb`A)x`HqEtq6Dt9ehwrI2+XnrI41siPP3{SV+#nN9ZZ2#Q4QFW Us~Re^KPJNg2qvd%wf_JB03Spb>i_@% delta 62 zcmV-E0Kxx?P>N8nb`A*FzwQ5u-&@eLehwrI2wa%sD5+5vC9|p;V+#nMs{b3a*0^(% Us~Re^KPJNg2<<`n9Z>)P0F5vju>b%7 diff --git a/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridborderupdaterow_dx12_0.azshadervariant b/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridborderupdaterow_dx12_0.azshadervariant index 5555d906468d2bfbac4d58135f82539e5729abef..7335bfca4d3baf8a179abf2165443c62f11a8c80 100644 GIT binary patch delta 16 Xcmez6@XKLCkphR>^6ahu85kGiqd delta 16 XcmbQHJWY8+pCHFu$Dgu+3=9kaHJ$}u diff --git a/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridborderupdaterow_vulkan_0.azshadervariant b/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridborderupdaterow_vulkan_0.azshadervariant index 4f9d140b86f8f2df884f6717e2d6d93a78fac132..46f9f928772e23c4ba4f28e5d54c7a808e081b96 100644 GIT binary patch delta 16 Xcmca-aL-^vm;{H~^6ahu85kGF815+rE*D#%SS>68sRB~gTL`!)>jo7!b?PW1unz|XHZ~_~_)s)k(6UU$ zA;`xQayO??W3m`sHnzKk=oVm!$riE7HXXrDTlNtdOB6!pL{WEo>1`|7&n5iv*L~0P zp7Y-KGtb*UsBr$J==na3jka00y zore1v1u`ytNmzlaJ}gJ;=(?aVnG6boiN1c)WJPL+OT*t5iB^yF;qOP2`L=zTm3nTHi<_r2;mV$}YITHyL$Z&}q6ZIUs zSc=wy_L0pZv`B&q5O?_{4}_MHR196t6y@w#J*+>^$^$M9+_74u)mNbSkz}G3((6YF zs@z7_Z{_o=I)ccHEZp`)WXGy86UTXcGh)D%OMPegCp07xal0aLIi91A8qwv>nGGa0 z(81ktX5faO^9h`7xJj5z*KYnA(JWb}^l{Yim7ToL;7fV`mha zlh=yHJNTZS)<=U~W8dM#A6#IavYU$dlS_!6R;G|froi1sJ#CvJPq+&HjE=;hr$-^! z#yPp*ZazkoN}IL1wyM0MV0+p23YZOBP|7mszn+9AufHW&xYcrW)oegV+IkX#*e z^5iWsm#d}>!cd2r%ocgoRHEtuQ`^w9(}+@y0>ABiRB%o$BOUzXydjcA!u0n>PaTE4 z71vW3-TNm$Yjbi6VX{AEt~VrUy~jc?4TvSkDdpg5i4>a4j?0lFGY6NGe*cr`} z-|=)<4{34bcBT)rOsipdZXxbv`QN+lR7-k(H%q&bGx?PRxk|oDLs!4P0I>URrSHW= zI7x=}p7%vp$E>0&0}c1B(j~a=s5|3HiSIn&*yfRWZ7@mUb0UZuw{t`b{5m-?p~;*l zs_Ef?B$&{%+J~BON> z@1-NQT+2kC9lUD~o=)T=;z=hH{cX&0`=zT##Rd|f|H=XU@A delta 2368 zcmeH|T}+!*7{@vAmb_(9+QPdOHlSUEL9uW7sG%ro2}~{^fN^AtWP{?2h)$Ses0*+% zmk9fytbfN_9WWMlG4>Iv?~ug{K8%S8Y=XOxL@ghZEz^O_#3_jmeBaX!xX{Fl&8uCV z^L(7=obx%i9ni?>1&n9#jt`_UCr zlYT^a!YTHgWoX+-mS+Km(X%w0rCamlFJbpRBPO<<2$l;`Qw@!)2t!UD`a|J(Gciv} zY80*|x@eM?oq1UKSb_V0B*CH6pwXB|pLXel5vt$4Qc-v*!6j018Ca5xwAOm$x%7;1 zBaK9%EkYr7EtvvEkGY3PDP%r%4+H`cW+XoqO_+W=(GWTN7c%0ZZr6yN9ZEuiFsw6+ zS=Py9Hs$=tX=BUnTcTk!iBON}vHl>o;`>S6N=w0eV*Bga!H*m4af3bV1{LYzl|eFU&~J_uP3$@H2s=(F-$EF1d)-HmnrS2i_Ds`ys`)ezxc0K&VLjda zDj(l0e#u9<2hxVv-F|)Nkx~@bDG;B(9rshg8}8yj5^U zlgM@@@tv&9OhDOlb<}G~NqYQVZn`Gg+UY7gEfng6xKRJ8o!QOQa68*K+GPj*MJ@|grUgeyYMPU-j|1>7@z;5 zj{WI|bys2Pmv*V+QqlLy9yVj-jXkQGUwdiSDWtADEq0Ho$l8cZQDgqvbrLi%o<_bS c?7M$@pFDV>(>w5qg+vl|CQ;YW6c7;bH{xv0tN;K2 diff --git a/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridraytracing_dx12_0.azshadervariant b/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridraytracing_dx12_0.azshadervariant index 46c99b0d3ddcb8fbc6cf08974f29b437d0f7c350..e9f841047e633f729f147731f9e8b3ed5dc1383b 100644 GIT binary patch literal 34086 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 H2z>r8)R2yn diff --git a/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridraytracing_null_0.azshadervariant b/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridraytracing_null_0.azshadervariant index df447c8da00f01cc0b384c650132128240ec0a3a..e399dbcef0fef75481aaf50adde0ecf40c34350d 100644 GIT binary patch delta 16 XcmbQHJWY8+pCE@i%d70U3=9kaFdqcx delta 16 XcmbQHJWY8+pCHEr4T;)D1_lNIG2sO0 diff --git a/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridraytracing_vulkan_0.azshadervariant b/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridraytracing_vulkan_0.azshadervariant index e2d34e23f7aedd46394608210faf80f45637f123..1580aa2477a788fd6aaad857b568327862e53b35 100644 GIT binary patch literal 36232 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 literal 33896 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 diff --git a/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridraytracingclosesthit.azshader b/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridraytracingclosesthit.azshader index d1a669bacfae4238d30c8f1d0686a96ebca80fe3..bfed840febab47233bd7efbc8529ce1564a32892 100644 GIT binary patch delta 2968 zcmeHJZA?>F80M5)yj%(`v{ec^i_*&cXla;BV^FEvq?sFFn2yP8#lWH)j!wXjjMz48 zL8AipnOx>@)XhZWvJG>c#!Z>VnCTQ@bHi*-tP2TSjZn8N(?wyYmwv@R`>|y1hkx!l z?|Yx~-se5%J@WV)^{k~+O_K()m0_9o_IVtEo_!LYU<#=*o03MEDT9{ zk6#Xdq6@8V7Jh10*TMIG1_E!eQ1s}bknKWCDvOJB-YaV+6VOsU2cv2kMtfYICMg;( z9Yyi4QZPmpZl-wSxwtquM-~Zv@-hhq+}0rG%!nO#;6-O5;oCUq%F z`qi>nmhja-37?b0Nu|zHpN~uvv=Jnytvy%)-<+SEK94nP{0yGjFp(?oy*XBOT3| zRS3A`xOO$2q{BV0LI`BK2s-;YOxEgRA_>J?rV+~42(Pn%^5M`mRY$`-MQL;Jy`V$B zZ$9NmQ)o!Tm@AlqF_zfKfQ3JzCU&9KeUQ*^olezY_^1ip%QMh>tO(vl6WeoR@p|91 zxYuC&(gfS|N;ct#`Y-Ms?|2@jK|4k&rLdoxFDCCBEX1`L1`KEK#Ml)%lJ$jz18F+M zMRyoZom1RU#f(Cn$~IthVk+(r71Gl*h-akDIp=B8z%fIe94)4rwXegiE9L_V!tkGI z$xKgm3i`GcqI<~T@h_*TGs5qW5664_Oyc^Q)m5c+6?Iium6U;XJBuKvRds$?kAPh% zc$*JOP;|peq#(DK(5JIjgR$H@!7~@u{I-yY+qf07(surnvM)B*y(|Pf;*=g+` z9d7M0Ffm(j_JIY5-?oYij#0WCLEkC^3ZUTcXOSL3e&#A+?I%vo-QR7yE-bFJB*d2G zql**yhdjDC(Z9x{ixavy`}ygb-52&BKvvZ(VanMx@q`nmvM0zxyF;@7nfTZwBne9` zxf8-t?Au&UJy`{FVzh&*(28+qNQ<5bSy4sG2zjEq6vikTW{S#`7eWLwZJ}Ai6SVXmuFt2`S{r2+UFPn1RHP{x?Dm&GvZ*+}B_8%(M z5($wC3uk{o{!y^tZGJ^;nkLQBV`O-v=eAT}jP2xKYFG&o`z!127IDle(Bsq}uZHJ* zN*c*RciVFzP@d<{m&5PS%hyERQfz5|Q8e4{yd#cl-ZS&^B%*@r?)dUx?1g(ah%Yz& z^YqB+Wbm!Zr;099MA0??*VfP%(ykbB8=l}R78u81(D!EM>2Xl?IMEh zF!PWa81Zg+DSSn0bnP4Wmsz%p{xVBG-z*`;VFRBp66gG;cruPK@6F>EFl1RI zjO}1De~BUC_U?F+v*>Pw_3m#Relx zDh(7%kJI#iSf|oKel-o228K^ow@R!@jP-g9rZi=YLbyipu04oY7KCQ48W$cfv$hzx zW+~Bt&B#GViynrSaz1=_BZ28eysvPAHDmb3Dk$EZfUS;!X{9fwpVQGCCftgQx3;Ko z`leAp2=iMyYg9T#5l=G(p()Bpq=?*D#@nX*2{#x`tK4_y!KF)-efioOrK|To`V%7F z?v(YVoO#lj=9t3p?P5IA#tGQ5UayC%t?eP9_pEt4h$WBKW4Me2VgTFzEL{6Sakf$>Kh=wqH!DC9=3zZ)}>(TL+6&fO-zzU5JAm0 zit7zj%iLarSJ6y6!mwIvggI&n4uq+xvU$!SeD@|#MjCR2=Tal_SP|Gs)55CWA3Fw; zTL-UIiK@58F)_|v?d}znLjdsm{&~7rOy$k^ui8iav8-IZ0P1Iu2-3)(?L0`VNp*Dg z$>8Fmx#lFI#ObaILHhWp=3^>+GxbDs`jog*tU7%$uK{$+3Uam zo_U^M3j6yTyfH(1jkxYQl!~VOVEmSz>y5E_dd|L>%sB!x8axDL$`voY?LmOcvN?6V+~aWtoJHi(3^&wJOW2ImUg zI~B;)sOEs8y-UCQQOCAQgP;P{P7;s`0~V~)MxjoeB7?1V&{~Qe*L>dzKH6EU|4r7q$vu1TbI#ts z{oDJV+%u{tTG+PAm)aqm5{_rr--0&IiNF1m*+K9(Z}pvrF0e?l#Yqg)A&Y$I2RL5! z6Q2Z4e*i-eWLW?~IPi;tO9(D25MJS$2YjFKyur|OdCXpYNZ`gZ_FO*Zzx(C$85{`8 zhwxA`0fHpiE7Gw*MF-mFYzPu3+3)hm5VVwFem*~7D3B_mpVh(%z>g)*m71xAaqVHZhpkobSmR(O; zX2LGJrCVB$O*D#^S#*i@x}}qvXnoT1A?;Fqcfu*%l9S!hrliDco zu}f`9iFW4_pdG?So$5}sVpYqgVV}HX_?wK?&aqFSucc~r96pLpaY%c=3>|2rKm0Cz zb{^Y57OxS>>6R6=UJb{o;Ep>en>5_9CT_2W`@M+UuVG7?xC0J$zlb|640Q5l6^Xb` z1^cFhb3+l>+r%DiVs8?0Z`=#o#N*t7xh^n-xpy_(Y#xbo1LjOPXfkw3teF?%ulmm| z(TR^FrhIV^f)WR^2;bSM_fXnTZhV`N_C!YePDuM1q1_i!Ka|nN<<$EKZ7)K)S3_$@ zX!lU+12^@bDCs*H^+y@C4Wa#Wl4P6o2%p-09+XojgtYx??VV~(Tyj17EJ}UR7eT5W zK9VF`?c<%sQ}xDe>8ZqE99{z>bfURBSgi8OOg*qWo3JkRfKo_!XA;X8y+Qt?bYZy% zHyAy+3ijlRI8gb&y4_5tPNFo`&vxql-?={ehpvCZKs~O{crKDdmV?y)F-dt%T&ISe z&Eq7$%#E$_Ao=y0MNRC<7g<*@z8A6kHMECKY`}xNAoq5*>mJ9c;kqF5gq>!$(_~13 z0Hl>MdxuxzpKJNnLaXa;2bU-q^Tu9gt z;rFX?@MC^42=vK%_3psXya;)y46;06{Vr6ip~6mh=PY4&Bq0&;T7H(W({i9Pfv_`D zMW}#umE|*RgI1Z(82$Kv`9b)2d*Hjgb>fP%sYrMh<52J4AKww42wiD;9$>#iq}TL9 zK@m`(Aa?(M!`uT}+QzU9-`VN^Nt5_*<0;UN*zA{$rhFSlt_b^X^P4rwkYdb<;^ud? zMp@0tFdXCsL1s$^Xik}fYf`8Y(;~(DPZHhfK5UX zL)64bhy56NLJ^)(By7Sn%7rkAaY3jdF}j2f62mRz5e6UzU&Qlcgo_?9K7(S+8cur5 z=fTjggV0bpUTs_mWu1hP@5m5mGek_p3j2bg%p1^91zwF?=wZrkCg{^xGdV8Byo77y zYa-L>Y7=}12M-CD-YLv)FNs`NyfN$=Ck}QA=s@DHk7t@6aA(6?%(Pj7?3Sjlre^Qt zA03mvIW9ORJr*y5Iw(>nUc#!Rm_@S!7+VAkMGbz78@~+|)nM0HkRH(-^V_q+FuC34 zBeTL)l=GJsbS`WSkMD}T+!@z(r3sC{5PQkiNs-z0Iz`>L-F&hG4N z=%ZZiZ1C!QueG5R^;?U$ty=^t=89Q##n7UYcRugEJO2Ln6a8aVcSrlRqc>dre4_ob zBXxtO+|Y8n+@$4BisqifL|t*>9Mmj@Rz~>9CPE7oNhpbh(*+913Iu;qc;->sxx*Rh zb4}6b%gS`MqZpWw+tx(HE^}k!?FMfQ*XG3CqpnlvL7uNC|yv(T#g@KR zP^{dNsVFGku4I{TY+}O135ryUmoO_SM=mW`c*)k*>5YN#EK>oS_~yiQg|7B2CdMas zp$Kxyb+zr7ZPeVPk7xELe_uMkdj6xqM|}e&Ev7OpWOU%eRuIITuBwcYZ`d1{w?}g8 zSnGrD;#4qG2l7RgEU6r`DRz5+Mc6$}>;ahbwS&VazT@`s*DozHP_(`@7G}2#Vg6)O zFuh`|1mLf-Qc+PU+ge;!$ujkDiOpM#?fd!+wWt3!2=LvDoNVFUoVvDde24VFB}eL0 zjat`oTOPhg*dhL=Btd$Q`-B%TrP2gUE3|fk4Hda`Z-V9j&&Goeg5CUBRVieNcEw0g z&hcQ*>Jy{*FrN2^l&-3@k)RFC#@lN{f;o5aVKLqqYFAat$eSGYjE%@Ul-yO7K4TM{ zx&BUY$hY{g)!xp4uByzDW248j>sYzRM>dA!zP~2qTd<}|;ho3m+N7&BVTY-l#FA9* zGPkZS;b49C!K38|y~VS7ocOSNAT&NvyZ~_QxQjl}gLhaDQj%Cbl8kgZ^$iOG6`&&Y zSGi6;)>9>n5DjHqy8;hdJ_M0uGJ@$q5bY$*vr;pM4aSv1-04dfq_kxsr+MM;U-#^;OO`c!J>8J>jblRPW^2v`6&NQf%MqacwldD{f;VW{L^*+ zl!96q)uM|ltRbm}`>Xp5)u%h(%cySXY{=+)Z{NjzgQqV#S{p=HPj?Q-oPMuqm~!=R zox^|!9mu7_Yzsb9u{*0mkzZW4c};#{S>c+B&2Iq$6{||iOA6PNZ>>x(-dt3fv~|0O zOOpA9eprN0ke2BlY)U&u1)7lAerqFVlX)(nK8fAlN@4hq)I$X}T!?<(I~R_H+(CjcEJ zEm?aSyS5Jgw&df?GQj~2j%qjw^qOBzbU@w7DIT4aKqZC(o@>N!- zRC)|lFD-fm#O)Iy6*CqqDk?xL^LUwDmcO+CBtAt^TB-nh#~XJ{gdB!Xf~eQmHRc{4 z-MGH)r) zYO9KVb-1+MJ$ARJ|K#^~j5o(8oTI({XZt7nUE`pOhm@doe@E=iBWF9V_FXizdY?9U zI@DvN{KG9q*Xf3DJ%S86Byh>Y$3*oh-=JFa9{;E|A9EVXKR-(66Q(R!(lt z`mY*u*XJB(an^D--p0YZ0KNXf?b%bwnw`)Y-+JMrn9g{?rHF-Xov~e>E>B>Y!j}`D zO$au;fLoEjWs@TRw`}<15Gsg#AN}XyMFVb?C-M_FM@?gQM<)iHz5TBs;1kts5d6Q9 z$>uG)?1tJ}PtDTRi6GElMGsTHp=(HCVQI=Ghd_LlAiiI9lSf)^s~dWYPxZdt-n*rz zx8zoD=~!>sv~-v0!0uBid+cBAb*1c|{6dvZm+^x5L?K6}HLCzxX?12&SQ<&mifXL8 za7P#(CT8kqGV;ooGpEi8=qnD=750?q>Uo3bqtnago}(N-pI(NoJxP3Aqw!$ACw5_D zRCD8qFno@p~|*av>DArv#PgCF!{2EPXPccv?;hzjM<)F36(y9io@o zG}jMV)U_upNR4>jkdUMd%a0n7hc6T}L1U*2LXIOAC#b|#aL~-zhLf01hn9dxPT~dL zP%TB<8pf)kr0got*7$UxBIrl+vxqPZ>~H2q&hv`lt!&<6mPLjUmjdVt#Puu8dm`tk zxB%OQyrEMp0pkrnetsUmI94Px{`{`@VyQ!3N6J)~kJhk%>H0%e}9rw*SKaLW=+S^%@iUBAw@1dLJ+>uoo=)P*2pg zG!3h!3`eCY7aggSdT>Tj-1H1D*N;m*Pg_0HaF~6zec#~unO^NV@hs=vXkvj!bkphK zjPv(_;0@lbCYAtsghp(yh}eB0V&9Vpe_SNvy3x>gA2jyizSGs7I#~_8x{a8wolU2& z(*$Mz*2-0zQ%bhxDM~!ed`)Ib($+FhTdEXq-?XW)f@SQJ~Dw zi5Bcqt4>Du%0j%djb1r5hK)mpw_Jvu>I3f>5A2^jP&<9#nA*FsrX_*{P#Ja1j$ zS^>G&bFW#u;TpKteSF17*L#OLu|JWIvloPx3SYkVRA-403 z=WIMjlvzdoGP$MX$MdVo&Xts{RId%~RyO@r7e%U2?rA19dzNSnwf28<3#>Uu*=+u+ z?wvGcGms7RpRWY6;60xxo55a#?cekFVo5L@H{gp~13i^t%r{t#X3oMv-pUVAAJiK8wl(@)E8=sWy;3uZ@xn=% zp7%MPzZsX?NO8HaD(-AuoD3V6jTN|LC7U6r)b2DrnrAxvWlm#G$S63Su{hV68!YVR zkJ<$Zmtt$0jx{v|(C0Q;trQVEojwYY1>|ysptLD=VHaC;lqAkA2fI8~**t=d!khs| z6-=9yQ&WvsueO#lpQ@?j@@^Yp4@zj)sXu6rU7YYqY+_gJ6=d<^&bZdaT^AA&>pANO z*10p{r3muLEWgh##B{|cTKRs=U<5(V2WV$Kg;RLuJ&P7`(g>%*A3hua;I|yEF1rT# z?4KmCFftc91hzJ33wB^22mm?{ODF(g`{Sf$cyXZbdEss!#-D}Wr23pb#ws{~X^vbx zSH+Bpgy=Y3Y>n>i_@vADGPFd9b3!I210rfQI|yHwReegiD|e}hde}7x;maoR-FV3) z9&2mlk?*=Gk<4DEm`(_S;zsGCFmoW5A+j|!ktfvD$X!4qC-A)<2PZM7?RsSSzd8J6 zLplXEl#ZAG1$&X80(+@&z0kv*XQ!>yDvHs{RQu{MkO&>ha**c|y@F#)EJ z7J9jHk5FOD4TNs-5UE?3Y$b^nkg);q0^C)g#C=Y0cL1e2X$TLL2vx))pMH!n zF_{2SQOI-c9J|A)!Ke|Y8cwvT#6yq8+(~DV7-BS&GBr?6u-g$t_Nj}>lS2p*zePqp zPd70m!CaVmt~&}RiF)oxF!6ErA}!s-Cp#&QyYz?K zR@mhoyaaF5QixQ^uO%(0*9&3v>m};$6?6tJ|EQ1|lMPafovVs)^F)VniBd8dq}Sf> zy^9!~J(lkboy7`#_6oD1p5^u3FEBH~tDYtyqvU~>dN)vs{rm%SQI_pBKGZKQgRTj`c8f2C9>uN>=nJ<=OiPU~Nf zjMr8^|7~RQN>eAl@oHX8a+?0y>ruTSZB+kyWVx2+{%v&9D}79o`f8q4m7G4&lgd;Q zo&?7TJ%~ilFVJ@CClT2b8|`$3CsMw&s_4(mnC45Z2z>jmnSi5*Tjw8%|(-*)h-r!a?cJZ1({ zKa9(>6;j6*=BYhY&fd~th$T3Tu!sBdmdAnpY}}bYxiovFWV)xcb=4iRhY0f}41%%H zR-L_WY0Z}}C$x!zR&W6;iGafDVQFsoZu&rs>DsmsC0XPEUk)VXv*2m*B5D3iJeJv! zD4S@W^#)7g3tE3pRp?pWJglGFaa80zCI71&PmC-Hmcp=M9(F!rwVlpB0MY0&S7v*X jjNnmC^N5CdNvm*8wnEDxgkk>E8$u%g|Mb&egT?+Ir9hGJ delta 5688 zcmaJl2~<;Ox;MGWO#%rfBtS4M2}@Yj1ThG>B!B@CEGUDxjR_zH3ju*LxJ~we7$^`> z6l^1)gIi4y#8`C_L<9;BFfO3fB1M|xsE_)5R{NaJ{6VpO=gfJWbHn}C|J(onzb_T2 zQ&Pivio>45T>77H_XR=Q0>Z}sTW7&hb@`MR?;2boTOL*Lw>u8A zC0hPvwpDKA-g0NNfK+x(wBc(K8@hoJl3F@vpTKu`vRKtCW5 z6qB|#0R|*8pcVssRJ8dKiwHpvkc-*WM<~<@U91xm)pjx4iHSy4>13|71*<==&I+Xb z&_L$miRh(wbps)*BhkTEqa!ZED-BT*O>o4p(o@eY$zUc@d=q}P6Xjv>aTx~m2stI}6jMv%HkMMP&sIWqS(XE&jOu`m(*%WrcM0 zUUFICB)reRY`4DbPt~|p99&6hS%DtMgW!l+m;*%dRV1C)H*QG&gU%HAas=r<0jBD6GaVvQ?GT|6l;@#Kq&HJ1EHCFsu zXrs$^DQsp=+GEgiJ}4#(!j~-}m%hu|^`E?|hBy4bF0C9^mc-#o8_IU*%l6C43i&7z zn@h));LG+j;KKCkLNjh}8*Yz3E}V&7WdKpa?JdRCGH6l-zf>2xrjGMA*u27?Vx)2? z{!kO!R!@JvFQ58HFfIC=YC5TgA6HIyIC$-||C4WcTN9Kv*7s)IX}U>xOqNwU7SOCB zP%IEsP&ub_2_>;dt+GrGh_D788q>-(-z3P?mD;a91pZW|eW0CJlzev;M1vrmU1+0@ z>u!t;1$hYZXmE3-Bvfk&?ATsRG`f!Os)cCL0-6wo)WwkM*0AcLQBHA>X{mCjEf%Lg z2GFwj6k5EF>EYoZcBFX;1dg;dmO2yUtNX+w0c&xE9B=FN9?td(S6iC*&><*S_pQe; z+v1r(mT6HBFsNZ3oe)d^?vh~aDgo`L>c*hPcw~T~s=^?h#nacdqq={s zy5{8Fp*)V`GGu7R}rOG_?uLfS*SmL4Ubhx0hKVa!Q=3y&tQMn0QFc5?*P z%H#%SkKA7u#q>tI-_(7|^pVnzURq*|;BilL+B>e8NWxJZ#;y2{#*6q$wqU}%fQ>Is zvZJcPnQD@PV#h!yk1^>j261VRjF#Pbp#S(mU(-mvY3St06O!6gQ*Tt;Y}&|tpl`u< z9yn<-)%TOGnd-5oGpYC4Y!`N&GcQa4T_*{r?0SNVX^odIgm-Y-yT0)WYYzdDf)Iw*#~Hub z%46s4C=h36=14xJVwgk_%|+zS;bcZ#?1DFwv<(8MEhy(Ki!&QvQUF|v-~g9ur1lK- zcHq-Dz$YwsQcV&nkQhcW?L3G|SVU-ZsHvTMr6a5>yv4x15(eV)(%u#y#G8xtB1Tjs zJapOoVB%N`ee;&@CJ=85PT>@>>&8!Zd(F7(ki%n+0~NC(PEF``*LNcpP8rD(o=YYc zk8!Rl=&kTk;E41JCp@C9D>Up1N!ae78cB|MaDBSFZ}jO5kG?jNygrta^S|jqMUgGh z4@Exz#WxFLL0(rf(@wPT+%A|MUQF80k{y2H2!@q^Xkbpu1A+RzW8^zG5R0LVbi*6@ z+1&d4(D^}am4Bi{Su+ifAnrF$KDS?_9eNg6sddPcDr=s>D4hGvmgi?3-ZQ;|DTw=; zQ*%tj)4|V)l|b?xY_W4+bNczZ7YV`rm0u6$Ev{Vrw}46sAgM4v+1cd3)h>FLD^Wn@ z77U86Bnd+tF>8x`jjTPOl3vL@-=TbBx_#LAeP%m`R^_d&I>y9z8KeSEN_w=xk%3YA z@`!oWj*Ga0<*!8wsM>3EoI8(>@hd+SL=XZkg@xkG9I056u`@b9 zH@^@V?52hr zsVgbYRFw+!$^K!x6!^4ZMWD%G4DGsj+8EN+9$>n7;nI@!`6A-*PIW8|y>g-}!j|q0 z&Z?1mE~cL!82m;2;@se&=efJi4W7@9fAQ?>bNd&IhAOK9Y{9plzirDv6V~{-uZ3H! z`)L_XdQ7>mB_lpEx`na#Y*7m+jT}Mf_O%7X*6x>W)7`zJ6Sq(G4onQ3n!bJg!S%k; znR^YRw}-8oM^7iLJbM2Y^7>7Vq5sj?3r5amQ^ci^-y1sW3_8NLwB5HYwf2m4MUlE+ zmf7oKd?|KW220!{h3wGRKDr&gen`yXa*owsr}g!bp0J++tq|>HpCxzRWpS2JT#Axi zsH#;3YC@F%RWRF@!wd5Zb3VxSwZIXM}(nrvyW13bs)-bz!la*qeAqcmSWEELB%|%}Mc8 z&NC&cLNy?jz3vr)wUU(8fQZc?iOb&~bHD-h&Wqc>JU;iTU+~Dc2EB*7T77yl~)1Dz- z(B^>-ZM7iYM@b6amCA~TjoY@;8o_)nM%KIJk zBJhui1N+J<{99`qDeaHX*6etiEy!tH4)+uMQLKX?ms zf|ezBY?^3H+g#fu-3GRVhKFh6b#-?UFXMu4=3KeXS02xIXQw=FR*8pKrRU`4NOp<~ zH;VHLa(5Oo%41fSml17h#&t)>x4D9S#q03`uP`2Ma<}JOqvt=l0=hblIdT{Y>ypRu zRoO}sW?O4ac}EXMKoiN4Ee#CUt>dnUH;dA3jZaq^>iaNqTBcYbvg_aopc&nP0B>|M zMb{j#2n$1;lA}Ta<)$d8L#z&n)P65 ztET?``tzUJw}i<5eAKZY*k0u|`ufRh_I>AGpwz6wE32AEq_5S7g|VHMxE>W~%Jfki z*i|=U>$pBusrqZ5wvGcs=bt3^t1E3&Vks;01f#s;z=@M1iRYgHL?~<52?mepGvdA4 zk)5%D{b?SFY}VQVA-q|74}@l)?j6Jz$3Bg$VfAts>Vr^_)h~YEpOOwS#J7 zV*l|2iEG`#`DJKCZ5komJ$kghKac6SoTVj2RrK_0R&qKP5O0f!(;|minZvITEuKY_ zpj`H{T>4J9-Lbe$i#=xL9_!J*+opVXd9i!agIBd14t-NVxT^o+m)S4=MXsT6Yp8FN zRKi^`u_ZBy_j(c^#jI!Jr8)y@j6?iTsGg3FS!*ZS zrboMNN3GfkaPXQL=(UbMnowA+)1y64tphVMnXCh>FLTeuYe{i%;KAVH#I>pcjbi<; z7$`=a+|aZw?UBpFhiUYON76jDkAoR;8IBTzopjHR-24o2?vC8dqT-mI>F$Z%;ena# z2IDpL$dECvsBx}|OZi?ym69s_c2}TeD}5X(ONqaka%`h(64qhEnm?psQ_`?0XADx~ zc&Dkg24pIcpa{$?U0kxWun0_*jp$~A>z9YN(;K%Rov1UnMQeTxDRUO4vhTkVruOoD z;|8i9oBHa9uHEggtRG4w7~+9!@t%U60*U0qU@F>(3GdfM0Q^o#ap9h%{2WPf(MHuO zO8sJh%gFy+QoOSeTeK0Kin^G;JP2NFJFDAn&eh=BY`aPOfcyCGZ_=dzKYx>EV0773 zzl&!%DX=}Xl9m*L<;0SQp^J8**(fi&W{w?4@3TuET%q^3JMR`RpFm?VF?8Ey-F6u; zK)OMX*ozOBIiaXHQf+7w{3&Tn6m2|?f;v#onYzD(Et7txhH&}jWc-`(z?O@Fx|X0D z_Mm;&QO~vnHNxltyI%-r+UL+Py8RcHF^JK!PY3VvlGmWn=+RMB03kB6s3xfKY(~pg zZXe36$D-joEN?Z9{Iut@qIKXz5meLyyGGmVGD7R`A-7VIkXIoc?dT|98m)t6P!a+Z z44Fl9!r=w9fJZE@#+4ex!|+No?3|UGFD_;vtNP#-W1Lq4&q>|eu#$^~%Y)&?TY!I5 zOiZxttAhi0Fm-47yX#N#QTBrn?JsV1Epg_=F^r~6o(gD zoNGpCD>8_z0(hh1jh00$7DbW2`lrJow?2yjMZv>{@8w68k#rstodLa$3@si;ZXhv9 zM02?SC1cXFn<2z$TCSzjA-qDc@D<8+xi?}5DMS#`EJ7?Y+z}5g8#B**if?01;YiJ? znoU-vQjz&y(6X=^&A`kHo|!~Y7UWBRn_#wrtYs6st8i7cIPsVaUyd64X}CTrkjNmT zxKO0Wij8lSV%Up`hz>L9ZTK;$0Vmd@3uGl^BoI0Z4F~`-31!8K^y^Bg-A#;-b zQ3|N&P0#~Apo&o0FrZdr^(573HcCh&LKq8^B(W?Q7WME^d@|82bK$eB*(`@_aVQI_ zsKK7*%gz(6B6|eePv>$VGDf+~s@{MX5@|pbBKAI}p_^$hL@q)qS`;e43#rIsjVK@g zS|iHqo6bT z9k3GxMXx>=Ef9pfw^2lz7Pu(pdG}AMWy9E1S=opRq9>9SBPzjV))+%^jg`ij;IHCc zmG94$!EeVVky)cfN}9}2GR(K8Cp|@+3GzFbJ{UrbGEALt{zagN=>KppcX*Dxe;pUAXAh)8MstAm8@Jp_^<_prH{qrG9OZV6-ejl=4i2amRt*&L3 z)zK62vJni6o=8`PYl`Tp=~XPcRAl>2Nbi}1KzwiO+3zgA6XFk$nf>eI-=Il0AI+Yc zr$K&EUhJ89i0K#8&7Piz_cJWb{o@8$Pm9@0zw5~h5g&4XsY^=S4- zXwomqi~Vw*1_f`3V!yUDL{|T;9EAo2FUmRLIOq;)6%PU-JAE^r^CxnenSZNcp1(~bFBWzv3@s;I_Npi(tk67Bek)7S|#vtyx5R|*LH#*je*WhvK1G% z`cNYs-YYw(OFLxC?gy;?P?JBrubfbqt@GeJOO;n=3CqUHj%5=}zYF;YCf%^cVR~u0 z3}WIDdQP3%3upP@$w{$ug&XG79XZG#*;cucq>iMgOgfhjR)vYnM!ile&5kQRT7Aao zO!(;6d1R|kDS411Vdz)WR_^Y@hAQD{ctH+I;qZS?FB=J4jUR-OV)cY(~!!|beS0L_S>5d zl`OSlcg@jTdm+(s+qAQNxMin9f2XnJx^X_qhXCNM2&qQ7=!QG9(6Cd4jd8d{`zzUs b^1^McD8T;$)xf$y0UtlHW{ diff --git a/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridraytracingclosesthit_vulkan_0.azshadervariant b/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridraytracingclosesthit_vulkan_0.azshadervariant index 1a0ec0f96219c3e202a5c1de3dd1b98575b7f9c0..e2f5a8cb502b189e07cdec95a357c9d43f7c880f 100644 GIT binary patch delta 2793 zcmY+FS#MQk6o&WdU;zo(K+3q3vc^)DWn;3>&V124SU>;l_$*tKHDn`j zo)3OV_Q+(Phm;?c?C|A~xQhsj!b9wo~CNv{u z79y?J2FzTPbY~#njg;@o``fykXQ0XGSpqvNKi0NhW#;IoSuugQ9#|8rt&?&{?0Kw9`3q|aZ( z%k^cItm?FQAC5nfcBgG{6zfO#EqsPj0|V$~AQy2P(2a9y5qB-Rv2p{SD_uqDI@;|bosD1qx)No^KL}1=$sDr zry^U>O_cm5`EEkje<6s%ThYDOHsuP9i9$D{%g34965oQ1{9Dk;uM8hxP#mxw-GDgY zR&)y#8@LU-*nlySe>=Lo<6ey10c>hJkaOBgkvrVKJHG?NohyH1wC?CmumpGyc7nS= zaCf5zcTa(HP4@yPV%~kgywgn53wb|~?*zZo{x0fQ0}$0)X@Cj4fDNg~6b8{9cX5on zvFkxQaQ_`3rtko|d@sc>Lq1sLY7In8<)K8xrFa-y-*ga#A3^spxwsRLqU$fNpV3-2%l1p2RNZ8x#3Yq07geaPoWH zzXwb1Bh|g{2a=9$0rF|E47fKBYehZ-^dBb1oFT9u)ciG{cg8zZ<7z+Q1K6%`xM>R= z1jQXr#g49@O?=qTVY|mz*YoK5rh}Nw3+U#_#kyWZ*FRhs{Sc@$@W-y)mqAhJC3FMg z(3cZmynKi874waW{8!NBBmW4x=NB7z)j<~zFenaq4V{4DedXvj<-u~XuGi7!%yTtw zfZ}S7VjENQ*H+_C)}QcE7abk?TXo02Vey;bPjPhmZXZK00l)Dc;MZ&+@=Z`&;Y4g3 zYD2!2_;W3JnG?W#!DDjd1F}4%ZU;IzH8auw6 zC((OAA7B!d>X$CaPjL1o(qDNSuY_2AI=WRu(9gf;-!-)6Q!V|=SDdb`>2ApCOIemRXJ1_Sx@D?%;1a}mR+lwmmw_Kv zF6t$PzF6p`h5j+0Xxm(B%#XEomX=+ZZ_7(}5y`Hg#VYJ-VE@o-;I)Zf3$IIbC%gu% zKW>TkbCP`%p_S%uF-3k=>V{YabqPHILgB^}3qJ9r{YR$Nj&~8&(~ucHtQT!=N7Q zpmGIv6gb2^cs;A@3m;~|=h@u=^!uA7Pv4E80*qO!Zw#2{%8_>yoZRX{aFV6g;}{19 zEVgJTkGT`8-;H_DHv^Aij^^rH3ST#Nl*o11TR|=80Oo6>egbZMQCG9v#-ryQ##ujW1JU44c-p|EXs{P< zJR10hxInsryU}UAIZ=NP+_8@Wzr!(wC$F5(48xMU9o{sA{THgi`C-XYoI%6@e6VBg2y09bhxZITUIssy#X}Ixd zIs-SJj_V{ktv4s?XW_=9e$Hk#NH_2XI&CnAjs|bSjmNm&f=>e*8;fzh4L4?;qj?9U zqj?u?PSrrnW z<5j+3jSH9MOyM-(&xSR?f`07#pb_jv4`R<2zW68e0ose@FMJ=u_1P8(3gM1)MEz?8k89F6fhO#eM?PCtHhlqdnMjMLg<1MSDW}V;rBsm#9Z5YK43b nmV!zCF2~LTPsGJ-V1YR!U>)#NU5}m5C%R`Ef9w6`%O=!+3^LUh diff --git a/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridraytracingcommon_raytracingglobalsrg.azsrg b/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridraytracingcommon_raytracingglobalsrg.azsrg index 889e5a51fe..c9fa0f4e1c 100644 --- a/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridraytracingcommon_raytracingglobalsrg.azsrg +++ b/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridraytracingcommon_raytracingglobalsrg.azsrg @@ -251,6 +251,44 @@ } ] }, + { + "field": "element", + "typeName": "ShaderInputImageDescriptor", + "typeId": "{913DBF3C-5556-4524-B928-174A42516D31}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeStates" + }, + { + "field": "m_type", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "3" + }, + { + "field": "m_access", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "1" + }, + { + "field": "m_count", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "1" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "2" + } + ] + }, { "field": "element", "typeName": "ShaderInputImageDescriptor", @@ -433,6 +471,26 @@ "value": "4" } ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "4" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "5" + } + ] } ] }, @@ -451,7 +509,7 @@ "field": "m_groupSizeForImages", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "4" + "value": "5" }, { "field": "m_groupSizeForBufferUnboundedArrays", @@ -515,7 +573,7 @@ "field": "m_index", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "2" + "value": "3" } ] } @@ -599,7 +657,35 @@ "field": "m_index", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "3" + "value": "4" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{DB3620EE-8854-52A8-B421-BFA17E6A687D}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeStates" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{5C8C0729-5D41-5299-80F1-395F79B02D70}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "2" } ] } @@ -3217,7 +3303,7 @@ "field": "m_hash", "typeName": "AZ::u64", "typeId": "{D6597933-47CD-4FC8-B911-63F3E2B0993A}", - "value": "3506265182085703910" + "value": "2492931172876496388" } ] } @@ -3459,6 +3545,44 @@ } ] }, + { + "field": "element", + "typeName": "ShaderInputImageDescriptor", + "typeId": "{913DBF3C-5556-4524-B928-174A42516D31}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeStates" + }, + { + "field": "m_type", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "3" + }, + { + "field": "m_access", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "1" + }, + { + "field": "m_count", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "1" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "2" + } + ] + }, { "field": "element", "typeName": "ShaderInputImageDescriptor", @@ -3641,6 +3765,26 @@ "value": "4" } ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "4" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "5" + } + ] } ] }, @@ -3659,7 +3803,7 @@ "field": "m_groupSizeForImages", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "4" + "value": "5" }, { "field": "m_groupSizeForBufferUnboundedArrays", @@ -3723,7 +3867,7 @@ "field": "m_index", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "2" + "value": "3" } ] } @@ -3807,7 +3951,35 @@ "field": "m_index", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "3" + "value": "4" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{DB3620EE-8854-52A8-B421-BFA17E6A687D}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeStates" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{5C8C0729-5D41-5299-80F1-395F79B02D70}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "2" } ] } @@ -6425,7 +6597,7 @@ "field": "m_hash", "typeName": "AZ::u64", "typeId": "{D6597933-47CD-4FC8-B911-63F3E2B0993A}", - "value": "3506265182085703910" + "value": "2492931172876496388" } ] } @@ -6575,7 +6747,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "4" + "value": "5" } ] } @@ -6667,6 +6839,44 @@ } ] }, + { + "field": "element", + "typeName": "ShaderInputImageDescriptor", + "typeId": "{913DBF3C-5556-4524-B928-174A42516D31}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeStates" + }, + { + "field": "m_type", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "3" + }, + { + "field": "m_access", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "1" + }, + { + "field": "m_count", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "1" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "2" + } + ] + }, { "field": "element", "typeName": "ShaderInputImageDescriptor", @@ -6701,7 +6911,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "2" + "value": "3" } ] }, @@ -6739,7 +6949,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "3" + "value": "4" } ] } @@ -6849,6 +7059,26 @@ "value": "4" } ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "4" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "5" + } + ] } ] }, @@ -6867,7 +7097,7 @@ "field": "m_groupSizeForImages", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "4" + "value": "5" }, { "field": "m_groupSizeForBufferUnboundedArrays", @@ -6931,7 +7161,7 @@ "field": "m_index", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "2" + "value": "3" } ] } @@ -7015,7 +7245,35 @@ "field": "m_index", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "3" + "value": "4" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{DB3620EE-8854-52A8-B421-BFA17E6A687D}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeStates" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{5C8C0729-5D41-5299-80F1-395F79B02D70}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "2" } ] } @@ -7104,7 +7362,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "5" + "value": "6" } ] }, @@ -7136,7 +7394,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "5" + "value": "6" } ] }, @@ -7168,7 +7426,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "5" + "value": "6" } ] }, @@ -7200,7 +7458,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "5" + "value": "6" } ] }, @@ -7232,7 +7490,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "5" + "value": "6" } ] }, @@ -7264,7 +7522,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "5" + "value": "6" } ] }, @@ -7296,7 +7554,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "5" + "value": "6" } ] }, @@ -7328,7 +7586,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "5" + "value": "6" } ] }, @@ -7360,7 +7618,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "5" + "value": "6" } ] }, @@ -7392,7 +7650,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "5" + "value": "6" } ] }, @@ -7424,7 +7682,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "5" + "value": "6" } ] }, @@ -7456,7 +7714,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "5" + "value": "6" } ] }, @@ -7488,7 +7746,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "5" + "value": "6" } ] }, @@ -7520,7 +7778,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "5" + "value": "6" } ] }, @@ -7552,7 +7810,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "5" + "value": "6" } ] }, @@ -7584,7 +7842,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "5" + "value": "6" } ] }, @@ -7616,7 +7874,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "5" + "value": "6" } ] }, @@ -7648,7 +7906,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "5" + "value": "6" } ] }, @@ -7680,7 +7938,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "5" + "value": "6" } ] }, @@ -7712,7 +7970,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "5" + "value": "6" } ] }, @@ -7744,7 +8002,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "5" + "value": "6" } ] }, @@ -7776,7 +8034,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "5" + "value": "6" } ] }, @@ -7808,7 +8066,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "5" + "value": "6" } ] }, @@ -7840,7 +8098,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "5" + "value": "6" } ] }, @@ -7872,7 +8130,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "5" + "value": "6" } ] }, @@ -7904,7 +8162,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "5" + "value": "6" } ] }, @@ -7936,7 +8194,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "5" + "value": "6" } ] }, @@ -7968,7 +8226,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "5" + "value": "6" } ] }, @@ -8000,7 +8258,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "5" + "value": "6" } ] }, @@ -8032,7 +8290,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "5" + "value": "6" } ] }, @@ -8064,7 +8322,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "5" + "value": "6" } ] } @@ -9589,7 +9847,7 @@ "field": "m_hash", "typeName": "AZ::u64", "typeId": "{D6597933-47CD-4FC8-B911-63F3E2B0993A}", - "value": "16848591129341445217" + "value": "1426176521634445605" } ] } @@ -9633,7 +9891,7 @@ "field": "m_hash", "typeName": "AZ::u64", "typeId": "{D6597933-47CD-4FC8-B911-63F3E2B0993A}", - "value": "4017610420074377641" + "value": "1425135468820160161" } ] } diff --git a/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridraytracingmiss.azshader b/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridraytracingmiss.azshader index 91c528661acd213ef512656f94c454c4d82cf4eb..84e773d9db95f1fc18b7e3add5bddde12e043425 100644 GIT binary patch delta 3097 zcmeHJYfO_@80OR#KMRFYEJ8b_u(q%YUkmECpg_@uIe`EHkwtBx0XLLOf!1s!+Ws&u z8xsjnwBFI_mSx>g_wA-rG0|j31IQ0FyU1{hC`_Pa(QJ#%oqo_3__HioHh=iE>_mG# zgVt&-q|b$6L&zqu847ehWRPE@g{m(C%1|dfy$s9}Eeu^Pa5gYV4AEkDVkpvUop4+c zp(tr3I=gLXbqi53CP!}1Q6lC>dJYMY6t|jRqL#Igc`!F#z=bL~4%;?{1){90s-b&S0G;Ct3v_Un72cte2|s}DKTp7YO>%|ijW!;P@}M5tVsvY14Wy0 zHF^}u82f%H49Zdxjo!WG+_2I~(7#oTZ3CKFM>*19>>q@uP*0DLwZ(da)6*m5Smg93 zLFL$V8l)a3r3`s0mL{X05uGCozkY6}t;yk9Z*L^j<#=2SR+OZ;Viynvj>bEfuG`rS z1Mxvy(DL&hCiq+X*N@H|%7b;sLuA}zk$=Yw&qWr}@Nm=)zD&dzzZi|~!M5q89k}B_ z+1*l{RkLs;l=9un8`AL&QY2pC+xB?pe0UO~=lbr`pF<_ClPaR4Jy}ar5#rok9qmC0 zO;N}d59bJ|TM?I@bc9GGHD+r=ou#tKR&J}r_^#I>-NJy`t))ed=V;hRfA*o-3^VMx`ZU|59XHy3l8m)u;;#P4&T zZtY@)v<}C-UNB*{&x)g7{R+Ki!Y^qOV(R50%Q?%x5-{4GC8=MmSU1EOE3$&0KA@)$ z=;;IcXAda%e6oA_vNwmg`02Ar(d_3hIf6(ULTS1r@@M`{p8=JHZ^4`I)c5Z)S}ZZf#JahKYqMtvtQ2pG!CK9=lXG{TZS@@ z_SzNDIf|c!@r3~HbT354Zvi~9uhzf6bq)2mKVUO{q{E^=0{GT}ZPV7uFq&58$ErdZ zT9%vqSh*$|{f7d3ttTW=+PvJr%g>WrxoA4s-BRGR$Zn?`%F86cqFqm*?>Z delta 2324 zcmeHIZA@Eb6y_~0-nA6USA{YI==dm;+oCL@>0-(1Fi2o?B;bgA1*dbk6~{CNfrc<; zZnCbAc$s#5#4T=SNZrM4ac+S6L&E^)RFsUij6k{xp~Pt#9O~N(w2MECG26fWdveaX z=REh^=RW7sFXAr;#kL<-p{)8Kj7Byn_@&a_#$70v?L>cw3N4Ea@_$T%vo-|!(QVkY zTZOr57G)D*_-oXJ{!td)KeceqAi|(Zo`jC8!6>US!8RtrRLyB}4?YfwGvL%T%bNCHclNl`zOXlY(g ziD=O73P*i2OC*TzuizUVI8M+~tl~nFNgka0)0r<`Z7kpLmij8#`Bvs=M&AI4 zNxyTCE9padW;INgqA`=aXJzB*o_sn`j4L-%;n))jV@kGnZEzfl#J4FHVdFQ|*%(=n zV8)_G$7C3e{FaTAZ?klLQ3zi9wXpQzRJHK6IxX3hv>0m!S+Jg`p~#f*dp$WK#1BgN zzSeefs_mQzr|cSN)~SdX6A>}3^~6KhEyd5)MBZ#w5icP=GBfZ&MtgkV{nUM~Y5EFX zbnVSBTf_MA=ROT&WbGvm_d9)S`S-SG1>Kd=T^ap98C_uyUuO!x`IYY+L7*V~?-wHZ z+{;JFoz)bP@%aktZ8fG65s_lvkamkbWza}gqm~E`CE!BpQQoMx&hJzz8mV>_dVOl? z39nNvRV{f{E|GG2B`HFFoc<2j){R$AJiM=G>IK2J47O|JT+#}&Rt+MZ{8c=mJ@F825b>vR0MmUCgS+j70f?us?2n5m?f3WBLh1sLyYq$1bIrRJhSKzx0T*G@tN~lBBjSmxPGZ{ tUK|%h(d3DNi5@ij&}W3HD(-d%KQ#FVx<*ntM+UjhIFpU*4+I1R{0+{a5Fh{m diff --git a/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridraytracingmiss_dx12_0.azshadervariant b/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridraytracingmiss_dx12_0.azshadervariant index 57660de9e803dc08fa613c1e31202b581e7f6bdb..b288bb7647484f5b9a304def316271a8b425a39a 100644 GIT binary patch delta 6330 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 diff --git a/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridraytracingmiss_null_0.azshadervariant b/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridraytracingmiss_null_0.azshadervariant index 74e6d6263d2936a48c0e8702b82acade825eb2eb..0f2473b60661c98f9fe92e1ec3d3c4f05a572d03 100644 GIT binary patch delta 16 XcmbQHJWY8+pCE_Y|F-Vg3=9kaH8cgA delta 16 XcmbQHJWY8+pCHEr^#a=-1_lNIGS&qO diff --git a/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridraytracingmiss_vulkan_0.azshadervariant b/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridraytracingmiss_vulkan_0.azshadervariant index 15d17bca27324078944b7ca7b9d4d083aea6758d..bfd979e588d5a15ff3c6ccce525bae8a2c8e6fa9 100644 GIT binary patch delta 407 zcmZ1y@F!q{pCF$m_chrCiIX2N#Auq|{5<&}yYS?EK|RKV&GQ5=F){K@E)Gx7iV{G(JQ!HPcCrK6%0R4uB*wA%y>vG-(5z~Cd7vS)<)tSdlhnEYN| zTvQXN5Cr&vSdM`kY>4P&aRqftEuaV!5QDrT&cMQ;4Wwm&m>GyAfP5VwEe*shKn#-C z1=3PL%rrS&L7P!~@?-^lQIHyt9*|y;90==9zOHasQ3J>V=>!35APeLURxl63*V?>W PF_Dc!?SEVMY@jdzIucCn delta 355 zcmewpuq0rEpCF&KP5jY+ezy%7Vl>Tfex7`gU3hZ7pdKT~=6Qmbm>78{7mCPD{x2du zd7X%qU_pL~PiA^XiF1BwUI_ym1JC4#Kv`o^@yT_ zcrP!_E6%{epaGPU0%E4g>tfBU@LbzbQ_GV$FL^h5G>IJqvKw$ump+9c` diff --git a/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridrelocation.azshader b/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridrelocation.azshader index e5446589e8aa26e03fd61ebd2324a70a84fec04e..d827fbe2a181de9df1ebc19f0eec3720dc8f81d1 100644 GIT binary patch delta 67 zcmV-J0KEUs$pX&F0F^0N>)y)_6N?q8|A%G~giyErSdZqYOd6EDET Zg(MNWle{=8vjd~U0SN6u149r1002AC9LWFx diff --git a/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridrelocation_dx12_0.azshadervariant b/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridrelocation_dx12_0.azshadervariant index abfbda4bae32f81f3f26e826b1567e3501ae1198..7d76080dd79fd6606d4302c5822ff903e8888cd8 100644 GIT binary patch delta 16 YcmX>UcPMUyl|F~s@}={pGcYg!06hT)2><{9 delta 16 XcmX>UcPMUyl|IK?M`mXM1_lNIIKTwv diff --git a/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridrelocation_null_0.azshadervariant b/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridrelocation_null_0.azshadervariant index c2689bcb40cbf967f8c0a4dda1c1ad45b06f8ddd..c301dc47904b0ef3153d55cbf01d1895204c4000 100644 GIT binary patch delta 16 YcmbQHJWY8+pCE_Y@}={pGcYg!05jDEaR2}S delta 16 XcmbQHJWY8+pCHFuM`mXM1_lNIFO&pM diff --git a/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridrelocation_vulkan_0.azshadervariant b/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridrelocation_vulkan_0.azshadervariant index cc5cc308183699e005b4afa210ffe005388c2180..2a077e0bbf7bafe71fa27bcbe10130b0e105f20e 100644 GIT binary patch delta 16 XcmZq5Xv)~|%a}uL`OBeSyr0|Ns9I=}@! diff --git a/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridrender.azshader b/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridrender.azshader index 9e62bc1927545963c08003722c3871870e55c28f..b88c7e4ec562e81480498d413d19812aa15012e4 100644 GIT binary patch delta 4966 zcmeHLeNdF=5qI$gUr)K?+q)CxFn}I#?|Xa%PW%X_en5b73>kuvgM)$|%E6(eI;Mo9 z+Np_&oVU?Mq6E@5$&5ybm&s`?AKKB$SOMEVIx%(xn>Kc|7H486He<&=?|pEWKb&c% ze`U%)chBxVyU*@E`|SPpF5M0L^!0gzn|WEZwPshN)z;KtL=%5b7Ud_)@xn11Iu@#_ zItO?>H9y69tP8{65^yp}7Sd3UwF|76e}E&G4b)^zgEShHLs;bYhM%-G)NgETYHQeO ztle2_rAQt893966>R1JfG2-}EjO5j5TEx?2I;7xK7>8nl0#g^-vGjc&o5NGE<3tt8QmE9mmW4SG%MA4_t)r9i zsJWyML!w@sId*M{rxkxqwIBXu~oDhf{sO1#U~!y`KE7**q_w!oRk zzL@=y3u-h!C_wq;6g2CVuo~Aj)G{gxM{;AF8A^6X5<`DQjjJvyVLhXYvF~D*r0DEs zx|wf~RRJQi9ZS{aAmH>BkvWrq@!6~naz$C3KjLy4DTf`*=}qkZMV!vQNcc{gNV=MUc`x?il{f7#_-i5i5npS(^vim?`4Y4yaF1Kv6GES zv98ziIst34L@75ad~{X7(QMH@Sp|t9G*|_qERc6PTmkFcTn+po43a2uD?G=7F8h(5 zS{H%p=r(rGG4FvcBqSd@|D<98GZFig)&-v3c)Dvbgixynl)QcU{_)GEH!sj(4P;RB zHmK)6-w?aI>PGyhl(-i*P=bX$v^NsrS=2PMda}S~srE6cER~i16lx|jUA;GYAgK7L ze>-$YMJL0zipN+=GDxuj=CRjHn(a`^YL26E8>FH!Iu1{jjIlsD94JT)F8YpEsKBJj z{j7+ECl>!1mb&|YR%5(TV76k&)&kc_Xkj-fmAC!YCaLH{(ORN)9#f#HY!jI?|ITOOru3=BP6HcMyLy?)6&6wXsiJg!|>-WGV zSMyhAb^OVfK8W6zIh+?rvzw*)B;fRmu{d>0735j#87RcTJsjTMqN4mg5b7Fmo&)}~ z{yUA|Za<=O+1_+;LD`#ask1G0wx!Ot)Y+D*{+=y$zO3)dFEgSq@0&v>K7v&Dv&m2$ z0@2jJ9R4=jV1J;P_2OLWTh4|FzA=TtFgdn=RP1GRk7&uh9;yT4$s}`tn9g2|;>W(d zl|x#LSQ$@0-UvR9WX|#Xc&v7N8D!W5`)0Ih*aYd=b=D_4TLfCX_jDY-ydt1ZU0c|6 zpfB`UlniLmu6@yCgd~*(z9H#5NZWgc#i|X0+g=?{hymQ4?KQNb2%h&K?-{!cpjV9q?Fb-~s6BA3JZ%vb-9QT^sSE56YE zHRDPUs{f+lU!R@6D=EohTt@yT*$M$zp@Udw(Ihq&%Up8F=|MMV#&0qZzjj`U=k4Q%?h*&}4nuiLZW55jT3lpH*p+}j^{>`AZJaP(IYgG>JHJ>a3ufDyZ+ z@Vt+PO&tP@-zeUHyvx6)G=T6Uy}q5SZAgqJkMyDKsDBsJ zh{EyKS`Xbll1hi1V3G(=*Tm_abu$DFAOt8TilzyUO`-nHR2u4&`<;~0kevNol)O~p zF)#Vh5(b;4e?_Fel8;lb#QGeFb&nr~bt=C1vzS{K=Ks+my|*L$om6GZnZ8HYgPt1a zd1^F~2$fR(2>yw(f)ytXx3KK6p)rE)ErX)}e*U|4u%htmU++8ZW>`f7e9C){BKe#- GbN&M-CmBcp delta 4211 zcmeHKdr(y873VA$SQc4!MRa$0E!vH7Veeid1Rn(0sg{`Xve;Ox2)jka7+{r*wrRCX zXVj*NivFTsEDn+x(R6&RY$7S~MI#}lBADo;%yjJHG?_7IAZ;hpYDfCryUQx=f0=3f zNBQT@d41=ebM86k{=N@ii|QGP^j4^u*+X%-7wy3pYEhV0SJjA;BW_gBHNhJ#Mos4e zcf(7}nM0dZVQ!@9ji}RzF`BxnwT*R+Y zW1cuzMDhD$J-9SY#Oc_V0=Ax55vk|&__5Z5T&>95MWjVly9W=nBFfeYaK9aklw%(J zv0cQ~V+S#ILqPsl1^Y{8__~fSit^>3IZqUev-gd-XKJ4a6irEsq3aTu*F}*yX`aW- zKjiuKpRH6P+mj@s?PCp2CtITAT;=e|oQ=J+HAqdVLBR?E4NZ}_|Bi(XK1CXwPkEF1 zO`O=BV&TDS@yk>ZQh^3ZX_iSv=zhn}2A2|#yCa<^mX9$mP-=VloXDC_aTnD-3onHO z%{w*tqQfGmoJ$(t_B2U@{%i3V?S45*7Yu5jI2-PaAE4SM;$emhW427}v8`oePMV3s zqJfoFP!@DOYw?FGE}XGjQEYd?zbFA^k^w`U?vt!&{=kLpy*4EEx^Qi=2BVoz;zX~B zRaf$_B{gK?OwJq}dCEW;aMn9;R|wjwA0QJ9nM{ceaSpCVMD!$Bl)|e3Iq*7kY?1l5kib00DIFJ|F67_Qj@A8F zu{+le>9P^-YprsH?L3L;C>;=)bb>SE7xlO>aCZL!JL)Z3oEU6lx-?$hiiPPIypYP; z)=@j^2klB)rMY=%&9)=ue8Ra}Y9c13lAU=sP$3FFvHMbQrm0BF^l9YkG}qDQNSHS^-IOL^p~YD5C2+e(^r;Td7C2f_En6OW(rD|-7R0i`$oW$6}Et2Q&9=; z1OcCySmBS1?~D0D`k5Vi$L!&kXZgN7)GSPGnyF1QwP~g{&3|IkM8~&8)O_0a z{g1+!xreNsOC(yOV%}Ax#=Fr^$b0qOsrB=}Uq8PICp{dNUHtjwdwWRF-aJ6_A$15$ zdVvF^r1uQWznroZBO6Bvi4f-&aZcYOVcYd2j9!pAhsDO+OK7#O3|chb)MIsb&`A(RtjnL`-=-@1S_yVZJ|8hE5)k+7OE>$aiA8_`N7YqCYocp zAHnUEFH(AJ|JyoQ0;@Jt+<{_JPO@JepdBHtxha;7Cz1}&Z4CKkcZpsISrqI_!?qV6DcwFwX1U=3 zXV_5pddSk;l+4^hP{HG4%_f@7rbPrL3mceXI@HiIafE5(DU+2&k^v*`EJeDoAqRuI zX0Vp1M~-l5=X8v3S~GDBuWqgh(aDW2g*Ns)32$SqOtWPgdSk+XdD|$KCB;zHMI)$Id8A^t(T|afZ827dcR}uz>d%)ge#N4 z`-gF0U&tFsR4xb?4;I2a8o}IKX`XyRU>j}p?SDc2DR0j?d_KA2VJH6;n@N4ovFe$q Iu&}Uy0$#yybN~PV diff --git a/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridrender_dx12_0.azshadervariant b/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridrender_dx12_0.azshadervariant index ae976a7cd9387fb22b236e6c1361548c84cf149d..48bdc8986766d7f4467669244413fbb6ec33af5d 100644 GIT binary patch delta 12905 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 Rvk_}Xc)?jc&j6ZK{|C1g-mCxs diff --git a/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridrender_null_0.azshadervariant b/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridrender_null_0.azshadervariant index 674ed7b1ac9a931a9c56889d13f32032fd5390ae..af7c9626941cbdb222496d8485268501ae2beaac 100644 GIT binary patch delta 16 XcmeyS`b~AiJ0T9Wh{0 diff --git a/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridrender_objectsrg.azsrg b/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridrender_objectsrg.azsrg index 856baff38e..47f5e48fca 100644 --- a/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridrender_objectsrg.azsrg +++ b/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridrender_objectsrg.azsrg @@ -99,6 +99,44 @@ } ] }, + { + "field": "element", + "typeName": "ShaderInputImageDescriptor", + "typeId": "{913DBF3C-5556-4524-B928-174A42516D31}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeStates" + }, + { + "field": "m_type", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "3" + }, + { + "field": "m_access", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "1" + }, + { + "field": "m_count", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "1" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "1" + } + ] + }, { "field": "element", "typeName": "ShaderInputImageDescriptor", @@ -261,6 +299,26 @@ "value": "3" } ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "3" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "4" + } + ] } ] }, @@ -279,7 +337,7 @@ "field": "m_groupSizeForImages", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "3" + "value": "4" }, { "field": "m_groupSizeForBufferUnboundedArrays", @@ -343,7 +401,7 @@ "field": "m_index", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "1" + "value": "2" } ] } @@ -399,7 +457,35 @@ "field": "m_index", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "2" + "value": "3" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{DB3620EE-8854-52A8-B421-BFA17E6A687D}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeStates" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{5C8C0729-5D41-5299-80F1-395F79B02D70}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "1" } ] } @@ -3177,7 +3263,7 @@ "field": "m_hash", "typeName": "AZ::u64", "typeId": "{D6597933-47CD-4FC8-B911-63F3E2B0993A}", - "value": "10943999648486519461" + "value": "12354971452077948474" } ] } @@ -3267,6 +3353,44 @@ } ] }, + { + "field": "element", + "typeName": "ShaderInputImageDescriptor", + "typeId": "{913DBF3C-5556-4524-B928-174A42516D31}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeStates" + }, + { + "field": "m_type", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "3" + }, + { + "field": "m_access", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "1" + }, + { + "field": "m_count", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "1" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "1" + } + ] + }, { "field": "element", "typeName": "ShaderInputImageDescriptor", @@ -3429,6 +3553,26 @@ "value": "3" } ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "3" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "4" + } + ] } ] }, @@ -3447,7 +3591,7 @@ "field": "m_groupSizeForImages", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "3" + "value": "4" }, { "field": "m_groupSizeForBufferUnboundedArrays", @@ -3511,7 +3655,7 @@ "field": "m_index", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "1" + "value": "2" } ] } @@ -3567,7 +3711,35 @@ "field": "m_index", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "2" + "value": "3" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{DB3620EE-8854-52A8-B421-BFA17E6A687D}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeStates" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{5C8C0729-5D41-5299-80F1-395F79B02D70}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "1" } ] } @@ -6345,7 +6517,7 @@ "field": "m_hash", "typeName": "AZ::u64", "typeId": "{D6597933-47CD-4FC8-B911-63F3E2B0993A}", - "value": "10943999648486519461" + "value": "12354971452077948474" } ] } @@ -6435,6 +6607,44 @@ } ] }, + { + "field": "element", + "typeName": "ShaderInputImageDescriptor", + "typeId": "{913DBF3C-5556-4524-B928-174A42516D31}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeStates" + }, + { + "field": "m_type", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "3" + }, + { + "field": "m_access", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "1" + }, + { + "field": "m_count", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "1" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "1" + } + ] + }, { "field": "element", "typeName": "ShaderInputImageDescriptor", @@ -6469,7 +6679,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "1" + "value": "2" } ] }, @@ -6507,7 +6717,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "2" + "value": "3" } ] } @@ -6597,6 +6807,26 @@ "value": "3" } ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "3" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "4" + } + ] } ] }, @@ -6615,7 +6845,7 @@ "field": "m_groupSizeForImages", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "3" + "value": "4" }, { "field": "m_groupSizeForBufferUnboundedArrays", @@ -6679,7 +6909,7 @@ "field": "m_index", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "1" + "value": "2" } ] } @@ -6735,7 +6965,35 @@ "field": "m_index", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "2" + "value": "3" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{DB3620EE-8854-52A8-B421-BFA17E6A687D}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeStates" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{5C8C0729-5D41-5299-80F1-395F79B02D70}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "1" } ] } @@ -6824,7 +7082,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "3" + "value": "4" } ] }, @@ -6856,7 +7114,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "3" + "value": "4" } ] }, @@ -6888,7 +7146,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "3" + "value": "4" } ] }, @@ -6920,7 +7178,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "3" + "value": "4" } ] }, @@ -6952,7 +7210,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "3" + "value": "4" } ] }, @@ -6984,7 +7242,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "3" + "value": "4" } ] }, @@ -7016,7 +7274,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "3" + "value": "4" } ] }, @@ -7048,7 +7306,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "3" + "value": "4" } ] }, @@ -7080,7 +7338,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "3" + "value": "4" } ] }, @@ -7112,7 +7370,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "3" + "value": "4" } ] }, @@ -7144,7 +7402,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "3" + "value": "4" } ] }, @@ -7176,7 +7434,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "3" + "value": "4" } ] }, @@ -7208,7 +7466,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "3" + "value": "4" } ] }, @@ -7240,7 +7498,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "3" + "value": "4" } ] }, @@ -7272,7 +7530,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "3" + "value": "4" } ] }, @@ -7304,7 +7562,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "3" + "value": "4" } ] }, @@ -7336,7 +7594,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "3" + "value": "4" } ] }, @@ -7368,7 +7626,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "3" + "value": "4" } ] }, @@ -7400,7 +7658,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "3" + "value": "4" } ] }, @@ -7432,7 +7690,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "3" + "value": "4" } ] }, @@ -7464,7 +7722,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "3" + "value": "4" } ] }, @@ -7496,7 +7754,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "3" + "value": "4" } ] }, @@ -7528,7 +7786,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "3" + "value": "4" } ] }, @@ -7560,7 +7818,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "3" + "value": "4" } ] }, @@ -7592,7 +7850,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "3" + "value": "4" } ] }, @@ -7624,7 +7882,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "3" + "value": "4" } ] }, @@ -7656,7 +7914,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "3" + "value": "4" } ] }, @@ -7688,7 +7946,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "3" + "value": "4" } ] }, @@ -7720,7 +7978,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "3" + "value": "4" } ] }, @@ -7752,7 +8010,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "3" + "value": "4" } ] }, @@ -7784,7 +8042,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "3" + "value": "4" } ] }, @@ -7816,7 +8074,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "3" + "value": "4" } ] }, @@ -7848,7 +8106,7 @@ "field": "m_registerId", "typeName": "unsigned int", "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", - "value": "3" + "value": "4" } ] } @@ -9469,7 +9727,7 @@ "field": "m_hash", "typeName": "AZ::u64", "typeId": "{D6597933-47CD-4FC8-B911-63F3E2B0993A}", - "value": "14153574899631108967" + "value": "11445921412800959080" } ] } @@ -9513,7 +9771,7 @@ "field": "m_hash", "typeName": "AZ::u64", "typeId": "{D6597933-47CD-4FC8-B911-63F3E2B0993A}", - "value": "8072403242124824453" + "value": "16873325821914315993" } ] } diff --git a/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridrender_vulkan_0.azshadervariant b/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridrender_vulkan_0.azshadervariant index 1dfcbd3ac3ce6667f3ae591d8da91d8aa7af5c35..4e9771d614e2d6c7fc40b5ed9eae75421e5e1360 100644 GIT binary patch delta 529 zcmeC%$2f04z`E?;;;+tE<7PB%6P1cZ+XJpyzAtTK!=)u4Wwox2thcXZwY)+70%giV>nNQhv zv%9h~E1#o@-M6)ytdGFML3nbvh92Xa&AT+tG3jyx-Ar^iOx~z1A_op6Y#s+01o1eF z4#?wjlg)JaCQInZF@n6TJ$V|Cw^vk&6{Jph@^l^b$fi zQGBzx?teC*H_c7vGcrxSZX(afJo!72WSN|!D8Jdv^bZr*+aPlg-qyE}Wd(ZM*VcA( Qn{9(4huZQ9-h4n60A*^2i2wiq delta 416 zcmbQYpRsQro7qCEs=m@~v^n&139*^ozcvXGDtW6WlIp=nI)TnsD>3=BMz z^>q~WA#7eCKP)q~Jh&)5J~zI&Aiu;XGd-ikIlnZo1SrM8#=s5M!#6obRC{u?DBt9% zqH>elf%G07DOQkaf|DPJ8Z!z_=GRpQ^Mxndh^aG*Opb^0MJM+F`C^mT>xyqaE!M-z zC^$JnMxK#*bA^mF^XBF9tC$%jCkH9pZl0_x&&pT&pE)FwdFm{<`-LZ8*3e^IvYAQq z91|ngOihnpB$tk1a!R=D@a6O@_HR@pi>@*>Vx?p_p394 z+^#&?NLOfbj;<6V$mPnDn{WIiL~WPek6MyAR6K$3a#21WVJ>rDSJ kZQf@g#mX$nz&825t@Pw?whEi2>}nJ_-a1CvvIA`c03e5KYybcN diff --git a/Gems/Atom/Feature/Common/Code/Source/CommonSystemComponent.cpp b/Gems/Atom/Feature/Common/Code/Source/CommonSystemComponent.cpp index 5f7057c9be..be6d438a62 100644 --- a/Gems/Atom/Feature/Common/Code/Source/CommonSystemComponent.cpp +++ b/Gems/Atom/Feature/Common/Code/Source/CommonSystemComponent.cpp @@ -96,6 +96,7 @@ #include #include #include +#include #include #include #include @@ -261,6 +262,7 @@ namespace AZ passSystem->AddPassCreator(Name("DiffuseProbeGridBlendDistancePass"), &Render::DiffuseProbeGridBlendDistancePass::Create); passSystem->AddPassCreator(Name("DiffuseProbeGridBorderUpdatePass"), &Render::DiffuseProbeGridBorderUpdatePass::Create); passSystem->AddPassCreator(Name("DiffuseProbeGridRelocationPass"), &Render::DiffuseProbeGridRelocationPass::Create); + passSystem->AddPassCreator(Name("DiffuseProbeGridClassificationPass"), &Render::DiffuseProbeGridClassificationPass::Create); passSystem->AddPassCreator(Name("DiffuseProbeGridRenderPass"), &Render::DiffuseProbeGridRenderPass::Create); passSystem->AddPassCreator(Name("LuminanceHistogramGeneratorPass"), &LuminanceHistogramGeneratorPass::Create); diff --git a/Gems/Atom/Feature/Common/Code/Source/DiffuseProbeGrid/DiffuseProbeGrid.cpp b/Gems/Atom/Feature/Common/Code/Source/DiffuseProbeGrid/DiffuseProbeGrid.cpp index eeb32cdd07..8a349083ea 100644 --- a/Gems/Atom/Feature/Common/Code/Source/DiffuseProbeGrid/DiffuseProbeGrid.cpp +++ b/Gems/Atom/Feature/Common/Code/Source/DiffuseProbeGrid/DiffuseProbeGrid.cpp @@ -41,6 +41,7 @@ namespace AZ m_irradianceImageAttachmentId = AZStd::string::format("ProbeIrradianceImageAttachmentId_%s", uuidString.c_str()); m_distanceImageAttachmentId = AZStd::string::format("ProbeDistanceImageAttachmentId_%s", uuidString.c_str()); m_relocationImageAttachmentId = AZStd::string::format("ProbeRelocationImageAttachmentId_%s", uuidString.c_str()); + m_classificationImageAttachmentId = AZStd::string::format("ProbeClassificationImageAttachmentId_%s", uuidString.c_str()); // setup culling m_cullable.m_cullData.m_scene = m_scene; @@ -252,6 +253,20 @@ namespace AZ AZ_Assert(result == RHI::ResultCode::Success, "Failed to initialize m_probeRelocationImage image"); } + // probe classification + { + uint32_t width = probeCountX; + uint32_t height = probeCountY; + + m_classificationImage[m_currentImageIndex] = RHI::Factory::Get().CreateImage(); + + RHI::ImageInitRequest request; + request.m_image = m_classificationImage[m_currentImageIndex].get(); + request.m_descriptor = RHI::ImageDescriptor::Create2D(RHI::ImageBindFlags::ShaderReadWrite, width, height, DiffuseProbeGridRenderData::ClassificationImageFormat); + RHI::ResultCode result = m_renderData->m_imagePool->InitImage(request); + AZ_Assert(result == RHI::ResultCode::Success, "Failed to initialize m_probeClassificationImage image"); + } + m_updateTextures = false; // textures have changed so we need to update the render Srg to bind the new ones @@ -401,6 +416,10 @@ namespace AZ imageIndex = srgLayout->FindShaderInputImageIndex(AZ::Name("m_probeOffsets")); m_rayTraceSrg->SetImageView(imageIndex, m_relocationImage[m_currentImageIndex]->GetImageView(m_renderData->m_probeRelocationImageViewDescriptor).get()); + // probe classification + imageIndex = srgLayout->FindShaderInputImageIndex(AZ::Name("m_probeStates")); + m_rayTraceSrg->SetImageView(imageIndex, m_classificationImage[m_currentImageIndex]->GetImageView(m_renderData->m_probeClassificationImageViewDescriptor).get()); + // grid settings constantIndex = srgLayout->FindShaderInputConstantIndex(Name("m_ambientMultiplier")); m_rayTraceSrg->SetConstant(constantIndex, m_ambientMultiplier); @@ -431,6 +450,9 @@ namespace AZ imageIndex = srgLayout->FindShaderInputImageIndex(AZ::Name("m_probeIrradiance")); m_blendIrradianceSrg->SetImageView(imageIndex, m_irradianceImage[m_currentImageIndex]->GetImageView(m_renderData->m_probeIrradianceImageViewDescriptor).get()); + imageIndex = srgLayout->FindShaderInputImageIndex(AZ::Name("m_probeStates")); + m_blendIrradianceSrg->SetImageView(imageIndex, m_classificationImage[m_currentImageIndex]->GetImageView(m_renderData->m_probeClassificationImageViewDescriptor).get()); + SetGridConstants(m_blendIrradianceSrg); } @@ -451,6 +473,9 @@ namespace AZ imageIndex = srgLayout->FindShaderInputImageIndex(AZ::Name("m_probeDistance")); m_blendDistanceSrg->SetImageView(imageIndex, m_distanceImage[m_currentImageIndex]->GetImageView(m_renderData->m_probeDistanceImageViewDescriptor).get()); + imageIndex = srgLayout->FindShaderInputImageIndex(AZ::Name("m_probeStates")); + m_blendDistanceSrg->SetImageView(imageIndex, m_classificationImage[m_currentImageIndex]->GetImageView(m_renderData->m_probeClassificationImageViewDescriptor).get()); + SetGridConstants(m_blendDistanceSrg); } @@ -559,6 +584,27 @@ namespace AZ SetGridConstants(m_relocationSrg); } + void DiffuseProbeGrid::UpdateClassificationSrg(const Data::Asset& srgAsset) + { + if (!m_classificationSrg) + { + m_classificationSrg = RPI::ShaderResourceGroup::Create(srgAsset); + AZ_Error("DiffuseProbeGrid", m_classificationSrg.get(), "Failed to create Classification shader resource group"); + } + + const RHI::ShaderResourceGroupLayout* srgLayout = m_classificationSrg->GetLayout(); + RHI::ShaderInputConstantIndex constantIndex; + RHI::ShaderInputImageIndex imageIndex; + + imageIndex = srgLayout->FindShaderInputImageIndex(AZ::Name("m_probeRayTrace")); + m_classificationSrg->SetImageView(imageIndex, m_rayTraceImage[m_currentImageIndex]->GetImageView(m_renderData->m_probeRayTraceImageViewDescriptor).get()); + + imageIndex = srgLayout->FindShaderInputImageIndex(AZ::Name("m_probeStates")); + m_classificationSrg->SetImageView(imageIndex, m_classificationImage[m_currentImageIndex]->GetImageView(m_renderData->m_probeClassificationImageViewDescriptor).get()); + + SetGridConstants(m_classificationSrg); + } + void DiffuseProbeGrid::UpdateRenderObjectSrg() { if (!m_updateRenderObjectSrg) @@ -601,6 +647,9 @@ namespace AZ imageIndex = srgLayout->FindShaderInputImageIndex(Name("m_probeOffsets")); m_renderObjectSrg->SetImageView(imageIndex, m_relocationImage[m_currentImageIndex]->GetImageView(m_renderData->m_probeRelocationImageViewDescriptor).get()); + imageIndex = srgLayout->FindShaderInputImageIndex(Name("m_probeStates")); + m_renderObjectSrg->SetImageView(imageIndex, m_classificationImage[m_currentImageIndex]->GetImageView(m_renderData->m_probeClassificationImageViewDescriptor).get()); + SetGridConstants(m_renderObjectSrg); m_updateRenderObjectSrg = false; diff --git a/Gems/Atom/Feature/Common/Code/Source/DiffuseProbeGrid/DiffuseProbeGrid.h b/Gems/Atom/Feature/Common/Code/Source/DiffuseProbeGrid/DiffuseProbeGrid.h index a92daeffaa..e1ca2123a5 100644 --- a/Gems/Atom/Feature/Common/Code/Source/DiffuseProbeGrid/DiffuseProbeGrid.h +++ b/Gems/Atom/Feature/Common/Code/Source/DiffuseProbeGrid/DiffuseProbeGrid.h @@ -30,6 +30,7 @@ namespace AZ static const RHI::Format IrradianceImageFormat = RHI::Format::R16G16B16A16_UNORM; static const RHI::Format DistanceImageFormat = RHI::Format::R32G32_FLOAT; static const RHI::Format RelocationImageFormat = RHI::Format::R16G16B16A16_FLOAT; + static const RHI::Format ClassificationImageFormat = RHI::Format::R8_UINT; // image pool RHI::Ptr m_imagePool; @@ -43,6 +44,7 @@ namespace AZ RHI::ImageViewDescriptor m_probeIrradianceImageViewDescriptor; RHI::ImageViewDescriptor m_probeDistanceImageViewDescriptor; RHI::ImageViewDescriptor m_probeRelocationImageViewDescriptor; + RHI::ImageViewDescriptor m_probeClassificationImageViewDescriptor; // render pipeline state RPI::Ptr m_pipelineState; @@ -118,6 +120,7 @@ namespace AZ const Data::Instance& GetBorderUpdateRowDistanceSrg() const { return m_borderUpdateRowDistanceSrg; } const Data::Instance& GetBorderUpdateColumnDistanceSrg() const { return m_borderUpdateColumnDistanceSrg; } const Data::Instance& GetRelocationSrg() const { return m_relocationSrg; } + const Data::Instance& GetClassificationSrg() const { return m_classificationSrg; } const Data::Instance& GetRenderObjectSrg() const { return m_renderObjectSrg; } // Srg updates @@ -126,6 +129,7 @@ namespace AZ void UpdateBlendDistanceSrg(const Data::Asset& srgAsset); void UpdateBorderUpdateSrgs(const Data::Asset& rowSrgAsset, const Data::Asset& columnSrgAsset); void UpdateRelocationSrg(const Data::Asset& srgAsset); + void UpdateClassificationSrg(const Data::Asset& srgAsset); void UpdateRenderObjectSrg(); // textures @@ -133,12 +137,14 @@ namespace AZ const RHI::Ptr& GetIrradianceImage() { return m_irradianceImage[m_currentImageIndex]; } const RHI::Ptr& GetDistanceImage() { return m_distanceImage[m_currentImageIndex]; } const RHI::Ptr& GetRelocationImage() { return m_relocationImage[m_currentImageIndex]; } + const RHI::Ptr& GetClassificationImage() { return m_classificationImage[m_currentImageIndex]; } // attachment Ids const RHI::AttachmentId GetRayTraceImageAttachmentId() const { return m_rayTraceImageAttachmentId; } const RHI::AttachmentId GetIrradianceImageAttachmentId() const { return m_irradianceImageAttachmentId; } const RHI::AttachmentId GetDistanceImageAttachmentId() const { return m_distanceImageAttachmentId; } const RHI::AttachmentId GetRelocationImageAttachmentId() const { return m_relocationImageAttachmentId; } + const RHI::AttachmentId GetClassificationImageAttachmentId() const { return m_classificationImageAttachmentId; } const DiffuseProbeGridRenderData* GetRenderData() const { return m_renderData; } @@ -222,6 +228,7 @@ namespace AZ RHI::Ptr m_irradianceImage[ImageFrameCount]; RHI::Ptr m_distanceImage[ImageFrameCount]; RHI::Ptr m_relocationImage[ImageFrameCount]; + RHI::Ptr m_classificationImage[ImageFrameCount]; uint32_t m_currentImageIndex = 0; bool m_updateTextures = false; bool m_irradianceClearRequired = true; @@ -235,6 +242,7 @@ namespace AZ Data::Instance m_borderUpdateRowDistanceSrg; Data::Instance m_borderUpdateColumnDistanceSrg; Data::Instance m_relocationSrg; + Data::Instance m_classificationSrg; Data::Instance m_renderObjectSrg; bool m_updateRenderObjectSrg = true; @@ -243,6 +251,7 @@ namespace AZ RHI::AttachmentId m_irradianceImageAttachmentId; RHI::AttachmentId m_distanceImageAttachmentId; RHI::AttachmentId m_relocationImageAttachmentId; + RHI::AttachmentId m_classificationImageAttachmentId; }; } // namespace Render } // namespace AZ diff --git a/Gems/Atom/Feature/Common/Code/Source/DiffuseProbeGrid/DiffuseProbeGridBlendDistancePass.cpp b/Gems/Atom/Feature/Common/Code/Source/DiffuseProbeGrid/DiffuseProbeGridBlendDistancePass.cpp index 33c14afe86..3df13556d3 100644 --- a/Gems/Atom/Feature/Common/Code/Source/DiffuseProbeGrid/DiffuseProbeGridBlendDistancePass.cpp +++ b/Gems/Atom/Feature/Common/Code/Source/DiffuseProbeGrid/DiffuseProbeGridBlendDistancePass.cpp @@ -132,6 +132,16 @@ namespace AZ frameGraph.UseShaderAttachment(desc, RHI::ScopeAttachmentAccess::ReadWrite); } + + // probe classification image + { + RHI::ImageScopeAttachmentDescriptor desc; + desc.m_attachmentId = diffuseProbeGrid->GetClassificationImageAttachmentId(); + desc.m_imageViewDescriptor = diffuseProbeGrid->GetRenderData()->m_probeClassificationImageViewDescriptor; + desc.m_loadStoreAction.m_loadAction = AZ::RHI::AttachmentLoadAction::Load; + + frameGraph.UseShaderAttachment(desc, RHI::ScopeAttachmentAccess::ReadWrite); + } } } diff --git a/Gems/Atom/Feature/Common/Code/Source/DiffuseProbeGrid/DiffuseProbeGridBlendIrradiancePass.cpp b/Gems/Atom/Feature/Common/Code/Source/DiffuseProbeGrid/DiffuseProbeGridBlendIrradiancePass.cpp index 5d25b68b18..4e05b8ef31 100644 --- a/Gems/Atom/Feature/Common/Code/Source/DiffuseProbeGrid/DiffuseProbeGridBlendIrradiancePass.cpp +++ b/Gems/Atom/Feature/Common/Code/Source/DiffuseProbeGrid/DiffuseProbeGridBlendIrradiancePass.cpp @@ -132,6 +132,16 @@ namespace AZ frameGraph.UseShaderAttachment(desc, RHI::ScopeAttachmentAccess::ReadWrite); } + + // probe classification image + { + RHI::ImageScopeAttachmentDescriptor desc; + desc.m_attachmentId = diffuseProbeGrid->GetClassificationImageAttachmentId(); + desc.m_imageViewDescriptor = diffuseProbeGrid->GetRenderData()->m_probeClassificationImageViewDescriptor; + desc.m_loadStoreAction.m_loadAction = AZ::RHI::AttachmentLoadAction::Load; + + frameGraph.UseShaderAttachment(desc, RHI::ScopeAttachmentAccess::ReadWrite); + } } } diff --git a/Gems/Atom/Feature/Common/Code/Source/DiffuseProbeGrid/DiffuseProbeGridFeatureProcessor.cpp b/Gems/Atom/Feature/Common/Code/Source/DiffuseProbeGrid/DiffuseProbeGridFeatureProcessor.cpp index 8f39b6e1b3..1aaa06c797 100644 --- a/Gems/Atom/Feature/Common/Code/Source/DiffuseProbeGrid/DiffuseProbeGridFeatureProcessor.cpp +++ b/Gems/Atom/Feature/Common/Code/Source/DiffuseProbeGrid/DiffuseProbeGridFeatureProcessor.cpp @@ -73,6 +73,7 @@ namespace AZ m_probeGridRenderData.m_probeIrradianceImageViewDescriptor = RHI::ImageViewDescriptor::Create(DiffuseProbeGridRenderData::IrradianceImageFormat, 0, 0); m_probeGridRenderData.m_probeDistanceImageViewDescriptor = RHI::ImageViewDescriptor::Create(DiffuseProbeGridRenderData::DistanceImageFormat, 0, 0); m_probeGridRenderData.m_probeRelocationImageViewDescriptor = RHI::ImageViewDescriptor::Create(DiffuseProbeGridRenderData::RelocationImageFormat, 0, 0); + m_probeGridRenderData.m_probeClassificationImageViewDescriptor = RHI::ImageViewDescriptor::Create(DiffuseProbeGridRenderData::ClassificationImageFormat, 0, 0); // load shader // Note: the shader may not be available on all platforms diff --git a/Gems/Atom/Feature/Common/Code/Source/DiffuseProbeGrid/DiffuseProbeGridRayTracingPass.cpp b/Gems/Atom/Feature/Common/Code/Source/DiffuseProbeGrid/DiffuseProbeGridRayTracingPass.cpp index ddda810eb7..6a0e618830 100644 --- a/Gems/Atom/Feature/Common/Code/Source/DiffuseProbeGrid/DiffuseProbeGridRayTracingPass.cpp +++ b/Gems/Atom/Feature/Common/Code/Source/DiffuseProbeGrid/DiffuseProbeGridRayTracingPass.cpp @@ -291,6 +291,19 @@ namespace AZ frameGraph.UseShaderAttachment(desc, RHI::ScopeAttachmentAccess::ReadWrite); } + + // probe classification + { + RHI::ResultCode result = frameGraph.GetAttachmentDatabase().ImportImage(diffuseProbeGrid->GetClassificationImageAttachmentId(), diffuseProbeGrid->GetClassificationImage()); + AZ_Assert(result == RHI::ResultCode::Success, "Failed to import probeClassificationImage"); + + RHI::ImageScopeAttachmentDescriptor desc; + desc.m_attachmentId = diffuseProbeGrid->GetClassificationImageAttachmentId(); + desc.m_imageViewDescriptor = diffuseProbeGrid->GetRenderData()->m_probeClassificationImageViewDescriptor; + desc.m_loadStoreAction.m_loadAction = AZ::RHI::AttachmentLoadAction::Load; + + frameGraph.UseShaderAttachment(desc, RHI::ScopeAttachmentAccess::ReadWrite); + } } } diff --git a/Gems/Atom/Feature/Common/Code/Source/DiffuseProbeGrid/DiffuseProbeGridRenderPass.cpp b/Gems/Atom/Feature/Common/Code/Source/DiffuseProbeGrid/DiffuseProbeGridRenderPass.cpp index c5ac94607e..af6fce6f6a 100644 --- a/Gems/Atom/Feature/Common/Code/Source/DiffuseProbeGrid/DiffuseProbeGridRenderPass.cpp +++ b/Gems/Atom/Feature/Common/Code/Source/DiffuseProbeGrid/DiffuseProbeGridRenderPass.cpp @@ -117,6 +117,16 @@ namespace AZ frameGraph.UseShaderAttachment(desc, RHI::ScopeAttachmentAccess::ReadWrite); } + + // probe classification image + { + RHI::ImageScopeAttachmentDescriptor desc; + desc.m_attachmentId = diffuseProbeGrid->GetClassificationImageAttachmentId(); + desc.m_imageViewDescriptor = diffuseProbeGrid->GetRenderData()->m_probeClassificationImageViewDescriptor; + desc.m_loadStoreAction.m_loadAction = AZ::RHI::AttachmentLoadAction::Load; + + frameGraph.UseShaderAttachment(desc, RHI::ScopeAttachmentAccess::ReadWrite); + } } Base::SetupFrameGraphDependencies(frameGraph); diff --git a/Gems/Atom/Feature/Common/Code/Source/RayTracing/RayTracingFeatureProcessor.cpp b/Gems/Atom/Feature/Common/Code/Source/RayTracing/RayTracingFeatureProcessor.cpp index 9df7f262ac..bb8f7ff54d 100644 --- a/Gems/Atom/Feature/Common/Code/Source/RayTracing/RayTracingFeatureProcessor.cpp +++ b/Gems/Atom/Feature/Common/Code/Source/RayTracing/RayTracingFeatureProcessor.cpp @@ -21,6 +21,8 @@ #include #include #include +#include +#include #include #include #include @@ -195,7 +197,23 @@ namespace AZ constantIndex = srgLayout->FindShaderInputConstantIndex(AZ::Name("m_directionalLightCount")); m_rayTracingSceneSrg->SetConstant(constantIndex, directionalLightFP->GetLightCount()); - // point lights + // simple point lights + const auto simplePointLightFP = GetParentScene()->GetFeatureProcessor(); + bufferIndex = srgLayout->FindShaderInputBufferIndex(AZ::Name("m_simplePointLights")); + m_rayTracingSceneSrg->SetBufferView(bufferIndex, simplePointLightFP->GetLightBuffer()->GetBufferView()); + + constantIndex = srgLayout->FindShaderInputConstantIndex(AZ::Name("m_simplePointLightCount")); + m_rayTracingSceneSrg->SetConstant(constantIndex, simplePointLightFP->GetLightCount()); + + // simple spot lights + const auto simpleSpotLightFP = GetParentScene()->GetFeatureProcessor(); + bufferIndex = srgLayout->FindShaderInputBufferIndex(AZ::Name("m_simpleSpotLights")); + m_rayTracingSceneSrg->SetBufferView(bufferIndex, simpleSpotLightFP->GetLightBuffer()->GetBufferView()); + + constantIndex = srgLayout->FindShaderInputConstantIndex(AZ::Name("m_simpleSpotLightCount")); + m_rayTracingSceneSrg->SetConstant(constantIndex, simpleSpotLightFP->GetLightCount()); + + // point lights (sphere) const auto pointLightFP = GetParentScene()->GetFeatureProcessor(); bufferIndex = srgLayout->FindShaderInputBufferIndex(AZ::Name("m_pointLights")); m_rayTracingSceneSrg->SetBufferView(bufferIndex, pointLightFP->GetLightBuffer()->GetBufferView()); diff --git a/Gems/Atom/Feature/Common/Code/atom_feature_common_files.cmake b/Gems/Atom/Feature/Common/Code/atom_feature_common_files.cmake index 7e23bc340f..47000d8a5c 100644 --- a/Gems/Atom/Feature/Common/Code/atom_feature_common_files.cmake +++ b/Gems/Atom/Feature/Common/Code/atom_feature_common_files.cmake @@ -131,6 +131,8 @@ set(FILES Source/DiffuseProbeGrid/DiffuseProbeGridBorderUpdatePass.h Source/DiffuseProbeGrid/DiffuseProbeGridRelocationPass.cpp Source/DiffuseProbeGrid/DiffuseProbeGridRelocationPass.h + Source/DiffuseProbeGrid/DiffuseProbeGridClassificationPass.cpp + Source/DiffuseProbeGrid/DiffuseProbeGridClassificationPass.h Source/DiffuseProbeGrid/DiffuseProbeGridRenderPass.cpp Source/DiffuseProbeGrid/DiffuseProbeGridRenderPass.h Source/DiffuseProbeGrid/DiffuseProbeGrid.cpp From c367e514627c6e8c83be407b33273f1dde387470 Mon Sep 17 00:00:00 2001 From: dmcdiar Date: Mon, 19 Apr 2021 02:30:52 -0700 Subject: [PATCH 08/68] Added DiffuseProbeGridClassification pass. --- .../DiffuseProbeGridClassification.pass | 11 + ...eProbeGridClassification.precompiledshader | 32 + .../diffuseprobegridclassification.azshader | Bin 0 -> 40224 bytes ...egridclassification_dx12_0.azshadervariant | Bin 0 -> 10106 bytes ...egridclassification_null_0.azshadervariant | Bin 0 -> 4502 bytes ...ffuseprobegridclassification_passsrg.azsrg | 8071 +++++++++++++++++ ...ridclassification_vulkan_0.azshadervariant | Bin 0 -> 8914 bytes .../DiffuseProbeGridClassificationPass.cpp | 182 + .../DiffuseProbeGridClassificationPass.h | 66 + 9 files changed, 8362 insertions(+) create mode 100644 Gems/Atom/Feature/Common/Assets/Passes/DiffuseProbeGridClassification.pass create mode 100644 Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/DiffuseProbeGridClassification.precompiledshader create mode 100644 Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridclassification.azshader create mode 100644 Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridclassification_dx12_0.azshadervariant create mode 100644 Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridclassification_null_0.azshadervariant create mode 100644 Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridclassification_passsrg.azsrg create mode 100644 Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridclassification_vulkan_0.azshadervariant create mode 100644 Gems/Atom/Feature/Common/Code/Source/DiffuseProbeGrid/DiffuseProbeGridClassificationPass.cpp create mode 100644 Gems/Atom/Feature/Common/Code/Source/DiffuseProbeGrid/DiffuseProbeGridClassificationPass.h diff --git a/Gems/Atom/Feature/Common/Assets/Passes/DiffuseProbeGridClassification.pass b/Gems/Atom/Feature/Common/Assets/Passes/DiffuseProbeGridClassification.pass new file mode 100644 index 0000000000..c50890dac2 --- /dev/null +++ b/Gems/Atom/Feature/Common/Assets/Passes/DiffuseProbeGridClassification.pass @@ -0,0 +1,11 @@ +{ + "Type": "JsonSerialization", + "Version": 1, + "ClassName": "PassAsset", + "ClassData": { + "PassTemplate": { + "Name": "DiffuseProbeGridClassificationPassTemplate", + "PassClass": "DiffuseProbeGridClassificationPass" + } + } +} \ No newline at end of file diff --git a/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/DiffuseProbeGridClassification.precompiledshader b/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/DiffuseProbeGridClassification.precompiledshader new file mode 100644 index 0000000000..e7b15190e5 --- /dev/null +++ b/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/DiffuseProbeGridClassification.precompiledshader @@ -0,0 +1,32 @@ +{ + "Type": "JsonSerialization", + "Version": 1, + "ClassName": "PrecompiledShaderAssetSourceData", + "ClassData": + { + "ShaderAssetFileName": "diffuseprobegridclassification.azshader", + "PlatformIdentifiers": + [ + "pc" + ], + "ShaderResourceGroupAssets": + [ + "diffuseprobegridclassification_passsrg.azsrg" + ], + "RootShaderVariantAssets": + [ + { + "APIName": "dx12", + "RootShaderVariantAssetFileName": "diffuseprobegridclassification_dx12_0.azshadervariant" + }, + { + "APIName": "vulkan", + "RootShaderVariantAssetFileName": "diffuseprobegridclassification_vulkan_0.azshadervariant" + }, + { + "APIName": "null", + "RootShaderVariantAssetFileName": "diffuseprobegridclassification_null_0.azshadervariant" + } + ] + } +} \ No newline at end of file diff --git a/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridclassification.azshader b/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridclassification.azshader new file mode 100644 index 0000000000000000000000000000000000000000..39322fc48481c8420d1e60c410ab4a9b5a965852 GIT binary patch literal 40224 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 WWOyUcgs|33j}_Bho5 literal 0 HcmV?d00001 diff --git a/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridclassification_null_0.azshadervariant b/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridclassification_null_0.azshadervariant new file mode 100644 index 0000000000000000000000000000000000000000..58124203ee382908b2dfc7187dc9934d7cc6e491 GIT binary patch literal 4502 zcmZQzU|?YGV4m-r>g{6blh}Lq=`GnObRz;TyI}%Bx>fQ)%kg$oP2cD9EKD7 zdJ6R!Z^a~stZEGK?%3b=wNYwUV$7MA8>!B>CS=#X_gOK0LaQU&<)6(!bAiCa*ZzBy z`o@2Udb-@NFEB~t{KctlQrR_O^-9fClO)BT#GjvO^6pG*C-+VPhz2CGvOfQ?0bykf zk#UcW-z+%Q!L$B}^XW-Bk!w6W6NMNUPIO!hc*0oICdj7}>UyC$>9EZD{CBfGE}Fiu z;3(KGw}vg|+l691ac&&;~n*&o>xc!)FfqhbRW|iwjhvXq%so4>$S^X*9A(cp#3IAM5OdgUu{Ks2h7&74^(Qfw72mjV z__mwY!qD>%FBuC@kCL1eUjAmm7Um;AyxXS!Y0T(l$#Y;}WQeNS#4Ug!4vYxdUiS+9 z8|!&9i=%y~&6u}8PpZJ?grh^8C1cO&b}gO59y3T}vJxUFdC5ug7}8m~ByEY2|l%P^dHaBtN&M$W!< z&5J)f6>ML#=Av-g?wz(-x+HVa3V<+i6{z8uUifmAHQH-6V(muY^ly8*k5)3?=|v3L2L z{@b=4iww}TJ$2F{*i8eaVJu$f2ZkcJLLT)dT5~sMG&V;Q?P%T{ErLc%TCCL*?g|B1 zeR;gR>", + "typeId": "{A85E274A-4C1D-546F-B18C-452C5700BAE4}", + "Objects": [ + { + "field": "ReflectionMap", + "typeName": "AZStd::vector", + "typeId": "{F4529C0B-A2C0-5A32-A348-59D45FB1776B}" + } + ] + }, + { + "field": "m_idReflectionForImages", + "typeName": "AZ::RHI::NameIdReflectionMap>", + "typeId": "{BB6D1ABE-9A2F-5F51-93CB-B1B866EFD5B4}", + "Objects": [ + { + "field": "ReflectionMap", + "typeName": "AZStd::vector", + "typeId": "{BBD5D625-992D-5296-A631-9B84B00CE2F1}", + "Objects": [ + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{DB3620EE-8854-52A8-B421-BFA17E6A687D}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeRayTrace" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{5C8C0729-5D41-5299-80F1-395F79B02D70}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{DB3620EE-8854-52A8-B421-BFA17E6A687D}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeStates" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{5C8C0729-5D41-5299-80F1-395F79B02D70}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "1" + } + ] + } + ] + } + ] + } + ] + }, + { + "field": "m_idReflectionForBufferUnboundedArrays", + "typeName": "AZ::RHI::NameIdReflectionMap>", + "typeId": "{46520159-BC56-5E90-89AD-3CB0A5D295B0}", + "Objects": [ + { + "field": "ReflectionMap", + "typeName": "AZStd::vector", + "typeId": "{CD6D3195-A87A-5E0C-AD4D-23457B3B8DCF}" + } + ] + }, + { + "field": "m_idReflectionForImageUnboundedArrays", + "typeName": "AZ::RHI::NameIdReflectionMap>", + "typeId": "{A33C41AC-ABA0-5A34-9A6B-89BABDC151D7}", + "Objects": [ + { + "field": "ReflectionMap", + "typeName": "AZStd::vector", + "typeId": "{14C5FF00-B370-575F-866B-B19B97F76D82}" + } + ] + }, + { + "field": "m_idReflectionForSamplers", + "typeName": "AZ::RHI::NameIdReflectionMap>", + "typeId": "{2665EED7-CFB4-582B-B265-107348B1DFAC}", + "Objects": [ + { + "field": "ReflectionMap", + "typeName": "AZStd::vector", + "typeId": "{1545A615-BFD7-515C-A1E9-710570135F08}" + } + ] + }, + { + "field": "m_constantsDataLayout", + "typeName": "AZStd::intrusive_ptr", + "typeId": "{CEB3049A-A620-56C8-AFBA-D0A98304333D}", + "Objects": [ + { + "field": "element", + "typeName": "ConstantsLayout", + "typeId": "{66EDAC32-7730-4F05-AF9D-B3CB0F5D90E0}", + "Objects": [ + { + "field": "m_inputs", + "typeName": "AZStd::vector", + "typeId": "{5FC25C85-DF2F-5219-918C-EBC47D7D6451}", + "Objects": [ + { + "field": "element", + "typeName": "ShaderInputConstantDescriptor", + "typeId": "{C8DC7D2D-CCA0-45AD-9430-52C06B69325C}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.origin" + }, + { + "field": "m_constantByteOffset", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + }, + { + "field": "m_constantByteCount", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "12" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + } + ] + }, + { + "field": "element", + "typeName": "ShaderInputConstantDescriptor", + "typeId": "{C8DC7D2D-CCA0-45AD-9430-52C06B69325C}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.numRaysPerProbe" + }, + { + "field": "m_constantByteOffset", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "12" + }, + { + "field": "m_constantByteCount", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "4" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + } + ] + }, + { + "field": "element", + "typeName": "ShaderInputConstantDescriptor", + "typeId": "{C8DC7D2D-CCA0-45AD-9430-52C06B69325C}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeGridSpacing" + }, + { + "field": "m_constantByteOffset", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "16" + }, + { + "field": "m_constantByteCount", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "12" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + } + ] + }, + { + "field": "element", + "typeName": "ShaderInputConstantDescriptor", + "typeId": "{C8DC7D2D-CCA0-45AD-9430-52C06B69325C}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeMaxRayDistance" + }, + { + "field": "m_constantByteOffset", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "28" + }, + { + "field": "m_constantByteCount", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "4" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + } + ] + }, + { + "field": "element", + "typeName": "ShaderInputConstantDescriptor", + "typeId": "{C8DC7D2D-CCA0-45AD-9430-52C06B69325C}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeGridCounts" + }, + { + "field": "m_constantByteOffset", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "32" + }, + { + "field": "m_constantByteCount", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "12" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + } + ] + }, + { + "field": "element", + "typeName": "ShaderInputConstantDescriptor", + "typeId": "{C8DC7D2D-CCA0-45AD-9430-52C06B69325C}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeDistanceExponent" + }, + { + "field": "m_constantByteOffset", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "44" + }, + { + "field": "m_constantByteCount", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "4" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + } + ] + }, + { + "field": "element", + "typeName": "ShaderInputConstantDescriptor", + "typeId": "{C8DC7D2D-CCA0-45AD-9430-52C06B69325C}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeHysteresis" + }, + { + "field": "m_constantByteOffset", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "48" + }, + { + "field": "m_constantByteCount", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "4" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + } + ] + }, + { + "field": "element", + "typeName": "ShaderInputConstantDescriptor", + "typeId": "{C8DC7D2D-CCA0-45AD-9430-52C06B69325C}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeChangeThreshold" + }, + { + "field": "m_constantByteOffset", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "52" + }, + { + "field": "m_constantByteCount", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "4" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + } + ] + }, + { + "field": "element", + "typeName": "ShaderInputConstantDescriptor", + "typeId": "{C8DC7D2D-CCA0-45AD-9430-52C06B69325C}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeBrightnessThreshold" + }, + { + "field": "m_constantByteOffset", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "56" + }, + { + "field": "m_constantByteCount", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "4" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + } + ] + }, + { + "field": "element", + "typeName": "ShaderInputConstantDescriptor", + "typeId": "{C8DC7D2D-CCA0-45AD-9430-52C06B69325C}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeIrradianceEncodingGamma" + }, + { + "field": "m_constantByteOffset", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "60" + }, + { + "field": "m_constantByteCount", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "4" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + } + ] + }, + { + "field": "element", + "typeName": "ShaderInputConstantDescriptor", + "typeId": "{C8DC7D2D-CCA0-45AD-9430-52C06B69325C}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeInverseIrradianceEncodingGamma" + }, + { + "field": "m_constantByteOffset", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "64" + }, + { + "field": "m_constantByteCount", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "4" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + } + ] + }, + { + "field": "element", + "typeName": "ShaderInputConstantDescriptor", + "typeId": "{C8DC7D2D-CCA0-45AD-9430-52C06B69325C}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeNumIrradianceTexels" + }, + { + "field": "m_constantByteOffset", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "68" + }, + { + "field": "m_constantByteCount", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "4" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + } + ] + }, + { + "field": "element", + "typeName": "ShaderInputConstantDescriptor", + "typeId": "{C8DC7D2D-CCA0-45AD-9430-52C06B69325C}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeNumDistanceTexels" + }, + { + "field": "m_constantByteOffset", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "72" + }, + { + "field": "m_constantByteCount", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "4" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + } + ] + }, + { + "field": "element", + "typeName": "ShaderInputConstantDescriptor", + "typeId": "{C8DC7D2D-CCA0-45AD-9430-52C06B69325C}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.normalBias" + }, + { + "field": "m_constantByteOffset", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "76" + }, + { + "field": "m_constantByteCount", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "4" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + } + ] + }, + { + "field": "element", + "typeName": "ShaderInputConstantDescriptor", + "typeId": "{C8DC7D2D-CCA0-45AD-9430-52C06B69325C}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.viewBias" + }, + { + "field": "m_constantByteOffset", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "80" + }, + { + "field": "m_constantByteCount", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "4" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + } + ] + }, + { + "field": "element", + "typeName": "ShaderInputConstantDescriptor", + "typeId": "{C8DC7D2D-CCA0-45AD-9430-52C06B69325C}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeVariablePad0" + }, + { + "field": "m_constantByteOffset", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "84" + }, + { + "field": "m_constantByteCount", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "12" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + } + ] + }, + { + "field": "element", + "typeName": "ShaderInputConstantDescriptor", + "typeId": "{C8DC7D2D-CCA0-45AD-9430-52C06B69325C}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeRayRotationTransform" + }, + { + "field": "m_constantByteOffset", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "96" + }, + { + "field": "m_constantByteCount", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "64" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + } + ] + }, + { + "field": "element", + "typeName": "ShaderInputConstantDescriptor", + "typeId": "{C8DC7D2D-CCA0-45AD-9430-52C06B69325C}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.volumeMovementType" + }, + { + "field": "m_constantByteOffset", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "160" + }, + { + "field": "m_constantByteCount", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "4" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + } + ] + }, + { + "field": "element", + "typeName": "ShaderInputConstantDescriptor", + "typeId": "{C8DC7D2D-CCA0-45AD-9430-52C06B69325C}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeScrollOffsets" + }, + { + "field": "m_constantByteOffset", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "164" + }, + { + "field": "m_constantByteCount", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "12" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + } + ] + }, + { + "field": "element", + "typeName": "ShaderInputConstantDescriptor", + "typeId": "{C8DC7D2D-CCA0-45AD-9430-52C06B69325C}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeBackfaceThreshold" + }, + { + "field": "m_constantByteOffset", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "176" + }, + { + "field": "m_constantByteCount", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "4" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + } + ] + }, + { + "field": "element", + "typeName": "ShaderInputConstantDescriptor", + "typeId": "{C8DC7D2D-CCA0-45AD-9430-52C06B69325C}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeMinFrontfaceDistance" + }, + { + "field": "m_constantByteOffset", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "180" + }, + { + "field": "m_constantByteCount", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "4" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + } + ] + }, + { + "field": "element", + "typeName": "ShaderInputConstantDescriptor", + "typeId": "{C8DC7D2D-CCA0-45AD-9430-52C06B69325C}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.padding" + }, + { + "field": "m_constantByteOffset", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "184" + }, + { + "field": "m_constantByteCount", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "8" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + } + ] + }, + { + "field": "element", + "typeName": "ShaderInputConstantDescriptor", + "typeId": "{C8DC7D2D-CCA0-45AD-9430-52C06B69325C}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.padding1[0]" + }, + { + "field": "m_constantByteOffset", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "192" + }, + { + "field": "m_constantByteCount", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "16" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + } + ] + }, + { + "field": "element", + "typeName": "ShaderInputConstantDescriptor", + "typeId": "{C8DC7D2D-CCA0-45AD-9430-52C06B69325C}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.padding1[1]" + }, + { + "field": "m_constantByteOffset", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "208" + }, + { + "field": "m_constantByteCount", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "16" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + } + ] + }, + { + "field": "element", + "typeName": "ShaderInputConstantDescriptor", + "typeId": "{C8DC7D2D-CCA0-45AD-9430-52C06B69325C}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.padding1[2]" + }, + { + "field": "m_constantByteOffset", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "224" + }, + { + "field": "m_constantByteCount", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "16" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + } + ] + }, + { + "field": "element", + "typeName": "ShaderInputConstantDescriptor", + "typeId": "{C8DC7D2D-CCA0-45AD-9430-52C06B69325C}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.padding1[3]" + }, + { + "field": "m_constantByteOffset", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "240" + }, + { + "field": "m_constantByteCount", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "16" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + } + ] + }, + { + "field": "element", + "typeName": "ShaderInputConstantDescriptor", + "typeId": "{C8DC7D2D-CCA0-45AD-9430-52C06B69325C}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.padding1" + }, + { + "field": "m_constantByteOffset", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "192" + }, + { + "field": "m_constantByteCount", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "64" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + } + ] + }, + { + "field": "element", + "typeName": "ShaderInputConstantDescriptor", + "typeId": "{C8DC7D2D-CCA0-45AD-9430-52C06B69325C}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid" + }, + { + "field": "m_constantByteOffset", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + }, + { + "field": "m_constantByteCount", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "256" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + } + ] + } + ] + }, + { + "field": "m_idReflection", + "typeName": "AZ::RHI::NameIdReflectionMap>", + "typeId": "{7DE7E4B8-5C98-5F7A-985F-DDEEA5BB5366}", + "Objects": [ + { + "field": "ReflectionMap", + "typeName": "AZStd::vector", + "typeId": "{4B54CC87-1340-5B29-8040-2003033F9B93}", + "Objects": [ + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{285A5B8D-8218-5E10-B8AE-138374D8D113}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeMinFrontfaceDistance" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{3F860893-1F57-5615-92CA-389B49687A9C}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "20" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{285A5B8D-8218-5E10-B8AE-138374D8D113}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeNumDistanceTexels" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{3F860893-1F57-5615-92CA-389B49687A9C}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "12" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{285A5B8D-8218-5E10-B8AE-138374D8D113}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{3F860893-1F57-5615-92CA-389B49687A9C}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "27" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{285A5B8D-8218-5E10-B8AE-138374D8D113}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeInverseIrradianceEncodingGamma" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{3F860893-1F57-5615-92CA-389B49687A9C}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "10" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{285A5B8D-8218-5E10-B8AE-138374D8D113}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.padding1" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{3F860893-1F57-5615-92CA-389B49687A9C}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "26" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{285A5B8D-8218-5E10-B8AE-138374D8D113}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeScrollOffsets" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{3F860893-1F57-5615-92CA-389B49687A9C}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "18" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{285A5B8D-8218-5E10-B8AE-138374D8D113}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeIrradianceEncodingGamma" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{3F860893-1F57-5615-92CA-389B49687A9C}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "9" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{285A5B8D-8218-5E10-B8AE-138374D8D113}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.normalBias" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{3F860893-1F57-5615-92CA-389B49687A9C}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "13" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{285A5B8D-8218-5E10-B8AE-138374D8D113}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeBrightnessThreshold" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{3F860893-1F57-5615-92CA-389B49687A9C}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "8" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{285A5B8D-8218-5E10-B8AE-138374D8D113}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeHysteresis" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{3F860893-1F57-5615-92CA-389B49687A9C}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "6" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{285A5B8D-8218-5E10-B8AE-138374D8D113}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeRayRotationTransform" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{3F860893-1F57-5615-92CA-389B49687A9C}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "16" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{285A5B8D-8218-5E10-B8AE-138374D8D113}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.padding1[2]" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{3F860893-1F57-5615-92CA-389B49687A9C}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "24" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{285A5B8D-8218-5E10-B8AE-138374D8D113}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.padding1[3]" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{3F860893-1F57-5615-92CA-389B49687A9C}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "25" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{285A5B8D-8218-5E10-B8AE-138374D8D113}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.padding1[0]" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{3F860893-1F57-5615-92CA-389B49687A9C}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "22" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{285A5B8D-8218-5E10-B8AE-138374D8D113}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.padding1[1]" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{3F860893-1F57-5615-92CA-389B49687A9C}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "23" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{285A5B8D-8218-5E10-B8AE-138374D8D113}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeChangeThreshold" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{3F860893-1F57-5615-92CA-389B49687A9C}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "7" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{285A5B8D-8218-5E10-B8AE-138374D8D113}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.padding" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{3F860893-1F57-5615-92CA-389B49687A9C}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "21" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{285A5B8D-8218-5E10-B8AE-138374D8D113}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.origin" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{3F860893-1F57-5615-92CA-389B49687A9C}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{285A5B8D-8218-5E10-B8AE-138374D8D113}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.numRaysPerProbe" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{3F860893-1F57-5615-92CA-389B49687A9C}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "1" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{285A5B8D-8218-5E10-B8AE-138374D8D113}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeGridSpacing" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{3F860893-1F57-5615-92CA-389B49687A9C}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "2" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{285A5B8D-8218-5E10-B8AE-138374D8D113}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeBackfaceThreshold" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{3F860893-1F57-5615-92CA-389B49687A9C}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "19" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{285A5B8D-8218-5E10-B8AE-138374D8D113}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeMaxRayDistance" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{3F860893-1F57-5615-92CA-389B49687A9C}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "3" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{285A5B8D-8218-5E10-B8AE-138374D8D113}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeNumIrradianceTexels" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{3F860893-1F57-5615-92CA-389B49687A9C}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "11" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{285A5B8D-8218-5E10-B8AE-138374D8D113}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeGridCounts" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{3F860893-1F57-5615-92CA-389B49687A9C}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "4" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{285A5B8D-8218-5E10-B8AE-138374D8D113}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeVariablePad0" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{3F860893-1F57-5615-92CA-389B49687A9C}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "15" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{285A5B8D-8218-5E10-B8AE-138374D8D113}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.volumeMovementType" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{3F860893-1F57-5615-92CA-389B49687A9C}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "17" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{285A5B8D-8218-5E10-B8AE-138374D8D113}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeDistanceExponent" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{3F860893-1F57-5615-92CA-389B49687A9C}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "5" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{285A5B8D-8218-5E10-B8AE-138374D8D113}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.viewBias" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{3F860893-1F57-5615-92CA-389B49687A9C}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "14" + } + ] + } + ] + } + ] + } + ] + }, + { + "field": "m_intervals", + "typeName": "AZStd::vector", + "typeId": "{908FF0AE-802D-5311-A2E0-A6D595FBC480}", + "Objects": [ + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "12" + } + ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "12" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "16" + } + ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "16" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "28" + } + ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "28" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "32" + } + ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "32" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "44" + } + ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "44" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "48" + } + ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "48" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "52" + } + ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "52" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "56" + } + ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "56" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "60" + } + ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "60" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "64" + } + ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "64" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "68" + } + ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "68" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "72" + } + ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "72" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "76" + } + ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "76" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "80" + } + ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "80" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "84" + } + ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "84" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "96" + } + ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "96" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "160" + } + ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "160" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "164" + } + ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "164" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "176" + } + ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "176" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "180" + } + ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "180" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "184" + } + ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "184" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "192" + } + ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "192" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "208" + } + ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "208" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "224" + } + ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "224" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "240" + } + ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "240" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "256" + } + ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "192" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "256" + } + ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "256" + } + ] + } + ] + }, + { + "field": "m_sizeInBytes", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "256" + }, + { + "field": "m_hash", + "typeName": "AZ::u64", + "typeId": "{D6597933-47CD-4FC8-B911-63F3E2B0993A}", + "value": "7181601620235669059" + } + ] + } + ] + }, + { + "field": "m_bindingSlot", + "typeName": "AZ::RHI::Handle", + "typeId": "{1811456D-0C3D-58C8-ACE8-FD47F4E80E25}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "4" + } + ] + }, + { + "field": "m_shaderVariantKeyFallbackSize", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + }, + { + "field": "m_shaderVariantKeyFallbackConstantIndex", + "typeName": "AZ::RHI::Handle", + "typeId": "{3F860893-1F57-5615-92CA-389B49687A9C}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "4294967295" + } + ] + }, + { + "field": "m_hash", + "typeName": "AZ::u64", + "typeId": "{D6597933-47CD-4FC8-B911-63F3E2B0993A}", + "value": "10614022793008117732" + } + ] + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZStd::pair", + "typeId": "{5C6406C8-77C9-597F-A3E9-249628D94902}", + "Objects": [ + { + "field": "value1", + "typeName": "Crc32", + "typeId": "{9F4E062E-06A0-46D4-85DF-E0DA96467D3A}", + "Objects": [ + { + "field": "Value", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "634125391" + } + ] + }, + { + "field": "value2", + "typeName": "AZStd::intrusive_ptr", + "typeId": "{FF05CAD3-238F-5E19-8FF2-083353BBEC47}", + "Objects": [ + { + "field": "element", + "typeName": "ShaderResourceGroupLayout", + "typeId": "{1F92C651-9B83-4379-AB5C-5201F1B2C278}", + "version": 6, + "Objects": [ + { + "field": "m_staticSamplers", + "typeName": "AZStd::vector", + "typeId": "{D3BC4729-3DE0-57A1-96E0-DCFF98D4D975}" + }, + { + "field": "m_inputsForBuffers", + "typeName": "AZStd::vector", + "typeId": "{A4650430-04B9-589A-991F-4B443DCD20EA}" + }, + { + "field": "m_inputsForImages", + "typeName": "AZStd::vector", + "typeId": "{909BE4D8-5A22-59A4-A135-4E73662E2D83}", + "Objects": [ + { + "field": "element", + "typeName": "ShaderInputImageDescriptor", + "typeId": "{913DBF3C-5556-4524-B928-174A42516D31}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeRayTrace" + }, + { + "field": "m_type", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "3" + }, + { + "field": "m_access", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "1" + }, + { + "field": "m_count", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "1" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + } + ] + }, + { + "field": "element", + "typeName": "ShaderInputImageDescriptor", + "typeId": "{913DBF3C-5556-4524-B928-174A42516D31}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeStates" + }, + { + "field": "m_type", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "3" + }, + { + "field": "m_access", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "1" + }, + { + "field": "m_count", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "1" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "1" + } + ] + } + ] + }, + { + "field": "m_inputsForBufferUnboundedArrays", + "typeName": "AZStd::vector", + "typeId": "{DD5102EE-72A9-55F7-AB54-14F228FAE38F}" + }, + { + "field": "m_inputsForImageUnboundedArrays", + "typeName": "AZStd::vector", + "typeId": "{8042FF1E-9115-53F7-BE33-3DCDE9C0AB7F}" + }, + { + "field": "m_inputsForSamplers", + "typeName": "AZStd::vector", + "typeId": "{4CF286E1-5297-581D-93E9-891166EDAD9A}" + }, + { + "field": "m_intervalsForBuffers", + "typeName": "AZStd::vector", + "typeId": "{908FF0AE-802D-5311-A2E0-A6D595FBC480}" + }, + { + "field": "m_intervalsForImages", + "typeName": "AZStd::vector", + "typeId": "{908FF0AE-802D-5311-A2E0-A6D595FBC480}", + "Objects": [ + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "1" + } + ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "1" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "2" + } + ] + } + ] + }, + { + "field": "m_intervalsForSamplers", + "typeName": "AZStd::vector", + "typeId": "{908FF0AE-802D-5311-A2E0-A6D595FBC480}" + }, + { + "field": "m_groupSizeForBuffers", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + }, + { + "field": "m_groupSizeForImages", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "2" + }, + { + "field": "m_groupSizeForBufferUnboundedArrays", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + }, + { + "field": "m_groupSizeForImageUnboundedArrays", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + }, + { + "field": "m_groupSizeForSamplers", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + }, + { + "field": "m_idReflectionForBuffers", + "typeName": "AZ::RHI::NameIdReflectionMap>", + "typeId": "{A85E274A-4C1D-546F-B18C-452C5700BAE4}", + "Objects": [ + { + "field": "ReflectionMap", + "typeName": "AZStd::vector", + "typeId": "{F4529C0B-A2C0-5A32-A348-59D45FB1776B}" + } + ] + }, + { + "field": "m_idReflectionForImages", + "typeName": "AZ::RHI::NameIdReflectionMap>", + "typeId": "{BB6D1ABE-9A2F-5F51-93CB-B1B866EFD5B4}", + "Objects": [ + { + "field": "ReflectionMap", + "typeName": "AZStd::vector", + "typeId": "{BBD5D625-992D-5296-A631-9B84B00CE2F1}", + "Objects": [ + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{DB3620EE-8854-52A8-B421-BFA17E6A687D}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeRayTrace" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{5C8C0729-5D41-5299-80F1-395F79B02D70}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{DB3620EE-8854-52A8-B421-BFA17E6A687D}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeStates" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{5C8C0729-5D41-5299-80F1-395F79B02D70}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "1" + } + ] + } + ] + } + ] + } + ] + }, + { + "field": "m_idReflectionForBufferUnboundedArrays", + "typeName": "AZ::RHI::NameIdReflectionMap>", + "typeId": "{46520159-BC56-5E90-89AD-3CB0A5D295B0}", + "Objects": [ + { + "field": "ReflectionMap", + "typeName": "AZStd::vector", + "typeId": "{CD6D3195-A87A-5E0C-AD4D-23457B3B8DCF}" + } + ] + }, + { + "field": "m_idReflectionForImageUnboundedArrays", + "typeName": "AZ::RHI::NameIdReflectionMap>", + "typeId": "{A33C41AC-ABA0-5A34-9A6B-89BABDC151D7}", + "Objects": [ + { + "field": "ReflectionMap", + "typeName": "AZStd::vector", + "typeId": "{14C5FF00-B370-575F-866B-B19B97F76D82}" + } + ] + }, + { + "field": "m_idReflectionForSamplers", + "typeName": "AZ::RHI::NameIdReflectionMap>", + "typeId": "{2665EED7-CFB4-582B-B265-107348B1DFAC}", + "Objects": [ + { + "field": "ReflectionMap", + "typeName": "AZStd::vector", + "typeId": "{1545A615-BFD7-515C-A1E9-710570135F08}" + } + ] + }, + { + "field": "m_constantsDataLayout", + "typeName": "AZStd::intrusive_ptr", + "typeId": "{CEB3049A-A620-56C8-AFBA-D0A98304333D}", + "Objects": [ + { + "field": "element", + "typeName": "ConstantsLayout", + "typeId": "{66EDAC32-7730-4F05-AF9D-B3CB0F5D90E0}", + "Objects": [ + { + "field": "m_inputs", + "typeName": "AZStd::vector", + "typeId": "{5FC25C85-DF2F-5219-918C-EBC47D7D6451}", + "Objects": [ + { + "field": "element", + "typeName": "ShaderInputConstantDescriptor", + "typeId": "{C8DC7D2D-CCA0-45AD-9430-52C06B69325C}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.origin" + }, + { + "field": "m_constantByteOffset", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + }, + { + "field": "m_constantByteCount", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "12" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + } + ] + }, + { + "field": "element", + "typeName": "ShaderInputConstantDescriptor", + "typeId": "{C8DC7D2D-CCA0-45AD-9430-52C06B69325C}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.numRaysPerProbe" + }, + { + "field": "m_constantByteOffset", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "12" + }, + { + "field": "m_constantByteCount", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "4" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + } + ] + }, + { + "field": "element", + "typeName": "ShaderInputConstantDescriptor", + "typeId": "{C8DC7D2D-CCA0-45AD-9430-52C06B69325C}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeGridSpacing" + }, + { + "field": "m_constantByteOffset", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "16" + }, + { + "field": "m_constantByteCount", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "12" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + } + ] + }, + { + "field": "element", + "typeName": "ShaderInputConstantDescriptor", + "typeId": "{C8DC7D2D-CCA0-45AD-9430-52C06B69325C}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeMaxRayDistance" + }, + { + "field": "m_constantByteOffset", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "28" + }, + { + "field": "m_constantByteCount", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "4" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + } + ] + }, + { + "field": "element", + "typeName": "ShaderInputConstantDescriptor", + "typeId": "{C8DC7D2D-CCA0-45AD-9430-52C06B69325C}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeGridCounts" + }, + { + "field": "m_constantByteOffset", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "32" + }, + { + "field": "m_constantByteCount", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "12" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + } + ] + }, + { + "field": "element", + "typeName": "ShaderInputConstantDescriptor", + "typeId": "{C8DC7D2D-CCA0-45AD-9430-52C06B69325C}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeDistanceExponent" + }, + { + "field": "m_constantByteOffset", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "44" + }, + { + "field": "m_constantByteCount", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "4" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + } + ] + }, + { + "field": "element", + "typeName": "ShaderInputConstantDescriptor", + "typeId": "{C8DC7D2D-CCA0-45AD-9430-52C06B69325C}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeHysteresis" + }, + { + "field": "m_constantByteOffset", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "48" + }, + { + "field": "m_constantByteCount", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "4" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + } + ] + }, + { + "field": "element", + "typeName": "ShaderInputConstantDescriptor", + "typeId": "{C8DC7D2D-CCA0-45AD-9430-52C06B69325C}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeChangeThreshold" + }, + { + "field": "m_constantByteOffset", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "52" + }, + { + "field": "m_constantByteCount", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "4" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + } + ] + }, + { + "field": "element", + "typeName": "ShaderInputConstantDescriptor", + "typeId": "{C8DC7D2D-CCA0-45AD-9430-52C06B69325C}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeBrightnessThreshold" + }, + { + "field": "m_constantByteOffset", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "56" + }, + { + "field": "m_constantByteCount", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "4" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + } + ] + }, + { + "field": "element", + "typeName": "ShaderInputConstantDescriptor", + "typeId": "{C8DC7D2D-CCA0-45AD-9430-52C06B69325C}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeIrradianceEncodingGamma" + }, + { + "field": "m_constantByteOffset", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "60" + }, + { + "field": "m_constantByteCount", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "4" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + } + ] + }, + { + "field": "element", + "typeName": "ShaderInputConstantDescriptor", + "typeId": "{C8DC7D2D-CCA0-45AD-9430-52C06B69325C}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeInverseIrradianceEncodingGamma" + }, + { + "field": "m_constantByteOffset", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "64" + }, + { + "field": "m_constantByteCount", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "4" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + } + ] + }, + { + "field": "element", + "typeName": "ShaderInputConstantDescriptor", + "typeId": "{C8DC7D2D-CCA0-45AD-9430-52C06B69325C}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeNumIrradianceTexels" + }, + { + "field": "m_constantByteOffset", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "68" + }, + { + "field": "m_constantByteCount", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "4" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + } + ] + }, + { + "field": "element", + "typeName": "ShaderInputConstantDescriptor", + "typeId": "{C8DC7D2D-CCA0-45AD-9430-52C06B69325C}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeNumDistanceTexels" + }, + { + "field": "m_constantByteOffset", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "72" + }, + { + "field": "m_constantByteCount", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "4" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + } + ] + }, + { + "field": "element", + "typeName": "ShaderInputConstantDescriptor", + "typeId": "{C8DC7D2D-CCA0-45AD-9430-52C06B69325C}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.normalBias" + }, + { + "field": "m_constantByteOffset", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "76" + }, + { + "field": "m_constantByteCount", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "4" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + } + ] + }, + { + "field": "element", + "typeName": "ShaderInputConstantDescriptor", + "typeId": "{C8DC7D2D-CCA0-45AD-9430-52C06B69325C}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.viewBias" + }, + { + "field": "m_constantByteOffset", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "80" + }, + { + "field": "m_constantByteCount", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "4" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + } + ] + }, + { + "field": "element", + "typeName": "ShaderInputConstantDescriptor", + "typeId": "{C8DC7D2D-CCA0-45AD-9430-52C06B69325C}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeVariablePad0" + }, + { + "field": "m_constantByteOffset", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "84" + }, + { + "field": "m_constantByteCount", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "12" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + } + ] + }, + { + "field": "element", + "typeName": "ShaderInputConstantDescriptor", + "typeId": "{C8DC7D2D-CCA0-45AD-9430-52C06B69325C}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeRayRotationTransform" + }, + { + "field": "m_constantByteOffset", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "96" + }, + { + "field": "m_constantByteCount", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "64" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + } + ] + }, + { + "field": "element", + "typeName": "ShaderInputConstantDescriptor", + "typeId": "{C8DC7D2D-CCA0-45AD-9430-52C06B69325C}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.volumeMovementType" + }, + { + "field": "m_constantByteOffset", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "160" + }, + { + "field": "m_constantByteCount", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "4" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + } + ] + }, + { + "field": "element", + "typeName": "ShaderInputConstantDescriptor", + "typeId": "{C8DC7D2D-CCA0-45AD-9430-52C06B69325C}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeScrollOffsets" + }, + { + "field": "m_constantByteOffset", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "164" + }, + { + "field": "m_constantByteCount", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "12" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + } + ] + }, + { + "field": "element", + "typeName": "ShaderInputConstantDescriptor", + "typeId": "{C8DC7D2D-CCA0-45AD-9430-52C06B69325C}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeBackfaceThreshold" + }, + { + "field": "m_constantByteOffset", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "176" + }, + { + "field": "m_constantByteCount", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "4" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + } + ] + }, + { + "field": "element", + "typeName": "ShaderInputConstantDescriptor", + "typeId": "{C8DC7D2D-CCA0-45AD-9430-52C06B69325C}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeMinFrontfaceDistance" + }, + { + "field": "m_constantByteOffset", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "180" + }, + { + "field": "m_constantByteCount", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "4" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + } + ] + }, + { + "field": "element", + "typeName": "ShaderInputConstantDescriptor", + "typeId": "{C8DC7D2D-CCA0-45AD-9430-52C06B69325C}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.padding" + }, + { + "field": "m_constantByteOffset", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "184" + }, + { + "field": "m_constantByteCount", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "8" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + } + ] + }, + { + "field": "element", + "typeName": "ShaderInputConstantDescriptor", + "typeId": "{C8DC7D2D-CCA0-45AD-9430-52C06B69325C}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.padding1[0]" + }, + { + "field": "m_constantByteOffset", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "192" + }, + { + "field": "m_constantByteCount", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "16" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + } + ] + }, + { + "field": "element", + "typeName": "ShaderInputConstantDescriptor", + "typeId": "{C8DC7D2D-CCA0-45AD-9430-52C06B69325C}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.padding1[1]" + }, + { + "field": "m_constantByteOffset", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "208" + }, + { + "field": "m_constantByteCount", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "16" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + } + ] + }, + { + "field": "element", + "typeName": "ShaderInputConstantDescriptor", + "typeId": "{C8DC7D2D-CCA0-45AD-9430-52C06B69325C}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.padding1[2]" + }, + { + "field": "m_constantByteOffset", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "224" + }, + { + "field": "m_constantByteCount", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "16" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + } + ] + }, + { + "field": "element", + "typeName": "ShaderInputConstantDescriptor", + "typeId": "{C8DC7D2D-CCA0-45AD-9430-52C06B69325C}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.padding1[3]" + }, + { + "field": "m_constantByteOffset", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "240" + }, + { + "field": "m_constantByteCount", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "16" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + } + ] + }, + { + "field": "element", + "typeName": "ShaderInputConstantDescriptor", + "typeId": "{C8DC7D2D-CCA0-45AD-9430-52C06B69325C}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.padding1" + }, + { + "field": "m_constantByteOffset", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "192" + }, + { + "field": "m_constantByteCount", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "64" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + } + ] + }, + { + "field": "element", + "typeName": "ShaderInputConstantDescriptor", + "typeId": "{C8DC7D2D-CCA0-45AD-9430-52C06B69325C}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid" + }, + { + "field": "m_constantByteOffset", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + }, + { + "field": "m_constantByteCount", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "256" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + } + ] + } + ] + }, + { + "field": "m_idReflection", + "typeName": "AZ::RHI::NameIdReflectionMap>", + "typeId": "{7DE7E4B8-5C98-5F7A-985F-DDEEA5BB5366}", + "Objects": [ + { + "field": "ReflectionMap", + "typeName": "AZStd::vector", + "typeId": "{4B54CC87-1340-5B29-8040-2003033F9B93}", + "Objects": [ + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{285A5B8D-8218-5E10-B8AE-138374D8D113}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeMinFrontfaceDistance" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{3F860893-1F57-5615-92CA-389B49687A9C}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "20" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{285A5B8D-8218-5E10-B8AE-138374D8D113}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeNumDistanceTexels" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{3F860893-1F57-5615-92CA-389B49687A9C}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "12" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{285A5B8D-8218-5E10-B8AE-138374D8D113}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{3F860893-1F57-5615-92CA-389B49687A9C}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "27" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{285A5B8D-8218-5E10-B8AE-138374D8D113}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeInverseIrradianceEncodingGamma" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{3F860893-1F57-5615-92CA-389B49687A9C}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "10" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{285A5B8D-8218-5E10-B8AE-138374D8D113}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.padding1" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{3F860893-1F57-5615-92CA-389B49687A9C}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "26" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{285A5B8D-8218-5E10-B8AE-138374D8D113}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeScrollOffsets" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{3F860893-1F57-5615-92CA-389B49687A9C}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "18" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{285A5B8D-8218-5E10-B8AE-138374D8D113}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeIrradianceEncodingGamma" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{3F860893-1F57-5615-92CA-389B49687A9C}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "9" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{285A5B8D-8218-5E10-B8AE-138374D8D113}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.normalBias" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{3F860893-1F57-5615-92CA-389B49687A9C}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "13" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{285A5B8D-8218-5E10-B8AE-138374D8D113}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeBrightnessThreshold" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{3F860893-1F57-5615-92CA-389B49687A9C}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "8" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{285A5B8D-8218-5E10-B8AE-138374D8D113}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeHysteresis" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{3F860893-1F57-5615-92CA-389B49687A9C}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "6" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{285A5B8D-8218-5E10-B8AE-138374D8D113}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeRayRotationTransform" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{3F860893-1F57-5615-92CA-389B49687A9C}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "16" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{285A5B8D-8218-5E10-B8AE-138374D8D113}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.padding1[2]" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{3F860893-1F57-5615-92CA-389B49687A9C}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "24" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{285A5B8D-8218-5E10-B8AE-138374D8D113}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.padding1[3]" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{3F860893-1F57-5615-92CA-389B49687A9C}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "25" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{285A5B8D-8218-5E10-B8AE-138374D8D113}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.padding1[0]" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{3F860893-1F57-5615-92CA-389B49687A9C}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "22" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{285A5B8D-8218-5E10-B8AE-138374D8D113}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.padding1[1]" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{3F860893-1F57-5615-92CA-389B49687A9C}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "23" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{285A5B8D-8218-5E10-B8AE-138374D8D113}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeChangeThreshold" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{3F860893-1F57-5615-92CA-389B49687A9C}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "7" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{285A5B8D-8218-5E10-B8AE-138374D8D113}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.padding" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{3F860893-1F57-5615-92CA-389B49687A9C}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "21" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{285A5B8D-8218-5E10-B8AE-138374D8D113}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.origin" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{3F860893-1F57-5615-92CA-389B49687A9C}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{285A5B8D-8218-5E10-B8AE-138374D8D113}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.numRaysPerProbe" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{3F860893-1F57-5615-92CA-389B49687A9C}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "1" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{285A5B8D-8218-5E10-B8AE-138374D8D113}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeGridSpacing" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{3F860893-1F57-5615-92CA-389B49687A9C}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "2" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{285A5B8D-8218-5E10-B8AE-138374D8D113}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeBackfaceThreshold" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{3F860893-1F57-5615-92CA-389B49687A9C}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "19" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{285A5B8D-8218-5E10-B8AE-138374D8D113}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeMaxRayDistance" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{3F860893-1F57-5615-92CA-389B49687A9C}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "3" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{285A5B8D-8218-5E10-B8AE-138374D8D113}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeNumIrradianceTexels" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{3F860893-1F57-5615-92CA-389B49687A9C}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "11" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{285A5B8D-8218-5E10-B8AE-138374D8D113}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeGridCounts" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{3F860893-1F57-5615-92CA-389B49687A9C}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "4" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{285A5B8D-8218-5E10-B8AE-138374D8D113}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeVariablePad0" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{3F860893-1F57-5615-92CA-389B49687A9C}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "15" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{285A5B8D-8218-5E10-B8AE-138374D8D113}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.volumeMovementType" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{3F860893-1F57-5615-92CA-389B49687A9C}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "17" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{285A5B8D-8218-5E10-B8AE-138374D8D113}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeDistanceExponent" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{3F860893-1F57-5615-92CA-389B49687A9C}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "5" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{285A5B8D-8218-5E10-B8AE-138374D8D113}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.viewBias" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{3F860893-1F57-5615-92CA-389B49687A9C}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "14" + } + ] + } + ] + } + ] + } + ] + }, + { + "field": "m_intervals", + "typeName": "AZStd::vector", + "typeId": "{908FF0AE-802D-5311-A2E0-A6D595FBC480}", + "Objects": [ + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "12" + } + ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "12" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "16" + } + ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "16" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "28" + } + ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "28" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "32" + } + ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "32" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "44" + } + ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "44" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "48" + } + ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "48" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "52" + } + ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "52" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "56" + } + ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "56" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "60" + } + ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "60" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "64" + } + ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "64" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "68" + } + ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "68" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "72" + } + ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "72" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "76" + } + ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "76" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "80" + } + ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "80" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "84" + } + ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "84" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "96" + } + ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "96" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "160" + } + ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "160" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "164" + } + ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "164" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "176" + } + ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "176" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "180" + } + ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "180" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "184" + } + ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "184" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "192" + } + ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "192" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "208" + } + ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "208" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "224" + } + ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "224" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "240" + } + ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "240" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "256" + } + ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "192" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "256" + } + ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "256" + } + ] + } + ] + }, + { + "field": "m_sizeInBytes", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "256" + }, + { + "field": "m_hash", + "typeName": "AZ::u64", + "typeId": "{D6597933-47CD-4FC8-B911-63F3E2B0993A}", + "value": "7181601620235669059" + } + ] + } + ] + }, + { + "field": "m_bindingSlot", + "typeName": "AZ::RHI::Handle", + "typeId": "{1811456D-0C3D-58C8-ACE8-FD47F4E80E25}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "4" + } + ] + }, + { + "field": "m_shaderVariantKeyFallbackSize", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + }, + { + "field": "m_shaderVariantKeyFallbackConstantIndex", + "typeName": "AZ::RHI::Handle", + "typeId": "{3F860893-1F57-5615-92CA-389B49687A9C}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "4294967295" + } + ] + }, + { + "field": "m_hash", + "typeName": "AZ::u64", + "typeId": "{D6597933-47CD-4FC8-B911-63F3E2B0993A}", + "value": "10614022793008117732" + } + ] + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZStd::pair", + "typeId": "{5C6406C8-77C9-597F-A3E9-249628D94902}", + "Objects": [ + { + "field": "value1", + "typeName": "Crc32", + "typeId": "{9F4E062E-06A0-46D4-85DF-E0DA96467D3A}", + "Objects": [ + { + "field": "Value", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "3189070339" + } + ] + }, + { + "field": "value2", + "typeName": "AZStd::intrusive_ptr", + "typeId": "{FF05CAD3-238F-5E19-8FF2-083353BBEC47}", + "Objects": [ + { + "field": "element", + "typeName": "ShaderResourceGroupLayout", + "typeId": "{1F92C651-9B83-4379-AB5C-5201F1B2C278}", + "version": 6, + "Objects": [ + { + "field": "m_staticSamplers", + "typeName": "AZStd::vector", + "typeId": "{D3BC4729-3DE0-57A1-96E0-DCFF98D4D975}" + }, + { + "field": "m_inputsForBuffers", + "typeName": "AZStd::vector", + "typeId": "{A4650430-04B9-589A-991F-4B443DCD20EA}" + }, + { + "field": "m_inputsForImages", + "typeName": "AZStd::vector", + "typeId": "{909BE4D8-5A22-59A4-A135-4E73662E2D83}", + "Objects": [ + { + "field": "element", + "typeName": "ShaderInputImageDescriptor", + "typeId": "{913DBF3C-5556-4524-B928-174A42516D31}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeRayTrace" + }, + { + "field": "m_type", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "3" + }, + { + "field": "m_access", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "1" + }, + { + "field": "m_count", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "1" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + } + ] + }, + { + "field": "element", + "typeName": "ShaderInputImageDescriptor", + "typeId": "{913DBF3C-5556-4524-B928-174A42516D31}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeStates" + }, + { + "field": "m_type", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "3" + }, + { + "field": "m_access", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "1" + }, + { + "field": "m_count", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "1" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "1" + } + ] + } + ] + }, + { + "field": "m_inputsForBufferUnboundedArrays", + "typeName": "AZStd::vector", + "typeId": "{DD5102EE-72A9-55F7-AB54-14F228FAE38F}" + }, + { + "field": "m_inputsForImageUnboundedArrays", + "typeName": "AZStd::vector", + "typeId": "{8042FF1E-9115-53F7-BE33-3DCDE9C0AB7F}" + }, + { + "field": "m_inputsForSamplers", + "typeName": "AZStd::vector", + "typeId": "{4CF286E1-5297-581D-93E9-891166EDAD9A}" + }, + { + "field": "m_intervalsForBuffers", + "typeName": "AZStd::vector", + "typeId": "{908FF0AE-802D-5311-A2E0-A6D595FBC480}" + }, + { + "field": "m_intervalsForImages", + "typeName": "AZStd::vector", + "typeId": "{908FF0AE-802D-5311-A2E0-A6D595FBC480}", + "Objects": [ + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "1" + } + ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "1" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "2" + } + ] + } + ] + }, + { + "field": "m_intervalsForSamplers", + "typeName": "AZStd::vector", + "typeId": "{908FF0AE-802D-5311-A2E0-A6D595FBC480}" + }, + { + "field": "m_groupSizeForBuffers", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + }, + { + "field": "m_groupSizeForImages", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "2" + }, + { + "field": "m_groupSizeForBufferUnboundedArrays", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + }, + { + "field": "m_groupSizeForImageUnboundedArrays", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + }, + { + "field": "m_groupSizeForSamplers", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + }, + { + "field": "m_idReflectionForBuffers", + "typeName": "AZ::RHI::NameIdReflectionMap>", + "typeId": "{A85E274A-4C1D-546F-B18C-452C5700BAE4}", + "Objects": [ + { + "field": "ReflectionMap", + "typeName": "AZStd::vector", + "typeId": "{F4529C0B-A2C0-5A32-A348-59D45FB1776B}" + } + ] + }, + { + "field": "m_idReflectionForImages", + "typeName": "AZ::RHI::NameIdReflectionMap>", + "typeId": "{BB6D1ABE-9A2F-5F51-93CB-B1B866EFD5B4}", + "Objects": [ + { + "field": "ReflectionMap", + "typeName": "AZStd::vector", + "typeId": "{BBD5D625-992D-5296-A631-9B84B00CE2F1}", + "Objects": [ + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{DB3620EE-8854-52A8-B421-BFA17E6A687D}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeRayTrace" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{5C8C0729-5D41-5299-80F1-395F79B02D70}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{DB3620EE-8854-52A8-B421-BFA17E6A687D}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeStates" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{5C8C0729-5D41-5299-80F1-395F79B02D70}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "1" + } + ] + } + ] + } + ] + } + ] + }, + { + "field": "m_idReflectionForBufferUnboundedArrays", + "typeName": "AZ::RHI::NameIdReflectionMap>", + "typeId": "{46520159-BC56-5E90-89AD-3CB0A5D295B0}", + "Objects": [ + { + "field": "ReflectionMap", + "typeName": "AZStd::vector", + "typeId": "{CD6D3195-A87A-5E0C-AD4D-23457B3B8DCF}" + } + ] + }, + { + "field": "m_idReflectionForImageUnboundedArrays", + "typeName": "AZ::RHI::NameIdReflectionMap>", + "typeId": "{A33C41AC-ABA0-5A34-9A6B-89BABDC151D7}", + "Objects": [ + { + "field": "ReflectionMap", + "typeName": "AZStd::vector", + "typeId": "{14C5FF00-B370-575F-866B-B19B97F76D82}" + } + ] + }, + { + "field": "m_idReflectionForSamplers", + "typeName": "AZ::RHI::NameIdReflectionMap>", + "typeId": "{2665EED7-CFB4-582B-B265-107348B1DFAC}", + "Objects": [ + { + "field": "ReflectionMap", + "typeName": "AZStd::vector", + "typeId": "{1545A615-BFD7-515C-A1E9-710570135F08}" + } + ] + }, + { + "field": "m_constantsDataLayout", + "typeName": "AZStd::intrusive_ptr", + "typeId": "{CEB3049A-A620-56C8-AFBA-D0A98304333D}", + "Objects": [ + { + "field": "element", + "typeName": "ConstantsLayout", + "typeId": "{66EDAC32-7730-4F05-AF9D-B3CB0F5D90E0}", + "Objects": [ + { + "field": "m_inputs", + "typeName": "AZStd::vector", + "typeId": "{5FC25C85-DF2F-5219-918C-EBC47D7D6451}", + "Objects": [ + { + "field": "element", + "typeName": "ShaderInputConstantDescriptor", + "typeId": "{C8DC7D2D-CCA0-45AD-9430-52C06B69325C}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.origin" + }, + { + "field": "m_constantByteOffset", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + }, + { + "field": "m_constantByteCount", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "12" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "2" + } + ] + }, + { + "field": "element", + "typeName": "ShaderInputConstantDescriptor", + "typeId": "{C8DC7D2D-CCA0-45AD-9430-52C06B69325C}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.numRaysPerProbe" + }, + { + "field": "m_constantByteOffset", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "12" + }, + { + "field": "m_constantByteCount", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "4" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "2" + } + ] + }, + { + "field": "element", + "typeName": "ShaderInputConstantDescriptor", + "typeId": "{C8DC7D2D-CCA0-45AD-9430-52C06B69325C}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeGridSpacing" + }, + { + "field": "m_constantByteOffset", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "16" + }, + { + "field": "m_constantByteCount", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "12" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "2" + } + ] + }, + { + "field": "element", + "typeName": "ShaderInputConstantDescriptor", + "typeId": "{C8DC7D2D-CCA0-45AD-9430-52C06B69325C}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeMaxRayDistance" + }, + { + "field": "m_constantByteOffset", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "28" + }, + { + "field": "m_constantByteCount", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "4" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "2" + } + ] + }, + { + "field": "element", + "typeName": "ShaderInputConstantDescriptor", + "typeId": "{C8DC7D2D-CCA0-45AD-9430-52C06B69325C}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeGridCounts" + }, + { + "field": "m_constantByteOffset", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "32" + }, + { + "field": "m_constantByteCount", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "12" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "2" + } + ] + }, + { + "field": "element", + "typeName": "ShaderInputConstantDescriptor", + "typeId": "{C8DC7D2D-CCA0-45AD-9430-52C06B69325C}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeDistanceExponent" + }, + { + "field": "m_constantByteOffset", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "44" + }, + { + "field": "m_constantByteCount", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "4" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "2" + } + ] + }, + { + "field": "element", + "typeName": "ShaderInputConstantDescriptor", + "typeId": "{C8DC7D2D-CCA0-45AD-9430-52C06B69325C}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeHysteresis" + }, + { + "field": "m_constantByteOffset", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "48" + }, + { + "field": "m_constantByteCount", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "4" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "2" + } + ] + }, + { + "field": "element", + "typeName": "ShaderInputConstantDescriptor", + "typeId": "{C8DC7D2D-CCA0-45AD-9430-52C06B69325C}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeChangeThreshold" + }, + { + "field": "m_constantByteOffset", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "52" + }, + { + "field": "m_constantByteCount", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "4" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "2" + } + ] + }, + { + "field": "element", + "typeName": "ShaderInputConstantDescriptor", + "typeId": "{C8DC7D2D-CCA0-45AD-9430-52C06B69325C}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeBrightnessThreshold" + }, + { + "field": "m_constantByteOffset", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "56" + }, + { + "field": "m_constantByteCount", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "4" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "2" + } + ] + }, + { + "field": "element", + "typeName": "ShaderInputConstantDescriptor", + "typeId": "{C8DC7D2D-CCA0-45AD-9430-52C06B69325C}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeIrradianceEncodingGamma" + }, + { + "field": "m_constantByteOffset", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "60" + }, + { + "field": "m_constantByteCount", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "4" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "2" + } + ] + }, + { + "field": "element", + "typeName": "ShaderInputConstantDescriptor", + "typeId": "{C8DC7D2D-CCA0-45AD-9430-52C06B69325C}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeInverseIrradianceEncodingGamma" + }, + { + "field": "m_constantByteOffset", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "64" + }, + { + "field": "m_constantByteCount", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "4" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "2" + } + ] + }, + { + "field": "element", + "typeName": "ShaderInputConstantDescriptor", + "typeId": "{C8DC7D2D-CCA0-45AD-9430-52C06B69325C}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeNumIrradianceTexels" + }, + { + "field": "m_constantByteOffset", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "68" + }, + { + "field": "m_constantByteCount", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "4" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "2" + } + ] + }, + { + "field": "element", + "typeName": "ShaderInputConstantDescriptor", + "typeId": "{C8DC7D2D-CCA0-45AD-9430-52C06B69325C}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeNumDistanceTexels" + }, + { + "field": "m_constantByteOffset", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "72" + }, + { + "field": "m_constantByteCount", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "4" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "2" + } + ] + }, + { + "field": "element", + "typeName": "ShaderInputConstantDescriptor", + "typeId": "{C8DC7D2D-CCA0-45AD-9430-52C06B69325C}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.normalBias" + }, + { + "field": "m_constantByteOffset", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "76" + }, + { + "field": "m_constantByteCount", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "4" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "2" + } + ] + }, + { + "field": "element", + "typeName": "ShaderInputConstantDescriptor", + "typeId": "{C8DC7D2D-CCA0-45AD-9430-52C06B69325C}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.viewBias" + }, + { + "field": "m_constantByteOffset", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "80" + }, + { + "field": "m_constantByteCount", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "4" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "2" + } + ] + }, + { + "field": "element", + "typeName": "ShaderInputConstantDescriptor", + "typeId": "{C8DC7D2D-CCA0-45AD-9430-52C06B69325C}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeVariablePad0" + }, + { + "field": "m_constantByteOffset", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "84" + }, + { + "field": "m_constantByteCount", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "12" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "2" + } + ] + }, + { + "field": "element", + "typeName": "ShaderInputConstantDescriptor", + "typeId": "{C8DC7D2D-CCA0-45AD-9430-52C06B69325C}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeRayRotationTransform" + }, + { + "field": "m_constantByteOffset", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "96" + }, + { + "field": "m_constantByteCount", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "64" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "2" + } + ] + }, + { + "field": "element", + "typeName": "ShaderInputConstantDescriptor", + "typeId": "{C8DC7D2D-CCA0-45AD-9430-52C06B69325C}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.volumeMovementType" + }, + { + "field": "m_constantByteOffset", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "160" + }, + { + "field": "m_constantByteCount", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "4" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "2" + } + ] + }, + { + "field": "element", + "typeName": "ShaderInputConstantDescriptor", + "typeId": "{C8DC7D2D-CCA0-45AD-9430-52C06B69325C}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeScrollOffsets" + }, + { + "field": "m_constantByteOffset", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "164" + }, + { + "field": "m_constantByteCount", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "12" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "2" + } + ] + }, + { + "field": "element", + "typeName": "ShaderInputConstantDescriptor", + "typeId": "{C8DC7D2D-CCA0-45AD-9430-52C06B69325C}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeBackfaceThreshold" + }, + { + "field": "m_constantByteOffset", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "176" + }, + { + "field": "m_constantByteCount", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "4" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "2" + } + ] + }, + { + "field": "element", + "typeName": "ShaderInputConstantDescriptor", + "typeId": "{C8DC7D2D-CCA0-45AD-9430-52C06B69325C}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeMinFrontfaceDistance" + }, + { + "field": "m_constantByteOffset", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "180" + }, + { + "field": "m_constantByteCount", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "4" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "2" + } + ] + }, + { + "field": "element", + "typeName": "ShaderInputConstantDescriptor", + "typeId": "{C8DC7D2D-CCA0-45AD-9430-52C06B69325C}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.padding" + }, + { + "field": "m_constantByteOffset", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "184" + }, + { + "field": "m_constantByteCount", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "8" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "2" + } + ] + }, + { + "field": "element", + "typeName": "ShaderInputConstantDescriptor", + "typeId": "{C8DC7D2D-CCA0-45AD-9430-52C06B69325C}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.padding1[0]" + }, + { + "field": "m_constantByteOffset", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "192" + }, + { + "field": "m_constantByteCount", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "16" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "2" + } + ] + }, + { + "field": "element", + "typeName": "ShaderInputConstantDescriptor", + "typeId": "{C8DC7D2D-CCA0-45AD-9430-52C06B69325C}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.padding1[1]" + }, + { + "field": "m_constantByteOffset", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "208" + }, + { + "field": "m_constantByteCount", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "16" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "2" + } + ] + }, + { + "field": "element", + "typeName": "ShaderInputConstantDescriptor", + "typeId": "{C8DC7D2D-CCA0-45AD-9430-52C06B69325C}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.padding1[2]" + }, + { + "field": "m_constantByteOffset", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "224" + }, + { + "field": "m_constantByteCount", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "16" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "2" + } + ] + }, + { + "field": "element", + "typeName": "ShaderInputConstantDescriptor", + "typeId": "{C8DC7D2D-CCA0-45AD-9430-52C06B69325C}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.padding1[3]" + }, + { + "field": "m_constantByteOffset", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "240" + }, + { + "field": "m_constantByteCount", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "16" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "2" + } + ] + }, + { + "field": "element", + "typeName": "ShaderInputConstantDescriptor", + "typeId": "{C8DC7D2D-CCA0-45AD-9430-52C06B69325C}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.padding1" + }, + { + "field": "m_constantByteOffset", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "192" + }, + { + "field": "m_constantByteCount", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "64" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "2" + } + ] + }, + { + "field": "element", + "typeName": "ShaderInputConstantDescriptor", + "typeId": "{C8DC7D2D-CCA0-45AD-9430-52C06B69325C}", + "version": 3, + "Objects": [ + { + "field": "m_name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid" + }, + { + "field": "m_constantByteOffset", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + }, + { + "field": "m_constantByteCount", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "256" + }, + { + "field": "m_registerId", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "2" + } + ] + } + ] + }, + { + "field": "m_idReflection", + "typeName": "AZ::RHI::NameIdReflectionMap>", + "typeId": "{7DE7E4B8-5C98-5F7A-985F-DDEEA5BB5366}", + "Objects": [ + { + "field": "ReflectionMap", + "typeName": "AZStd::vector", + "typeId": "{4B54CC87-1340-5B29-8040-2003033F9B93}", + "Objects": [ + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{285A5B8D-8218-5E10-B8AE-138374D8D113}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeMinFrontfaceDistance" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{3F860893-1F57-5615-92CA-389B49687A9C}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "20" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{285A5B8D-8218-5E10-B8AE-138374D8D113}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeNumDistanceTexels" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{3F860893-1F57-5615-92CA-389B49687A9C}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "12" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{285A5B8D-8218-5E10-B8AE-138374D8D113}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{3F860893-1F57-5615-92CA-389B49687A9C}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "27" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{285A5B8D-8218-5E10-B8AE-138374D8D113}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeInverseIrradianceEncodingGamma" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{3F860893-1F57-5615-92CA-389B49687A9C}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "10" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{285A5B8D-8218-5E10-B8AE-138374D8D113}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.padding1" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{3F860893-1F57-5615-92CA-389B49687A9C}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "26" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{285A5B8D-8218-5E10-B8AE-138374D8D113}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeScrollOffsets" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{3F860893-1F57-5615-92CA-389B49687A9C}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "18" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{285A5B8D-8218-5E10-B8AE-138374D8D113}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeIrradianceEncodingGamma" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{3F860893-1F57-5615-92CA-389B49687A9C}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "9" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{285A5B8D-8218-5E10-B8AE-138374D8D113}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.normalBias" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{3F860893-1F57-5615-92CA-389B49687A9C}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "13" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{285A5B8D-8218-5E10-B8AE-138374D8D113}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeBrightnessThreshold" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{3F860893-1F57-5615-92CA-389B49687A9C}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "8" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{285A5B8D-8218-5E10-B8AE-138374D8D113}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeHysteresis" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{3F860893-1F57-5615-92CA-389B49687A9C}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "6" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{285A5B8D-8218-5E10-B8AE-138374D8D113}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeRayRotationTransform" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{3F860893-1F57-5615-92CA-389B49687A9C}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "16" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{285A5B8D-8218-5E10-B8AE-138374D8D113}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.padding1[2]" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{3F860893-1F57-5615-92CA-389B49687A9C}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "24" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{285A5B8D-8218-5E10-B8AE-138374D8D113}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.padding1[3]" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{3F860893-1F57-5615-92CA-389B49687A9C}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "25" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{285A5B8D-8218-5E10-B8AE-138374D8D113}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.padding1[0]" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{3F860893-1F57-5615-92CA-389B49687A9C}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "22" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{285A5B8D-8218-5E10-B8AE-138374D8D113}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.padding1[1]" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{3F860893-1F57-5615-92CA-389B49687A9C}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "23" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{285A5B8D-8218-5E10-B8AE-138374D8D113}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeChangeThreshold" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{3F860893-1F57-5615-92CA-389B49687A9C}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "7" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{285A5B8D-8218-5E10-B8AE-138374D8D113}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.padding" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{3F860893-1F57-5615-92CA-389B49687A9C}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "21" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{285A5B8D-8218-5E10-B8AE-138374D8D113}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.origin" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{3F860893-1F57-5615-92CA-389B49687A9C}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{285A5B8D-8218-5E10-B8AE-138374D8D113}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.numRaysPerProbe" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{3F860893-1F57-5615-92CA-389B49687A9C}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "1" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{285A5B8D-8218-5E10-B8AE-138374D8D113}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeGridSpacing" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{3F860893-1F57-5615-92CA-389B49687A9C}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "2" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{285A5B8D-8218-5E10-B8AE-138374D8D113}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeBackfaceThreshold" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{3F860893-1F57-5615-92CA-389B49687A9C}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "19" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{285A5B8D-8218-5E10-B8AE-138374D8D113}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeMaxRayDistance" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{3F860893-1F57-5615-92CA-389B49687A9C}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "3" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{285A5B8D-8218-5E10-B8AE-138374D8D113}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeNumIrradianceTexels" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{3F860893-1F57-5615-92CA-389B49687A9C}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "11" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{285A5B8D-8218-5E10-B8AE-138374D8D113}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeGridCounts" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{3F860893-1F57-5615-92CA-389B49687A9C}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "4" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{285A5B8D-8218-5E10-B8AE-138374D8D113}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeVariablePad0" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{3F860893-1F57-5615-92CA-389B49687A9C}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "15" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{285A5B8D-8218-5E10-B8AE-138374D8D113}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.volumeMovementType" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{3F860893-1F57-5615-92CA-389B49687A9C}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "17" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{285A5B8D-8218-5E10-B8AE-138374D8D113}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.probeDistanceExponent" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{3F860893-1F57-5615-92CA-389B49687A9C}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "5" + } + ] + } + ] + }, + { + "field": "element", + "typeName": "AZ::RHI::ReflectionNamePair>", + "typeId": "{285A5B8D-8218-5E10-B8AE-138374D8D113}", + "version": 2, + "Objects": [ + { + "field": "Name", + "typeName": "Name", + "typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}", + "value": "m_probeGrid.viewBias" + }, + { + "field": "Index", + "typeName": "AZ::RHI::Handle", + "typeId": "{3F860893-1F57-5615-92CA-389B49687A9C}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "14" + } + ] + } + ] + } + ] + } + ] + }, + { + "field": "m_intervals", + "typeName": "AZStd::vector", + "typeId": "{908FF0AE-802D-5311-A2E0-A6D595FBC480}", + "Objects": [ + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "12" + } + ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "12" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "16" + } + ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "16" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "28" + } + ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "28" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "32" + } + ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "32" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "44" + } + ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "44" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "48" + } + ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "48" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "52" + } + ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "52" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "56" + } + ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "56" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "60" + } + ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "60" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "64" + } + ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "64" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "68" + } + ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "68" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "72" + } + ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "72" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "76" + } + ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "76" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "80" + } + ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "80" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "84" + } + ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "84" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "96" + } + ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "96" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "160" + } + ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "160" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "164" + } + ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "164" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "176" + } + ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "176" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "180" + } + ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "180" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "184" + } + ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "184" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "192" + } + ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "192" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "208" + } + ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "208" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "224" + } + ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "224" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "240" + } + ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "240" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "256" + } + ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "192" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "256" + } + ] + }, + { + "field": "element", + "typeName": "Interval", + "typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}", + "version": 1, + "Objects": [ + { + "field": "m_min", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + }, + { + "field": "m_max", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "256" + } + ] + } + ] + }, + { + "field": "m_sizeInBytes", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "256" + }, + { + "field": "m_hash", + "typeName": "AZ::u64", + "typeId": "{D6597933-47CD-4FC8-B911-63F3E2B0993A}", + "value": "2959428625184507101" + } + ] + } + ] + }, + { + "field": "m_bindingSlot", + "typeName": "AZ::RHI::Handle", + "typeId": "{1811456D-0C3D-58C8-ACE8-FD47F4E80E25}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "4" + } + ] + }, + { + "field": "m_shaderVariantKeyFallbackSize", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "0" + }, + { + "field": "m_shaderVariantKeyFallbackConstantIndex", + "typeName": "AZ::RHI::Handle", + "typeId": "{3F860893-1F57-5615-92CA-389B49687A9C}", + "version": 1, + "Objects": [ + { + "field": "m_index", + "typeName": "unsigned int", + "typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}", + "value": "4294967295" + } + ] + }, + { + "field": "m_hash", + "typeName": "AZ::u64", + "typeId": "{D6597933-47CD-4FC8-B911-63F3E2B0993A}", + "value": "4240011884224364085" + } + ] + } + ] + } + ] + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridclassification_vulkan_0.azshadervariant b/Gems/Atom/Feature/Common/Assets/Shaders/DiffuseGlobalIllumination/diffuseprobegridclassification_vulkan_0.azshadervariant new file mode 100644 index 0000000000000000000000000000000000000000..3a22d2cd552ecd70656fd5f864600db591cb9123 GIT binary patch literal 8914 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 S_Cmk9;q*Reo1g6#=6?dAfp;PR literal 0 HcmV?d00001 diff --git a/Gems/Atom/Feature/Common/Code/Source/DiffuseProbeGrid/DiffuseProbeGridClassificationPass.cpp b/Gems/Atom/Feature/Common/Code/Source/DiffuseProbeGrid/DiffuseProbeGridClassificationPass.cpp new file mode 100644 index 0000000000..db85914cee --- /dev/null +++ b/Gems/Atom/Feature/Common/Code/Source/DiffuseProbeGrid/DiffuseProbeGridClassificationPass.cpp @@ -0,0 +1,182 @@ +/* +* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or +* its licensors. +* +* For complete copyright and license terms please see the LICENSE at the root of this +* distribution (the "License"). All use of this software is governed by the License, +* or, if provided, by the license below or the license accompanying this file. Do not +* remove or modify any license notices. This file is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* +*/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace AZ +{ + namespace Render + { + RPI::Ptr DiffuseProbeGridClassificationPass::Create(const RPI::PassDescriptor& descriptor) + { + RPI::Ptr pass = aznew DiffuseProbeGridClassificationPass(descriptor); + return AZStd::move(pass); + } + + DiffuseProbeGridClassificationPass::DiffuseProbeGridClassificationPass(const RPI::PassDescriptor& descriptor) + : RPI::RenderPass(descriptor) + { + LoadShader(); + } + + void DiffuseProbeGridClassificationPass::LoadShader() + { + // load shader + // Note: the shader may not be available on all platforms + AZStd::string shaderFilePath = "Shaders/DiffuseGlobalIllumination/DiffuseProbeGridClassification.azshader"; + m_shader = RPI::LoadShader(shaderFilePath); + if (m_shader == nullptr) + { + return; + } + + // load pipeline state + RHI::PipelineStateDescriptorForDispatch pipelineStateDescriptor; + const auto& shaderVariant = m_shader->GetVariant(RPI::ShaderAsset::RootShaderVariantStableId); + shaderVariant.ConfigurePipelineState(pipelineStateDescriptor); + m_pipelineState = m_shader->AcquirePipelineState(pipelineStateDescriptor); + + // load Pass Srg asset + m_srgAsset = m_shader->FindShaderResourceGroupAsset(RPI::SrgBindingSlot::Pass); + + // retrieve the number of threads per thread group from the shader + const auto numThreads = m_shader->GetAsset()->GetAttribute(RHI::ShaderStage::Compute, Name{ "numthreads" }); + if (numThreads) + { + const RHI::ShaderStageAttributeArguments& args = *numThreads; + bool validArgs = args.size() == 3; + if (validArgs) + { + validArgs &= args[0].type() == azrtti_typeid(); + validArgs &= args[1].type() == azrtti_typeid(); + validArgs &= args[2].type() == azrtti_typeid(); + } + + if (!validArgs) + { + AZ_Error("PassSystem", false, "[DiffuseProbeClassificationPass '%s']: Shader '%s' contains invalid numthreads arguments.", GetPathName().GetCStr(), shaderFilePath.c_str()); + return; + } + + m_dispatchArgs.m_threadsPerGroupX = AZStd::any_cast(args[0]); + m_dispatchArgs.m_threadsPerGroupY = AZStd::any_cast(args[1]); + m_dispatchArgs.m_threadsPerGroupZ = AZStd::any_cast(args[2]); + } + } + + void DiffuseProbeGridClassificationPass::FrameBeginInternal(FramePrepareParams params) + { + RPI::Scene* scene = m_pipeline->GetScene(); + DiffuseProbeGridFeatureProcessor* diffuseProbeGridFeatureProcessor = scene->GetFeatureProcessor(); + + if (!diffuseProbeGridFeatureProcessor || diffuseProbeGridFeatureProcessor->GetProbeGrids().empty()) + { + // no diffuse probe grids + return; + } + + RayTracingFeatureProcessor* rayTracingFeatureProcessor = scene->GetFeatureProcessor(); + AZ_Assert(rayTracingFeatureProcessor, "DiffuseProbeGridClassificationPass requires the RayTracingFeatureProcessor"); + + if (!rayTracingFeatureProcessor->GetSubMeshCount()) + { + // empty scene + return; + } + + RenderPass::FrameBeginInternal(params); + } + + void DiffuseProbeGridClassificationPass::SetupFrameGraphDependencies(RHI::FrameGraphInterface frameGraph) + { + RenderPass::SetupFrameGraphDependencies(frameGraph); + + RPI::Scene* scene = m_pipeline->GetScene(); + DiffuseProbeGridFeatureProcessor* diffuseProbeGridFeatureProcessor = scene->GetFeatureProcessor(); + for (auto& diffuseProbeGrid : diffuseProbeGridFeatureProcessor->GetProbeGrids()) + { + // probe raytrace image + { + RHI::ImageScopeAttachmentDescriptor desc; + desc.m_attachmentId = diffuseProbeGrid->GetRayTraceImageAttachmentId(); + desc.m_imageViewDescriptor = diffuseProbeGrid->GetRenderData()->m_probeRayTraceImageViewDescriptor; + desc.m_loadStoreAction.m_loadAction = AZ::RHI::AttachmentLoadAction::Load; + + frameGraph.UseShaderAttachment(desc, RHI::ScopeAttachmentAccess::ReadWrite); + } + + // probe classification image + { + RHI::ImageScopeAttachmentDescriptor desc; + desc.m_attachmentId = diffuseProbeGrid->GetClassificationImageAttachmentId(); + desc.m_imageViewDescriptor = diffuseProbeGrid->GetRenderData()->m_probeClassificationImageViewDescriptor; + desc.m_loadStoreAction.m_loadAction = AZ::RHI::AttachmentLoadAction::Load; + + frameGraph.UseShaderAttachment(desc, RHI::ScopeAttachmentAccess::ReadWrite); + } + } + } + + void DiffuseProbeGridClassificationPass::CompileResources([[maybe_unused]] const RHI::FrameGraphCompileContext& context) + { + RPI::Scene* scene = m_pipeline->GetScene(); + DiffuseProbeGridFeatureProcessor* diffuseProbeGridFeatureProcessor = scene->GetFeatureProcessor(); + for (auto& diffuseProbeGrid : diffuseProbeGridFeatureProcessor->GetProbeGrids()) + { + // the diffuse probe grid Srg must be updated in the Compile phase in order to successfully bind the ReadWrite shader inputs + // (see ValidateSetImageView() in ShaderResourceGroupData.cpp) + diffuseProbeGrid->UpdateClassificationSrg(m_srgAsset); + diffuseProbeGrid->GetClassificationSrg()->Compile(); + } + } + + void DiffuseProbeGridClassificationPass::BuildCommandListInternal(const RHI::FrameGraphExecuteContext& context) + { + RHI::CommandList* commandList = context.GetCommandList(); + RPI::Scene* scene = m_pipeline->GetScene(); + DiffuseProbeGridFeatureProcessor* diffuseProbeGridFeatureProcessor = scene->GetFeatureProcessor(); + + // submit the DispatchItems for each DiffuseProbeGrid + for (auto& diffuseProbeGrid : diffuseProbeGridFeatureProcessor->GetProbeGrids()) + { + const RHI::ShaderResourceGroup* shaderResourceGroup = diffuseProbeGrid->GetClassificationSrg()->GetRHIShaderResourceGroup(); + commandList->SetShaderResourceGroupForDispatch(*shaderResourceGroup); + + uint32_t probeCountX; + uint32_t probeCountY; + diffuseProbeGrid->GetTexture2DProbeCount(probeCountX, probeCountY); + + RHI::DispatchItem dispatchItem; + dispatchItem.m_arguments = m_dispatchArgs; + dispatchItem.m_pipelineState = m_pipelineState; + dispatchItem.m_arguments.m_direct.m_totalNumberOfThreadsX = probeCountX; + dispatchItem.m_arguments.m_direct.m_totalNumberOfThreadsY = probeCountY; + dispatchItem.m_arguments.m_direct.m_totalNumberOfThreadsZ = 1; + + commandList->Submit(dispatchItem); + } + } + } // namespace Render +} // namespace AZ diff --git a/Gems/Atom/Feature/Common/Code/Source/DiffuseProbeGrid/DiffuseProbeGridClassificationPass.h b/Gems/Atom/Feature/Common/Code/Source/DiffuseProbeGrid/DiffuseProbeGridClassificationPass.h new file mode 100644 index 0000000000..df0a237e1a --- /dev/null +++ b/Gems/Atom/Feature/Common/Code/Source/DiffuseProbeGrid/DiffuseProbeGridClassificationPass.h @@ -0,0 +1,66 @@ +/* +* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or +* its licensors. +* +* For complete copyright and license terms please see the LICENSE at the root of this +* distribution (the "License"). All use of this software is governed by the License, +* or, if provided, by the license below or the license accompanying this file. Do not +* remove or modify any license notices. This file is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* +*/ +#pragma once + +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace AZ +{ + namespace Render + { + //! Compute shader that classifies probes as active or inactive in the diffuse probe grid. + class DiffuseProbeGridClassificationPass final + : public RPI::RenderPass + { + public: + AZ_RPI_PASS(DiffuseProbeGridClassificationPass); + + AZ_RTTI(AZ::Render::DiffuseProbeGridClassificationPass, "{98A6477A-F31C-4390-9BEB-9DB8E30BB281}", RPI::RenderPass); + AZ_CLASS_ALLOCATOR(DiffuseProbeGridClassificationPass, SystemAllocator, 0); + virtual ~DiffuseProbeGridClassificationPass() = default; + + static RPI::Ptr Create(const RPI::PassDescriptor& descriptor); + + private: + DiffuseProbeGridClassificationPass(const RPI::PassDescriptor& descriptor); + + void LoadShader(); + + // Pass overrides + void FrameBeginInternal(FramePrepareParams params) override; + + void SetupFrameGraphDependencies(RHI::FrameGraphInterface frameGraph) override; + void CompileResources(const RHI::FrameGraphCompileContext& context) override; + void BuildCommandListInternal(const RHI::FrameGraphExecuteContext& context) override; + + // shader + Data::Instance m_shader; + const RHI::PipelineState* m_pipelineState = nullptr; + Data::Asset m_srgAsset; + RHI::DispatchDirect m_dispatchArgs; + + // revision number of the ray tracing data when the shader table was built + uint32_t m_rayTracingDataRevision = 0; + }; + } // namespace Render +} // namespace AZ From 593542627602015b897f4239c3e4a785bfa6c755 Mon Sep 17 00:00:00 2001 From: Chris Santora Date: Mon, 19 Apr 2021 09:33:49 -0700 Subject: [PATCH 09/68] Fixed whitespace. ATOM-14765 Add More Texture Preset Masks --- .../Config/IBLSkybox.preset | 6 +++--- .../Config/NormalsWithSmoothness.preset | 10 +++++----- .../ImageProcessingAtom/Config/Opacity.preset | 20 +++++++++---------- 3 files changed, 18 insertions(+), 18 deletions(-) diff --git a/Gems/Atom/Asset/ImageProcessingAtom/Config/IBLSkybox.preset b/Gems/Atom/Asset/ImageProcessingAtom/Config/IBLSkybox.preset index 867fc73959..fef756e354 100644 --- a/Gems/Atom/Asset/ImageProcessingAtom/Config/IBLSkybox.preset +++ b/Gems/Atom/Asset/ImageProcessingAtom/Config/IBLSkybox.preset @@ -27,7 +27,7 @@ }, "PlatformsPresets": { "es3": { - "UUID": "{E6441EAC-9843-484B-8EFC-C03B2935B48D}", + "UUID": "{E6441EAC-9843-484B-8EFC-C03B2935B48D}", "Name": "IBLSkybox", "FileMasks": [ "_iblskyboxcm" @@ -61,7 +61,7 @@ "MinTextureSize": 256, "IsPowerOf2": true, "CubemapSettings": { - "RequiresConvolve": false, + "RequiresConvolve": false, "GenerateIBLSpecular": true, "IBLSpecularPreset": "{908DA68C-97FB-4C4A-97BC-5A55F30F14FA}", "GenerateIBLDiffuse": true, @@ -69,7 +69,7 @@ } }, "osx_gl": { - "UUID": "{E6441EAC-9843-484B-8EFC-C03B2935B48D}", + "UUID": "{E6441EAC-9843-484B-8EFC-C03B2935B48D}", "Name": "IBLSkybox", "FileMasks": [ "_iblskyboxcm" diff --git a/Gems/Atom/Asset/ImageProcessingAtom/Config/NormalsWithSmoothness.preset b/Gems/Atom/Asset/ImageProcessingAtom/Config/NormalsWithSmoothness.preset index fdb24ecd09..2c61d6f5a6 100644 --- a/Gems/Atom/Asset/ImageProcessingAtom/Config/NormalsWithSmoothness.preset +++ b/Gems/Atom/Asset/ImageProcessingAtom/Config/NormalsWithSmoothness.preset @@ -9,11 +9,11 @@ "SourceColor": "Linear", "DestColor": "Linear", "FileMasks": [ - "_ddna", - "_normala", - "_nrma", - "_nma", - "_na" + "_ddna", + "_normala", + "_nrma", + "_nma", + "_na" ], "PixelFormat": "BC5s", "PixelFormatAlpha": "BC4", diff --git a/Gems/Atom/Asset/ImageProcessingAtom/Config/Opacity.preset b/Gems/Atom/Asset/ImageProcessingAtom/Config/Opacity.preset index 6d0d9009a5..79fb235508 100644 --- a/Gems/Atom/Asset/ImageProcessingAtom/Config/Opacity.preset +++ b/Gems/Atom/Asset/ImageProcessingAtom/Config/Opacity.preset @@ -9,16 +9,16 @@ "SourceColor": "Linear", "DestColor": "Linear", "FileMasks": [ - "_sss", - "_trans", - "_opac", - "_opacity", - "_o", - "_opac", - "_op", - "_mask", - "_msk", - "_blend" + "_sss", + "_trans", + "_opac", + "_opacity", + "_o", + "_opac", + "_op", + "_mask", + "_msk", + "_blend" ], "PixelFormat": "BC4", "IsPowerOf2": true, From 889158e3a993eb371ed358cb3ce3e92c98ae6c8d Mon Sep 17 00:00:00 2001 From: srikappa Date: Mon, 19 Apr 2021 09:53:45 -0700 Subject: [PATCH 10/68] A couple of minor fixes --- .../Prefab/Instance/Instance.cpp | 2 +- .../Prefab/PrefabSystemComponent.cpp | 18 ++++++------------ 2 files changed, 7 insertions(+), 13 deletions(-) diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/Instance/Instance.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/Instance/Instance.cpp index bd4c343a3c..0a5b43482e 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/Instance/Instance.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/Instance/Instance.cpp @@ -283,7 +283,7 @@ namespace AzToolsFramework { if (!m_instanceEntityMapper->RegisterEntityToInstance(entityId, *this)) { - AZ_Error("Prefab", false, + AZ_Assert(false, "Prefab - Failed to register entity with id %s with a Prefab Instance derived from source asset %s " "This entity is likely already registered. Check for a double add.", entityId.ToString().c_str(), diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabSystemComponent.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabSystemComponent.cpp index 7a9ec0a62e..b777c2bdeb 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabSystemComponent.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabSystemComponent.cpp @@ -119,10 +119,7 @@ namespace AzToolsFramework newInstance->AddInstance(AZStd::move(instance)); } - /* - AzToolsFramework::EditorEntityContextRequestBus::Broadcast( - &AzToolsFramework::EditorEntityContextRequests::HandleEntitiesAdded, EntityList{containerEntity->GetId()}); - */ + newInstance->SetTemplateSourcePath(filePath); TemplateId newTemplateId = CreateTemplateFromInstance(*newInstance); @@ -162,14 +159,14 @@ namespace AzToolsFramework void PrefabSystemComponent::UpdatePrefabTemplate(TemplateId templateId, const PrefabDom& updatedDom) { - auto templateRef = FindTemplate(templateId); - if (templateRef.has_value()) + auto templateToUpdate = FindTemplate(templateId); + if (templateToUpdate) { - PrefabDom& templateDomToUpdate = templateRef->get().GetPrefabDom(); + PrefabDom& templateDomToUpdate = templateToUpdate->get().GetPrefabDom(); if (AZ::JsonSerialization::Compare(templateDomToUpdate, updatedDom) != AZ::JsonSerializerCompareResult::Equal) { templateDomToUpdate.CopyFrom(updatedDom, templateDomToUpdate.GetAllocator()); - templateRef->get().MarkAsDirty(true); + templateToUpdate->get().MarkAsDirty(true); PropagateTemplateChanges(templateId); } } @@ -643,12 +640,9 @@ namespace AzToolsFramework newLink.GetLinkDom().AddMember(rapidjson::StringRef(PrefabDomUtils::SourceName), rapidjson::StringRef(sourceTemplate.GetFilePath().c_str()), newLink.GetLinkDom().GetAllocator()); - PrefabDom linkPatchCopy; - linkPatchCopy.CopyFrom(linkPatch->get(), newLink.GetLinkDom().GetAllocator()); - if (linkPatch && linkPatch->get().IsArray() && !(linkPatch->get().Empty())) { - m_instanceToTemplatePropagator.AddPatchesToLink(linkPatchCopy, newLink); + m_instanceToTemplatePropagator.AddPatchesToLink(linkPatch.value(), newLink); } //update the target template dom to have the proper values for the source template dom From 9a0b47137a53d10d01c1faba3efa0b238b0f14ad Mon Sep 17 00:00:00 2001 From: spham Date: Mon, 19 Apr 2021 10:14:59 -0700 Subject: [PATCH 11/68] Add linux setup scripts to: 1. Install Linux AWSCLI 2. Install Linux Git, GitLFS, and GCM 3. Install Linux build libraries and tools for O3DE --- .../Platform/Linux/install-awscli.sh | 47 ++++++++ .../Linux/install-ubuntu-build-libraries.sh | 103 ++++++++++++++++++ .../Linux/install-ubuntu-build-tools.sh | 72 ++++++++++++ .../Platform/Linux/install-ubuntu-git.sh | 96 ++++++++++++++++ 4 files changed, 318 insertions(+) create mode 100644 scripts/build/build_node/Platform/Linux/install-awscli.sh create mode 100644 scripts/build/build_node/Platform/Linux/install-ubuntu-build-libraries.sh create mode 100644 scripts/build/build_node/Platform/Linux/install-ubuntu-build-tools.sh create mode 100644 scripts/build/build_node/Platform/Linux/install-ubuntu-git.sh diff --git a/scripts/build/build_node/Platform/Linux/install-awscli.sh b/scripts/build/build_node/Platform/Linux/install-awscli.sh new file mode 100644 index 0000000000..c9addedc82 --- /dev/null +++ b/scripts/build/build_node/Platform/Linux/install-awscli.sh @@ -0,0 +1,47 @@ +#!/bin/bash + +# All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or +# its licensors. +# +# For complete copyright and license terms please see the LICENSE at the root of this +# distribution (the "License"). All use of this software is governed by the License, +# or, if provided, by the license below or the license accompanying this file. Do not +# remove or modify any license notices. This file is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + +# This script must be run as root +if [ "`whoami`" != "root" ] +then + echo "This script must be run as root (sudo)" + exit 1 +fi + +# +# Install curl if its not installed +# +curl --version >/dev/null 2>&1 +if [ $? -ne 0 ] +then + echo "Installing curl" + apt-get install curl -y +fi + +# +# Setup AWS CLI if needed +# +aws --version >/dev/null 2>&1 +if [ $? -ne 0 ] +then + echo Setting up AWS CLI + curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip" + unzip awscliv2.zip + ./aws/install + rm -rf ./aws +else + AWS_CLI_VERSION=`aws --version | awk '{print $1}' | awk -F/ '{print $2}'` + echo AWS CLI \(version $AWS_CLI_VERSION\) already installed +fi + + + + diff --git a/scripts/build/build_node/Platform/Linux/install-ubuntu-build-libraries.sh b/scripts/build/build_node/Platform/Linux/install-ubuntu-build-libraries.sh new file mode 100644 index 0000000000..7b78a53802 --- /dev/null +++ b/scripts/build/build_node/Platform/Linux/install-ubuntu-build-libraries.sh @@ -0,0 +1,103 @@ +#!/bin/bash + +# All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or +# its licensors. +# +# For complete copyright and license terms please see the LICENSE at the root of this +# distribution (the "License"). All use of this software is governed by the License, +# or, if provided, by the license below or the license accompanying this file. Do not +# remove or modify any license notices. This file is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + +# This script must be run as root +if [ "`whoami`" != "root" ] +then + echo "This script must be run as root (sudo)" + exit 1 +fi + +# +# Make sure we are installing on a supported ubuntu distro +# +lsb_release -c >/dev/null 2>&1 +if [ $? -ne 0 ] +then + echo This script is only supported on Ubuntu Distros + exit 1 +fi + +UBUNTU_DISTRO="`lsb_release -c | awk '{print $2}'`" +if [ "$UBUNTU_DISTRO" == "bionic" ] +then + echo "Setup for Ubuntu 18.04 LTS ($UBUNTU_DISTRO)" +elif [ "$UBUNTU_DISTRO" == "focal" ] +then + echo "Setup for Ubuntu 20.04 LTS ($UBUNTU_DISTRO)" +else + echo "Unsupported version of Ubuntu $UBUNTU_DISTRO" + exit 1 +fi + +# +# Install curl if its not installed +# +curl --version >/dev/null 2>&1 +if [ $? -ne 0 ] +then + echo "Installing curl" + apt-get install curl -y +fi + + +# +# If the linux distro is 20.04 (focal), we need libffi.so.6, which is not part of the focal distro. We +# will install it from the bionic distro manually into focal. This is needed since Ubuntu 20.04 supports +# python 3.8 out of the box, but we are using 3.7 +# +LIBFFI6_COUNT=`apt list --installed 2>/dev/null | grep libffi6 | wc -l` +if [ "$UBUNTU_DISTRO" == "focal" ] && [ $LIBFFI6_COUNT -eq 0 ] +then + echo "Installing libffi for Ubuntu 20.04" + + pushd /tmp >/dev/null + + LIBFFI_PACKAGE_NAME=libffi6_3.2.1-8_amd64.deb + LIBFFI_PACKAGE_URL=http://mirrors.kernel.org/ubuntu/pool/main/libf/libffi/ + + curl --location $LIBFFI_PACKAGE_URL/$LIBFFI_PACKAGE_NAME -o $LIBFFI_PACKAGE_NAME + if [ $? -ne 0 ] + then + echo Unable to download $LIBFFI_PACKAGE_URL/$LIBFFI_PACKAGE_NAME + popd + exit 1 + fi + + apt install ./$LIBFFI_PACKAGE_NAME -y + if [ $? -ne 0 ] + then + echo Unable to install $LIBFFI_PACKAGE_NAME + rm -f ./$LIBFFI_PACKAGE_NAME + popd + exit 1 + fi + + rm -f ./$LIBFFI_PACKAGE_NAME + popd + echo "libffi.so.6 installed" +fi + +# Install the required build packages +apt-get install clang-6.0 -y # For the compiler and its dependencies +apt-get install libglu1-mesa-dev -y # For Qt (GL dependency) + +# The following packages resolves a runtime error with Qt Plugins +apt-get install libxcb-xinerama0 -y # For Qt plugins at runtime +apt-get install libxcb-xinput0 -y # For Qt plugins at runtime + +apt-get install libcurl4-openssl-dev -y # For HttpRequestor +apt-get install libsdl2-dev -y # For WWise + +apt-get install libz-dev -y +apt-get install mesa-common-dev -y + +echo Build Libraries Setup Complete diff --git a/scripts/build/build_node/Platform/Linux/install-ubuntu-build-tools.sh b/scripts/build/build_node/Platform/Linux/install-ubuntu-build-tools.sh new file mode 100644 index 0000000000..eb9229d90b --- /dev/null +++ b/scripts/build/build_node/Platform/Linux/install-ubuntu-build-tools.sh @@ -0,0 +1,72 @@ +#!/bin/bash + +# All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or +# its licensors. +# +# For complete copyright and license terms please see the LICENSE at the root of this +# distribution (the "License"). All use of this software is governed by the License, +# or, if provided, by the license below or the license accompanying this file. Do not +# remove or modify any license notices. This file is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + +# This script must be run as root +if [ "`whoami`" != "root" ] +then + echo "This script must be run as root (sudo)" + exit 1 +fi + +# +# Make sure we are installing on a supported ubuntu distro +# +lsb_release -c >/dev/null 2>&1 +if [ $? -ne 0 ] +then + echo This script is only supported on Ubuntu Distros + exit 1 +fi + +UBUNTU_DISTRO="`lsb_release -c | awk '{print $2}'`" +if [ "$UBUNTU_DISTRO" == "bionic" ] +then + echo "Setup for Ubuntu 18.04 LTS ($UBUNTU_DISTRO)" +elif [ "$UBUNTU_DISTRO" == "focal" ] +then + echo "Setup for Ubuntu 20.04 LTS ($UBUNTU_DISTRO)" +else + echo "Unsupported version of Ubuntu $UBUNTU_DISTRO" + exit 1 +fi + +# +# Always install the latest version of cmake (from kitware) +# +echo Installing the latest version of CMake + +# Remove any pre-existing version of cmake +apt purge --auto-remove cmake -y +wget -O - https://apt.kitware.com/keys/kitware-archive-latest.asc 2>/dev/null | gpg --dearmor - | sudo tee /etc/apt/trusted.gpg.d/kitware.gpg >/dev/null +CMAKE_DEB_REPO="'deb https://apt.kitware.com/ubuntu/ $UBUNTU_DISTRO main'" + +# Add the appropriate kitware repository to apt +if [ "$UBUNTU_DISTRO" == "bionic" ] +then + apt-add-repository 'deb https://apt.kitware.com/ubuntu/ bionic main' +elif [ "$UBUNTU_DISTRO" == "focal" ] +then + apt-add-repository 'deb https://apt.kitware.com/ubuntu/ focal main' +fi +apt-get update + +# Install cmake +apt-get install cmake -y + + +# +# Make sure that Ninja is installed +# +echo Installing Ninja +apt-get install ninja-build -y + + +echo Build Tools Setup Complete diff --git a/scripts/build/build_node/Platform/Linux/install-ubuntu-git.sh b/scripts/build/build_node/Platform/Linux/install-ubuntu-git.sh new file mode 100644 index 0000000000..a1c2923c13 --- /dev/null +++ b/scripts/build/build_node/Platform/Linux/install-ubuntu-git.sh @@ -0,0 +1,96 @@ +#!/bin/bash + +# All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or +# its licensors. +# +# For complete copyright and license terms please see the LICENSE at the root of this +# distribution (the "License"). All use of this software is governed by the License, +# or, if provided, by the license below or the license accompanying this file. Do not +# remove or modify any license notices. This file is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + +# This script must be run as root +if [ "`whoami`" != "root" ] +then + echo "This script must be run as root (sudo)" + exit 1 +fi + +# +# Make sure we are installing on a supported ubuntu distro +# +lsb_release -c >/dev/null 2>&1 +if [ $? -ne 0 ] +then + echo This script is only supported on Ubuntu Distros + exit 1 +fi + +UBUNTU_DISTRO="`lsb_release -c | awk '{print $2}'`" +if [ "$UBUNTU_DISTRO" == "bionic" ] +then + echo "Setup for Ubuntu 18.04 LTS ($UBUNTU_DISTRO)" +elif [ "$UBUNTU_DISTRO" == "focal" ] +then + echo "Setup for Ubuntu 20.04 LTS ($UBUNTU_DISTRO)" +else + echo "Unsupported version of Ubuntu $UBUNTU_DISTRO" + exit 1 +fi + +# +# Setup and get the latest from git if necessary +# +git --version > /dev/null 2>&1 +if [ $? -ne 0 ] +then + echo Setting up latest version of GIT + add-apt-repository ppa:git-core/ppa -y + apt-get update + apt-get install git -y +else + GIT_VERSION=`git --version | awk '{print $3}'` + echo Git $GIT_VERSION already Installed. Skipping Git installation +fi + +# +# Setup Git-LFS if needed +# +GIT_LFS_PACKAGE_COUNT=`apt list --installed 2>/dev/null | grep git-lfs/ | wc -l` +if [ $GIT_LFS_PACKAGE_COUNT -eq 0 ] +then + echo Setting up Git-LFS + pushd /tmp + wget https://packagecloud.io/install/repositories/github/git-lfs/script.deb.sh -o script.deb.sh + rm script.deb.sh + mv script.deb.sh.1 script.deb.sh + chmod +x script.deb.sh + ./script.deb.sh + sudo apt-get install git-lfs -y + popd +else + echo Git LFS already installed. Skipping Git-LFS installation +fi + +# Setup GCM if needed +git-credential-manager-core --version > /dev/null 2>&1 +if [ $? -ne 0 ] +then + # Download and setup Git Credential Manager + GCM_PACKAGE_NAME=gcmcore-linux_amd64.2.0.394.50751.deb + GCM_PACKAGE_URL=https://github.com/microsoft/Git-Credential-Manager-Core/releases/download/v2.0.394-beta + + echo Installing Git Credential Manager \($GCM_PACKAGE_NAME\) + + pushd /tmp > /dev/null + curl --location $GCM_PACKAGE_URL/$GCM_PACKAGE_NAME -o $GCM_PACKAGE_NAME + dpkg -i $GCM_PACKAGE_NAME + popd +else + GCM_VERSION=`git-credential-manager-core --version` + echo Git Credential Manager \(GCM\) version $GCM_VERSION already installed. Skipping GCM installation +fi + +# Setup pass (password manager) for git-credential-manager +apt-get install pass -y + From f3ff5ec8869e2344e17b1510bf76a9ae6b2a9b2e Mon Sep 17 00:00:00 2001 From: srikappa Date: Mon, 19 Apr 2021 11:05:28 -0700 Subject: [PATCH 12/68] Add helper method for adding link in CreatePrefab --- .../Prefab/PrefabPublicHandler.cpp | 77 +++++++++---------- .../Prefab/PrefabPublicHandler.h | 4 + .../Prefab/PrefabSystemComponent.cpp | 2 +- .../AzToolsFramework/Prefab/PrefabUndo.cpp | 2 +- .../AzToolsFramework/Prefab/PrefabUndo.h | 2 +- .../Prefab/PrefabUndoHelpers.cpp | 10 +++ .../Prefab/PrefabUndoHelpers.h | 3 + 7 files changed, 57 insertions(+), 43 deletions(-) diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabPublicHandler.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabPublicHandler.cpp index 0ce929217d..2fb186bcf7 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabPublicHandler.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabPublicHandler.cpp @@ -100,7 +100,6 @@ namespace AzToolsFramework AZStd::vector> instances; InstanceOptionalReference instance; - { // Initialize Undo Batch object ScopedUndoBatch undoBatch("Create Prefab"); @@ -151,47 +150,9 @@ namespace AzToolsFramework linkRemoveUndo->Redo(); - AZ::EntityId containerEntityId = instance->get().GetContainerEntityId(); - AZ::Entity* containerEntity = GetEntityById(containerEntityId); - // Apply Transform changes as overrides - { - Prefab::PrefabDom containerEntityDomBefore; - m_instanceToTemplateInterface->GenerateDomForEntity(containerEntityDomBefore, *containerEntity); - - AZ::Vector3 containerEntityTranslation(AZ::Vector3::CreateZero()); - AZ::Quaternion containerEntityRotation(AZ::Quaternion::CreateZero()); - - // Set the transform (translation, rotation) of the container entity - GenerateContainerEntityTransform(topLevelEntities, containerEntityTranslation, containerEntityRotation); - - // Set container entity to be child of common root - AZ::TransformBus::Event(containerEntityId, &AZ::TransformBus::Events::SetParent, commonRootEntityId); - - AZ::TransformBus::Event(containerEntityId, &AZ::TransformBus::Events::SetLocalTranslation, containerEntityTranslation); - AZ::TransformBus::Event(containerEntityId, &AZ::TransformBus::Events::SetLocalRotationQuaternion, containerEntityRotation); - - PrefabDom containerEntityDomAfter; - m_instanceToTemplateInterface->GenerateDomForEntity(containerEntityDomAfter, *containerEntity); - - PrefabDom patch; - m_instanceToTemplateInterface->GeneratePatch(patch, containerEntityDomBefore, containerEntityDomAfter); - - m_instanceToTemplateInterface->AppendEntityAliasToPatchPaths(patch, containerEntityId); - - - auto linkAddUndo = aznew PrefabUndoInstanceLink("Undo Link Add Node"); - linkAddUndo->Capture( - commonRootEntityOwningInstance->get().GetTemplateId(), instance->get().GetTemplateId(), instance->get().GetInstanceAlias(), - patch, InvalidLinkId); - linkAddUndo->SetParent(undoBatch.GetUndoBatch()); - - linkAddUndo->Redo(); - - // Update the cache - this prevents these changes from being stored in the regular undo/redo nodes - m_prefabUndoCache.Store(containerEntityId, AZStd::move(containerEntityDomAfter)); - } + AddLink(topLevelEntities, instance->get(), commonRootEntityOwningInstance->get(), undoBatch.GetUndoBatch(), commonRootEntityId); // Change top level entities to be parented to the container entity // Mark them as dirty so this change is correctly applied to the template @@ -216,6 +177,42 @@ namespace AzToolsFramework return AZ::Success(); } + void PrefabPublicHandler::AddLink( + const EntityList& topLevelEntities, Instance& instanceToAdd, Instance& parentInstance, UndoSystem::URSequencePoint* undoBatch, + AZ::EntityId commonRootEntityId) + { + AZ::EntityId containerEntityId = instanceToAdd.GetContainerEntityId(); + AZ::Entity* containerEntity = GetEntityById(containerEntityId); + Prefab::PrefabDom containerEntityDomBefore; + m_instanceToTemplateInterface->GenerateDomForEntity(containerEntityDomBefore, *containerEntity); + + AZ::Vector3 containerEntityTranslation(AZ::Vector3::CreateZero()); + AZ::Quaternion containerEntityRotation(AZ::Quaternion::CreateZero()); + + // Set the transform (translation, rotation) of the container entity + GenerateContainerEntityTransform(topLevelEntities, containerEntityTranslation, containerEntityRotation); + + // Set container entity to be child of common root + AZ::TransformBus::Event(containerEntityId, &AZ::TransformBus::Events::SetParent, commonRootEntityId); + + AZ::TransformBus::Event(containerEntityId, &AZ::TransformBus::Events::SetLocalTranslation, containerEntityTranslation); + AZ::TransformBus::Event(containerEntityId, &AZ::TransformBus::Events::SetLocalRotationQuaternion, containerEntityRotation); + + PrefabDom containerEntityDomAfter; + m_instanceToTemplateInterface->GenerateDomForEntity(containerEntityDomAfter, *containerEntity); + + PrefabDom patch; + m_instanceToTemplateInterface->GeneratePatch(patch, containerEntityDomBefore, containerEntityDomAfter); + m_instanceToTemplateInterface->AppendEntityAliasToPatchPaths(patch, containerEntityId); + + PrefabUndoHelpers::AddLink( + "Add Link", instanceToAdd.GetTemplateId(), parentInstance.GetTemplateId(), patch, instanceToAdd.GetInstanceAlias(), + undoBatch); + + // Update the cache - this prevents these changes from being stored in the regular undo/redo nodes + m_prefabUndoCache.Store(containerEntityId, AZStd::move(containerEntityDomAfter)); + } + PrefabOperationResult PrefabPublicHandler::InstantiatePrefab(AZStd::string_view /*filePath*/, AZ::EntityId /*parent*/, AZ::Vector3 /*position*/) { return AZ::Failure(AZStd::string("Prefab - InstantiatePrefab is yet to be implemented.")); diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabPublicHandler.h b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabPublicHandler.h index de892470ab..7f3d05e3d3 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabPublicHandler.h +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabPublicHandler.h @@ -69,6 +69,10 @@ namespace AzToolsFramework InstanceOptionalReference GetOwnerInstanceByEntityId(AZ::EntityId entityId) const; bool EntitiesBelongToSameInstance(const EntityIdList& entityIds) const; + void AddLink( + const EntityList& topLevelEntities, Instance& instanceToAdd, Instance& parentInstance, + UndoSystem::URSequencePoint* undoBatch, AZ::EntityId commonRootEntityId); + static Instance* GetParentInstance(Instance* instance); static Instance* GetAncestorOfInstanceThatIsChildOfRoot(const Instance* ancestor, Instance* descendant); static void GenerateContainerEntityTransform(const EntityList& topLevelEntities, AZ::Vector3& translation, AZ::Quaternion& rotation); diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabSystemComponent.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabSystemComponent.cpp index b777c2bdeb..9070630e56 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabSystemComponent.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabSystemComponent.cpp @@ -120,7 +120,7 @@ namespace AzToolsFramework newInstance->AddInstance(AZStd::move(instance)); } - newInstance->SetTemplateSourcePath(filePath); + newInstance->SetTemplateSourcePath(relativeFilePath); TemplateId newTemplateId = CreateTemplateFromInstance(*newInstance); if (newTemplateId == InvalidTemplateId) diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabUndo.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabUndo.cpp index 0d9f9f72a5..ea3fa5d84d 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabUndo.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabUndo.cpp @@ -124,7 +124,7 @@ namespace AzToolsFramework const TemplateId& targetId, const TemplateId& sourceId, const InstanceAlias& instanceAlias, - const PrefabDomReference linkDom, + PrefabDomReference linkDom, const LinkId linkId) { m_targetId = targetId; diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabUndo.h b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabUndo.h index 7a765c5db7..0d15d707d2 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabUndo.h +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabUndo.h @@ -101,7 +101,7 @@ namespace AzToolsFramework const TemplateId& targetId, const TemplateId& sourceId, const InstanceAlias& instanceAlias, - const PrefabDomReference linkDom = PrefabDomReference(), + PrefabDomReference linkDom = PrefabDomReference(), const LinkId linkId = InvalidLinkId); void Undo() override; diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabUndoHelpers.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabUndoHelpers.cpp index da41635d03..1fa9169ae2 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabUndoHelpers.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabUndoHelpers.cpp @@ -32,6 +32,16 @@ namespace AzToolsFramework state->SetParent(undoBatch); state->Redo(); } + + void AddLink( + AZStd::string_view undoMessage, TemplateId sourceTemplateId, TemplateId targetTemplateId, PrefabDomReference patch, + const InstanceAlias& instanceAlias, UndoSystem::URSequencePoint* undoBatch) + { + auto linkAddUndo = aznew PrefabUndoInstanceLink(undoMessage); + linkAddUndo->Capture(targetTemplateId, sourceTemplateId, instanceAlias, patch, InvalidLinkId); + linkAddUndo->SetParent(undoBatch); + linkAddUndo->Redo(); + } } } // namespace Prefab } // namespace AzToolsFramework diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabUndoHelpers.h b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabUndoHelpers.h index 81d0048e9e..279deb953c 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabUndoHelpers.h +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabUndoHelpers.h @@ -21,6 +21,9 @@ namespace AzToolsFramework void UpdatePrefabInstance( const Instance& instance, AZStd::string_view undoMessage, const PrefabDom& instanceDomBeforeUpdate, UndoSystem::URSequencePoint* undoBatch); + void AddLink( + AZStd::string_view undoMessage, TemplateId sourceTemplateId, TemplateId targetTemplateId, PrefabDomReference patch, + const InstanceAlias& instanceAlias, UndoSystem::URSequencePoint* undoBatch); } } // namespace Prefab } // namespace AzToolsFramework From c9153b035350e68a1a15f6918f64d62c770e1d24 Mon Sep 17 00:00:00 2001 From: qingtao Date: Mon, 19 Apr 2021 11:47:57 -0700 Subject: [PATCH 13/68] ATOM-15272 Running game with Actor spams asserts in the log resulting in low framerate The condition was setup wrongly when introducing DynamicInputAssembly. --- Gems/Atom/RPI/Code/Source/RPI.Public/Buffer/Buffer.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Gems/Atom/RPI/Code/Source/RPI.Public/Buffer/Buffer.cpp b/Gems/Atom/RPI/Code/Source/RPI.Public/Buffer/Buffer.cpp index 81fd9e751b..afcf4670f3 100644 --- a/Gems/Atom/RPI/Code/Source/RPI.Public/Buffer/Buffer.cpp +++ b/Gems/Atom/RPI/Code/Source/RPI.Public/Buffer/Buffer.cpp @@ -74,7 +74,8 @@ namespace AZ const RHI::BufferView* Buffer::GetBufferView() const { - if(RHI::CheckBitsAny(m_rhiBuffer->GetDescriptor().m_bindFlags, RHI::BufferBindFlags::InputAssembly | RHI::BufferBindFlags::DynamicInputAssembly)) + if (m_rhiBuffer->GetDescriptor().m_bindFlags == RHI::BufferBindFlags::InputAssembly || + m_rhiBuffer->GetDescriptor().m_bindFlags == RHI::BufferBindFlags::DynamicInputAssembly) { AZ_Assert(false, "Input assembly buffer doesn't need a regular buffer view, it requires a stream or index buffer view."); From 4fb407e1309da2d661a9ed71cb72ada58ed23fc7 Mon Sep 17 00:00:00 2001 From: Chris Galvan Date: Mon, 19 Apr 2021 15:39:50 -0500 Subject: [PATCH 14/68] [LYN-3070] Removed legacy Material Editor. --- Code/Sandbox/Editor/CryEdit.cpp | 9 - Code/Sandbox/Editor/CryEdit.h | 2 - Code/Sandbox/Editor/MainWindow.cpp | 2 - Code/Sandbox/Editor/MatEditMainDlg.cpp | 110 - Code/Sandbox/Editor/MatEditMainDlg.h | 48 - .../Editor/Material/MaterialDialog.cpp | 2290 ----------------- Code/Sandbox/Editor/Material/MaterialDialog.h | 176 -- .../Editor/Material/MaterialDialog.qrc | 35 - .../Material/images/materialdialog_add.png | 3 - .../images/materialdialog_add_active.png | 3 - .../images/materialdialog_add_disabled.png | 3 - .../images/materialdialog_add_normal.png | 3 - .../images/materialdialog_assignselection.png | 3 - .../materialdialog_assignselection_active.png | 3 - ...aterialdialog_assignselection_disabled.png | 3 - .../materialdialog_assignselection_normal.png | 3 - .../Material/images/materialdialog_copy.png | 3 - .../images/materialdialog_copy_active.png | 3 - .../images/materialdialog_copy_disabled.png | 3 - .../images/materialdialog_copy_normal.png | 3 - .../materialdialog_getfromselection.png | 3 - ...materialdialog_getfromselection_active.png | 3 - ...terialdialog_getfromselection_disabled.png | 3 - ...materialdialog_getfromselection_normal.png | 3 - .../Material/images/materialdialog_paste.png | 3 - .../images/materialdialog_paste_active.png | 3 - .../images/materialdialog_paste_disabled.png | 3 - .../images/materialdialog_paste_normal.png | 3 - .../Material/images/materialdialog_pick.png | 3 - .../images/materialdialog_pick_active.png | 3 - .../images/materialdialog_pick_disabled.png | 3 - .../images/materialdialog_pick_normal.png | 3 - .../images/materialdialog_preview.png | 3 - .../images/materialdialog_preview_active.png | 3 - .../materialdialog_preview_disabled.png | 3 - .../images/materialdialog_preview_normal.png | 3 - .../Material/images/materialdialog_remove.png | 3 - .../images/materialdialog_remove_active.png | 3 - .../images/materialdialog_remove_disabled.png | 3 - .../images/materialdialog_remove_normal.png | 3 - .../Material/images/materialdialog_reset.png | 3 - .../images/materialdialog_reset_active.png | 3 - .../images/materialdialog_reset_disabled.png | 3 - .../images/materialdialog_reset_normal.png | 3 - .../materialdialog_reset_viewport_active.png | 3 - ...materialdialog_reset_viewport_disabled.png | 3 - .../materialdialog_reset_viewport_normal.png | 3 - .../Material/images/materialdialog_save.png | 3 - .../images/materialdialog_save_active.png | 3 - .../images/materialdialog_save_disabled.png | 3 - .../images/materialdialog_save_normal.png | 3 - Code/Sandbox/Editor/editor_lib_files.cmake | 4 - 52 files changed, 2805 deletions(-) delete mode 100644 Code/Sandbox/Editor/MatEditMainDlg.cpp delete mode 100644 Code/Sandbox/Editor/MatEditMainDlg.h delete mode 100644 Code/Sandbox/Editor/Material/MaterialDialog.cpp delete mode 100644 Code/Sandbox/Editor/Material/MaterialDialog.h delete mode 100644 Code/Sandbox/Editor/Material/images/materialdialog_add.png delete mode 100644 Code/Sandbox/Editor/Material/images/materialdialog_add_active.png delete mode 100644 Code/Sandbox/Editor/Material/images/materialdialog_add_disabled.png delete mode 100644 Code/Sandbox/Editor/Material/images/materialdialog_add_normal.png delete mode 100644 Code/Sandbox/Editor/Material/images/materialdialog_assignselection.png delete mode 100644 Code/Sandbox/Editor/Material/images/materialdialog_assignselection_active.png delete mode 100644 Code/Sandbox/Editor/Material/images/materialdialog_assignselection_disabled.png delete mode 100644 Code/Sandbox/Editor/Material/images/materialdialog_assignselection_normal.png delete mode 100644 Code/Sandbox/Editor/Material/images/materialdialog_copy.png delete mode 100644 Code/Sandbox/Editor/Material/images/materialdialog_copy_active.png delete mode 100644 Code/Sandbox/Editor/Material/images/materialdialog_copy_disabled.png delete mode 100644 Code/Sandbox/Editor/Material/images/materialdialog_copy_normal.png delete mode 100644 Code/Sandbox/Editor/Material/images/materialdialog_getfromselection.png delete mode 100644 Code/Sandbox/Editor/Material/images/materialdialog_getfromselection_active.png delete mode 100644 Code/Sandbox/Editor/Material/images/materialdialog_getfromselection_disabled.png delete mode 100644 Code/Sandbox/Editor/Material/images/materialdialog_getfromselection_normal.png delete mode 100644 Code/Sandbox/Editor/Material/images/materialdialog_paste.png delete mode 100644 Code/Sandbox/Editor/Material/images/materialdialog_paste_active.png delete mode 100644 Code/Sandbox/Editor/Material/images/materialdialog_paste_disabled.png delete mode 100644 Code/Sandbox/Editor/Material/images/materialdialog_paste_normal.png delete mode 100644 Code/Sandbox/Editor/Material/images/materialdialog_pick.png delete mode 100644 Code/Sandbox/Editor/Material/images/materialdialog_pick_active.png delete mode 100644 Code/Sandbox/Editor/Material/images/materialdialog_pick_disabled.png delete mode 100644 Code/Sandbox/Editor/Material/images/materialdialog_pick_normal.png delete mode 100644 Code/Sandbox/Editor/Material/images/materialdialog_preview.png delete mode 100644 Code/Sandbox/Editor/Material/images/materialdialog_preview_active.png delete mode 100644 Code/Sandbox/Editor/Material/images/materialdialog_preview_disabled.png delete mode 100644 Code/Sandbox/Editor/Material/images/materialdialog_preview_normal.png delete mode 100644 Code/Sandbox/Editor/Material/images/materialdialog_remove.png delete mode 100644 Code/Sandbox/Editor/Material/images/materialdialog_remove_active.png delete mode 100644 Code/Sandbox/Editor/Material/images/materialdialog_remove_disabled.png delete mode 100644 Code/Sandbox/Editor/Material/images/materialdialog_remove_normal.png delete mode 100644 Code/Sandbox/Editor/Material/images/materialdialog_reset.png delete mode 100644 Code/Sandbox/Editor/Material/images/materialdialog_reset_active.png delete mode 100644 Code/Sandbox/Editor/Material/images/materialdialog_reset_disabled.png delete mode 100644 Code/Sandbox/Editor/Material/images/materialdialog_reset_normal.png delete mode 100644 Code/Sandbox/Editor/Material/images/materialdialog_reset_viewport_active.png delete mode 100644 Code/Sandbox/Editor/Material/images/materialdialog_reset_viewport_disabled.png delete mode 100644 Code/Sandbox/Editor/Material/images/materialdialog_reset_viewport_normal.png delete mode 100644 Code/Sandbox/Editor/Material/images/materialdialog_save.png delete mode 100644 Code/Sandbox/Editor/Material/images/materialdialog_save_active.png delete mode 100644 Code/Sandbox/Editor/Material/images/materialdialog_save_disabled.png delete mode 100644 Code/Sandbox/Editor/Material/images/materialdialog_save_normal.png diff --git a/Code/Sandbox/Editor/CryEdit.cpp b/Code/Sandbox/Editor/CryEdit.cpp index dff5b2267c..e4f06a1bc3 100644 --- a/Code/Sandbox/Editor/CryEdit.cpp +++ b/Code/Sandbox/Editor/CryEdit.cpp @@ -126,7 +126,6 @@ AZ_POP_DISABLE_WARNING #include "EditorPreferencesDialog.h" #include "GraphicsSettingsDialog.h" #include "FeedbackDialog/FeedbackDialog.h" -#include "MatEditMainDlg.h" #include "AnimationContext.h" #include "GotoPositionDlg.h" @@ -1898,14 +1897,6 @@ BOOL CCryEditApp::InitInstance() CWipFeatureManager::Init(); #endif - if (GetIEditor()->IsInMatEditMode()) - { - m_pMatEditDlg = new CMatEditMainDlg(QStringLiteral("Material Editor")); - m_pEditor->InitFinished(); - m_pMatEditDlg->show(); - return true; - } - if (!m_bConsoleMode && !m_bPreviewMode) { GetIEditor()->UpdateViews(); diff --git a/Code/Sandbox/Editor/CryEdit.h b/Code/Sandbox/Editor/CryEdit.h index 7480b34e5a..6a17f9a8bf 100644 --- a/Code/Sandbox/Editor/CryEdit.h +++ b/Code/Sandbox/Editor/CryEdit.h @@ -28,7 +28,6 @@ class CCryDocManager; class CQuickAccessBar; -class CMatEditMainDlg; class CCryEditDoc; class CEditCommandLineInfo; class CMainFrame; @@ -367,7 +366,6 @@ private: //! Autotest mode: Special mode meant for automated testing, things like blocking dialogs or error report windows won't appear bool m_bAutotestMode = false; - CMatEditMainDlg* m_pMatEditDlg = nullptr; CConsoleDialog* m_pConsoleDialog = nullptr; AZ_PUSH_DISABLE_DLL_EXPORT_MEMBER_WARNING diff --git a/Code/Sandbox/Editor/MainWindow.cpp b/Code/Sandbox/Editor/MainWindow.cpp index ab5e0cf559..b926c00fc8 100644 --- a/Code/Sandbox/Editor/MainWindow.cpp +++ b/Code/Sandbox/Editor/MainWindow.cpp @@ -92,7 +92,6 @@ AZ_POP_DISABLE_WARNING #include "TrackView/TrackViewDialog.h" #include "ErrorReportDialog.h" -#include "Material/MaterialDialog.h" #include "LensFlareEditor/LensFlareEditor.h" #include "TimeOfDayDialog.h" @@ -1974,7 +1973,6 @@ void MainWindow::RegisterStdViewClasses() if (!AZ::Interface::Get()) { - CMaterialDialog::RegisterViewClass(); CLensFlareEditor::RegisterViewClass(); CTimeOfDayDialog::RegisterViewClass(); } diff --git a/Code/Sandbox/Editor/MatEditMainDlg.cpp b/Code/Sandbox/Editor/MatEditMainDlg.cpp deleted file mode 100644 index 9a96ad15d0..0000000000 --- a/Code/Sandbox/Editor/MatEditMainDlg.cpp +++ /dev/null @@ -1,110 +0,0 @@ -/* -* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or -* its licensors. -* -* For complete copyright and license terms please see the LICENSE at the root of this -* distribution (the "License"). All use of this software is governed by the License, -* or, if provided, by the license below or the license accompanying this file. Do not -* remove or modify any license notices. This file is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* -*/ -// Original file Copyright Crytek GMBH or its affiliates, used under license. - -// Description : implementation file - -#include "EditorDefs.h" - -#include "MatEditMainDlg.h" - -// Qt -#include -#include - -// Editor -#include "Material/MaterialDialog.h" -#include "Material/MaterialManager.h" -#include "MaterialSender.h" - - -CMatEditMainDlg::CMatEditMainDlg(const QString& title, QWidget* pParent /*=NULL*/) - : QWidget(pParent) -{ - resize(1000, 600); - - setWindowTitle(title); - - QTimer* t = new QTimer(this); - connect(t, &QTimer::timeout, this, &CMatEditMainDlg::OnKickIdle); - t->start(250); - - m_materialDialog = new CMaterialDialog(); // must be created after the timer - auto layout = new QVBoxLayout(this); - layout->addWidget(m_materialDialog); - -#ifdef Q_OS_WIN - if (auto aed = QAbstractEventDispatcher::instance()) - { - aed->installNativeEventFilter(this); - } -#endif -} - -CMatEditMainDlg::~CMatEditMainDlg() -{ -#ifdef Q_OS_WIN - if (auto aed = QAbstractEventDispatcher::instance()) - { - aed->removeNativeEventFilter(this); - } -#endif -} - -///////////////////////////////////////////////////////////////////////////// -// CMatEditMainDlg message handlers - -void CMatEditMainDlg::showEvent(QShowEvent*) -{ - if (QWindow *win = window()->windowHandle()) - { - // Make sure our top-level window decorator wrapper set this exact title - // 3ds Max Exporter will use ::FindWindow with this name - win->setTitle("Material Editor"); - } -} - -bool CMatEditMainDlg::nativeEventFilter(const QByteArray&, void* message, long*) -{ -#ifdef Q_OS_WIN - // WM_MATEDITSEND is Windows only. Used by 3ds Max exporter. - MSG* msg = static_cast(message); - if (msg->message == WM_MATEDITSEND) - { - OnMatEditSend(msg->wParam); - return true; - } -#endif - - return false; -} - -void CMatEditMainDlg::closeEvent(QCloseEvent* event) -{ - QWidget::closeEvent(event); - qApp->quit(); -} - -void CMatEditMainDlg::OnKickIdle() -{ - GetIEditor()->Notify(eNotify_OnIdleUpdate); -} - -void CMatEditMainDlg::OnMatEditSend(int param) -{ - if (param != eMSM_Init) - { - GetIEditor()->GetMaterialManager()->SyncMaterialEditor(); - } -} - -#include diff --git a/Code/Sandbox/Editor/MatEditMainDlg.h b/Code/Sandbox/Editor/MatEditMainDlg.h deleted file mode 100644 index b329933c1f..0000000000 --- a/Code/Sandbox/Editor/MatEditMainDlg.h +++ /dev/null @@ -1,48 +0,0 @@ -/* -* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or -* its licensors. -* -* For complete copyright and license terms please see the LICENSE at the root of this -* distribution (the "License"). All use of this software is governed by the License, -* or, if provided, by the license below or the license accompanying this file. Do not -* remove or modify any license notices. This file is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* -*/ -// Original file Copyright Crytek GMBH or its affiliates, used under license. - -#ifndef CRYINCLUDE_EDITOR_MATEDITMAINDLG_H -#define CRYINCLUDE_EDITOR_MATEDITMAINDLG_H - -#pragma once - -#if !defined(Q_MOC_RUN) -#include -#include -#include -#endif - -class CMaterialDialog; - -class CMatEditMainDlg - : public QWidget - , public QAbstractNativeEventFilter -{ - Q_OBJECT -public: - explicit CMatEditMainDlg(const QString& title = QString(), QWidget* parent = nullptr); - ~CMatEditMainDlg(); - - bool nativeEventFilter(const QByteArray& eventType, void* message, long* result) override; - -protected: - void closeEvent(QCloseEvent* event) override; - void showEvent(QShowEvent* event) override; - -private: - void OnKickIdle(); - void OnMatEditSend(int param); - CMaterialDialog* m_materialDialog = nullptr; -}; - -#endif // CRYINCLUDE_EDITOR_MATEDITMAINDLG_H diff --git a/Code/Sandbox/Editor/Material/MaterialDialog.cpp b/Code/Sandbox/Editor/Material/MaterialDialog.cpp deleted file mode 100644 index 5d5f14ecd2..0000000000 --- a/Code/Sandbox/Editor/Material/MaterialDialog.cpp +++ /dev/null @@ -1,2290 +0,0 @@ -/* -* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or -* its licensors. -* -* For complete copyright and license terms please see the LICENSE at the root of this -* distribution (the "License"). All use of this software is governed by the License, -* or, if provided, by the license below or the license accompanying this file. Do not -* remove or modify any license notices. This file is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* -*/ -// Original file Copyright Crytek GMBH or its affiliates, used under license. - -#include "EditorDefs.h" - -#include "MaterialDialog.h" - -// Qt -#include -#include -#include -#include -#include -#include -#include -#include - -// AzToolsFramework -#include // for AzToolsFramework::ViewPaneOptions - -// Editor -#include "IEditor.h" -#include "EditTool.h" -#include "MaterialImageListCtrl.h" -#include "MaterialManager.h" -#include "MaterialHelpers.h" -#include "ShaderEnum.h" -#include "MatEditPreviewDlg.h" -#include "Controls/ReflectedPropertyControl/ReflectedPropertyCtrl.h" -#include "Include/IObjectManager.h" -#include "Objects/BaseObject.h" -#include "Settings.h" -#include "Objects/SelectionGroup.h" -#include "LyViewPaneNames.h" - - -const QString EDITOR_OBJECTS_PATH("Objects\\Editor\\"); - -////////////////////////////////////////////////////////////////////////// -void CMaterialDialog::RegisterViewClass() -{ - AzToolsFramework::ViewPaneOptions opts; - opts.shortcut = QKeySequence(Qt::Key_M); - opts.canHaveMultipleInstances = true; - - AzToolsFramework::RegisterViewPane(MATERIAL_EDITOR_NAME, LyViewPane::CategoryTools, opts); - - GetIEditor()->GetSettingsManager()->AddToolVersion(MATERIAL_EDITOR_NAME, MATERIAL_EDITOR_VER); -} - -const GUID& CMaterialDialog::GetClassID() -{ - static const GUID guid = - { - 0xc7891863, 0x1665, 0x45ac, { 0xae, 0x51, 0x48, 0x66, 0x71, 0xbc, 0x8b, 0x12 } - }; - return guid; -} - -inline float RoundDegree(float val) -{ - return (float)((int)(val * 100 + 0.5f)) * 0.01f; -} - -////////////////////////////////////////////////////////////////////////// -// Material structures. -////////////////////////////////////////////////////////////////////////// - -#ifndef _countof -#define _countof(array) (sizeof(array) / sizeof(array[0])) -#endif - -struct STextureVars -{ - CSmartVariable is_tile[2]; - - CSmartVariableEnum etcgentype; - CSmartVariableEnum etcmrotatetype; - CSmartVariableEnum etcmumovetype; - CSmartVariableEnum etcmvmovetype; - CSmartVariableEnum etextype; - CSmartVariableEnum filter; - - CSmartVariable is_tcgprojected; - CSmartVariable tiling[3]; - CSmartVariable rotate[3]; - CSmartVariable offset[3]; - CSmartVariable tcmuoscrate; - CSmartVariable tcmvoscrate; - CSmartVariable tcmuoscamplitude; - CSmartVariable tcmvoscamplitude; - CSmartVariable tcmuoscphase; - CSmartVariable tcmvoscphase; - CSmartVariable tcmrotoscrate; - CSmartVariable tcmrotoscamplitude; - CSmartVariable tcmrotoscphase; - CSmartVariable tcmrotosccenter[2]; - - CSmartVariableArray tableTiling; - CSmartVariableArray tableOscillator; - CSmartVariableArray tableRotator; - - void Reset() - { - SEfTexModificator defaultTextureCoordinateModifier; - SEfResTexture defaultTextureResource; - for (int i = 0; i < 2; i++) - { - *is_tile[i] = defaultTextureResource.GetTiling(i); - *tcmrotosccenter[i] = defaultTextureCoordinateModifier.m_RotOscCenter[i]; - } - - for (int i = 0; i < 3; i++) - { - *rotate[i] = RoundDegree(Word2Degr(defaultTextureCoordinateModifier.m_Rot[i])); - *tiling[i] = defaultTextureCoordinateModifier.m_Tiling[i]; - *offset[i] = defaultTextureCoordinateModifier.m_Offs[i]; - } - - etcgentype = defaultTextureCoordinateModifier.m_eTGType; - etcmrotatetype = defaultTextureCoordinateModifier.m_eRotType; - etcmumovetype = defaultTextureCoordinateModifier.m_eMoveType[0]; - etcmvmovetype = defaultTextureCoordinateModifier.m_eMoveType[1]; - etextype = defaultTextureResource.m_Sampler.m_eTexType; - filter = defaultTextureResource.m_Filter; - is_tcgprojected = defaultTextureCoordinateModifier.m_bTexGenProjected; - - tcmuoscrate = defaultTextureCoordinateModifier.m_OscRate[0]; - tcmvoscrate = defaultTextureCoordinateModifier.m_OscRate[1]; - - tcmuoscamplitude = defaultTextureCoordinateModifier.m_OscAmplitude[0]; - tcmvoscamplitude = defaultTextureCoordinateModifier.m_OscAmplitude[1]; - - tcmuoscphase = defaultTextureCoordinateModifier.m_OscPhase[0]; - tcmvoscphase = defaultTextureCoordinateModifier.m_OscPhase[1]; - - tcmrotoscrate = RoundDegree(Word2Degr(defaultTextureCoordinateModifier.m_RotOscRate[2])); - tcmrotoscamplitude = RoundDegree(Word2Degr(defaultTextureCoordinateModifier.m_RotOscAmplitude[2])); - tcmrotoscphase = RoundDegree(Word2Degr(defaultTextureCoordinateModifier.m_RotOscPhase[2])); - } -}; - -struct SMaterialLayerVars -{ - CSmartVariable bNoDraw; // disable layer rendering (useful in some cases) - CSmartVariable bFadeOut; // fade out layer rendering and parent rendering - CSmartVariableEnum shader; // shader layer name -}; - -struct SVertexWaveFormUI -{ - CSmartVariableArray table; - CSmartVariableEnum waveFormType; - CSmartVariable level; - CSmartVariable amplitude; - CSmartVariable phase; - CSmartVariable frequency; -}; - -////////////////////////////////////////////////////////////////////////// -struct SVertexModUI -{ - CSmartVariableEnum type; - CSmartVariable fDividerX; - CSmartVariable fDividerY; - CSmartVariable fDividerZ; - CSmartVariable fDividerW; - CSmartVariable vNoiseScale; - SVertexWaveFormUI wave; -}; - -/** User Interface definition of material. -*/ -class CMaterialUI -{ -public: - CSmartVariableEnum shader; - CSmartVariable bNoShadow; - CSmartVariable bAdditive; - CSmartVariable bWire; - CSmartVariable b2Sided; - CSmartVariable opacity; - CSmartVariable alphaTest; - CSmartVariable emissiveIntensity; - CSmartVariable voxelCoverage; - CSmartVariable heatAmount; - CSmartVariable bScatter; - CSmartVariable bHideAfterBreaking; - CSmartVariable bFogVolumeShadingQualityHigh; - CSmartVariable bBlendTerrainColor; - //CSmartVariable bTranslucenseLayer; - CSmartVariableEnum surfaceType; - - CSmartVariable allowLayerActivation; - - ////////////////////////////////////////////////////////////////////////// - // Material Value Propagation for dynamic material switches, as for instance - // used by breakable glass - ////////////////////////////////////////////////////////////////////////// - CSmartVariableEnum matPropagate; - CSmartVariable bPropagateMaterialSettings; - CSmartVariable bPropagateOpactity; - CSmartVariable bPropagateLighting; - CSmartVariable bPropagateAdvanced; - CSmartVariable bPropagateTexture; - CSmartVariable bPropagateVertexDef; - CSmartVariable bPropagateShaderParams; - CSmartVariable bPropagateLayerPresets; - CSmartVariable bPropagateShaderGenParams; - - ////////////////////////////////////////////////////////////////////////// - // Lighting - ////////////////////////////////////////////////////////////////////////// - CSmartVariable diffuse; // Diffuse color 0..1 - CSmartVariable specular; // Specular color 0..1 - CSmartVariable smoothness; // Specular shininess. - CSmartVariable emissiveCol; // Emissive color 0..1 - - ////////////////////////////////////////////////////////////////////////// - // Textures. - ////////////////////////////////////////////////////////////////////////// - CSmartVariableArray textureVars[EFTT_MAX]; - CSmartVariableArray advancedTextureGroup[EFTT_MAX]; - STextureVars textures[EFTT_MAX]; - - ////////////////////////////////////////////////////////////////////////// - // Material layers settings - ////////////////////////////////////////////////////////////////////////// - - // 8 max for now. change this later - SMaterialLayerVars materialLayers[MTL_LAYER_MAX_SLOTS]; - - ////////////////////////////////////////////////////////////////////////// - - SVertexModUI vertexMod; - - CSmartVariableArray tableShader; - CSmartVariableArray tableOpacity; - CSmartVariableArray tableLighting; - CSmartVariableArray tableTexture; - CSmartVariableArray tableAdvanced; - CSmartVariableArray tableVertexMod; - CSmartVariableArray tableEffects; - - CSmartVariableArray tableShaderParams; - CSmartVariableArray tableShaderGenParams; - - CVarEnumList* enumTexType; - CVarEnumList* enumTexGenType; - CVarEnumList* enumTexModRotateType; - CVarEnumList* enumTexModUMoveType; - CVarEnumList* enumTexModVMoveType; - CVarEnumList* enumTexFilterType; - - CVarEnumList* enumVertexMod; - CVarEnumList* enumWaveType; - - ////////////////////////////////////////////////////////////////////////// - int texUsageMask; - - CVarBlockPtr m_vars; - - typedef std::map TVarChangeNotifications; - TVarChangeNotifications m_varChangeNotifications; - - ////////////////////////////////////////////////////////////////////////// - void SetFromMaterial(CMaterial* mtl); - void SetToMaterial(CMaterial* mtl, int propagationFlags = MTL_PROPAGATE_ALL); - void SetTextureNames(CMaterial* mtl); - - void SetShaderResources(const SInputShaderResources& srTextures, bool bSetTextures = true); - void GetShaderResources(SInputShaderResources& sr, int propagationFlags); - - void SetVertexDeform(const SInputShaderResources& sr); - void GetVertexDeform(SInputShaderResources& sr, int propagationFlags); - - void PropagateFromLinkedMaterial(CMaterial* mtl); - void PropagateToLinkedMaterial(CMaterial* mtl, CVarBlockPtr pShaderParamsBlock); - void NotifyObjectsAboutMaterialChange(IVariable* var); - - - ////////////////////////////////////////////////////////////////////////// - CMaterialUI() - { - } - - ~CMaterialUI() - { - } - - ////////////////////////////////////////////////////////////////////////// - CVarBlock* CreateVars() - { - m_vars = new CVarBlock; - - ////////////////////////////////////////////////////////////////////////// - // Init enums. - ////////////////////////////////////////////////////////////////////////// - enumTexType = new CVarEnumList(); - enumTexType->AddItem("2D", eTT_2D); - enumTexType->AddItem("Cube-Map", eTT_Cube); - enumTexType->AddItem("Nearest Cube-Map probe for alpha blended", eTT_NearestCube); - enumTexType->AddItem("Dynamic 2D-Map", eTT_Dyn2D); - enumTexType->AddItem("From User Params", eTT_User); - - enumTexGenType = new CVarEnumList(); - enumTexGenType->AddItem("Stream", ETG_Stream); - enumTexGenType->AddItem("World", ETG_World); - enumTexGenType->AddItem("Camera", ETG_Camera); - - enumTexModRotateType = new CVarEnumList(); - enumTexModRotateType->AddItem("No Change", ETMR_NoChange); - enumTexModRotateType->AddItem("Fixed Rotation", ETMR_Fixed); - enumTexModRotateType->AddItem("Constant Rotation", ETMR_Constant); - enumTexModRotateType->AddItem("Oscillated Rotation", ETMR_Oscillated); - - enumTexModUMoveType = new CVarEnumList(); - enumTexModUMoveType->AddItem("No Change", ETMM_NoChange); - enumTexModUMoveType->AddItem("Fixed Moving", ETMM_Fixed); - enumTexModUMoveType->AddItem("Constant Moving", ETMM_Constant); - enumTexModUMoveType->AddItem("Jitter Moving", ETMM_Jitter); - enumTexModUMoveType->AddItem("Pan Moving", ETMM_Pan); - enumTexModUMoveType->AddItem("Stretch Moving", ETMM_Stretch); - enumTexModUMoveType->AddItem("Stretch-Repeat Moving", ETMM_StretchRepeat); - - enumTexModVMoveType = new CVarEnumList(); - enumTexModVMoveType->AddItem("No Change", ETMM_NoChange); - enumTexModVMoveType->AddItem("Fixed Moving", ETMM_Fixed); - enumTexModVMoveType->AddItem("Constant Moving", ETMM_Constant); - enumTexModVMoveType->AddItem("Jitter Moving", ETMM_Jitter); - enumTexModVMoveType->AddItem("Pan Moving", ETMM_Pan); - enumTexModVMoveType->AddItem("Stretch Moving", ETMM_Stretch); - enumTexModVMoveType->AddItem("Stretch-Repeat Moving", ETMM_StretchRepeat); - - enumTexFilterType = new CVarEnumList(); - enumTexFilterType->AddItem("Default", FILTER_NONE); - enumTexFilterType->AddItem("Point", FILTER_POINT); - enumTexFilterType->AddItem("Linear", FILTER_LINEAR); - enumTexFilterType->AddItem("Bilinear", FILTER_BILINEAR); - enumTexFilterType->AddItem("Trilinear", FILTER_TRILINEAR); - enumTexFilterType->AddItem("Anisotropic 2x", FILTER_ANISO2X); - enumTexFilterType->AddItem("Anisotropic 4x", FILTER_ANISO4X); - enumTexFilterType->AddItem("Anisotropic 8x", FILTER_ANISO8X); - enumTexFilterType->AddItem("Anisotropic 16x", FILTER_ANISO16X); - - ////////////////////////////////////////////////////////////////////////// - // Vertex Mods. - ////////////////////////////////////////////////////////////////////////// - enumVertexMod = new CVarEnumList(); - enumVertexMod->AddItem("None", eDT_Unknown); - enumVertexMod->AddItem("Sin Wave", eDT_SinWave); - enumVertexMod->AddItem("Sin Wave using vertex color", eDT_SinWaveUsingVtxColor); - enumVertexMod->AddItem("Bulge", eDT_Bulge); - enumVertexMod->AddItem("Squeeze", eDT_Squeeze); - enumVertexMod->AddItem("FixedOffset", eDT_FixedOffset); - - ////////////////////////////////////////////////////////////////////////// - - enumWaveType = new CVarEnumList(); - enumWaveType->AddItem("Sin", eWF_Sin); - - ////////////////////////////////////////////////////////////////////////// - // Fill shaders enum. - ////////////////////////////////////////////////////////////////////////// - CVarEnumList* enumShaders = new CVarEnumList(); - { - CShaderEnum* pShaderEnum = GetIEditor()->GetShaderEnum(); - pShaderEnum->EnumShaders(); - for (int i = 0; i < pShaderEnum->GetShaderCount(); i++) - { - QString shaderName = pShaderEnum->GetShader(i); - if (shaderName.contains("_Overlay", Qt::CaseInsensitive)) - { - continue; - } - enumShaders->AddItem(shaderName, shaderName); - } - } - - ////////////////////////////////////////////////////////////////////////// - // Fill surface types. - ////////////////////////////////////////////////////////////////////////// - CVarEnumList* enumSurfaceTypes = new CVarEnumList(); - { - QStringList types; - types.push_back(""); // Push empty surface type. - ISurfaceTypeEnumerator* pSurfaceTypeEnum = gEnv->p3DEngine->GetMaterialManager()->GetSurfaceTypeManager()->GetEnumerator(); - if (pSurfaceTypeEnum) - { - for (ISurfaceType* pSurfaceType = pSurfaceTypeEnum->GetFirst(); pSurfaceType; pSurfaceType = pSurfaceTypeEnum->GetNext()) - { - types.push_back(pSurfaceType->GetName()); - } - std::sort(types.begin(), types.end()); - for (int i = 0; i < types.size(); i++) - { - QString name = types[i]; - if (name.left(4) == "mat_") - { - name.remove(0, 4); - } - enumSurfaceTypes->AddItem(name, types[i]); - } - } - } - - ////////////////////////////////////////////////////////////////////////// - // Init tables. - ////////////////////////////////////////////////////////////////////////// - AddVariable(m_vars, tableShader, "Material Settings", ""); - AddVariable(m_vars, tableOpacity, "Opacity Settings", ""); - AddVariable(m_vars, tableLighting, "Lighting Settings", ""); - AddVariable(m_vars, tableAdvanced, "Advanced", ""); - AddVariable(m_vars, tableTexture, "Texture Maps", ""); - AddVariable(m_vars, tableShaderParams, "Shader Params", ""); - AddVariable(m_vars, tableShaderGenParams, "Shader Generation Params", ""); - AddVariable(m_vars, tableVertexMod, "Vertex Deformation", ""); - - tableTexture->SetFlags(tableTexture->GetFlags() | IVariable::UI_ROLLUP2); - tableVertexMod->SetFlags(tableVertexMod->GetFlags() | IVariable::UI_ROLLUP2 | IVariable::UI_COLLAPSED); - tableAdvanced->SetFlags(tableAdvanced->GetFlags() | IVariable::UI_COLLAPSED); - tableShaderGenParams->SetFlags(tableShaderGenParams->GetFlags() | IVariable::UI_ROLLUP2 | IVariable::UI_COLLAPSED); - tableShaderParams->SetFlags(tableShaderParams->GetFlags() | IVariable::UI_ROLLUP2); - - - ////////////////////////////////////////////////////////////////////////// - // Shader. - ////////////////////////////////////////////////////////////////////////// - AddVariable(tableShader, shader, "Shader", "Selects shader type for specific surface response and options"); - AddVariable(tableShader, surfaceType, "Surface Type", "Defines how entities interact with surfaces using the material effects system"); - m_varChangeNotifications["Surface Type"] = MATERIALCHANGE_SURFACETYPE; - - shader->SetEnumList(enumShaders); - - surfaceType->SetEnumList(enumSurfaceTypes); - - // Properties that use this scriptingDescription are based on what's available in MaterialHelpers::SetGetMaterialParamVec3 and MaterialHelpers::SetGetMaterialParamFloat. - // This should match what's done in MaterialHelpers.cpp AddRealNameToDescription(). - auto scriptingDescription = [](const AZStd::string& scriptAccessibleName, const AZStd::string& description) { return description + "\n(Script Param Name = " + scriptAccessibleName + ")"; }; - - ////////////////////////////////////////////////////////////////////////// - // Opacity. - ////////////////////////////////////////////////////////////////////////// - AddVariable(tableOpacity, opacity, "Opacity", - scriptingDescription("opacity", "Sets the transparency amount. Uses 0-99 to set Alpha Blend and 100 for Opaque and Alpha Test.").c_str(), IVariable::DT_PERCENT); - AddVariable(tableOpacity, alphaTest, "AlphaTest", - scriptingDescription("alpha", "Uses the alpha mask and refines the transparent edge. Uses 0-50 to bias toward white or 50-100 to bias toward black.").c_str(), IVariable::DT_PERCENT); - AddVariable(tableOpacity, bAdditive, "Additive", "Adds material color to the background color resulting in a brighter transparent surface"); - opacity->SetLimits(0, 100, 1, true, true); - alphaTest->SetLimits(0, 100, 1, true, true); - - ////////////////////////////////////////////////////////////////////////// - // Lighting. - ////////////////////////////////////////////////////////////////////////// - AddVariable(tableLighting, diffuse, "Diffuse Color (Tint)", scriptingDescription("diffuse", "Tints the material diffuse color. Physically based materials should be left at white").c_str(), IVariable::DT_COLOR); - AddVariable(tableLighting, specular, "Specular Color", scriptingDescription("specular", "Reflective and shininess intensity and color of reflective highlights").c_str(), IVariable::DT_COLOR); - AddVariable(tableLighting, smoothness, "Smoothness", scriptingDescription("shininess", "Smoothness or glossiness simulating how light bounces off the surface").c_str()); - AddVariable(tableLighting, emissiveIntensity, "Emissive Intensity (kcd/m2)", scriptingDescription("emissive_intensity", "Brightness simulating light emitting from the surface making an object glow").c_str()); - AddVariable(tableLighting, emissiveCol, "Emissive Color", scriptingDescription("emissive_color", "Tints the emissive color").c_str(), IVariable::DT_COLOR); - emissiveIntensity->SetLimits(0, EMISSIVE_INTENSITY_SOFT_MAX, 1, true, false); - smoothness->SetLimits(0, 255, 1, true, true); - - ////////////////////////////////////////////////////////////////////////// - // Init texture variables. - ////////////////////////////////////////////////////////////////////////// - for (EEfResTextures texId = EEfResTextures(0); texId < EFTT_MAX; texId = EEfResTextures(texId + 1)) - { - if (!MaterialHelpers::IsAdjustableTexSlot(texId)) - { - continue; - } - - InitTextureVars(texId, MaterialHelpers::LookupTexName(texId), MaterialHelpers::LookupTexDesc(texId)); - } - - //AddVariable( tableAdvanced,bWire,"Wireframe" ); - AddVariable(tableAdvanced, allowLayerActivation, "Allow layer activation", ""); - AddVariable(tableAdvanced, b2Sided, "2 Sided", "Enables both sides of mesh faces to render"); - AddVariable(tableAdvanced, bNoShadow, "No Shadow", "Disables casting shadows from mesh faces"); - AddVariable(tableAdvanced, bScatter, "Use Scattering", "Deprecated"); - AddVariable(tableAdvanced, bHideAfterBreaking, "Hide After Breaking", "Causes the object to disappear after procedurally breaking"); - AddVariable(tableAdvanced, bFogVolumeShadingQualityHigh, "Fog Volume Shading Quality High", "high fog volume shading quality behaves more accurately with fog volumes."); - AddVariable(tableAdvanced, bBlendTerrainColor, "Blend Terrain Color", ""); - AddVariable(tableAdvanced, voxelCoverage, "Voxel Coverage", "Fine tunes occlusion amount for svogi feature. Higher values occlude more closely to object shape."); - voxelCoverage->SetLimits(0, 1.0f); - - ////////////////////////////////////////////////////////////////////////// - // Material Value Propagation for dynamic material switches, as for instance - // used by breakable glass - ////////////////////////////////////////////////////////////////////////// - AddVariable(tableAdvanced, matPropagate, "Link to Material", ""); - AddVariable(tableAdvanced, bPropagateMaterialSettings, "Propagate Material Settings", ""); - AddVariable(tableAdvanced, bPropagateOpactity, "Propagate Opacity Settings", ""); - AddVariable(tableAdvanced, bPropagateLighting, "Propagate Lighting Settings", ""); - AddVariable(tableAdvanced, bPropagateAdvanced, "Propagate Advanced Settings", ""); - AddVariable(tableAdvanced, bPropagateTexture, "Propagate Texture Maps", ""); - AddVariable(tableAdvanced, bPropagateShaderParams, "Propagate Shader Params", ""); - AddVariable(tableAdvanced, bPropagateShaderGenParams, "Propagate Shader Generation", ""); - AddVariable(tableAdvanced, bPropagateVertexDef, "Propagate Vertex Deformation", ""); - - ////////////////////////////////////////////////////////////////////////// - // Init Vertex Deformation. - ////////////////////////////////////////////////////////////////////////// - vertexMod.type->SetEnumList(enumVertexMod); - AddVariable(tableVertexMod, vertexMod.type, "Type", "Choose method to define how the vertices will deform"); - AddVariable(tableVertexMod, vertexMod.fDividerX, "Wave Length", "Length of wave deformation"); - - AddVariable(tableVertexMod, vertexMod.wave.table, "Parameters", "Fine tunes how the vertices deform"); - - vertexMod.wave.waveFormType->SetEnumList(enumWaveType); - AddVariable(vertexMod.wave.table, vertexMod.wave.waveFormType, "Type", "Sin type will include vertex color in calculation"); - AddVariable(vertexMod.wave.table, vertexMod.wave.level, "Level", "Scales the object equally in xyz"); - AddVariable(vertexMod.wave.table, vertexMod.wave.amplitude, "Amplitude", "Strength of vertex deformation (vertex color: b, normal: z)"); - AddVariable(vertexMod.wave.table, vertexMod.wave.phase, "Phase", "Offset of vertex deformation (vertex color: r, normal: x)"); - AddVariable(vertexMod.wave.table, vertexMod.wave.frequency, "Frequency", "Speed of vertex animation (vertex color: g, normal: y)"); - - return m_vars; - } - -private: - ////////////////////////////////////////////////////////////////////////// - void InitTextureVars(int id, const QString& name, const QString& desc) - { - textureVars[id]->SetFlags(IVariable::UI_BOLD); - textureVars[id]->SetFlags(textureVars[id]->GetFlags() | IVariable::UI_AUTO_EXPAND); - advancedTextureGroup[id]->SetFlags(advancedTextureGroup[id]->GetFlags() | IVariable::UI_COLLAPSED); - AddVariable(tableTexture, *textureVars[id], name.toUtf8().data(), desc.toUtf8().data(), IVariable::DT_TEXTURE); - AddVariable(*textureVars[id], *advancedTextureGroup[id], "Advanced", "Controls UV tiling, offset, and rotation as well as texture filtering"); - - AddVariable(*advancedTextureGroup[id], textures[id].etextype, "TexType", ""); - AddVariable(*advancedTextureGroup[id], textures[id].filter, "Filter", "Sets texture smoothing method to determine texture pixel quality"); - - AddVariable(*advancedTextureGroup[id], textures[id].is_tcgprojected, "IsProjectedTexGen", ""); - AddVariable(*advancedTextureGroup[id], textures[id].etcgentype, "TexGenType", "Controls UV projection behavior"); - - if (IsTextureModifierSupportedForTextureMap(static_cast(id))) - { - ////////////////////////////////////////////////////////////////////////// - // Tiling table. - AddVariable(*advancedTextureGroup[id], textures[id].tableTiling, "Tiling", "Controls UV tiling, offset, and rotation"); - { - CVariableArray& table = textures[id].tableTiling; - table.SetFlags(IVariable::UI_BOLD); - AddVariable(table, *textures[id].is_tile[0], "IsTileU", "Enables UV tiling on U"); - AddVariable(table, *textures[id].is_tile[1], "IsTileV", "Enables UV tiling on V"); - AddVariable(table, *textures[id].tiling[0], "TileU", "Multiplies tiled projection on U"); - AddVariable(table, *textures[id].tiling[1], "TileV", "Multiplies tiled projection on V"); - AddVariable(table, *textures[id].offset[0], "OffsetU", "Offsets texture projection on U"); - AddVariable(table, *textures[id].offset[1], "OffsetV", "Offsets texture projection on V"); - AddVariable(table, *textures[id].rotate[0], "RotateU", "Rotates texture projection on U"); - AddVariable(table, *textures[id].rotate[1], "RotateV", "Rotates texture projection on V"); - AddVariable(table, *textures[id].rotate[2], "RotateW", "Rotates texture projection on W"); - } - - ////////////////////////////////////////////////////////////////////////// - // Rotator tables. - AddVariable(*advancedTextureGroup[id], textures[id].tableRotator, "Rotator", "Controls the animated UV rotation"); - { - CVariableArray& table = textures[id].tableRotator; - table.SetFlags(IVariable::UI_BOLD); - AddVariable(table, textures[id].etcmrotatetype, "Type", "Controls the behavior of UV rotation"); - AddVariable(table, textures[id].tcmrotoscrate, "Rate", "Sets the speed (number of complete cycles per unit of time) of rotation"); - AddVariable(table, textures[id].tcmrotoscphase, "Phase", "Sets the initial offset of rotation"); - AddVariable(table, textures[id].tcmrotoscamplitude, "Amplitude", "Sets the strength (maximum value) of rotation"); - AddVariable(table, *textures[id].tcmrotosccenter[0], "CenterU", "Sets the center of rotation along U"); - AddVariable(table, *textures[id].tcmrotosccenter[1], "CenterV", "Sets the center of rotation along V"); - } - - ////////////////////////////////////////////////////////////////////////// - // Oscillator table - AddVariable(*advancedTextureGroup[id], textures[id].tableOscillator, "Oscillator", "Controls the animated UV oscillation"); - { - CVariableArray& table = textures[id].tableOscillator; - table.SetFlags(IVariable::UI_BOLD); - AddVariable(table, textures[id].etcmumovetype, "TypeU", "Sets the behavior of oscillation in the U direction"); - AddVariable(table, textures[id].etcmvmovetype, "TypeV", "Sets the behavior of oscillation in the V direction"); - AddVariable(table, textures[id].tcmuoscrate, "RateU", "Sets the speed (number of complete cycles per unit of time) of oscillation in U"); - AddVariable(table, textures[id].tcmvoscrate, "RateV", "Sets the speed (number of complete cycles per unit of time) of oscillation in V"); - AddVariable(table, textures[id].tcmuoscphase, "PhaseU", "Sets the initial offset of oscillation in U"); - AddVariable(table, textures[id].tcmvoscphase, "PhaseV", "Sets the initial offset of oscillation in V"); - AddVariable(table, textures[id].tcmuoscamplitude, "AmplitudeU", "Sets the strength (maximum value) of oscillation in U"); - AddVariable(table, textures[id].tcmvoscamplitude, "AmplitudeV", "Sets the strength (maximum value) of oscillation in V"); - } - } - - ////////////////////////////////////////////////////////////////////////// - // Assign enums tables to variable. - ////////////////////////////////////////////////////////////////////////// - textures[id].etextype->SetEnumList(enumTexType); - textures[id].etcgentype->SetEnumList(enumTexGenType); - textures[id].etcmrotatetype->SetEnumList(enumTexModRotateType); - textures[id].etcmumovetype->SetEnumList(enumTexModUMoveType); - textures[id].etcmvmovetype->SetEnumList(enumTexModVMoveType); - textures[id].filter->SetEnumList(enumTexFilterType); - } - ////////////////////////////////////////////////////////////////////////// - - void AddVariable(CVariableBase& varArray, CVariableBase& var, const char* varName, const char* varTooltip, unsigned char dataType = IVariable::DT_SIMPLE) - { - if (varName) - { - var.SetName(varName); - } - if (varTooltip) - { - var.SetDescription(varTooltip); - } - var.SetDataType(dataType); - varArray.AddVariable(&var); - } - ////////////////////////////////////////////////////////////////////////// - void AddVariable(CVarBlock* vars, CVariableBase& var, const char* varName, const char* varTooltip, unsigned char dataType = IVariable::DT_SIMPLE) - { - if (varName) - { - var.SetName(varName); - } - if (varTooltip) - { - var.SetDescription(varTooltip); - } - var.SetDataType(dataType); - vars->AddVariable(&var); - } - - void SetTextureResources(const SEfResTexture *pTextureRes, uint16 tex, bool bSetTextures); - void GetTextureResources(SInputShaderResources& sr, int texid, int propagationFlags); - void ResetTextureResources(uint16 tex); - Vec4 ToVec4(const ColorF& col) { return Vec4(col.r, col.g, col.b, col.a); } - Vec3 ToVec3(const ColorF& col) { return Vec3(col.r, col.g, col.b); } - ColorF ToCFColor(const Vec3& col) { return ColorF(col); } - ColorF ToCFColor(const Vec4& col) { return ColorF(col); } -}; - -////////////////////////////////////////////////////////////////////////// -void CMaterialUI::NotifyObjectsAboutMaterialChange(IVariable* var) -{ - if (!var) - { - return; - } - - TVarChangeNotifications::iterator it = m_varChangeNotifications.find(var->GetName()); - if (it == m_varChangeNotifications.end()) - { - return; - } - - CMaterial* pMaterial = GetIEditor()->GetMaterialManager()->GetCurrentMaterial(); - if (!pMaterial) - { - return; - } - - // Get a parent, if we are editing submaterial - if (pMaterial->GetParent() != 0) - { - pMaterial = pMaterial->GetParent(); - } - - CBaseObjectsArray objects; - GetIEditor()->GetObjectManager()->GetObjects(objects); - int numObjects = objects.size(); - for (int i = 0; i < numObjects; ++i) - { - CBaseObject* pObject = objects[i]; - if (pObject->GetRenderMaterial() == pMaterial) - { - pObject->OnMaterialChanged(it->second); - } - } -} - -////////////////////////////////////////////////////////////////////////// -void CMaterialUI::SetShaderResources(const SInputShaderResources& srTextures, bool bSetTextures) -{ - alphaTest = srTextures.m_AlphaRef; - voxelCoverage = (float) srTextures.m_VoxelCoverage / 255.0f; - - diffuse = ToVec3(srTextures.m_LMaterial.m_Diffuse); - specular = ToVec3(srTextures.m_LMaterial.m_Specular); - emissiveCol = ToVec3(srTextures.m_LMaterial.m_Emittance); - emissiveIntensity = srTextures.m_LMaterial.m_Emittance.a; - opacity = srTextures.m_LMaterial.m_Opacity; - smoothness = srTextures.m_LMaterial.m_Smoothness; - - SetVertexDeform(srTextures); - - - for (EEfResTextures texId = EEfResTextures(0); texId < EFTT_MAX; texId = EEfResTextures(texId + 1)) - { - if (!MaterialHelpers::IsAdjustableTexSlot(texId)) - { - continue; - } - - auto foundIter = srTextures.m_TexturesResourcesMap.find((ResourceSlotIndex)texId); - if (foundIter != srTextures.m_TexturesResourcesMap.end()) - { - const SEfResTexture* pTextureRes = const_cast(&foundIter->second); - SetTextureResources(pTextureRes, texId, bSetTextures); - } - else - { - ResetTextureResources(texId); - } - } -} - -////////////////////////////////////////////////////////////////////////// -void CMaterialUI::GetShaderResources(SInputShaderResources& sr, int propagationFlags) -{ - if (propagationFlags & MTL_PROPAGATE_OPACITY) - { - sr.m_LMaterial.m_Opacity = opacity; - sr.m_AlphaRef = alphaTest; - } - - if (propagationFlags & MTL_PROPAGATE_ADVANCED) - { - sr.m_VoxelCoverage = int_round(voxelCoverage * 255.0f); - } - - if (propagationFlags & MTL_PROPAGATE_LIGHTING) - { - sr.m_LMaterial.m_Diffuse = ToCFColor(diffuse); - sr.m_LMaterial.m_Specular = ToCFColor(specular); - sr.m_LMaterial.m_Emittance = ColorF(emissiveCol, emissiveIntensity); - sr.m_LMaterial.m_Smoothness = smoothness; - } - - GetVertexDeform(sr, propagationFlags); - - for (EEfResTextures texId = EEfResTextures(0); texId < EFTT_MAX; texId = EEfResTextures(texId + 1)) - { - if (!MaterialHelpers::IsAdjustableTexSlot(texId)) - { - continue; - } - - GetTextureResources(sr, texId, propagationFlags); - } -} - -////////////////////////////////////////////////////////////////////////// -void CMaterialUI::SetTextureResources( const SEfResTexture *pTextureRes, uint16 texSlot, bool bSetTextures) -{ - /* - // Enable/Disable texture map, depending on the mask. - int flags = textureVars[tex].GetFlags(); - if ((1 << tex) & texUsageMask) - flags &= ~IVariable::UI_DISABLED; - else - flags |= IVariable::UI_DISABLED; - textureVars[tex].SetFlags( flags ); - */ - - if (bSetTextures) - { - QString texFilename = pTextureRes->m_Name.c_str(); - texFilename = Path::ToUnixPath(texFilename); - textureVars[texSlot]->Set(texFilename); - } - - //textures[tex].amount = pTextureRes->m_Amount; - *textures[texSlot].is_tile[0] = pTextureRes->m_bUTile; - *textures[texSlot].is_tile[1] = pTextureRes->m_bVTile; - - *textures[texSlot].tiling[0] = pTextureRes->GetTiling(0); - *textures[texSlot].tiling[1] = pTextureRes->GetTiling(1); - *textures[texSlot].offset[0] = pTextureRes->GetOffset(0); - *textures[texSlot].offset[1] = pTextureRes->GetOffset(1); - textures[texSlot].filter = (int)pTextureRes->m_Filter; - textures[texSlot].etextype = pTextureRes->m_Sampler.m_eTexType; - - if (pTextureRes->m_Ext.m_pTexModifier) - { - textures[texSlot].etcgentype = pTextureRes->m_Ext.m_pTexModifier->m_eTGType; - textures[texSlot].etcmumovetype = pTextureRes->m_Ext.m_pTexModifier->m_eMoveType[0]; - textures[texSlot].etcmvmovetype = pTextureRes->m_Ext.m_pTexModifier->m_eMoveType[1]; - textures[texSlot].etcmrotatetype = pTextureRes->m_Ext.m_pTexModifier->m_eRotType; - textures[texSlot].is_tcgprojected = pTextureRes->m_Ext.m_pTexModifier->m_bTexGenProjected; - textures[texSlot].tcmuoscrate = pTextureRes->m_Ext.m_pTexModifier->m_OscRate[0]; - textures[texSlot].tcmuoscphase = pTextureRes->m_Ext.m_pTexModifier->m_OscPhase[0]; - textures[texSlot].tcmuoscamplitude = pTextureRes->m_Ext.m_pTexModifier->m_OscAmplitude[0]; - textures[texSlot].tcmvoscrate = pTextureRes->m_Ext.m_pTexModifier->m_OscRate[1]; - textures[texSlot].tcmvoscphase = pTextureRes->m_Ext.m_pTexModifier->m_OscPhase[1]; - textures[texSlot].tcmvoscamplitude = pTextureRes->m_Ext.m_pTexModifier->m_OscAmplitude[1]; - - for (int i = 0; i < 3; i++) - { - *textures[texSlot].rotate[i] = RoundDegree(Word2Degr(pTextureRes->m_Ext.m_pTexModifier->m_Rot[i])); - } - textures[texSlot].tcmrotoscrate = RoundDegree(Word2Degr(pTextureRes->m_Ext.m_pTexModifier->m_RotOscRate[2])); - textures[texSlot].tcmrotoscphase = RoundDegree(Word2Degr(pTextureRes->m_Ext.m_pTexModifier->m_RotOscPhase[2])); - textures[texSlot].tcmrotoscamplitude = RoundDegree(Word2Degr(pTextureRes->m_Ext.m_pTexModifier->m_RotOscAmplitude[2])); - *textures[texSlot].tcmrotosccenter[0] = pTextureRes->m_Ext.m_pTexModifier->m_RotOscCenter[0]; - *textures[texSlot].tcmrotosccenter[1] = pTextureRes->m_Ext.m_pTexModifier->m_RotOscCenter[1]; - } - else - { - textures[texSlot].etcgentype = 0; - textures[texSlot].etcmumovetype = 0; - textures[texSlot].etcmvmovetype = 0; - textures[texSlot].etcmrotatetype = 0; - textures[texSlot].is_tcgprojected = false; - textures[texSlot].tcmuoscrate = 0; - textures[texSlot].tcmuoscphase = 0; - textures[texSlot].tcmuoscamplitude = 0; - textures[texSlot].tcmvoscrate = 0; - textures[texSlot].tcmvoscphase = 0; - textures[texSlot].tcmvoscamplitude = 0; - - for (int i = 0; i < 3; i++) - { - *textures[texSlot].rotate[i] = 0; - } - - textures[texSlot].tcmrotoscrate = 0; - textures[texSlot].tcmrotoscphase = 0; - textures[texSlot].tcmrotoscamplitude = 0; - *textures[texSlot].tcmrotosccenter[0] = 0; - *textures[texSlot].tcmrotosccenter[1] = 0; - } -} - -////////////////////////////////////////////////////////////////////////// -void CMaterialUI::ResetTextureResources(uint16 texSlot) -{ - QString texFilename = ""; - textureVars[texSlot]->Set(texFilename); - textures[texSlot].Reset(); -} - -void CMaterialUI::GetTextureResources(SInputShaderResources& sr, int tex, int propagationFlags) -{ - if ((propagationFlags & MTL_PROPAGATE_TEXTURES) == 0) - { - return; - } - - QString texFilename; - textureVars[tex]->Get(texFilename); - if (texFilename.isEmpty()) - { - // Remove the texture if the path was cleared in the UI - sr.m_TexturesResourcesMap.erase(tex); - - // If the normal map/second normal map has been cleared in the UI, - // we must also clear the smoothness/second smoothness since smoothness lives in the alpha of the normal - if (tex == EFTT_NORMALS) - { - sr.m_TexturesResourcesMap.erase(EFTT_SMOOTHNESS); - } - // EFTT_CUSTOM_SECONDARY is the 2nd normal - if (tex == EFTT_CUSTOM_SECONDARY) - { - sr.m_TexturesResourcesMap.erase(EFTT_SECOND_SMOOTHNESS); - } - return; - } - texFilename = Path::ToUnixPath(texFilename); - - // Clear any texture resource that has no associated file - if (texFilename.size() > AZ_MAX_PATH_LEN) - { - AZ_Error("Material Editor", false, "Texture path exceeds the maximium allowable length of %d.", AZ_MAX_PATH_LEN); - return; - } - - // The following line will insert the slot if did not exist. - SEfResTexture* pTextureRes = &(sr.m_TexturesResourcesMap[tex]); - pTextureRes->m_Name = texFilename.toUtf8().data(); - - //pTextureRes->m_Amount = textures[tex].amount; - pTextureRes->m_bUTile = *textures[tex].is_tile[0]; - pTextureRes->m_bVTile = *textures[tex].is_tile[1]; - SEfTexModificator& texm = *pTextureRes->AddModificator(); - texm.m_bTexGenProjected = textures[tex].is_tcgprojected; - - texm.m_Tiling[0] = *textures[tex].tiling[0]; - texm.m_Tiling[1] = *textures[tex].tiling[1]; - texm.m_Offs[0] = *textures[tex].offset[0]; - texm.m_Offs[1] = *textures[tex].offset[1]; - pTextureRes->m_Filter = (int)textures[tex].filter; - pTextureRes->m_Sampler.m_eTexType = textures[tex].etextype; - texm.m_eRotType = textures[tex].etcmrotatetype; - texm.m_eTGType = textures[tex].etcgentype; - texm.m_eMoveType[0] = textures[tex].etcmumovetype; - texm.m_eMoveType[1] = textures[tex].etcmvmovetype; - texm.m_OscRate[0] = textures[tex].tcmuoscrate; - texm.m_OscPhase[0] = textures[tex].tcmuoscphase; - texm.m_OscAmplitude[0] = textures[tex].tcmuoscamplitude; - texm.m_OscRate[1] = textures[tex].tcmvoscrate; - texm.m_OscPhase[1] = textures[tex].tcmvoscphase; - texm.m_OscAmplitude[1] = textures[tex].tcmvoscamplitude; - - for (int i = 0; i < 3; i++) - { - texm.m_Rot[i] = Degr2Word(*textures[tex].rotate[i]); - } - texm.m_RotOscRate[2] = Degr2Word(textures[tex].tcmrotoscrate); - texm.m_RotOscPhase[2] = Degr2Word(textures[tex].tcmrotoscphase); - texm.m_RotOscAmplitude[2] = Degr2Word(textures[tex].tcmrotoscamplitude); - texm.m_RotOscCenter[0] = *textures[tex].tcmrotosccenter[0]; - texm.m_RotOscCenter[1] = *textures[tex].tcmrotosccenter[1]; - texm.m_RotOscCenter[2] = 0.0f; -} - -////////////////////////////////////////////////////////////////////////// -void CMaterialUI::SetVertexDeform(const SInputShaderResources& sr) -{ - vertexMod.type = (int)sr.m_DeformInfo.m_eType; - vertexMod.fDividerX = sr.m_DeformInfo.m_fDividerX; - vertexMod.vNoiseScale = sr.m_DeformInfo.m_vNoiseScale; - - vertexMod.wave.waveFormType = EWaveForm::eWF_Sin; - vertexMod.wave.amplitude = sr.m_DeformInfo.m_WaveX.m_Amp; - vertexMod.wave.level = sr.m_DeformInfo.m_WaveX.m_Level; - vertexMod.wave.phase = sr.m_DeformInfo.m_WaveX.m_Phase; - vertexMod.wave.frequency = sr.m_DeformInfo.m_WaveX.m_Freq; -} - -////////////////////////////////////////////////////////////////////////// -void CMaterialUI::GetVertexDeform(SInputShaderResources& sr, int propagationFlags) -{ - if ((propagationFlags & MTL_PROPAGATE_VERTEX_DEF) == 0) - { - return; - } - - sr.m_DeformInfo.m_eType = (EDeformType)((int)vertexMod.type); - sr.m_DeformInfo.m_fDividerX = vertexMod.fDividerX; - sr.m_DeformInfo.m_vNoiseScale = vertexMod.vNoiseScale; - - sr.m_DeformInfo.m_WaveX.m_eWFType = (EWaveForm)((int)vertexMod.wave.waveFormType); - sr.m_DeformInfo.m_WaveX.m_Amp = vertexMod.wave.amplitude; - sr.m_DeformInfo.m_WaveX.m_Level = vertexMod.wave.level; - sr.m_DeformInfo.m_WaveX.m_Phase = vertexMod.wave.phase; - sr.m_DeformInfo.m_WaveX.m_Freq = vertexMod.wave.frequency; -} - -void CMaterialUI::PropagateToLinkedMaterial(CMaterial* mtl, CVarBlockPtr pShaderParams) -{ - if (!mtl) - { - return; - } - CMaterial* subMtl = NULL, * parentMtl = mtl->GetParent(); - const QString& linkedMaterialName = matPropagate; - int propFlags = 0; - - if (parentMtl) - { - for (int i = 0; i < parentMtl->GetSubMaterialCount(); ++i) - { - CMaterial* pMtl = parentMtl->GetSubMaterial(i); - if (pMtl && pMtl != mtl && pMtl->GetFullName() == linkedMaterialName) - { - subMtl = pMtl; - break; - } - } - } - if (!linkedMaterialName.isEmpty() && subMtl) - { - // Ensure that the linked material is cleared if it can't be found anymore - mtl->LinkToMaterial(linkedMaterialName); - } - // Note: It's only allowed to propagate the shader params and shadergen params - // if we also propagate the actual shader to the linked material as well, else - // bogus values will be set - bPropagateShaderParams = (int)bPropagateShaderParams & - (int)bPropagateMaterialSettings; - bPropagateShaderGenParams = (int)bPropagateShaderGenParams & - (int)bPropagateMaterialSettings; - - propFlags |= MTL_PROPAGATE_MATERIAL_SETTINGS & - (int)bPropagateMaterialSettings; - propFlags |= MTL_PROPAGATE_OPACITY & - (int)bPropagateOpactity; - propFlags |= MTL_PROPAGATE_LIGHTING & - (int)bPropagateLighting; - propFlags |= MTL_PROPAGATE_ADVANCED & - (int)bPropagateAdvanced; - propFlags |= MTL_PROPAGATE_TEXTURES & - (int)bPropagateTexture; - propFlags |= MTL_PROPAGATE_SHADER_PARAMS & - (int)bPropagateShaderParams; - propFlags |= MTL_PROPAGATE_SHADER_GEN & - (int)bPropagateShaderGenParams; - propFlags |= MTL_PROPAGATE_VERTEX_DEF & - (int)bPropagateVertexDef; - propFlags |= MTL_PROPAGATE_LAYER_PRESETS & - (int)bPropagateLayerPresets; - mtl->SetPropagationFlags(propFlags); - - if (subMtl) - { - SetToMaterial(subMtl, propFlags | MTL_PROPAGATE_RESERVED); - if (propFlags & MTL_PROPAGATE_SHADER_PARAMS) - { - if (CVarBlock* pPublicVars = subMtl->GetPublicVars(mtl->GetShaderResources())) - { - subMtl->SetPublicVars(pPublicVars, subMtl); - } - } - if (propFlags & MTL_PROPAGATE_SHADER_GEN) - { - subMtl->SetShaderGenParamsVars(mtl->GetShaderGenParamsVars()); - } - subMtl->Update(); - subMtl->UpdateMaterialLayers(); - } -} - -void CMaterialUI::PropagateFromLinkedMaterial(CMaterial* mtl) -{ - if (!mtl) - { - return; - } - CMaterial* subMtl = NULL, * parentMtl = mtl->GetParent(); - const QString& linkedMaterialName = mtl->GetLinkedMaterialName(); - //CVarEnumList *enumMtls = new CVarEnumList; - if (parentMtl) - { - for (int i = 0; i < parentMtl->GetSubMaterialCount(); ++i) - { - CMaterial* pMtl = parentMtl->GetSubMaterial(i); - if (!pMtl || pMtl == mtl) - { - continue; - } - const QString& subMtlName = pMtl->GetFullName(); - //enumMtls->AddItem(subMtlName, subMtlName); - if (subMtlName == linkedMaterialName) - { - subMtl = pMtl; - break; - } - } - } - matPropagate = QString(); - //matPropagate.SetEnumList(enumMtls); - if (!linkedMaterialName.isEmpty() && !subMtl) - { - // Ensure that the linked material is cleared if it can't be found anymore - mtl->LinkToMaterial(QString()); - } - else - { - matPropagate = linkedMaterialName; - } - bPropagateMaterialSettings = mtl->GetPropagationFlags() & MTL_PROPAGATE_MATERIAL_SETTINGS; - bPropagateOpactity = mtl->GetPropagationFlags() & MTL_PROPAGATE_OPACITY; - bPropagateLighting = mtl->GetPropagationFlags() & MTL_PROPAGATE_LIGHTING; - bPropagateTexture = mtl->GetPropagationFlags() & MTL_PROPAGATE_TEXTURES; - bPropagateAdvanced = mtl->GetPropagationFlags() & MTL_PROPAGATE_ADVANCED; - bPropagateVertexDef = mtl->GetPropagationFlags() & MTL_PROPAGATE_VERTEX_DEF; - bPropagateShaderParams = mtl->GetPropagationFlags() & MTL_PROPAGATE_SHADER_PARAMS; - bPropagateLayerPresets = mtl->GetPropagationFlags() & MTL_PROPAGATE_LAYER_PRESETS; - bPropagateShaderGenParams = mtl->GetPropagationFlags() & MTL_PROPAGATE_SHADER_GEN; -} - -void CMaterialUI::SetFromMaterial(CMaterial* mtlIn) -{ - QString shaderName = mtlIn->GetShaderName(); - if (!shaderName.isEmpty()) - { - // Capitalize first letter. - shaderName = shaderName[0].toUpper() + shaderName.mid(1); - } - - shader = shaderName; - - int mtlFlags = mtlIn->GetFlags(); - bNoShadow = (mtlFlags & MTL_FLAG_NOSHADOW); - bAdditive = (mtlFlags & MTL_FLAG_ADDITIVE); - bWire = (mtlFlags & MTL_FLAG_WIRE); - b2Sided = (mtlFlags & MTL_FLAG_2SIDED); - bScatter = (mtlFlags & MTL_FLAG_SCATTER); - bHideAfterBreaking = (mtlFlags & MTL_FLAG_HIDEONBREAK); - bFogVolumeShadingQualityHigh = (mtlFlags & MTL_FLAG_FOG_VOLUME_SHADING_QUALITY_HIGH); - bBlendTerrainColor = (mtlFlags & MTL_FLAG_BLEND_TERRAIN); - texUsageMask = mtlIn->GetTexmapUsageMask(); - - allowLayerActivation = mtlIn->LayerActivationAllowed(); - - // Detail, decal and custom textures are always active. - const uint32 nDefaultFlagsEFTT = (1 << EFTT_DETAIL_OVERLAY) | (1 << EFTT_DECAL_OVERLAY) | (1 << EFTT_CUSTOM) | (1 << EFTT_CUSTOM_SECONDARY); - texUsageMask |= nDefaultFlagsEFTT; - if ((texUsageMask & (1 << EFTT_NORMALS))) - { - texUsageMask |= 1 << EFTT_NORMALS; - } - - surfaceType = mtlIn->GetSurfaceTypeName(); - SetShaderResources(mtlIn->GetShaderResources(), true); - - // Propagate settings and properties to a sub material if edited - PropagateFromLinkedMaterial(mtlIn); - - // set each material layer - SMaterialLayerResources* pMtlLayerResources = mtlIn->GetMtlLayerResources(); - for (int l(0); l < MTL_LAYER_MAX_SLOTS; ++l) - { - materialLayers[l].shader = pMtlLayerResources[l].m_shaderName; - materialLayers[l].bNoDraw = pMtlLayerResources[l].m_nFlags & MTL_LAYER_USAGE_NODRAW; - materialLayers[l].bFadeOut = pMtlLayerResources[l].m_nFlags & MTL_LAYER_USAGE_FADEOUT; - } -} - -void CMaterialUI::SetToMaterial(CMaterial* mtl, int propagationFlags) -{ - int mtlFlags = mtl->GetFlags(); - - if (propagationFlags & MTL_PROPAGATE_ADVANCED) - { - if (bNoShadow) - { - mtlFlags |= MTL_FLAG_NOSHADOW; - } - else - { - mtlFlags &= ~MTL_FLAG_NOSHADOW; - } - } - - if (propagationFlags & MTL_PROPAGATE_OPACITY) - { - if (bAdditive) - { - mtlFlags |= MTL_FLAG_ADDITIVE; - } - else - { - mtlFlags &= ~MTL_FLAG_ADDITIVE; - } - } - - if (bWire) - { - mtlFlags |= MTL_FLAG_WIRE; - } - else - { - mtlFlags &= ~MTL_FLAG_WIRE; - } - - if (propagationFlags & MTL_PROPAGATE_ADVANCED) - { - if (b2Sided) - { - mtlFlags |= MTL_FLAG_2SIDED; - } - else - { - mtlFlags &= ~MTL_FLAG_2SIDED; - } - - if (bScatter) - { - mtlFlags |= MTL_FLAG_SCATTER; - } - else - { - mtlFlags &= ~MTL_FLAG_SCATTER; - } - - if (bHideAfterBreaking) - { - mtlFlags |= MTL_FLAG_HIDEONBREAK; - } - else - { - mtlFlags &= ~MTL_FLAG_HIDEONBREAK; - } - - if (bFogVolumeShadingQualityHigh) - { - mtlFlags |= MTL_FLAG_FOG_VOLUME_SHADING_QUALITY_HIGH; - } - else - { - mtlFlags &= ~MTL_FLAG_FOG_VOLUME_SHADING_QUALITY_HIGH; - } - - if (bBlendTerrainColor) - { - mtlFlags |= MTL_FLAG_BLEND_TERRAIN; - } - else - { - mtlFlags &= ~MTL_FLAG_BLEND_TERRAIN; - } - } - - mtl->SetFlags(mtlFlags); - - mtl->SetLayerActivation(allowLayerActivation); - - // set each material layer - if (propagationFlags & MTL_PROPAGATE_LAYER_PRESETS) - { - SMaterialLayerResources* pMtlLayerResources = mtl->GetMtlLayerResources(); - for (int l(0); l < MTL_LAYER_MAX_SLOTS; ++l) - { - if (pMtlLayerResources[l].m_shaderName != materialLayers[l].shader) - { - pMtlLayerResources[l].m_shaderName = materialLayers[l].shader; - pMtlLayerResources[l].m_bRegetPublicParams = true; - } - - if (materialLayers[l].bNoDraw) - { - pMtlLayerResources[l].m_nFlags |= MTL_LAYER_USAGE_NODRAW; - } - else - { - pMtlLayerResources[l].m_nFlags &= ~MTL_LAYER_USAGE_NODRAW; - } - - if (materialLayers[l].bFadeOut) - { - pMtlLayerResources[l].m_nFlags |= MTL_LAYER_USAGE_FADEOUT; - } - else - { - pMtlLayerResources[l].m_nFlags &= ~MTL_LAYER_USAGE_FADEOUT; - } - } - } - - if (propagationFlags & MTL_PROPAGATE_MATERIAL_SETTINGS) - { - mtl->SetSurfaceTypeName(surfaceType); - // If shader name is different reload shader. - mtl->SetShaderName(shader); - } - - GetShaderResources(mtl->GetShaderResources(), propagationFlags); -} - -void CMaterialUI::SetTextureNames(CMaterial* mtl) -{ - SInputShaderResources& sr = mtl->GetShaderResources(); - - for ( auto& iter : sr.m_TexturesResourcesMap ) - { - uint16 texId = iter.first; - if (!MaterialHelpers::IsAdjustableTexSlot((EEfResTextures)texId)) - { - continue; - } - - SEfResTexture* pTextureRes = &(iter.second); - textureVars[texId]->Set(pTextureRes->m_Name.c_str()); - } -} - -////////////////////////////////////////////////////////////////////////// -////////////////////////////////////////////////////////////////////////// -class CMtlPickCallback - : public IPickObjectCallback -{ -public: - CMtlPickCallback() { m_bActive = true; }; - //! Called when object picked. - virtual void OnPick(CBaseObject* picked) - { - m_bActive = false; - CMaterial* pMtl = picked->GetMaterial(); - if (pMtl) - { - GetIEditor()->OpenMaterialLibrary(pMtl); - } - delete this; - } - //! Called when pick mode canceled. - virtual void OnCancelPick() - { - m_bActive = false; - delete this; - } - //! Return true if specified object is pickable. - virtual bool OnPickFilter(CBaseObject* filterObject) - { - // Check if object have material. - if (filterObject->GetMaterial()) - { - return true; - } - else - { - return false; - } - } - static bool IsActive() { return m_bActive; }; -private: - static bool m_bActive; -}; -bool CMtlPickCallback::m_bActive = false; -////////////////////////////////////////////////////////////////////////// - - -////////////////////////////////////////////////////////////////////////// -// CMaterialDialog implementation. -////////////////////////////////////////////////////////////////////////// -CMaterialDialog::CMaterialDialog(QWidget* parent /* = 0 */) - : QMainWindow(parent) - , m_wndMtlBrowser(0) -{ - m_propsCtrl = new TwoColumnPropertyControl; - m_propsCtrl->Setup(true, 150); - m_propsCtrl->SetSavedStateKey("MaterialDialog"); - m_propsCtrl->setMinimumWidth(460); - - m_placeHolderLabel = new QLabel(tr("Select a material in the Material Editor hierarchy to view properties")); - m_placeHolderLabel->setMinimumHeight(250); - m_placeHolderLabel->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred); - - SEventLog toolEvent(MATERIAL_EDITOR_NAME, "", MATERIAL_EDITOR_VER); - GetIEditor()->GetSettingsManager()->RegisterEvent(toolEvent); - - m_pMatManager = GetIEditor()->GetMaterialManager(); - - m_shaderGenParamsVars = 0; - - m_textureSlots = 0; - - m_pMaterialUI = new CMaterialUI; - - m_bForceReloadPropsCtrl = true; - - m_pMaterialImageListModel.reset(new QMaterialImageListModel); - - m_pMaterialImageListCtrl.reset(new CMaterialImageListCtrl); - m_pMaterialImageListCtrl->setModel(m_pMaterialImageListModel.data()); - - // Immediately create dialog. - OnInitDialog(); - - GetIEditor()->RegisterNotifyListener(this); - m_pMatManager->AddListener(this); - m_propsCtrl->SetUndoCallback(AZStd::bind(&CMaterialDialog::OnUndo, this, AZStd::placeholders::_1)); - m_propsCtrl->SetStoreUndoByItems(false); - - // KDAB_TODO: hack until we have proper signal coming from the IEDitor - connect(QCoreApplication::eventDispatcher(), &QAbstractEventDispatcher::awake, this, &CMaterialDialog::UpdateActions); -} - -////////////////////////////////////////////////////////////////////////// -CMaterialDialog::~CMaterialDialog() -{ - m_pMatManager->RemoveListener(this); - GetIEditor()->UnregisterNotifyListener(this); - m_wndMtlBrowser->SetImageListCtrl(NULL); - - delete m_pMaterialUI; - m_vars = 0; - m_publicVars = 0; - m_shaderGenParamsVars = 0; - m_textureSlots = 0; - - m_propsCtrl->ClearUndoCallback(); - m_propsCtrl->RemoveAllItems(); - - SEventLog toolEvent(MATERIAL_EDITOR_NAME, "", MATERIAL_EDITOR_VER); - GetIEditor()->GetSettingsManager()->UnregisterEvent(toolEvent); -} - -BOOL CMaterialDialog::OnInitDialog() -{ - setWindowTitle(tr(LyViewPane::MaterialEditor)); - if (gEnv->p3DEngine) - { - ISurfaceTypeManager* pSurfaceTypeManager = gEnv->p3DEngine->GetMaterialManager()->GetSurfaceTypeManager(); - if (pSurfaceTypeManager) - { - pSurfaceTypeManager->LoadSurfaceTypes(); - } - } - - InitToolbar(IDR_DB_MATERIAL_BAR); - - setCorner(Qt::TopLeftCorner, Qt::LeftDockWidgetArea); - - // hide menu bar - menuBar()->hide(); - - // Create status bar. - { - m_statusBar = this->statusBar(); - m_statusBar->setSizeGripEnabled(false); - } - - QSplitter* centralWidget = new QSplitter(Qt::Horizontal, this); - setCentralWidget(centralWidget); - - QSplitter* rightWidget = new QSplitter(Qt::Vertical, centralWidget); - centralWidget->addWidget(rightWidget); - - rightWidget->addWidget(m_propsCtrl); - - m_vars = m_pMaterialUI->CreateVars(); - m_propsCtrl->AddVarBlock(m_vars); - - m_propsCtrl->setEnabled(false); - m_propsCtrl->hide(); - - ////////////////////////////////////////////////////////////////////////// - // Preview Pane - ////////////////////////////////////////////////////////////////////////// - { - rightWidget->insertWidget(0, m_pMaterialImageListCtrl.data()); - - int h = m_pMaterialImageListCtrl->sizeHint().height(); - m_pMaterialImageListCtrl->hide(); - rightWidget->setSizes({h, height() - h }); - } - - rightWidget->addWidget(m_placeHolderLabel); - m_placeHolderLabel->setAlignment(Qt::AlignCenter); - - ////////////////////////////////////////////////////////////////////////// - // Browser Pane - ////////////////////////////////////////////////////////////////////////// - if (!m_wndMtlBrowser) - { - m_wndMtlBrowser = new MaterialBrowserWidget(this); - m_wndMtlBrowser->SetListener(this); - m_wndMtlBrowser->SetImageListCtrl(m_pMaterialImageListCtrl.data()); - //m_wndMtlBrowser->resize(width() / 3, height()); - - centralWidget->insertWidget(0, m_wndMtlBrowser); - - int w = m_wndMtlBrowser->sizeHint().height(); - centralWidget->setSizes({ w, width() - w }); - centralWidget->setStretchFactor(0, 0); - centralWidget->setStretchFactor(1, 1); - - // Start the background processing of material files after the widget has been initialized - m_wndMtlBrowser->StartRecordUpdateJobs(); - } - - // Set the image list control to give stretch priority to the other widgets. This is both to avoid resizing the - // image list control when the window is resized and to avoid an issue with the QSplitter resizing the image list - // control when enabling/disabling the other two widgets. - const int materialImageControlIndex = 0; - const int materialImagePropertiesControlIndex = 1; - const int materialPlaceholderLabelIndex = 2; - rightWidget->setStretchFactor(materialImageControlIndex, 0); - rightWidget->setStretchFactor(materialImagePropertiesControlIndex, 1); - rightWidget->setStretchFactor(materialPlaceholderLabelIndex, 1); - - resize(1200, 800); - - return true; // return true unless you set the focus to a control - // EXCEPTION: OCX Property Pages should return FALSE -} - -void CMaterialDialog::closeEvent(QCloseEvent *ev) -{ - // We call save before running any dtors, as it might trigger a modal dialog / nested event loop - // asking to overwrite files, and that causes a crash - m_wndMtlBrowser->SaveCurrentMaterial(); - ev->accept(); // All good, dialog will close now -} - -////////////////////////////////////////////////////////////////////////// -// Create the toolbar -void CMaterialDialog::InitToolbar([[maybe_unused]] UINT nToolbarResID) -{ - // detect if the new viewport interaction model is enabled and give - // feedback to the user that certain operations are not yet compatible - const bool newViewportInteractionModelEnabled = GetIEditor()->IsNewViewportInteractionModelEnabled(); - const char* const newViewportInteractionModelWarning = - "This option is currently not available with the new Viewport Interaction Model enabled"; - - m_toolbar = addToolBar(tr("Material ToolBar")); - m_toolbar->setFloatable(false); - - QIcon assignselectionIcon; - assignselectionIcon.addPixmap(QPixmap{ ":/MaterialDialog/ToolBar/images/materialdialog_assignselection_normal.png" }, QIcon::Normal); - assignselectionIcon.addPixmap(QPixmap{ ":/MaterialDialog/ToolBar/images/materialdialog_assignselection_active.png" }, QIcon::Active); - assignselectionIcon.addPixmap(QPixmap{ ":/MaterialDialog/ToolBar/images/materialdialog_assignselection_disabled.png" }, QIcon::Disabled); - - m_assignToSelectionAction = - m_toolbar->addAction(assignselectionIcon, - newViewportInteractionModelEnabled - ? tr(newViewportInteractionModelWarning) - : tr("Assign Item to Selected Objects"), - this, SLOT(OnAssignMaterialToSelection())); - - QIcon resetIcon; - resetIcon.addPixmap(QPixmap{ ":/MaterialDialog/ToolBar/images/materialdialog_reset_normal.png" }, QIcon::Normal); - resetIcon.addPixmap(QPixmap{ ":/MaterialDialog/ToolBar/images/materialdialog_reset_active.png" }, QIcon::Active); - resetIcon.addPixmap(QPixmap{ ":/MaterialDialog/ToolBar/images/materialdialog_reset_disabled.png" }, QIcon::Disabled); - - m_resetAction = - m_toolbar->addAction(resetIcon, - newViewportInteractionModelEnabled - ? tr(newViewportInteractionModelWarning) - : tr("Reset Material on Selection to Default"), - this, SLOT(OnResetMaterialOnSelection())); - - QIcon getfromselectionIcon; - getfromselectionIcon.addPixmap(QPixmap{ ":/MaterialDialog/ToolBar/images/materialdialog_getfromselection_normal.png" }, QIcon::Normal); - getfromselectionIcon.addPixmap(QPixmap{ ":/MaterialDialog/ToolBar/images/materialdialog_getfromselection_active.png" }, QIcon::Active); - getfromselectionIcon.addPixmap(QPixmap{ ":/MaterialDialog/ToolBar/images/materialdialog_getfromselection_disabled.png" }, QIcon::Disabled); - - m_getFromSelectionAction = - m_toolbar->addAction( - getfromselectionIcon, - newViewportInteractionModelEnabled - ? tr(newViewportInteractionModelWarning) - : tr("Get Properties From Selection"), - this, SLOT(OnGetMaterialFromSelection())); - - QIcon pickIcon; - pickIcon.addPixmap(QPixmap{ ":/MaterialDialog/ToolBar/images/materialdialog_pick_normal.png" }, QIcon::Normal); - pickIcon.addPixmap(QPixmap{ ":/MaterialDialog/ToolBar/images/materialdialog_pick_active.png" }, QIcon::Active); - pickIcon.addPixmap(QPixmap{ ":/MaterialDialog/ToolBar/images/materialdialog_pick_disabled.png" }, QIcon::Disabled); - - m_pickAction = m_toolbar->addAction( - pickIcon, - newViewportInteractionModelEnabled - ? tr(newViewportInteractionModelWarning) - : tr("Pick Material from Object"), - this, SLOT(OnPickMtl())); - - m_pickAction->setCheckable(true); - - if (newViewportInteractionModelEnabled) - { - m_pickAction->setEnabled(false); - } - - QAction* sepAction = m_toolbar->addSeparator(); - m_filterTypeSelection = new QComboBox(this); - m_filterTypeSelection->addItem(tr("All Materials")); - m_filterTypeSelection->addItem(tr("Used In Level")); - m_filterTypeSelection->setMinimumWidth(150); - QAction* cbAction = m_toolbar->addWidget(m_filterTypeSelection); - m_filterTypeSelection->setCurrentIndex(0); - connect(m_filterTypeSelection, SIGNAL(currentIndexChanged(int)), this, SLOT(OnChangedBrowserListType(int))); - m_toolbar->addSeparator(); - QIcon addIcon; - addIcon.addPixmap(QPixmap{ ":/MaterialDialog/ToolBar/images/materialdialog_add_normal.png" }, QIcon::Normal); - addIcon.addPixmap(QPixmap{ ":/MaterialDialog/ToolBar/images/materialdialog_add_active.png" }, QIcon::Active); - addIcon.addPixmap(QPixmap{ ":/MaterialDialog/ToolBar/images/materialdialog_add_disabled.png" }, QIcon::Disabled); - m_addAction = m_toolbar->addAction(addIcon, tr("Add New Item"), this, SLOT(OnAddItem())); - QIcon saveIcon; - saveIcon.addPixmap(QPixmap{ ":/MaterialDialog/ToolBar/images/materialdialog_save_normal.png" }, QIcon::Normal); - saveIcon.addPixmap(QPixmap{ ":/MaterialDialog/ToolBar/images/materialdialog_save_active.png" }, QIcon::Active); - saveIcon.addPixmap(QPixmap{ ":/MaterialDialog/ToolBar/images/materialdialog_save_disabled.png" }, QIcon::Disabled); - m_saveAction = m_toolbar->addAction(saveIcon, tr("Save Item"), this, SLOT(OnSaveItem())); - QIcon removeIcon; - removeIcon.addPixmap(QPixmap{ ":/MaterialDialog/ToolBar/images/materialdialog_remove_normal.png" }, QIcon::Normal); - removeIcon.addPixmap(QPixmap{ ":/MaterialDialog/ToolBar/images/materialdialog_remove_active.png" }, QIcon::Active); - removeIcon.addPixmap(QPixmap{ ":/MaterialDialog/ToolBar/images/materialdialog_remove_disabled.png" }, QIcon::Disabled); - m_removeAction = m_toolbar->addAction(removeIcon, tr("Remove Item"), this, SLOT(OnDeleteItem())); - m_toolbar->addSeparator(); - QIcon copyIcon; - copyIcon.addPixmap(QPixmap{ ":/MaterialDialog/ToolBar/images/materialdialog_copy_normal.png" }, QIcon::Normal); - copyIcon.addPixmap(QPixmap{ ":/MaterialDialog/ToolBar/images/materialdialog_copy_active.png" }, QIcon::Active); - copyIcon.addPixmap(QPixmap{ ":/MaterialDialog/ToolBar/images/materialdialog_copy_disabled.png" }, QIcon::Disabled); - m_copyAction = m_toolbar->addAction(copyIcon, tr("Copy Material"), this, SLOT(OnCopy())); - QIcon pasteIcon; - pasteIcon.addPixmap(QPixmap{ ":/MaterialDialog/ToolBar/images/materialdialog_paste_normal.png" }, QIcon::Normal); - pasteIcon.addPixmap(QPixmap{ ":/MaterialDialog/ToolBar/images/materialdialog_paste_active.png" }, QIcon::Active); - pasteIcon.addPixmap(QPixmap{ ":/MaterialDialog/ToolBar/images/materialdialog_paste_disabled.png" }, QIcon::Disabled); - m_pasteAction = m_toolbar->addAction(pasteIcon, tr("Paste Material"), this, SLOT(OnPaste())); - m_toolbar->addSeparator(); - QIcon previewIcon; - previewIcon.addPixmap(QPixmap{ ":/MaterialDialog/ToolBar/images/materialdialog_preview_normal.png" }, QIcon::Normal); - previewIcon.addPixmap(QPixmap{ ":/MaterialDialog/ToolBar/images/materialdialog_preview_active.png" }, QIcon::Active); - previewIcon.addPixmap(QPixmap{ ":/MaterialDialog/ToolBar/images/materialdialog_preview_disabled.png" }, QIcon::Disabled); - m_previewAction = m_toolbar->addAction(previewIcon, tr("Open Large Material Preview Window"), this, SLOT(OnMaterialPreview())); - m_toolbar->addSeparator(); - QIcon resetViewportIcon; - resetViewportIcon.addPixmap(QPixmap{ ":/MaterialDialog/ToolBar/images/materialdialog_reset_viewport_normal.png" }, QIcon::Normal); - resetViewportIcon.addPixmap(QPixmap{ ":/MaterialDialog/ToolBar/images/materialdialog_reset_viewport_active.png" }, QIcon::Active); - resetViewportIcon.addPixmap(QPixmap{ ":/MaterialDialog/ToolBar/images/materialdialog_reset_viewport_disabled.png" }, QIcon::Disabled); - m_resetViewporAction = m_toolbar->addAction(resetViewportIcon, tr("Reset Material Viewport"), this, SLOT(OnResetMaterialViewport())); - - UpdateActions(); - setContextMenuPolicy(Qt::ContextMenuPolicy::NoContextMenu); - - connect(m_toolbar, &QToolBar::orientationChanged, m_toolbar, [=](Qt::Orientation orientation) - { - if (orientation == Qt::Vertical) - { - m_toolbar->removeAction(cbAction); - } - else - { - m_toolbar->insertAction(sepAction, cbAction); - } - }); -} - -////////////////////////////////////////////////////////////////////////// -void CMaterialDialog::ReloadItems() -{ - UpdateActions(); -} - -////////////////////////////////////////////////////////////////////////// -void CMaterialDialog::OnAddItem() -{ - m_wndMtlBrowser->OnAddNewMaterial(); - UpdateActions(); -} - -////////////////////////////////////////////////////////////////////////// -void CMaterialDialog::OnSaveItem() -{ - CMaterial* pMtl = GetSelectedMaterial(); - if (pMtl) - { - CMaterial* parent = pMtl->GetParent(); - - if (!pMtl->Save(false)) - { - if (!parent) - { - QMessageBox::warning(this, QString(), tr("The material file cannot be saved. The file is located in a PAK archive or access is denied")); - } - } - - if (parent) - { - //The reload function will clear all the sub-material references, and re-create them. - //Thus pMtl will point to old sub-material that should be deleted instead. - //So we need to set m_pMatManager's current material to the new one. - int index = -1; - - //Find the corresponding sub-material and record its index - for (int i = 0; i < parent->GetSubMaterialCount(); i++) - { - if (parent->GetSubMaterial(i) == pMtl) - { - index = i; - break; - } - } - pMtl->Reload(); - - if (index >= 0 && index < parent->GetSubMaterialCount()) - { - m_pMatManager->SetCurrentMaterial(parent->GetSubMaterial(index)); - } - else //If we can't find the sub-material, use parent instead - { - m_pMatManager->SetCurrentMaterial(parent); - } - } - else - { - pMtl->Reload(); - } - - } - UpdateActions(); -} - -////////////////////////////////////////////////////////////////////////// -void CMaterialDialog::OnDeleteItem() -{ - m_wndMtlBrowser->DeleteItem(); - UpdateActions(); -} - -////////////////////////////////////////////////////////////////////////// -void CMaterialDialog::SetMaterialVars([[maybe_unused]] CMaterial* mtl) -{ -} - - -////////////////////////////////////////////////////////////////////////// -void CMaterialDialog::UpdateShaderParamsUI(CMaterial* pMtl) -{ - ////////////////////////////////////////////////////////////////////////// - // Shader Gen Mask. - ////////////////////////////////////////////////////////////////////////// - IVariable* shaderGenParamsContainerVar = m_pMaterialUI->tableShaderGenParams.GetVar(); - if (m_propsCtrl->FindVariable(shaderGenParamsContainerVar)) - { - m_shaderGenParamsVars = pMtl->GetShaderGenParamsVars(); - m_propsCtrl->ReplaceVarBlock(shaderGenParamsContainerVar, m_shaderGenParamsVars); - } - - ////////////////////////////////////////////////////////////////////////// - // Shader Public Params. - ////////////////////////////////////////////////////////////////////////// - IVariable* publicVars = m_pMaterialUI->tableShaderParams.GetVar(); - if (m_propsCtrl->FindVariable(publicVars)) - { - bool bNeedUpdateMaterialFromUI = false; - CVarBlockPtr pPublicVars = pMtl->GetPublicVars(pMtl->GetShaderResources()); - if (m_publicVars && pPublicVars) - { - // list of shader parameters depends on list of shader generation parameters - // we need to keep values of vars which not presented in every combinations, - // but probably adjusted by user, to keep his work. - // m_excludedPublicVars is used for these values - if (m_excludedPublicVars.pMaterial) - { - if (m_excludedPublicVars.pMaterial != pMtl) - { - m_excludedPublicVars.vars.DeleteAllVariables(); - } - else - { - // find new presented vars in pPublicVars, which not existed in old m_publicVars - for (int j = pPublicVars->GetNumVariables() - 1; j >= 0; --j) - { - IVariable* pVar = pPublicVars->GetVariable(j); - bool isVarExist = false; - for (int i = m_publicVars->GetNumVariables() - 1; i >= 0; --i) - { - IVariable* pOldVar = m_publicVars->GetVariable(i); - if (!QString::compare(pOldVar->GetName(), pVar->GetName())) - { - isVarExist = true; - break; - } - } - if (!isVarExist) // var exist in new pPublicVars block, but not in previous (m_publicVars) - { - // try to find value for this var inside "excluded vars" collection - for (int i = m_excludedPublicVars.vars.GetNumVariables() - 1; i >= 0; --i) - { - IVariable* pStoredVar = m_excludedPublicVars.vars.GetVariable(i); - if (!QString::compare(pStoredVar->GetName(), pVar->GetName()) && pVar->GetDataType() == pStoredVar->GetDataType()) - { - pVar->CopyValue(pStoredVar); - m_excludedPublicVars.vars.DeleteVariable(pStoredVar); - bNeedUpdateMaterialFromUI = true; - break; - } - } - } - } - } - } - // We only want to collect vars if the old and new block are part of the same - // material, otherwise we are storing state from one material to an other. - if (m_excludedPublicVars.pMaterial == pMtl) - { - // collect excluded vars from old block (m_publicVars) - // which exist in m_publicVars but not in a new generated pPublicVars block - for (int i = m_publicVars->GetNumVariables() - 1; i >= 0; --i) - { - IVariable* pOldVar = m_publicVars->GetVariable(i); - bool isVarExist = false; - for (int j = pPublicVars->GetNumVariables() - 1; j >= 0; --j) - { - IVariable* pVar = pPublicVars->GetVariable(j); - if (!QString::compare(pOldVar->GetName(), pVar->GetName())) - { - isVarExist = true; - break; - } - } - if (!isVarExist) - { - m_excludedPublicVars.vars.AddVariable(pOldVar->Clone(false)); - } - } - } - m_excludedPublicVars.pMaterial = pMtl; - } - - m_publicVars = pPublicVars; - if (m_publicVars) - { - m_publicVars->Sort(); - } - - m_propsCtrl->ReplaceVarBlock(publicVars, m_publicVars); - - if (m_publicVars && bNeedUpdateMaterialFromUI) - { - pMtl->SetPublicVars(m_publicVars, pMtl); - } - } - IVariable* textureSlotsVar = m_pMaterialUI->tableTexture.GetVar(); - if (m_propsCtrl->FindVariable(textureSlotsVar)) - { - m_textureSlots = pMtl->UpdateTextureNames(m_pMaterialUI->textureVars); - m_propsCtrl->ReplaceVarBlock(textureSlotsVar, m_textureSlots); - } - - ////////////////////////////////////////////////////////////////////////// -} - -////////////////////////////////////////////////////////////////////////// -void CMaterialDialog::SelectItem(CBaseLibraryItem* item, bool bForceReload) -{ - static bool bNoRecursiveSelect = false; - if (bNoRecursiveSelect) - { - return; - } - - bool bChanged = item != m_pPrevSelectedItem || bForceReload; - - if (!bChanged) - { - return; - } - - m_pPrevSelectedItem = item; - - // Empty preview control. - //m_previewCtrl.SetEntity(0); - m_pMatManager->SetCurrentMaterial((CMaterial*)item); - - if (!item) - { - m_statusBar->clearMessage(); - m_propsCtrl->setEnabled(false); - m_propsCtrl->hide(); - m_pMaterialImageListCtrl->hide(); - m_placeHolderLabel->setText(tr("Select a material in the Material Editor hierarchy to view properties")); - m_placeHolderLabel->show(); - return; - } - - // Render preview geometry with current material - CMaterial* mtl = (CMaterial*)item; - - QString statusText; - if (mtl->IsPureChild() && mtl->GetParent()) - { - statusText = mtl->GetParent()->GetName() + " [" + mtl->GetName() + "]"; - } - else - { - statusText = mtl->GetName(); - } - - - if (mtl->IsDummy()) - { - statusText += " (Not Found)"; - } - else if (!mtl->CanModify()) - { - statusText += " (Read Only)"; - } - m_statusBar->showMessage(statusText); - - if (mtl->IsMultiSubMaterial()) - { - // Cannot edit it. - m_propsCtrl->setEnabled(false); - m_propsCtrl->EnableUpdateCallback(false); - m_propsCtrl->hide(); - - m_placeHolderLabel->setText(tr("Select a material to view properties")); - m_placeHolderLabel->show(); - - //return; - } - else - { - m_propsCtrl->setEnabled(true); - m_propsCtrl->EnableUpdateCallback(false); - m_propsCtrl->show(); - m_placeHolderLabel->hide(); - } - m_pMaterialImageListCtrl->show(); - - if (m_bForceReloadPropsCtrl) - { - // CPropertyCtrlEx skip OnPaint and another methods for redraw - // OnSize method is forced to invalidate control for redraw - m_propsCtrl->InvalidateCtrl(); - m_bForceReloadPropsCtrl = false; - } - - UpdatePreview(); - - // Update variables. - m_propsCtrl->EnableUpdateCallback(false); - m_pMaterialUI->SetFromMaterial(mtl); - m_propsCtrl->EnableUpdateCallback(true); - - mtl->SetShaderParamPublicScript(); - - ////////////////////////////////////////////////////////////////////////// - - ////////////////////////////////////////////////////////////////////////// - // Set Shader Gen Params. - ////////////////////////////////////////////////////////////////////////// - UpdateShaderParamsUI(mtl); - ////////////////////////////////////////////////////////////////////////// - - m_propsCtrl->SetUpdateCallback(AZStd::bind(&CMaterialDialog::OnUpdateProperties, this, AZStd::placeholders::_1)); - m_propsCtrl->EnableUpdateCallback(true); - - if (mtl->IsDummy()) - { - m_propsCtrl->setEnabled(false); - } - else - { - m_propsCtrl->setEnabled(true); - m_propsCtrl->SetGrayed(!mtl->CanModify()); - } - if (mtl) - { - m_pMaterialImageListCtrl->SelectMaterial(mtl); - } -} - -////////////////////////////////////////////////////////////////////////// -void CMaterialDialog::OnUpdateProperties(IVariable* var) -{ - CMaterial* mtl = GetSelectedMaterial(); - if (!mtl) - { - return; - } - - bool bShaderChanged = (m_pMaterialUI->shader == var); - bool bShaderGenMaskChanged = false; - if (m_shaderGenParamsVars) - { - bShaderGenMaskChanged = m_shaderGenParamsVars->IsContainsVariable(var); - } - - bool bMtlLayersChanged = false; - int nCurrLayer = -1; - - // Check for shader changes - for (int l(0); l < MTL_LAYER_MAX_SLOTS; ++l) - { - if ((m_pMaterialUI->materialLayers[l].shader == var)) - { - bMtlLayersChanged = true; - nCurrLayer = l; - break; - } - } - - ////////////////////////////////////////////////////////////////////////// - // Assign modified Shader Gen Params to shader. - ////////////////////////////////////////////////////////////////////////// - if (bShaderGenMaskChanged) - { - mtl->SetShaderGenParamsVars(m_shaderGenParamsVars); - } - ////////////////////////////////////////////////////////////////////////// - // Invalidate material and save changes. - //m_pMatManager->MarkMaterialAsModified(mtl); - // - - mtl->RecordUndo("Material parameter", true); - m_pMaterialUI->SetToMaterial(mtl); - mtl->Update(); - - // - ////////////////////////////////////////////////////////////////////////// - // Assign new public vars to material. - // Must be after material update. - ////////////////////////////////////////////////////////////////////////// - - GetIEditor()->SuspendUndo(); - - if (m_publicVars != NULL && !bShaderChanged) - { - mtl->SetPublicVars(m_publicVars, mtl); - } - - /* - bool bUpdateLayers = false; - for(int l(0); l < MTL_LAYER_MAX_SLOTS; ++l) - { - if ( m_varsMtlLayersShaderParams[l] != NULL && l != nCurrLayer) - { - SMaterialLayerResources *pCurrResource = pTemplateMtl ? &pTemplateMtl->GetMtlLayerResources()[l] : &pMtlLayerResources[l]; - SShaderItem &pCurrShaderItem = pCurrResource->m_pMatLayer->GetShaderItem(); - CVarBlock* pVarBlock = pTemplateMtl ? pTemplateMtl->GetPublicVars( pCurrResource->m_shaderResources ) : m_varsMtlLayersShaderParams[l]; - mtl->SetPublicVars( pVarBlock, pCurrResource->m_shaderResources, pCurrShaderItem.m_pShaderResources, pCurrShaderItem.m_pShader); - bUpdateLayers = true; - } - } - */ - //if( bUpdateLayers ) - { - mtl->UpdateMaterialLayers(); - } - - m_pMaterialUI->PropagateToLinkedMaterial(mtl, m_shaderGenParamsVars); - if (var) - { - GetIEditor()->GetMaterialManager()->HighlightedMaterialChanged(mtl); - m_pMaterialUI->NotifyObjectsAboutMaterialChange(var); - } - - GetIEditor()->ResumeUndo(); - - ////////////////////////////////////////////////////////////////////////// - - ////////////////////////////////////////////////////////////////////////// - if (bShaderChanged || bShaderGenMaskChanged || bMtlLayersChanged) - { - m_pMaterialUI->SetFromMaterial(mtl); - } - //m_pMaterialUI->SetTextureNames( mtl ); - - UpdatePreview(); - - // When shader changed. - if (bShaderChanged || bShaderGenMaskChanged || bMtlLayersChanged) - { - ////////////////////////////////////////////////////////////////////////// - // Set material layers params - ////////////////////////////////////////////////////////////////////////// - /* - if( bMtlLayersChanged) // only update changed shader in material layers - { - SMaterialLayerResources *pCurrResource = &pMtlLayerResources[nCurrLayer]; - - // delete old property item - if ( m_varsMtlLayersShaderParamsItems[nCurrLayer] ) - { - m_propsCtrl->DeleteItem( m_varsMtlLayersShaderParamsItems[nCurrLayer] ); - m_varsMtlLayersShaderParamsItems[nCurrLayer] = 0; - } - - m_varsMtlLayersShaderParams[nCurrLayer] = mtl->GetPublicVars( pCurrResource->m_shaderResources ); - - if ( m_varsMtlLayersShaderParams[nCurrLayer] ) - { - m_varsMtlLayersShaderParamsItems[nCurrLayer] = m_propsCtrl->AddVarBlockAt( m_varsMtlLayersShaderParams[nCurrLayer], "Shader Params", m_varsMtlLayersShaderItems[nCurrLayer] ); - } - } - */ - - UpdateShaderParamsUI(mtl); - } - - if (bShaderGenMaskChanged || bShaderChanged || bMtlLayersChanged) - { - m_propsCtrl->InvalidateCtrl(); - } - - m_pMaterialImageListModel->InvalidateMaterial(mtl); -} - -////////////////////////////////////////////////////////////////////////// -CMaterial* CMaterialDialog::GetSelectedMaterial() -{ - CBaseLibraryItem* pItem = m_pMatManager->GetCurrentMaterial(); - return (CMaterial*)pItem; -} - -////////////////////////////////////////////////////////////////////////// -void CMaterialDialog::OnAssignMaterialToSelection() -{ - CUndo undo("Assign Material To Selection"); - GetIEditor()->GetMaterialManager()->Command_AssignToSelection(); - UpdateActions(); -} - -////////////////////////////////////////////////////////////////////////// -void CMaterialDialog::OnSelectAssignedObjects() -{ - CUndo undo("Select Objects With Current Material"); - GetIEditor()->GetMaterialManager()->Command_SelectAssignedObjects(); - UpdateActions(); -} - -////////////////////////////////////////////////////////////////////////// -void CMaterialDialog::OnResetMaterialOnSelection() -{ - GetIEditor()->GetMaterialManager()->Command_ResetSelection(); - UpdateActions(); -} - -////////////////////////////////////////////////////////////////////////// -void CMaterialDialog::OnGetMaterialFromSelection() -{ - GetIEditor()->GetMaterialManager()->Command_SelectFromObject(); - UpdateActions(); -} - -////////////////////////////////////////////////////////////////////////// -void CMaterialDialog::DeleteItem([[maybe_unused]] CBaseLibraryItem* pItem) -{ - m_wndMtlBrowser->DeleteItem(); - UpdateActions(); -} - -////////////////////////////////////////////////////////////////////////// - -void CMaterialDialog::UpdateActions() -{ - if (isHidden()) - { - return; - } - - CMaterial* mtl = GetSelectedMaterial(); - if (mtl && mtl->CanModify(false)) - { - m_saveAction->setEnabled(true); - } - else - { - m_saveAction->setEnabled(false); - } - - if (GetIEditor()->GetEditTool() && GetIEditor()->GetEditTool()->GetClassDesc() && QString::compare(GetIEditor()->GetEditTool()->GetClassDesc()->ClassName(), "EditTool.PickMaterial") == 0) - { - m_pickAction->setChecked(true); - } - else - { - m_pickAction->setChecked(false); - } - - if (mtl && (!GetIEditor()->GetSelection()->IsEmpty() || GetIEditor()->IsInPreviewMode())) - { - m_assignToSelectionAction->setEnabled(true); - } - else - { - m_assignToSelectionAction->setEnabled(false); - } - - if (!GetIEditor()->GetSelection()->IsEmpty() || GetIEditor()->IsInPreviewMode()) - { - m_resetAction->setEnabled(true); - m_getFromSelectionAction->setEnabled(true); - } - else - { - m_resetAction->setEnabled(false); - m_getFromSelectionAction->setEnabled(false); - } -} - -////////////////////////////////////////////////////////////////////////// -void CMaterialDialog::OnPickMtl() -{ - if (GetIEditor()->GetEditTool() && QString::compare(GetIEditor()->GetEditTool()->GetClassDesc()->ClassName(), "EditTool.PickMaterial") == 0) - { - GetIEditor()->SetEditTool(NULL); - } - else - { - GetIEditor()->SetEditTool("EditTool.PickMaterial"); - } - UpdateActions(); -} - -////////////////////////////////////////////////////////////////////////// -void CMaterialDialog::OnCopy() -{ - m_wndMtlBrowser->OnCopy(); -} - -////////////////////////////////////////////////////////////////////////// -void CMaterialDialog::OnPaste() -{ - m_wndMtlBrowser->OnPaste(); -} - -////////////////////////////////////////////////////////////////////////// -void CMaterialDialog::OnMaterialPreview() -{ - if (!m_pPreviewDlg) - { - m_pPreviewDlg = new CMatEditPreviewDlg(this); - m_pPreviewDlg->show(); - } -} - -////////////////////////////////////////////////////////////////////////// -bool CMaterialDialog::SetItemName(CBaseLibraryItem* item, const QString& groupName, const QString& itemName) -{ - assert(item); - // Make prototype name. - QString fullName = groupName + "/" + itemName; - IDataBaseItem* pOtherItem = m_pMatManager->FindItemByName(fullName); - if (pOtherItem && pOtherItem != item) - { - // Ensure uniqness of name. - Warning("Duplicate Item Name %s", fullName.toUtf8().data()); - return false; - } - else - { - item->SetName(fullName); - } - return true; -} - - -////////////////////////////////////////////////////////////////////////// -void CMaterialDialog::OnBrowserSelectItem(IDataBaseItem* pItem, bool bForce) -{ - SelectItem((CBaseLibraryItem*)pItem, bForce); - UpdateActions(); -} - -////////////////////////////////////////////////////////////////////////// -void CMaterialDialog::UpdatePreview() -{ -}; - -////////////////////////////////////////////////////////////////////////// -void CMaterialDialog::OnChangedBrowserListType(int sel) -{ - m_wndMtlBrowser->ShowOnlyLevelMaterials(sel == 1); - m_pMatManager->SetCurrentMaterial(0); - UpdateActions(); -} - -////////////////////////////////////////////////////////////////////////// -void CMaterialDialog::OnUndo(IVariable* pVar) -{ - if (!m_pMatManager->GetCurrentMaterial()) - { - return; - } - - QString undoName; - if (pVar) - { - undoName = tr("%1 modified").arg(pVar->GetName()); - } - else - { - undoName = tr("Material parameter was modified"); - } - - if (!CUndo::IsRecording()) - { - if (!CUndo::IsSuspended()) - { - CUndo undo(undoName.toUtf8().data()); - m_pMatManager->GetCurrentMaterial()->RecordUndo(undoName.toUtf8().data(), true); - } - } - UpdateActions(); -} - -////////////////////////////////////////////////////////////////////////// -void CMaterialDialog::OnDataBaseItemEvent(IDataBaseItem* pItem, EDataBaseItemEvent event) -{ - switch (event) - { - case EDB_ITEM_EVENT_UPDATE_PROPERTIES: - if (pItem && pItem == m_pMatManager->GetCurrentMaterial()) - { - SelectItem(m_pMatManager->GetCurrentMaterial(), true); - } - break; - } -} - -// If an object is selected or de-selected, update the available actions in the Material Editor toolbar -void CMaterialDialog::OnEditorNotifyEvent(EEditorNotifyEvent event) -{ - switch (event) - { - case eNotify_OnSelectionChange: - UpdateActions(); - break; - case eNotify_OnCloseScene: - case eNotify_OnEndNewScene: - case eNotify_OnEndSceneOpen: - m_filterTypeSelection->setCurrentIndex(0); - break; - } -} - -void CMaterialDialog::OnResetMaterialViewport() -{ - m_pMaterialImageListCtrl->LoadModel(); -} - -#include diff --git a/Code/Sandbox/Editor/Material/MaterialDialog.h b/Code/Sandbox/Editor/Material/MaterialDialog.h deleted file mode 100644 index 48e68e2322..0000000000 --- a/Code/Sandbox/Editor/Material/MaterialDialog.h +++ /dev/null @@ -1,176 +0,0 @@ -/* -* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or -* its licensors. -* -* For complete copyright and license terms please see the LICENSE at the root of this -* distribution (the "License"). All use of this software is governed by the License, -* or, if provided, by the license below or the license accompanying this file. Do not -* remove or modify any license notices. This file is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* -*/ -// Original file Copyright Crytek GMBH or its affiliates, used under license. - -#pragma once - -#if !defined(Q_MOC_RUN) -#include "MaterialBrowser.h" - -#include -#include -#include -#endif - -static const char* MATERIAL_EDITOR_NAME = "Material Editor"; -static const char* MATERIAL_EDITOR_VER = "1.00"; - - -class QComboBox; -class QLabel; - -class CMaterial; -class CMaterialManager; -class CMatEditPreviewDlg; -class CMaterialSender; -class CMaterialImageListCtrl; -class QMaterialImageListModel; -class TwoColumnPropertyControl; - -/** Dialog which hosts entity prototype library. -*/ - - -struct SMaterialExcludedVars -{ - CMaterial* pMaterial; - CVarBlock vars; - - SMaterialExcludedVars() - : pMaterial(nullptr) - { - } -}; - - -class CMaterialDialog - : public QMainWindow - , public IMaterialBrowserListener - , public IDataBaseManagerListener - , public IEditorNotifyListener -{ - Q_OBJECT -public: - CMaterialDialog(QWidget* parent = 0); - ~CMaterialDialog(); - - static void RegisterViewClass(); - static const GUID& GetClassID(); - -public slots: - void OnAssignMaterialToSelection(); - void OnResetMaterialOnSelection(); - void OnGetMaterialFromSelection(); - -protected: - BOOL OnInitDialog(); - void closeEvent(QCloseEvent *ev) override; - -protected slots: - void OnAddItem(); - void OnDeleteItem(); - void OnSaveItem(); - void OnPickMtl(); - void OnCopy(); - void OnPaste(); - void OnMaterialPreview(); - void OnSelectAssignedObjects(); - void OnChangedBrowserListType(int); - void OnResetMaterialViewport(); - - void UpdateActions(); - -protected: - ////////////////////////////////////////////////////////////////////////// - // Some functions can be overriden to modify standart functionality. - ////////////////////////////////////////////////////////////////////////// - virtual void InitToolbar(UINT nToolbarResID); - - virtual void SelectItem(CBaseLibraryItem* item, bool bForceReload = false); - virtual void DeleteItem(CBaseLibraryItem* pItem); - virtual bool SetItemName(CBaseLibraryItem* item, const QString& groupName, const QString& itemName); - virtual void ReloadItems(); - - ////////////////////////////////////////////////////////////////////////// - // IMaterialBrowserListener implementation. - ////////////////////////////////////////////////////////////////////////// - virtual void OnBrowserSelectItem(IDataBaseItem* pItem, bool bForce); - ////////////////////////////////////////////////////////////////////////// - - ////////////////////////////////////////////////////////////////////////// - // IDataBaseManagerListener implementation. - ////////////////////////////////////////////////////////////////////////// - virtual void OnDataBaseItemEvent(IDataBaseItem* pItem, EDataBaseItemEvent event); - ////////////////////////////////////////////////////////////////////////// - - // IEditorNotifyListener implementation. - virtual void OnEditorNotifyEvent(EEditorNotifyEvent event); - - ////////////////////////////////////////////////////////////////////////// - CMaterial* GetSelectedMaterial(); - void OnUpdateProperties(IVariable* var); - void OnUndo(IVariable* pVar); - - void UpdateShaderParamsUI(CMaterial* pMtl); - - void UpdatePreview(); - - //void SetTextureVars( CVariableArray *texVar,CMaterial *mtl,int id,const CString &name ); - void SetMaterialVars(CMaterial* mtl); - - MaterialBrowserWidget* m_wndMtlBrowser; - - QStatusBar* m_statusBar; - //CXTCaption m_wndCaption; - - TwoColumnPropertyControl* m_propsCtrl; - bool m_bForceReloadPropsCtrl; - - QLabel* m_placeHolderLabel; - - CBaseLibraryItem* m_pPrevSelectedItem; - - // Material manager. - CMaterialManager* m_pMatManager; - - CVarBlockPtr m_vars; - CVarBlockPtr m_publicVars; - - // collection of excluded vars from m_publicVars for remembering values - // when updating shader params - SMaterialExcludedVars m_excludedPublicVars; - - CVarBlockPtr m_shaderGenParamsVars; - CVarBlockPtr m_textureSlots; - - class CMaterialUI* m_pMaterialUI; - - QPointer m_pPreviewDlg; - - QScopedPointer m_pMaterialImageListCtrl; - QScopedPointer m_pMaterialImageListModel; - - QToolBar* m_toolbar; - QComboBox* m_filterTypeSelection; - QAction* m_addAction; - QAction* m_assignToSelectionAction; - QAction* m_copyAction; - QAction* m_getFromSelectionAction; - QAction* m_pasteAction; - QAction* m_pickAction; - QAction* m_previewAction; - QAction* m_removeAction; - QAction* m_resetAction; - QAction* m_saveAction; - QAction* m_resetViewporAction; -}; - diff --git a/Code/Sandbox/Editor/Material/MaterialDialog.qrc b/Code/Sandbox/Editor/Material/MaterialDialog.qrc index 43bfbd6ea0..c99e5b052a 100644 --- a/Code/Sandbox/Editor/Material/MaterialDialog.qrc +++ b/Code/Sandbox/Editor/Material/MaterialDialog.qrc @@ -1,39 +1,4 @@ - - images/materialdialog_add_disabled.png - images/materialdialog_copy_disabled.png - images/materialdialog_paste_disabled.png - images/materialdialog_preview_disabled.png - images/materialdialog_remove_disabled.png - images/materialdialog_save_disabled.png - images/materialdialog_assignselection_disabled.png - images/materialdialog_getfromselection_disabled.png - images/materialdialog_pick_disabled.png - images/materialdialog_reset_disabled.png - images/materialdialog_assignselection_active.png - images/materialdialog_assignselection_normal.png - images/materialdialog_add_active.png - images/materialdialog_add_normal.png - images/materialdialog_copy_active.png - images/materialdialog_copy_normal.png - images/materialdialog_getfromselection_active.png - images/materialdialog_getfromselection_normal.png - images/materialdialog_paste_active.png - images/materialdialog_paste_normal.png - images/materialdialog_pick_active.png - images/materialdialog_pick_normal.png - images/materialdialog_preview_active.png - images/materialdialog_preview_normal.png - images/materialdialog_remove_active.png - images/materialdialog_remove_normal.png - images/materialdialog_reset_active.png - images/materialdialog_reset_normal.png - images/materialdialog_save_active.png - images/materialdialog_save_normal.png - images/materialdialog_reset_viewport_active.png - images/materialdialog_reset_viewport_disabled.png - images/materialdialog_reset_viewport_normal.png - images/material_browser_00.png images/material_browser_01.png diff --git a/Code/Sandbox/Editor/Material/images/materialdialog_add.png b/Code/Sandbox/Editor/Material/images/materialdialog_add.png deleted file mode 100644 index aa8d657f23..0000000000 --- a/Code/Sandbox/Editor/Material/images/materialdialog_add.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:703f6875258486629bc1db68ce80fe1653f0d2876cd1252d03f72f6eae04dd84 -size 392 diff --git a/Code/Sandbox/Editor/Material/images/materialdialog_add_active.png b/Code/Sandbox/Editor/Material/images/materialdialog_add_active.png deleted file mode 100644 index 467365d1ad..0000000000 --- a/Code/Sandbox/Editor/Material/images/materialdialog_add_active.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:3f3c05f8425956e9c1e380fde9a65df8f0d341868900a3589d9f629f34a0ddf6 -size 251 diff --git a/Code/Sandbox/Editor/Material/images/materialdialog_add_disabled.png b/Code/Sandbox/Editor/Material/images/materialdialog_add_disabled.png deleted file mode 100644 index 399e45469e..0000000000 --- a/Code/Sandbox/Editor/Material/images/materialdialog_add_disabled.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:25554e93a4f0d9b904a2a3628c315ee55c0ad8831bb5891a9d7e27e5cb9a5416 -size 261 diff --git a/Code/Sandbox/Editor/Material/images/materialdialog_add_normal.png b/Code/Sandbox/Editor/Material/images/materialdialog_add_normal.png deleted file mode 100644 index 1eb8d63ef5..0000000000 --- a/Code/Sandbox/Editor/Material/images/materialdialog_add_normal.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:b2ee886c6e487a6490361609fdd44c64438e40c7e5a4c40fda866ec399ec4727 -size 256 diff --git a/Code/Sandbox/Editor/Material/images/materialdialog_assignselection.png b/Code/Sandbox/Editor/Material/images/materialdialog_assignselection.png deleted file mode 100644 index 72fdb0537a..0000000000 --- a/Code/Sandbox/Editor/Material/images/materialdialog_assignselection.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:943ff19774cbe8d47c1e8001a48e6d137fdac2c0af63c9092911c37be0d6d6a8 -size 471 diff --git a/Code/Sandbox/Editor/Material/images/materialdialog_assignselection_active.png b/Code/Sandbox/Editor/Material/images/materialdialog_assignselection_active.png deleted file mode 100644 index 605107f750..0000000000 --- a/Code/Sandbox/Editor/Material/images/materialdialog_assignselection_active.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:400d669d7a658968549f6ee776ee415b871b207c444d8797a404b76d536131b1 -size 325 diff --git a/Code/Sandbox/Editor/Material/images/materialdialog_assignselection_disabled.png b/Code/Sandbox/Editor/Material/images/materialdialog_assignselection_disabled.png deleted file mode 100644 index 3505f577a4..0000000000 --- a/Code/Sandbox/Editor/Material/images/materialdialog_assignselection_disabled.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:02bdc8aad92bb75b118c4a703a3e5b1369376620b3836a125faedc7f6b42b49b -size 330 diff --git a/Code/Sandbox/Editor/Material/images/materialdialog_assignselection_normal.png b/Code/Sandbox/Editor/Material/images/materialdialog_assignselection_normal.png deleted file mode 100644 index 0e9c984e1d..0000000000 --- a/Code/Sandbox/Editor/Material/images/materialdialog_assignselection_normal.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:38097d3041defeec0179390a73bb463e54e7f4c1f0b1a20e77ab3f69ea9cf13c -size 332 diff --git a/Code/Sandbox/Editor/Material/images/materialdialog_copy.png b/Code/Sandbox/Editor/Material/images/materialdialog_copy.png deleted file mode 100644 index 08fc0c6987..0000000000 --- a/Code/Sandbox/Editor/Material/images/materialdialog_copy.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:e1d9fe8e97655bf776b20e242d66900980721ba2f3ee93c02cd4062a8b872eed -size 433 diff --git a/Code/Sandbox/Editor/Material/images/materialdialog_copy_active.png b/Code/Sandbox/Editor/Material/images/materialdialog_copy_active.png deleted file mode 100644 index 67a010be86..0000000000 --- a/Code/Sandbox/Editor/Material/images/materialdialog_copy_active.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:468b68c44d8ef183b292c1bc6ca4dc583357f693db9ea2cd198fb2af22537be1 -size 249 diff --git a/Code/Sandbox/Editor/Material/images/materialdialog_copy_disabled.png b/Code/Sandbox/Editor/Material/images/materialdialog_copy_disabled.png deleted file mode 100644 index d585dbae6e..0000000000 --- a/Code/Sandbox/Editor/Material/images/materialdialog_copy_disabled.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:b27a1346f2edebe34ee06d7892a467bfc67952d0f8e4458e09a74a6dbf62fe98 -size 336 diff --git a/Code/Sandbox/Editor/Material/images/materialdialog_copy_normal.png b/Code/Sandbox/Editor/Material/images/materialdialog_copy_normal.png deleted file mode 100644 index 4b42f5c9a2..0000000000 --- a/Code/Sandbox/Editor/Material/images/materialdialog_copy_normal.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:c3f40524a96689b8c8549bc662415df654494baeeda6eed47e66b455ac902eeb -size 254 diff --git a/Code/Sandbox/Editor/Material/images/materialdialog_getfromselection.png b/Code/Sandbox/Editor/Material/images/materialdialog_getfromselection.png deleted file mode 100644 index 76c343a718..0000000000 --- a/Code/Sandbox/Editor/Material/images/materialdialog_getfromselection.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:cebe97de0d879d239fcd61595fd28b73760aa6452dcf4dabc54bfe034e2e33c1 -size 476 diff --git a/Code/Sandbox/Editor/Material/images/materialdialog_getfromselection_active.png b/Code/Sandbox/Editor/Material/images/materialdialog_getfromselection_active.png deleted file mode 100644 index cc58f4f767..0000000000 --- a/Code/Sandbox/Editor/Material/images/materialdialog_getfromselection_active.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:699ee40aeedfc50b7766e94ef66e645762eb183ddd6ce134b4bdab01c3957ab9 -size 327 diff --git a/Code/Sandbox/Editor/Material/images/materialdialog_getfromselection_disabled.png b/Code/Sandbox/Editor/Material/images/materialdialog_getfromselection_disabled.png deleted file mode 100644 index 6e4a425058..0000000000 --- a/Code/Sandbox/Editor/Material/images/materialdialog_getfromselection_disabled.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:5f1fd8a7cecb22901c6d73f2e6129f3bada0f94cf73d9a8fd2676a972faa5719 -size 348 diff --git a/Code/Sandbox/Editor/Material/images/materialdialog_getfromselection_normal.png b/Code/Sandbox/Editor/Material/images/materialdialog_getfromselection_normal.png deleted file mode 100644 index 1c319c319d..0000000000 --- a/Code/Sandbox/Editor/Material/images/materialdialog_getfromselection_normal.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:d432de9e921d23fbbf3c1b805f644b9554aa206011a87c063d167c30c7c4579e -size 335 diff --git a/Code/Sandbox/Editor/Material/images/materialdialog_paste.png b/Code/Sandbox/Editor/Material/images/materialdialog_paste.png deleted file mode 100644 index 95740d44d8..0000000000 --- a/Code/Sandbox/Editor/Material/images/materialdialog_paste.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:c006e70efd8bdb1dd5aac867db9d97de587e8d518ba0693d19c319e34a74c7d0 -size 501 diff --git a/Code/Sandbox/Editor/Material/images/materialdialog_paste_active.png b/Code/Sandbox/Editor/Material/images/materialdialog_paste_active.png deleted file mode 100644 index aabb4f2520..0000000000 --- a/Code/Sandbox/Editor/Material/images/materialdialog_paste_active.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:00c291361664d357502f5267fccd0a6fff0c3f2e906c0402d57ad9fa5ca7f023 -size 255 diff --git a/Code/Sandbox/Editor/Material/images/materialdialog_paste_disabled.png b/Code/Sandbox/Editor/Material/images/materialdialog_paste_disabled.png deleted file mode 100644 index 9abc336f71..0000000000 --- a/Code/Sandbox/Editor/Material/images/materialdialog_paste_disabled.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:d68fc8604a23eb3bcc0cac9bb6e83dd4dc4cdab70b0bdaec3c456559727c6b5b -size 354 diff --git a/Code/Sandbox/Editor/Material/images/materialdialog_paste_normal.png b/Code/Sandbox/Editor/Material/images/materialdialog_paste_normal.png deleted file mode 100644 index 158bf9d690..0000000000 --- a/Code/Sandbox/Editor/Material/images/materialdialog_paste_normal.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:4055c7f029d7711e5c32f3f74901bf1dcc1540fd2c0f3f30dc74743d7f2cc042 -size 355 diff --git a/Code/Sandbox/Editor/Material/images/materialdialog_pick.png b/Code/Sandbox/Editor/Material/images/materialdialog_pick.png deleted file mode 100644 index e08b45ac66..0000000000 --- a/Code/Sandbox/Editor/Material/images/materialdialog_pick.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:99e2c0378137bef94eb6f281e0168852540bf1ca823b9bcd4365ef2849db9956 -size 420 diff --git a/Code/Sandbox/Editor/Material/images/materialdialog_pick_active.png b/Code/Sandbox/Editor/Material/images/materialdialog_pick_active.png deleted file mode 100644 index 392b4ab63e..0000000000 --- a/Code/Sandbox/Editor/Material/images/materialdialog_pick_active.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:34075016c93f1914fe4d12ead7c5ee322a18466f08a476eff7c127e4e1429224 -size 290 diff --git a/Code/Sandbox/Editor/Material/images/materialdialog_pick_disabled.png b/Code/Sandbox/Editor/Material/images/materialdialog_pick_disabled.png deleted file mode 100644 index 865a91152d..0000000000 --- a/Code/Sandbox/Editor/Material/images/materialdialog_pick_disabled.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:dc289621f8a9d3e714cd985651d7d6f20495fb7be46e1f60c283d8920c730d0b -size 307 diff --git a/Code/Sandbox/Editor/Material/images/materialdialog_pick_normal.png b/Code/Sandbox/Editor/Material/images/materialdialog_pick_normal.png deleted file mode 100644 index 5c1086b22d..0000000000 --- a/Code/Sandbox/Editor/Material/images/materialdialog_pick_normal.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:7e9d5c878acf9fee4252cb854f192690d3f50d46dc4e5f5b1b5812b79fc2cdf7 -size 296 diff --git a/Code/Sandbox/Editor/Material/images/materialdialog_preview.png b/Code/Sandbox/Editor/Material/images/materialdialog_preview.png deleted file mode 100644 index c7d79780ee..0000000000 --- a/Code/Sandbox/Editor/Material/images/materialdialog_preview.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:e2e912c40f07ca3d2a9b2aa1c5caf3acc181436b6a1b560fc021450701331b4c -size 403 diff --git a/Code/Sandbox/Editor/Material/images/materialdialog_preview_active.png b/Code/Sandbox/Editor/Material/images/materialdialog_preview_active.png deleted file mode 100644 index d2e1d8230d..0000000000 --- a/Code/Sandbox/Editor/Material/images/materialdialog_preview_active.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:00663e473803ba6c2798c494676b0a65fd62d7484f6d7b51d9fc8955ad586477 -size 273 diff --git a/Code/Sandbox/Editor/Material/images/materialdialog_preview_disabled.png b/Code/Sandbox/Editor/Material/images/materialdialog_preview_disabled.png deleted file mode 100644 index 56716582bb..0000000000 --- a/Code/Sandbox/Editor/Material/images/materialdialog_preview_disabled.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:34b7d5520cfc8f00ff580558db4f0ec4297458d310321471204daa8678db5fc1 -size 298 diff --git a/Code/Sandbox/Editor/Material/images/materialdialog_preview_normal.png b/Code/Sandbox/Editor/Material/images/materialdialog_preview_normal.png deleted file mode 100644 index f54cd90c2a..0000000000 --- a/Code/Sandbox/Editor/Material/images/materialdialog_preview_normal.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:7bca1a8811739949aa2e87486f8697dfae5bc5238894dd1b95ae80aa6f80d517 -size 279 diff --git a/Code/Sandbox/Editor/Material/images/materialdialog_remove.png b/Code/Sandbox/Editor/Material/images/materialdialog_remove.png deleted file mode 100644 index d530169b78..0000000000 --- a/Code/Sandbox/Editor/Material/images/materialdialog_remove.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:db86d857b651a2fec80418f8b251447bb3fcf4c0cf64bdee12c3b656adbde29a -size 422 diff --git a/Code/Sandbox/Editor/Material/images/materialdialog_remove_active.png b/Code/Sandbox/Editor/Material/images/materialdialog_remove_active.png deleted file mode 100644 index 78ec0e0806..0000000000 --- a/Code/Sandbox/Editor/Material/images/materialdialog_remove_active.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:fef72444f077879d5c0186c9583f67aa45aafc23214d9e7de90a7c595609270f -size 258 diff --git a/Code/Sandbox/Editor/Material/images/materialdialog_remove_disabled.png b/Code/Sandbox/Editor/Material/images/materialdialog_remove_disabled.png deleted file mode 100644 index a69ef52e75..0000000000 --- a/Code/Sandbox/Editor/Material/images/materialdialog_remove_disabled.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:d2117fda3ed6a28032ae8f03ed7f9a7a0960f4691e49903c63b2150027dfe1ea -size 302 diff --git a/Code/Sandbox/Editor/Material/images/materialdialog_remove_normal.png b/Code/Sandbox/Editor/Material/images/materialdialog_remove_normal.png deleted file mode 100644 index b84a504285..0000000000 --- a/Code/Sandbox/Editor/Material/images/materialdialog_remove_normal.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:06b384ecc11ed2547a9bf466f585889d647c29a4883840070e444a382e80c41c -size 266 diff --git a/Code/Sandbox/Editor/Material/images/materialdialog_reset.png b/Code/Sandbox/Editor/Material/images/materialdialog_reset.png deleted file mode 100644 index e2eedad0bf..0000000000 --- a/Code/Sandbox/Editor/Material/images/materialdialog_reset.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:4b9ee01e7fe2f19b0e736efe09c2b81d3243e369375b4f26346e6abd499e54a6 -size 476 diff --git a/Code/Sandbox/Editor/Material/images/materialdialog_reset_active.png b/Code/Sandbox/Editor/Material/images/materialdialog_reset_active.png deleted file mode 100644 index e86ed4dcb8..0000000000 --- a/Code/Sandbox/Editor/Material/images/materialdialog_reset_active.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:935a041332be1fe11ed01c09a3cd367fb9ede7e7eb04909614943f80e741d35f -size 334 diff --git a/Code/Sandbox/Editor/Material/images/materialdialog_reset_disabled.png b/Code/Sandbox/Editor/Material/images/materialdialog_reset_disabled.png deleted file mode 100644 index 2e4e403a30..0000000000 --- a/Code/Sandbox/Editor/Material/images/materialdialog_reset_disabled.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:2b343233ab25a73fcdb4fff5509011497814fc4cb591065bdb3043a0f1092577 -size 342 diff --git a/Code/Sandbox/Editor/Material/images/materialdialog_reset_normal.png b/Code/Sandbox/Editor/Material/images/materialdialog_reset_normal.png deleted file mode 100644 index 8d8b8a1bd9..0000000000 --- a/Code/Sandbox/Editor/Material/images/materialdialog_reset_normal.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:1cc0183d7f57f15c4efeffb32795921f2f4e9c7965955fd0a392f826d5f6b6c8 -size 337 diff --git a/Code/Sandbox/Editor/Material/images/materialdialog_reset_viewport_active.png b/Code/Sandbox/Editor/Material/images/materialdialog_reset_viewport_active.png deleted file mode 100644 index 41590634f5..0000000000 --- a/Code/Sandbox/Editor/Material/images/materialdialog_reset_viewport_active.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:9a8467c1dcc343f637e0f7f5071a20b8881a43d567fb32fd96f5383f7b69bbb6 -size 430 diff --git a/Code/Sandbox/Editor/Material/images/materialdialog_reset_viewport_disabled.png b/Code/Sandbox/Editor/Material/images/materialdialog_reset_viewport_disabled.png deleted file mode 100644 index c6518416c0..0000000000 --- a/Code/Sandbox/Editor/Material/images/materialdialog_reset_viewport_disabled.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:0fd5ec79fc2c679f99ac5eb63d725f2cc815b09286bd0f3b5d2921eeb2e1e8cc -size 406 diff --git a/Code/Sandbox/Editor/Material/images/materialdialog_reset_viewport_normal.png b/Code/Sandbox/Editor/Material/images/materialdialog_reset_viewport_normal.png deleted file mode 100644 index eef1d5236f..0000000000 --- a/Code/Sandbox/Editor/Material/images/materialdialog_reset_viewport_normal.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:3e19713b6586581d2336e833d8ecbd78b4b8f15b1c49a29d80acbf05e8aae3df -size 418 diff --git a/Code/Sandbox/Editor/Material/images/materialdialog_save.png b/Code/Sandbox/Editor/Material/images/materialdialog_save.png deleted file mode 100644 index 4408a8ba1d..0000000000 --- a/Code/Sandbox/Editor/Material/images/materialdialog_save.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:4de0f4a102e5c4990d5d23e22b5cdd16532192f3a125758b608cd8c731278898 -size 355 diff --git a/Code/Sandbox/Editor/Material/images/materialdialog_save_active.png b/Code/Sandbox/Editor/Material/images/materialdialog_save_active.png deleted file mode 100644 index b0961d34a9..0000000000 --- a/Code/Sandbox/Editor/Material/images/materialdialog_save_active.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:d0b6f7c69112d124eac1123ffa840268c16148fef9ded3a67f84d3ad8d73eb96 -size 212 diff --git a/Code/Sandbox/Editor/Material/images/materialdialog_save_disabled.png b/Code/Sandbox/Editor/Material/images/materialdialog_save_disabled.png deleted file mode 100644 index cc694f079f..0000000000 --- a/Code/Sandbox/Editor/Material/images/materialdialog_save_disabled.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:0b795fb88a6f301d7ecc9ce75141bdcf9e6dca25043730661aa4d1f09b055d6f -size 222 diff --git a/Code/Sandbox/Editor/Material/images/materialdialog_save_normal.png b/Code/Sandbox/Editor/Material/images/materialdialog_save_normal.png deleted file mode 100644 index 6293be8be5..0000000000 --- a/Code/Sandbox/Editor/Material/images/materialdialog_save_normal.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:88fbce753cdd9381a814e3b2ec5d16df7cc26f2a37ad30b7010be71ae9183510 -size 214 diff --git a/Code/Sandbox/Editor/editor_lib_files.cmake b/Code/Sandbox/Editor/editor_lib_files.cmake index 9084a566ae..c91d6ce428 100644 --- a/Code/Sandbox/Editor/editor_lib_files.cmake +++ b/Code/Sandbox/Editor/editor_lib_files.cmake @@ -316,8 +316,6 @@ set(FILES Material/MaterialHelpers.cpp Material/MaterialHelpers.h Material/MaterialDialog.qrc - Material/MaterialDialog.cpp - Material/MaterialDialog.h Material/MaterialPreviewModelView.cpp Material/MaterialPreviewModelView.h Material/PreviewModelView.cpp @@ -632,8 +630,6 @@ set(FILES LensFlareEditor/LensFlareView.h LogFileImpl.cpp LogFileImpl.h - MatEditMainDlg.cpp - MatEditMainDlg.h MatEditPreviewDlg.cpp MatEditPreviewDlg.h Material/MaterialBrowser.cpp From 65b2d9de1bcee2cc4466e25738c285bb2f233c7d Mon Sep 17 00:00:00 2001 From: srikappa Date: Mon, 19 Apr 2021 13:43:54 -0700 Subject: [PATCH 15/68] Added couple of helper functions --- .../Prefab/PrefabPublicHandler.cpp | 120 +++++++++--------- .../Prefab/PrefabPublicHandler.h | 6 +- .../Prefab/PrefabUndoHelpers.cpp | 18 ++- .../Prefab/PrefabUndoHelpers.h | 7 +- 4 files changed, 87 insertions(+), 64 deletions(-) diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabPublicHandler.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabPublicHandler.cpp index 2fb186bcf7..adadc9d0ac 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabPublicHandler.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabPublicHandler.cpp @@ -63,53 +63,28 @@ namespace AzToolsFramework PrefabOperationResult PrefabPublicHandler::CreatePrefab(const AZStd::vector& entityIds, AZ::IO::PathView filePath) { - // Retrieve entityList from entityIds - EntityList inputEntityList; - EntityIdListToEntityList(entityIds, inputEntityList); - - // Find common root and top level entities - bool entitiesHaveCommonRoot = false; + EntityList inputEntityList, topLevelEntities; AZ::EntityId commonRootEntityId; - EntityList topLevelEntities; - - AzToolsFramework::ToolsApplicationRequests::Bus::BroadcastResult( - entitiesHaveCommonRoot, &AzToolsFramework::ToolsApplicationRequests::FindCommonRootInactive, inputEntityList, - commonRootEntityId, &topLevelEntities); - - // Bail if entities don't share a common root - if (!entitiesHaveCommonRoot) + InstanceOptionalReference commonRootEntityOwningInstance; + PrefabOperationResult findCommonRootOutcome = FindCommonRootOwningInstance( + entityIds, inputEntityList, topLevelEntities, commonRootEntityId, commonRootEntityOwningInstance); + if (!findCommonRootOutcome.IsSuccess()) { - return AZ::Failure( - AZStd::string("Could not create a new prefab out of the entities provided - entities do not share a common root.")); + return findCommonRootOutcome; } - AZ::Entity* commonRootEntity = nullptr; - if (commonRootEntityId.IsValid()) - { - commonRootEntity = GetEntityById(commonRootEntityId); - } - - // Retrieve the owning instance of the common root entity, which will be our new instance's parent instance. - InstanceOptionalReference commonRootEntityOwningInstance = GetOwnerInstanceByEntityId(commonRootEntityId); - AZ_Assert( - commonRootEntityOwningInstance.has_value(), - "Failed to create prefab : " - "Couldn't get a valid owning instance for the common root entity of the enities provided"); - - AZStd::vector entities; - AZStd::vector> instances; - - InstanceOptionalReference instance; + InstanceOptionalReference instanceToCreate; { // Initialize Undo Batch object ScopedUndoBatch undoBatch("Create Prefab"); - TemplateId commonRootOwningTemplateId = commonRootEntityOwningInstance->get().GetTemplateId(); - PrefabDom commonRootInstanceDomBeforeCreate; m_instanceToTemplateInterface->GenerateDomForInstance( commonRootInstanceDomBeforeCreate, commonRootEntityOwningInstance->get()); + AZStd::vector entities; + AZStd::vector> instances; + // Retrieve all entities affected and identify Instances if (!RetrieveAndSortPrefabEntitiesAndInstances(inputEntityList, commonRootEntityOwningInstance->get(), entities, instances)) { @@ -117,6 +92,14 @@ namespace AzToolsFramework AZStd::string("Could not create a new prefab out of the entities provided - entities do not share a common root.")); } + // When you move instances from another template, you have to remove the links and propagate changes to target template. + for (auto& nestedInstance : instances) + { + PrefabUndoHelpers::RemoveLink( + nestedInstance->GetTemplateId(), commonRootEntityOwningInstance->get().GetTemplateId(), + nestedInstance->GetInstanceAlias(), nestedInstance->GetLinkId(), undoBatch.GetUndoBatch()); + } + auto prefabEditorEntityOwnershipInterface = AZ::Interface::Get(); if (!prefabEditorEntityOwnershipInterface) { @@ -124,35 +107,23 @@ namespace AzToolsFramework "(PrefabEditorEntityOwnershipInterface unavailable).")); } - // When you move instances from another template, you have to remove the links and propagate changes to target template. - auto linkRemoveUndo = aznew PrefabUndoInstanceLink("Undo Link Remove Node"); - for (auto& nestedInstance : instances) - { - PrefabDom emptyLinkDom; - linkRemoveUndo->Capture( - commonRootOwningTemplateId, nestedInstance->GetTemplateId(), nestedInstance->GetInstanceAlias(), emptyLinkDom, - nestedInstance->GetLinkId()); - linkRemoveUndo->SetParent(undoBatch.GetUndoBatch()); - } - // Create the Prefab - instance = prefabEditorEntityOwnershipInterface->CreatePrefab( + instanceToCreate = prefabEditorEntityOwnershipInterface->CreatePrefab( entities, AZStd::move(instances), filePath, commonRootEntityOwningInstance); - if (!instance) + if (!instanceToCreate) { return AZ::Failure(AZStd::string("Could not create a new prefab out of the entities provided - internal error " "(A null instance is returned).")); } PrefabUndoHelpers::UpdatePrefabInstance( - commonRootEntityOwningInstance->get(), "Undo detaching entity", commonRootInstanceDomBeforeCreate, undoBatch.GetUndoBatch()); + commonRootEntityOwningInstance->get(), "Update prefab instance", commonRootInstanceDomBeforeCreate, undoBatch.GetUndoBatch()); - linkRemoveUndo->Redo(); - - AZ::EntityId containerEntityId = instance->get().GetContainerEntityId(); - - AddLink(topLevelEntities, instance->get(), commonRootEntityOwningInstance->get(), undoBatch.GetUndoBatch(), commonRootEntityId); + CreateLink( + topLevelEntities, instanceToCreate->get(), commonRootEntityOwningInstance->get(), undoBatch.GetUndoBatch(), + commonRootEntityId); + AZ::EntityId containerEntityId = instanceToCreate->get().GetContainerEntityId(); // Change top level entities to be parented to the container entity // Mark them as dirty so this change is correctly applied to the template @@ -172,12 +143,45 @@ namespace AzToolsFramework } // Save Template to file - m_prefabLoaderInterface->SaveTemplate(instance->get().GetTemplateId()); + m_prefabLoaderInterface->SaveTemplate(instanceToCreate->get().GetTemplateId()); return AZ::Success(); } - void PrefabPublicHandler::AddLink( + PrefabOperationResult PrefabPublicHandler::FindCommonRootOwningInstance( + const AZStd::vector& entityIds, EntityList& inputEntityList, EntityList& topLevelEntities, + AZ::EntityId& commonRootEntityId, InstanceOptionalReference& commonRootEntityOwningInstance) + { + // Retrieve entityList from entityIds + EntityIdListToEntityList(entityIds, inputEntityList); + + // Find common root and top level entities + bool entitiesHaveCommonRoot = false; + + AzToolsFramework::ToolsApplicationRequests::Bus::BroadcastResult( + entitiesHaveCommonRoot, &AzToolsFramework::ToolsApplicationRequests::FindCommonRootInactive, inputEntityList, + commonRootEntityId, &topLevelEntities); + + // Bail if entities don't share a common root + if (!entitiesHaveCommonRoot) + { + return AZ::Failure(AZStd::string("Failed to create a prefab: Provided entities do not share a common root.")); + } + + // Retrieve the owning instance of the common root entity, which will be our new instance's parent instance. + commonRootEntityOwningInstance = GetOwnerInstanceByEntityId(commonRootEntityId); + if (!commonRootEntityOwningInstance) + { + AZ_Assert( + false, + "Failed to create prefab : Couldn't get a valid owning instance for the common root entity of the enities provided"); + return AZ::Failure(AZStd::string( + "Failed to create prefab : Couldn't get a valid owning instance for the common root entity of the enities provided")); + } + return AZ::Success(); + } + + void PrefabPublicHandler::CreateLink( const EntityList& topLevelEntities, Instance& instanceToAdd, Instance& parentInstance, UndoSystem::URSequencePoint* undoBatch, AZ::EntityId commonRootEntityId) { @@ -205,8 +209,8 @@ namespace AzToolsFramework m_instanceToTemplateInterface->GeneratePatch(patch, containerEntityDomBefore, containerEntityDomAfter); m_instanceToTemplateInterface->AppendEntityAliasToPatchPaths(patch, containerEntityId); - PrefabUndoHelpers::AddLink( - "Add Link", instanceToAdd.GetTemplateId(), parentInstance.GetTemplateId(), patch, instanceToAdd.GetInstanceAlias(), + PrefabUndoHelpers::CreateLink( + instanceToAdd.GetTemplateId(), parentInstance.GetTemplateId(), patch, instanceToAdd.GetInstanceAlias(), undoBatch); // Update the cache - this prevents these changes from being stored in the regular undo/redo nodes diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabPublicHandler.h b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabPublicHandler.h index 7f3d05e3d3..d05192a3b4 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabPublicHandler.h +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabPublicHandler.h @@ -69,10 +69,14 @@ namespace AzToolsFramework InstanceOptionalReference GetOwnerInstanceByEntityId(AZ::EntityId entityId) const; bool EntitiesBelongToSameInstance(const EntityIdList& entityIds) const; - void AddLink( + void CreateLink( const EntityList& topLevelEntities, Instance& instanceToAdd, Instance& parentInstance, UndoSystem::URSequencePoint* undoBatch, AZ::EntityId commonRootEntityId); + PrefabOperationResult FindCommonRootOwningInstance( + const AZStd::vector& entityIds, EntityList& inputEntityList, EntityList& topLevelEntities, + AZ::EntityId& commonRootEntityId, InstanceOptionalReference& commonRootEntityOwningInstance); + static Instance* GetParentInstance(Instance* instance); static Instance* GetAncestorOfInstanceThatIsChildOfRoot(const Instance* ancestor, Instance* descendant); static void GenerateContainerEntityTransform(const EntityList& topLevelEntities, AZ::Vector3& translation, AZ::Quaternion& rotation); diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabUndoHelpers.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabUndoHelpers.cpp index 1fa9169ae2..c9b6c88a97 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabUndoHelpers.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabUndoHelpers.cpp @@ -33,15 +33,27 @@ namespace AzToolsFramework state->Redo(); } - void AddLink( - AZStd::string_view undoMessage, TemplateId sourceTemplateId, TemplateId targetTemplateId, PrefabDomReference patch, + void CreateLink( + TemplateId sourceTemplateId, TemplateId targetTemplateId, PrefabDomReference patch, const InstanceAlias& instanceAlias, UndoSystem::URSequencePoint* undoBatch) { - auto linkAddUndo = aznew PrefabUndoInstanceLink(undoMessage); + auto linkAddUndo = aznew PrefabUndoInstanceLink("Create Link"); linkAddUndo->Capture(targetTemplateId, sourceTemplateId, instanceAlias, patch, InvalidLinkId); linkAddUndo->SetParent(undoBatch); linkAddUndo->Redo(); } + + void RemoveLink( + TemplateId sourceTemplateId, TemplateId targetTemplateId, const InstanceAlias& instanceAlias, + LinkId linkId, UndoSystem::URSequencePoint* undoBatch) + { + auto linkRemoveUndo = aznew PrefabUndoInstanceLink("Remove Link"); + PrefabDom emptyLinkDom; + linkRemoveUndo->Capture( + targetTemplateId, sourceTemplateId, instanceAlias, emptyLinkDom, linkId); + linkRemoveUndo->SetParent(undoBatch); + linkRemoveUndo->Redo(); + } } } // namespace Prefab } // namespace AzToolsFramework diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabUndoHelpers.h b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabUndoHelpers.h index 279deb953c..5f81ef14a8 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabUndoHelpers.h +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabUndoHelpers.h @@ -21,9 +21,12 @@ namespace AzToolsFramework void UpdatePrefabInstance( const Instance& instance, AZStd::string_view undoMessage, const PrefabDom& instanceDomBeforeUpdate, UndoSystem::URSequencePoint* undoBatch); - void AddLink( - AZStd::string_view undoMessage, TemplateId sourceTemplateId, TemplateId targetTemplateId, PrefabDomReference patch, + void CreateLink( + TemplateId sourceTemplateId, TemplateId targetTemplateId, PrefabDomReference patch, const InstanceAlias& instanceAlias, UndoSystem::URSequencePoint* undoBatch); + void RemoveLink( + TemplateId sourceTemplateId, TemplateId targetTemplateId, const InstanceAlias& instanceAlias, + LinkId linkId, UndoSystem::URSequencePoint* undoBatch); } } // namespace Prefab } // namespace AzToolsFramework From 4232fa4232cbb71c2302e5de387489fa48e45590 Mon Sep 17 00:00:00 2001 From: spham Date: Mon, 19 Apr 2021 14:52:13 -0700 Subject: [PATCH 16/68] - Renamed install-awscli.sh to install-ubuntu-awscli.sh - Update to use $EUID instead of 'whoami' to determine if script is running as sudo - Tagging cmake version 3.20.1 specifically --- .../Linux/{install-awscli.sh => install-ubuntu-awscli.sh} | 2 +- .../Platform/Linux/install-ubuntu-build-libraries.sh | 2 +- .../Platform/Linux/install-ubuntu-build-tools.sh | 7 ++++--- .../build/build_node/Platform/Linux/install-ubuntu-git.sh | 2 +- 4 files changed, 7 insertions(+), 6 deletions(-) rename scripts/build/build_node/Platform/Linux/{install-awscli.sh => install-ubuntu-awscli.sh} (97%) diff --git a/scripts/build/build_node/Platform/Linux/install-awscli.sh b/scripts/build/build_node/Platform/Linux/install-ubuntu-awscli.sh similarity index 97% rename from scripts/build/build_node/Platform/Linux/install-awscli.sh rename to scripts/build/build_node/Platform/Linux/install-ubuntu-awscli.sh index c9addedc82..4c2f350859 100644 --- a/scripts/build/build_node/Platform/Linux/install-awscli.sh +++ b/scripts/build/build_node/Platform/Linux/install-ubuntu-awscli.sh @@ -10,7 +10,7 @@ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # This script must be run as root -if [ "`whoami`" != "root" ] +if [[ $EUID -ne 0 ]] then echo "This script must be run as root (sudo)" exit 1 diff --git a/scripts/build/build_node/Platform/Linux/install-ubuntu-build-libraries.sh b/scripts/build/build_node/Platform/Linux/install-ubuntu-build-libraries.sh index 7b78a53802..90786a675a 100644 --- a/scripts/build/build_node/Platform/Linux/install-ubuntu-build-libraries.sh +++ b/scripts/build/build_node/Platform/Linux/install-ubuntu-build-libraries.sh @@ -10,7 +10,7 @@ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # This script must be run as root -if [ "`whoami`" != "root" ] +if [[ $EUID -ne 0 ]] then echo "This script must be run as root (sudo)" exit 1 diff --git a/scripts/build/build_node/Platform/Linux/install-ubuntu-build-tools.sh b/scripts/build/build_node/Platform/Linux/install-ubuntu-build-tools.sh index eb9229d90b..0b341c089e 100644 --- a/scripts/build/build_node/Platform/Linux/install-ubuntu-build-tools.sh +++ b/scripts/build/build_node/Platform/Linux/install-ubuntu-build-tools.sh @@ -10,7 +10,7 @@ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # This script must be run as root -if [ "`whoami`" != "root" ] +if [[ $EUID -ne 0 ]] then echo "This script must be run as root (sudo)" exit 1 @@ -41,7 +41,8 @@ fi # # Always install the latest version of cmake (from kitware) # -echo Installing the latest version of CMake +CMAKE_DISTRO_VERSION=3.20.1-0kitware1ubuntu20.04.1 +echo Installing CMake package $CMAKE_DISTRO_VERSION # Remove any pre-existing version of cmake apt purge --auto-remove cmake -y @@ -59,7 +60,7 @@ fi apt-get update # Install cmake -apt-get install cmake -y +apt-get install cmake $CMAKE_DISTRO_VERSION -y # diff --git a/scripts/build/build_node/Platform/Linux/install-ubuntu-git.sh b/scripts/build/build_node/Platform/Linux/install-ubuntu-git.sh index a1c2923c13..53554f4175 100644 --- a/scripts/build/build_node/Platform/Linux/install-ubuntu-git.sh +++ b/scripts/build/build_node/Platform/Linux/install-ubuntu-git.sh @@ -10,7 +10,7 @@ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # This script must be run as root -if [ "`whoami`" != "root" ] +if [[ $EUID -ne 0 ]] then echo "This script must be run as root (sudo)" exit 1 From a6cea546da84e079a77e1525c7960f55220ba74d Mon Sep 17 00:00:00 2001 From: shiranj Date: Mon, 19 Apr 2021 14:52:37 -0700 Subject: [PATCH 17/68] Add repository name to EBS volume tag --- scripts/build/Jenkins/Jenkinsfile | 15 ++++--- .../build/bootstrap/incremental_build_util.py | 44 ++++++++++--------- 2 files changed, 33 insertions(+), 26 deletions(-) diff --git a/scripts/build/Jenkins/Jenkinsfile b/scripts/build/Jenkins/Jenkinsfile index f77c139342..7f269c0012 100644 --- a/scripts/build/Jenkins/Jenkinsfile +++ b/scripts/build/Jenkins/Jenkinsfile @@ -265,7 +265,7 @@ def CheckoutRepo(boolean disableSubmodules = false) { palRm('commitid') } -def PreBuildCommonSteps(Map pipelineConfig, String projectName, String pipeline, String branchName, String platform, String buildType, String workspace, boolean mount = true, boolean disableSubmodules = false) { +def PreBuildCommonSteps(Map pipelineConfig, String repositoryName, String projectName, String pipeline, String branchName, String platform, String buildType, String workspace, boolean mount = true, boolean disableSubmodules = false) { echo 'Starting pre-build common steps...' if (mount) { @@ -276,10 +276,10 @@ def PreBuildCommonSteps(Map pipelineConfig, String projectName, String pipeline, else pythonCmd = 'python -u ' if(env.RECREATE_VOLUME?.toBoolean()) { - palSh("${pythonCmd} ${INCREMENTAL_BUILD_SCRIPT_PATH} --action delete --project ${projectName} --pipeline ${pipeline} --branch ${branchName} --platform ${platform} --build_type ${buildType}", 'Deleting volume') + palSh("${pythonCmd} ${INCREMENTAL_BUILD_SCRIPT_PATH} --action delete --repository_name ${repositoryName} --project ${projectName} --pipeline ${pipeline} --branch ${branchName} --platform ${platform} --build_type ${buildType}", 'Deleting volume') } timeout(5) { - palSh("${pythonCmd} ${INCREMENTAL_BUILD_SCRIPT_PATH} --action mount --project ${projectName} --pipeline ${pipeline} --branch ${branchName} --platform ${platform} --build_type ${buildType}", 'Mounting volume') + palSh("${pythonCmd} ${INCREMENTAL_BUILD_SCRIPT_PATH} --action mount --repository_name ${repositoryName} --project ${projectName} --pipeline ${pipeline} --branch ${branchName} --platform ${platform} --build_type ${buildType}", 'Mounting volume') } if(env.IS_UNIX) { @@ -383,10 +383,10 @@ def PostBuildCommonSteps(String workspace, boolean mount = true) { } } -def CreateSetupStage(Map pipelineConfig, String projectName, String pipelineName, String branchName, String platformName, String jobName, Map environmentVars) { +def CreateSetupStage(Map pipelineConfig, String repositoryName, String projectName, String pipelineName, String branchName, String platformName, String jobName, Map environmentVars) { return { stage("Setup") { - PreBuildCommonSteps(pipelineConfig, projectName, pipelineName, branchName, platformName, jobName, environmentVars['WORKSPACE'], environmentVars['MOUNT_VOLUME']) + PreBuildCommonSteps(pipelineConfig, repositoryName, projectName, pipelineName, branchName, platformName, jobName, environmentVars['WORKSPACE'], environmentVars['MOUNT_VOLUME']) } } } @@ -430,6 +430,9 @@ try { } withEnv(envVarList) { timestamps { + repositoryUrl = scm.getUserRemoteConfigs()[0].getUrl() + // repositoryName is the full repository name + repositoryName = (repositoryUrl =~ /https:\/\/github.com\/(.*)\.git/)[0][1] (projectName, pipelineName) = GetRunningPipelineName(env.JOB_NAME) // env.JOB_NAME is the name of the job given by Jenkins if(env.BRANCH_NAME) { @@ -493,7 +496,7 @@ try { try { def build_job_name = build_job.key - CreateSetupStage(pipelineConfig, projectName, pipelineName, branchName, platform.key, build_job.key, envVars).call() + CreateSetupStage(pipelineConfig, repositoryName, projectName, pipelineName, branchName, platform.key, build_job.key, envVars).call() if(build_job.value.steps) { //this is a pipe with many steps so create all the build stages build_job.value.steps.each { build_step -> diff --git a/scripts/build/bootstrap/incremental_build_util.py b/scripts/build/bootstrap/incremental_build_util.py index 40b4a5cb4f..fec48e2bee 100755 --- a/scripts/build/bootstrap/incremental_build_util.py +++ b/scripts/build/bootstrap/incremental_build_util.py @@ -94,6 +94,7 @@ def error(message): def parse_args(): parser = argparse.ArgumentParser() parser.add_argument('-a', '--action', dest="action", help="Action (mount|unmount|delete)") + parser.add_argument('-proj', '--repository_name', dest="repository_name", help="Repository name") parser.add_argument('-proj', '--project', dest="project", help="Project") parser.add_argument('-pipe', '--pipeline', dest="pipeline", help="Pipeline") parser.add_argument('-b', '--branch', dest="branch", help="Branch") @@ -108,6 +109,8 @@ def parse_args(): error('No action specified') args.action = args.action.lower() if args.action != 'unmount': + if args.repository_name is None: + error('No repository specified') if args.project is None: error('No project specified') if args.pipeline is None: @@ -121,8 +124,8 @@ def parse_args(): return args -def get_mount_name(project, pipeline, branch, platform, build_type): - mount_name = "{}_{}_{}_{}_{}".format(project, pipeline, branch, platform, build_type) +def get_mount_name(repository_name, project, pipeline, branch, platform, build_type): + mount_name = "{}_{}_{}_{}_{}_{}".format(repository_name, project, pipeline, branch, platform, build_type) mount_name = mount_name.replace('/','_').replace('\\','_') return mount_name @@ -174,8 +177,8 @@ def delete_volume(ec2_client, volume_id): response = ec2_client.delete_volume(VolumeId=volume_id) print 'Volume {} deleted'.format(volume_id) -def find_snapshot_id(ec2_client, project, pipeline, platform, build_type, disk_size): - mount_name = get_mount_name(project, pipeline, 'main', platform, build_type) # we take snapshots out of main +def find_snapshot_id(ec2_client, repository_name, project, pipeline, platform, build_type, disk_size): + mount_name = get_mount_name(repository_name, project, pipeline, 'main', platform, build_type) # we take snapshots out of main response = ec2_client.describe_snapshots(Filters= [{ 'Name': 'tag:Name', 'Values': [mount_name] }]) @@ -191,9 +194,9 @@ def find_snapshot_id(ec2_client, project, pipeline, platform, build_type, disk_s snapshot_id = snapshot['SnapshotId'] return snapshot_id -def create_volume(ec2_client, availability_zone, project, pipeline, branch, platform, build_type, disk_size, disk_type): +def create_volume(ec2_client, availability_zone, repository_name, project, pipeline, branch, platform, build_type, disk_size, disk_type): # The actual EBS default calculation for IOps is a floating point number, the closest approxmiation is 4x of the disk size for simplicity - mount_name = get_mount_name(project, pipeline, branch, platform, build_type) + mount_name = get_mount_name(repository_name, project, pipeline, branch, platform, build_type) pipeline_and_branch = get_pipeline_and_branch(pipeline, branch) parameters = dict( AvailabilityZone = availability_zone, @@ -202,6 +205,7 @@ def create_volume(ec2_client, availability_zone, project, pipeline, branch, plat 'ResourceType': 'volume', 'Tags': [ { 'Key': 'Name', 'Value': mount_name }, + {'Key': 'RepositoryName', 'Value': repository_name}, { 'Key': 'Project', 'Value': project }, { 'Key': 'Pipeline', 'Value': pipeline }, { 'Key': 'BranchName', 'Value': branch }, @@ -214,7 +218,7 @@ def create_volume(ec2_client, availability_zone, project, pipeline, branch, plat if 'io1' in disk_type.lower(): parameters['Iops'] = (4 * disk_size) - snapshot_id = find_snapshot_id(ec2_client, project, pipeline, platform, build_type, disk_size) + snapshot_id = find_snapshot_id(ec2_client, repository_name, project, pipeline, platform, build_type, disk_size) if snapshot_id: parameters['SnapshotId'] = snapshot_id created = False @@ -234,8 +238,8 @@ def create_volume(ec2_client, availability_zone, project, pipeline, branch, plat time.sleep(1) response = ec2_client.describe_volumes(VolumeIds=[volume_id, ]) - print("Volume {} created\n\tSnapshot: {}\n\tProject {}\n\tPipeline {}\n\tBranch {}\n\tPlatform: {}\n\tBuild type: {}" - .format(volume_id, snapshot_id, project, pipeline, branch, platform, build_type)) + print("Volume {} created\n\tSnapshot: {}\n\tRepository {}\n\tProject {}\n\tPipeline {}\n\tBranch {}\n\tPlatform: {}\n\tBuild type: {}" + .format(volume_id, snapshot_id, repository_name, project, pipeline, branch, platform, build_type)) return volume_id, created @@ -359,7 +363,7 @@ def attach_ebs_and_create_partition_with_retry(volume, volume_id, ec2_instance_i mount_volume(created) attempt += 1 -def mount_ebs(project, pipeline, branch, platform, build_type, disk_size, disk_type): +def mount_ebs(repository_name, project, pipeline, branch, platform, build_type, disk_size, disk_type): session = boto3.session.Session() region = session.region_name if region is None: @@ -379,7 +383,7 @@ def mount_ebs(project, pipeline, branch, platform, build_type, disk_size, disk_t unmount_volume() detach_volume(volume, ec2_instance_id, False) # Force unmounts should not be used, as that will cause the EBS block device driver to fail the remount - mount_name = get_mount_name(project, pipeline, branch, platform, build_type) + mount_name = get_mount_name(repository_name, project, pipeline, branch, platform, build_type) response = ec2_client.describe_volumes(Filters=[{ 'Name': 'tag:Name', 'Values': [mount_name] }]) @@ -388,7 +392,7 @@ def mount_ebs(project, pipeline, branch, platform, build_type, disk_size, disk_t if 'Volumes' in response and not len(response['Volumes']): print 'Volume for {} doesn\'t exist creating it...'.format(mount_name) # volume doesn't exist, create it - volume_id, created = create_volume(ec2_client, ec2_availability_zone, project, pipeline, branch, platform, build_type, disk_size, disk_type) + volume_id, created = create_volume(ec2_client, ec2_availability_zone, repository_name, project, pipeline, branch, platform, build_type, disk_size, disk_type) else: volume = response['Volumes'][0] volume_id = volume['VolumeId'] @@ -396,7 +400,7 @@ def mount_ebs(project, pipeline, branch, platform, build_type, disk_size, disk_t if (volume['Size'] != disk_size or volume['VolumeType'] != disk_type): print 'Override disk attributes does not match the existing volume, deleting {} and replacing the volume'.format(volume_id) delete_volume(ec2_client, volume_id) - volume_id, created = create_volume(ec2_client, ec2_availability_zone, project, pipeline, branch, platform, build_type, disk_size, disk_type) + volume_id, created = create_volume(ec2_client, ec2_availability_zone, repository_name, project, pipeline, branch, platform, build_type, disk_size, disk_type) if len(volume['Attachments']): # this is bad we shouldn't be attached, we should have detached at the end of a build attachment = volume['Attachments'][0] @@ -426,7 +430,7 @@ def mount_ebs(project, pipeline, branch, platform, build_type, disk_size, disk_t print 'Error: EBS disk size reached to the allowed maximum disk size {}MB, please contact ly-infra@ and ly-build@ to investigate.'.format(MAX_EBS_DISK_SIZE) exit(1) print 'Recreating the EBS with disk size {}'.format(new_disk_size) - volume_id, created = create_volume(ec2_client, ec2_availability_zone, project, pipeline, branch, platform, build_type, new_disk_size, disk_type) + volume_id, created = create_volume(ec2_client, ec2_availability_zone, repository_name, project, pipeline, branch, platform, build_type, new_disk_size, disk_type) volume = ec2_resource.Volume(volume_id) attach_ebs_and_create_partition_with_retry(volume, volume_id, ec2_instance_id, created) @@ -458,7 +462,7 @@ def unmount_ebs(): unmount_volume() detach_volume(volume, ec2_instance_id, False) -def delete_ebs(project, pipeline, branch, platform, build_type): +def delete_ebs(repository_name, project, pipeline, branch, platform, build_type): unmount_ebs() session = boto3.session.Session() @@ -470,7 +474,7 @@ def delete_ebs(project, pipeline, branch, platform, build_type): ec2_resource = boto3.resource('ec2', region_name=region) ec2_instance = ec2_resource.Instance(ec2_instance_id) - mount_name = get_mount_name(project, pipeline, branch, platform, build_type) + mount_name = get_mount_name(repository_name, project, pipeline, branch, platform, build_type) response = ec2_client.describe_volumes(Filters=[ { 'Name': 'tag:Name', 'Values': [mount_name] } ]) @@ -481,15 +485,15 @@ def delete_ebs(project, pipeline, branch, platform, build_type): delete_volume(ec2_client, volume_id) -def main(action, project, pipeline, branch, platform, build_type, disk_size, disk_type): +def main(action, repository_name, project, pipeline, branch, platform, build_type, disk_size, disk_type): if action == 'mount': - mount_ebs(project, pipeline, branch, platform, build_type, disk_size, disk_type) + mount_ebs(repository_name, project, pipeline, branch, platform, build_type, disk_size, disk_type) elif action == 'unmount': unmount_ebs() elif action == 'delete': - delete_ebs(project, pipeline, branch, platform, build_type) + delete_ebs(repository_name, project, pipeline, branch, platform, build_type) if __name__ == "__main__": args = parse_args() - ret = main(args.action, args.project, args.pipeline, args.branch, args.platform, args.build_type, args.disk_size, args.disk_type) + ret = main(args.action, args.repository_name, args.project, args.pipeline, args.branch, args.platform, args.build_type, args.disk_size, args.disk_type) sys.exit(ret) \ No newline at end of file From 86be2647c59251bfcf9e70307334fc577a6598f9 Mon Sep 17 00:00:00 2001 From: spham Date: Mon, 19 Apr 2021 14:56:54 -0700 Subject: [PATCH 18/68] Fix apt-get command for installing specific version of cmake based on distro of ubuntu --- .../build_node/Platform/Linux/install-ubuntu-build-tools.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/scripts/build/build_node/Platform/Linux/install-ubuntu-build-tools.sh b/scripts/build/build_node/Platform/Linux/install-ubuntu-build-tools.sh index 0b341c089e..36832bb9ac 100644 --- a/scripts/build/build_node/Platform/Linux/install-ubuntu-build-tools.sh +++ b/scripts/build/build_node/Platform/Linux/install-ubuntu-build-tools.sh @@ -41,7 +41,6 @@ fi # # Always install the latest version of cmake (from kitware) # -CMAKE_DISTRO_VERSION=3.20.1-0kitware1ubuntu20.04.1 echo Installing CMake package $CMAKE_DISTRO_VERSION # Remove any pre-existing version of cmake @@ -52,9 +51,11 @@ CMAKE_DEB_REPO="'deb https://apt.kitware.com/ubuntu/ $UBUNTU_DISTRO main'" # Add the appropriate kitware repository to apt if [ "$UBUNTU_DISTRO" == "bionic" ] then + CMAKE_DISTRO_VERSION=3.20.1-0kitware1ubuntu20.04.1 apt-add-repository 'deb https://apt.kitware.com/ubuntu/ bionic main' elif [ "$UBUNTU_DISTRO" == "focal" ] then + CMAKE_DISTRO_VERSION=3.20.1-0kitware1ubuntu18.04.1 apt-add-repository 'deb https://apt.kitware.com/ubuntu/ focal main' fi apt-get update From f5b7200f328471cad30d6cff050b75588fecfeaa Mon Sep 17 00:00:00 2001 From: shiranj Date: Mon, 19 Apr 2021 14:59:43 -0700 Subject: [PATCH 19/68] Fix typo --- scripts/build/bootstrap/incremental_build_util.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/build/bootstrap/incremental_build_util.py b/scripts/build/bootstrap/incremental_build_util.py index fec48e2bee..0228f129d0 100755 --- a/scripts/build/bootstrap/incremental_build_util.py +++ b/scripts/build/bootstrap/incremental_build_util.py @@ -94,8 +94,8 @@ def error(message): def parse_args(): parser = argparse.ArgumentParser() parser.add_argument('-a', '--action', dest="action", help="Action (mount|unmount|delete)") - parser.add_argument('-proj', '--repository_name', dest="repository_name", help="Repository name") - parser.add_argument('-proj', '--project', dest="project", help="Project") + parser.add_argument('-repository_name', '--repository_name', dest="repository_name", help="Repository name") + parser.add_argument('-project', '--project', dest="project", help="Project") parser.add_argument('-pipe', '--pipeline', dest="pipeline", help="Pipeline") parser.add_argument('-b', '--branch', dest="branch", help="Branch") parser.add_argument('-plat', '--platform', dest="platform", help="Platform") From 707f7cb6cefe7b43c03495a9137d829c63722710 Mon Sep 17 00:00:00 2001 From: srikappa Date: Mon, 19 Apr 2021 15:06:41 -0700 Subject: [PATCH 20/68] Added some comments --- .../Instance/InstanceUpdateExecutor.cpp | 5 +++++ .../Prefab/PrefabPublicHandler.cpp | 10 ++++----- .../Prefab/PrefabPublicHandler.h | 21 ++++++++++++++++++- 3 files changed, 30 insertions(+), 6 deletions(-) diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/Instance/InstanceUpdateExecutor.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/Instance/InstanceUpdateExecutor.cpp index d84edd6212..b307d8290c 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/Instance/InstanceUpdateExecutor.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/Instance/InstanceUpdateExecutor.cpp @@ -117,6 +117,7 @@ namespace AzToolsFramework "Could not find Template using Id '%llu'. Unable to update Instance.", currentTemplateId); + // Remove the instance from update queue if it's corresponding template couldn't be found isUpdateSuccessful = false; m_instancesUpdateQueue.pop(); continue; @@ -127,6 +128,8 @@ namespace AzToolsFramework if (findInstancesResult.find(instanceToUpdate) == findInstancesResult.end()) { + // Since nested instances get reconstructed during propgation, remove any nested instance that no longer + // maps to a template. isUpdateSuccessful = false; m_instancesUpdateQueue.pop(); continue; @@ -155,6 +158,8 @@ namespace AzToolsFramework for (auto entityIdIterator = selectedEntityIds.begin(); entityIdIterator != selectedEntityIds.end(); entityIdIterator++) { + // Since entities get recreated during propagation, we need to check whether the entities correspoding to the list + // of selected entity ids are present or not. AZ::Entity* entity = GetEntityById(*entityIdIterator); if (entity == nullptr) { diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabPublicHandler.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabPublicHandler.cpp index adadc9d0ac..6ba342bf9b 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabPublicHandler.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabPublicHandler.cpp @@ -121,7 +121,7 @@ namespace AzToolsFramework commonRootEntityOwningInstance->get(), "Update prefab instance", commonRootInstanceDomBeforeCreate, undoBatch.GetUndoBatch()); CreateLink( - topLevelEntities, instanceToCreate->get(), commonRootEntityOwningInstance->get(), undoBatch.GetUndoBatch(), + topLevelEntities, instanceToCreate->get(), commonRootEntityOwningInstance->get().GetTemplateId(), undoBatch.GetUndoBatch(), commonRootEntityId); AZ::EntityId containerEntityId = instanceToCreate->get().GetContainerEntityId(); @@ -182,10 +182,10 @@ namespace AzToolsFramework } void PrefabPublicHandler::CreateLink( - const EntityList& topLevelEntities, Instance& instanceToAdd, Instance& parentInstance, UndoSystem::URSequencePoint* undoBatch, - AZ::EntityId commonRootEntityId) + const EntityList& topLevelEntities, Instance& sourceInstance, TemplateId targetTemplateId, + UndoSystem::URSequencePoint* undoBatch, AZ::EntityId commonRootEntityId) { - AZ::EntityId containerEntityId = instanceToAdd.GetContainerEntityId(); + AZ::EntityId containerEntityId = sourceInstance.GetContainerEntityId(); AZ::Entity* containerEntity = GetEntityById(containerEntityId); Prefab::PrefabDom containerEntityDomBefore; m_instanceToTemplateInterface->GenerateDomForEntity(containerEntityDomBefore, *containerEntity); @@ -210,7 +210,7 @@ namespace AzToolsFramework m_instanceToTemplateInterface->AppendEntityAliasToPatchPaths(patch, containerEntityId); PrefabUndoHelpers::CreateLink( - instanceToAdd.GetTemplateId(), parentInstance.GetTemplateId(), patch, instanceToAdd.GetInstanceAlias(), + sourceInstance.GetTemplateId(), targetTemplateId, patch, sourceInstance.GetInstanceAlias(), undoBatch); // Update the cache - this prevents these changes from being stored in the regular undo/redo nodes diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabPublicHandler.h b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabPublicHandler.h index d05192a3b4..f97fa46c3e 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabPublicHandler.h +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabPublicHandler.h @@ -69,10 +69,29 @@ namespace AzToolsFramework InstanceOptionalReference GetOwnerInstanceByEntityId(AZ::EntityId entityId) const; bool EntitiesBelongToSameInstance(const EntityIdList& entityIds) const; + /** + * Creates a link between the templates of an instance and its parent. + * + * \param topLevelEntities The list of entities that are immediate children of container entity of instance. + * \param sourceInstance The instance that corresponds to the source template of the link. + * \param targetInstance The id of the target template. + * \param undoBatch The undo batch to set as parent for this create link action. + * \param commonRootEntityId The id of the entity that the source instance should be parented under. + */ void CreateLink( - const EntityList& topLevelEntities, Instance& instanceToAdd, Instance& parentInstance, + const EntityList& topLevelEntities, Instance& sourceInstance, TemplateId targetTemplateId, UndoSystem::URSequencePoint* undoBatch, AZ::EntityId commonRootEntityId); + /** + * Given a list of entityIds, finds the prefab instance that owns the common root entity of the entityIds. + * + * \param entityIds The list of entity ids. + * \param inputEntityList The list of entities corresponding to the entity ids. + * \param topLevelEntities The list of entities that are immediate children of the common root entity. + * \param commonRootEntityId The entity id of the common root entity of all the entityIds. + * \param commonRootEntityOwningInstance The owning instance of the common root entity. + * \return PrefabOperationResult indicating whether the action was successful or not. + */ PrefabOperationResult FindCommonRootOwningInstance( const AZStd::vector& entityIds, EntityList& inputEntityList, EntityList& topLevelEntities, AZ::EntityId& commonRootEntityId, InstanceOptionalReference& commonRootEntityOwningInstance); From 8fc69113c9d91a7fd64948787488e8f742962b3a Mon Sep 17 00:00:00 2001 From: nvsickle Date: Mon, 19 Apr 2021 15:08:06 -0700 Subject: [PATCH 21/68] Get the default viewport context on demand in FFont, as it may change --- .../AtomLyIntegration/AtomFont/FFont.h | 31 ++--------------- .../AtomFont/Code/Source/FFont.cpp | 33 +++++++++++++------ 2 files changed, 26 insertions(+), 38 deletions(-) diff --git a/Gems/AtomLyIntegration/AtomFont/Code/Include/AtomLyIntegration/AtomFont/FFont.h b/Gems/AtomLyIntegration/AtomFont/Code/Include/AtomLyIntegration/AtomFont/FFont.h index 96f5e09fc3..a6066984c7 100644 --- a/Gems/AtomLyIntegration/AtomFont/Code/Include/AtomLyIntegration/AtomFont/FFont.h +++ b/Gems/AtomLyIntegration/AtomFont/Code/Include/AtomLyIntegration/AtomFont/FFont.h @@ -277,11 +277,11 @@ namespace AZ void ScaleCoord(const RHI::Viewport& viewport, float& x, float& y) const; - void InitDefaultWindowContext(); - void InitDefaultViewportContext(); - void OnBootstrapSceneReady(AZ::RPI::Scene* bootstrapScene) override; + RPI::WindowContextSharedPtr GetDefaultWindowContext() const; + RPI::ViewportContextPtr GetDefaultViewportContext() const; + private: static constexpr uint32_t NumBuffers = 2; static constexpr float WindowScaleWidth = 800.0f; @@ -294,9 +294,6 @@ namespace AZ size_t m_fontBufferSize = 0; unsigned char* m_fontBuffer = nullptr; - AZStd::shared_ptr m_defaultWindowContext; - AZStd::shared_ptr m_defaultViewportContext; - AZ::Data::Instance m_fontStreamingImage; AZ::RHI::Ptr m_fontImage; uint32_t m_fontImageVersion = 0; @@ -345,26 +342,4 @@ namespace AZ } } -inline void AZ::FFont::InitDefaultWindowContext() -{ - if (!m_defaultWindowContext) - { - // font is created before window & viewport in the editor so need to do late init - // TODO need to deal with multiple windows, such as the editor - AZ::Render::Bootstrap::DefaultWindowBus::BroadcastResult(m_defaultWindowContext, &AZ::Render::Bootstrap::DefaultWindowInterface::GetDefaultWindowContext); - AZ_Assert(m_defaultWindowContext, "Unable to get the main window context"); - } -} - -inline void AZ::FFont::InitDefaultViewportContext() -{ - if (!m_defaultViewportContext) - { - // font is created before window & viewport in the editor so need to do late init - auto viewContextManager = AZ::Interface::Get(); - m_defaultViewportContext = viewContextManager->GetViewportContextByName(viewContextManager->GetDefaultViewportContextName()); - AZ_Assert(m_defaultViewportContext, "Unable to get the viewport context"); - } -} - #endif diff --git a/Gems/AtomLyIntegration/AtomFont/Code/Source/FFont.cpp b/Gems/AtomLyIntegration/AtomFont/Code/Source/FFont.cpp index d32302a07b..38024393fa 100644 --- a/Gems/AtomLyIntegration/AtomFont/Code/Source/FFont.cpp +++ b/Gems/AtomLyIntegration/AtomFont/Code/Source/FFont.cpp @@ -84,6 +84,20 @@ AZ::FFont::FFont(AtomFont* atomFont, const char* fontName) AZ::Render::Bootstrap::NotificationBus::Handler::BusConnect(); } +AZ::RPI::ViewportContextPtr AZ::FFont::GetDefaultViewportContext() const +{ + auto viewContextManager = AZ::Interface::Get(); + return viewContextManager->GetDefaultViewportContext(); +} + +AZ::RPI::WindowContextSharedPtr AZ::FFont::GetDefaultWindowContext() const +{ + if (auto defaultViewportContext = GetDefaultViewportContext()) + { + return defaultViewportContext->GetWindowContext(); + } + return {}; +} bool AZ::FFont::InitFont() { @@ -92,11 +106,8 @@ bool AZ::FFont::InitFont() return true; } - InitDefaultWindowContext(); - InitDefaultViewportContext(); - // Create and initialize DynamicDrawContext for font draw - AZ::RPI::Ptr dynamicDraw = m_atomFont->GetOrCreateDynamicDrawForScene(m_defaultViewportContext->GetRenderScene().get()); + AZ::RPI::Ptr dynamicDraw = m_atomFont->GetOrCreateDynamicDrawForScene(GetDefaultViewportContext()->GetRenderScene().get()); // Save draw srg input indices for later use Data::Instance drawSrg = dynamicDraw->NewDrawSrg(); @@ -259,7 +270,7 @@ void AZ::FFont::DrawString(float x, float y, const char* str, const bool asciiMu return; } - DrawStringUInternal(m_defaultWindowContext->GetViewport(), m_defaultViewportContext.get(), x, y, 1.0f, str, asciiMultiLine, ctx); + DrawStringUInternal(GetDefaultWindowContext()->GetViewport(), GetDefaultViewportContext().get(), x, y, 1.0f, str, asciiMultiLine, ctx); } void AZ::FFont::DrawString(float x, float y, float z, const char* str, const bool asciiMultiLine, const TextDrawContext& ctx) @@ -269,7 +280,7 @@ void AZ::FFont::DrawString(float x, float y, float z, const char* str, const boo return; } - DrawStringUInternal(m_defaultWindowContext->GetViewport(), m_defaultViewportContext.get(), x, y, z, str, asciiMultiLine, ctx); + DrawStringUInternal(GetDefaultWindowContext()->GetViewport(), GetDefaultViewportContext().get(), x, y, z, str, asciiMultiLine, ctx); } void AZ::FFont::DrawStringUInternal( @@ -282,6 +293,8 @@ void AZ::FFont::DrawStringUInternal( const bool asciiMultiLine, const TextDrawContext& ctx) { + InitFont(); + if (!str || !m_vertexBuffer // vertex buffer isn't created until BootstrapScene is ready, Editor tries to render text before that. || !m_fontTexture @@ -400,7 +413,7 @@ Vec2 AZ::FFont::GetTextSize(const char* str, const bool asciiMultiLine, const Te return Vec2(0.0f, 0.0f); } - return GetTextSizeUInternal(m_defaultWindowContext->GetViewport(), str, asciiMultiLine, ctx); + return GetTextSizeUInternal(GetDefaultWindowContext()->GetViewport(), str, asciiMultiLine, ctx); } Vec2 AZ::FFont::GetTextSizeUInternal( @@ -746,7 +759,7 @@ uint32_t AZ::FFont::WriteTextQuadsToBuffers(SVF_P2F_C4B_T2F_F4B* verts, uint16_t return true; }; - CreateQuadsForText(m_defaultWindowContext->GetViewport(), x, y, z, str, asciiMultiLine, ctx, AddQuad); + CreateQuadsForText(GetDefaultWindowContext()->GetViewport(), x, y, z, str, asciiMultiLine, ctx, AddQuad); return numQuadsWritten; } @@ -1438,7 +1451,7 @@ void AZ::FFont::AddCharsToFontTexture(const char* chars, int glyphSizeX, int gly Vec2 AZ::FFont::GetKerning(uint32_t leftGlyph, uint32_t rightGlyph, const TextDrawContext& ctx) const { - return GetKerningInternal(m_defaultWindowContext->GetViewport(), leftGlyph, rightGlyph, ctx); + return GetKerningInternal(GetDefaultWindowContext()->GetViewport(), leftGlyph, rightGlyph, ctx); } Vec2 AZ::FFont::GetKerningInternal(const RHI::Viewport& viewport, uint32_t leftGlyph, uint32_t rightGlyph, const TextDrawContext& ctx) const @@ -1454,7 +1467,7 @@ float AZ::FFont::GetAscender(const TextDrawContext& ctx) const float AZ::FFont::GetBaseline(const TextDrawContext& ctx) const { - return GetBaselineInternal(m_defaultWindowContext->GetViewport(), ctx); + return GetBaselineInternal(GetDefaultWindowContext()->GetViewport(), ctx); } float AZ::FFont::GetBaselineInternal(const RHI::Viewport& viewport, const TextDrawContext& ctx) const From c05d4b44e4789eafdad6168bba28e46870d257cd Mon Sep 17 00:00:00 2001 From: nvsickle Date: Mon, 19 Apr 2021 15:08:40 -0700 Subject: [PATCH 22/68] Move supplemental EditorViewportWidget rendering to OnBeginPrepareRender to avoid sync issues --- Code/Sandbox/Editor/EditorViewportWidget.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/Code/Sandbox/Editor/EditorViewportWidget.cpp b/Code/Sandbox/Editor/EditorViewportWidget.cpp index 695a0fa5f1..897b3c569d 100644 --- a/Code/Sandbox/Editor/EditorViewportWidget.cpp +++ b/Code/Sandbox/Editor/EditorViewportWidget.cpp @@ -276,9 +276,6 @@ void EditorViewportWidget::paintEvent([[maybe_unused]] QPaintEvent* event) if ((ge && ge->IsLevelLoaded()) || (GetType() != ET_ViewportCamera)) { setRenderOverlayVisible(true); - m_isOnPaint = true; - Update(); - m_isOnPaint = false; } else { @@ -809,6 +806,10 @@ void EditorViewportWidget::OnBeginPrepareRender() return; } + m_isOnPaint = true; + Update(); + m_isOnPaint = false; + float fNearZ = GetIEditor()->GetConsoleVar("cl_DefaultNearPlane"); float fFarZ = m_Camera.GetFarPlane(); From 482e423ec9294a416697a37f0f08054814963b55 Mon Sep 17 00:00:00 2001 From: nvsickle Date: Fri, 16 Apr 2021 12:00:13 -0700 Subject: [PATCH 23/68] Fix crash on default layout restore --- Code/Sandbox/Editor/LayoutWnd.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Code/Sandbox/Editor/LayoutWnd.cpp b/Code/Sandbox/Editor/LayoutWnd.cpp index 56c0bcb849..dc3ae14d90 100644 --- a/Code/Sandbox/Editor/LayoutWnd.cpp +++ b/Code/Sandbox/Editor/LayoutWnd.cpp @@ -418,8 +418,9 @@ void CLayoutWnd::CreateLayout(EViewLayout layout, bool bBindViewports, EViewport QRect rcView = rect(); rcView.setBottom(rcView.bottom() - m_infoBar->height()); + // Ensure we delete our old view immediately so it can relinquish its backing ViewportContext if (m_maximizedView) - m_maximizedView->deleteLater(); + delete m_maximizedView; m_maximizedView = new CLayoutViewPane(this); m_maximizedView->SetId(0); From d2fadcb0e37bc78b035e9b0cb3c37fa960a7b190 Mon Sep 17 00:00:00 2001 From: nvsickle Date: Fri, 16 Apr 2021 12:02:55 -0700 Subject: [PATCH 24/68] Fix context menu handling in multi-viewport scenarios (the logic bugs here were many and nuanced, but we're narrowing in on something robust). Specifically this: -Ensures key/mouse up event propagation works across multiple viewports -Ensures that mouse up events for manipulators only get delivered if there's a corresponding mouse down event -Also tidies up the "are we done processing events this tick?" logic in ViewportManipulatorController --- .../Editor/ViewportManipulatorController.cpp | 26 +++++++++++++++---- .../Source/Viewport/RenderViewportWidget.cpp | 19 +++++++++++--- 2 files changed, 37 insertions(+), 8 deletions(-) diff --git a/Code/Sandbox/Editor/ViewportManipulatorController.cpp b/Code/Sandbox/Editor/ViewportManipulatorController.cpp index 910d037670..8ce2ea1cd9 100644 --- a/Code/Sandbox/Editor/ViewportManipulatorController.cpp +++ b/Code/Sandbox/Editor/ViewportManipulatorController.cpp @@ -95,6 +95,11 @@ bool ViewportManipulatorControllerInstance::HandleInputChannelEvent(const AzFram AZStd::optional overrideButton; AZStd::optional eventType; + // Because we receive events multiple times at separate priorities for manipulator events and + // viewport interaction events, we want to avoid updating our "last tick state" until we're on our last event, + // which currently is the low priority Interaction processor. + const bool finishedProcessingEvents = event.m_priority == InteractionPriority; + if (IsMouseMove(event.m_inputChannel)) { // Cache the ray trace results when doing manipulator interaction checks, no need to recalculate after @@ -120,10 +125,11 @@ bool ViewportManipulatorControllerInstance::HandleInputChannelEvent(const AzFram } else if (auto mouseButton = GetMouseButton(event.m_inputChannel); mouseButton != MouseButton::None) { + const AZ::u32 mouseButtonValue = static_cast(mouseButton); overrideButton = mouseButton; if (event.m_inputChannel.GetState() == InputChannel::State::Began) { - m_state.m_mouseButtons.m_mouseButtons |= static_cast(mouseButton); + m_state.m_mouseButtons.m_mouseButtons |= mouseButtonValue; if (IsDoubleClick(mouseButton)) { // Only remove the double click flag once we're done processing both Manipulator and Interaction events @@ -135,8 +141,8 @@ bool ViewportManipulatorControllerInstance::HandleInputChannelEvent(const AzFram } else { - // Only insert the double click timing once we're done processing both Manipulator and Interaction events, to avoid a false IsDoubleClick positive - if (event.m_priority == InteractionPriority) + // Only insert the double click timing once we're done processing events, to avoid a false IsDoubleClick positive + if (finishedProcessingEvents) { m_pendingDoubleClicks[mouseButton] = m_curTime; } @@ -145,8 +151,18 @@ bool ViewportManipulatorControllerInstance::HandleInputChannelEvent(const AzFram } else if (event.m_inputChannel.GetState() == InputChannel::State::Ended) { - m_state.m_mouseButtons.m_mouseButtons &= ~static_cast(mouseButton); - eventType = MouseEvent::Up; + // If we've actually logged a mouse down event, forward a mouse up event. + // This prevents corner cases like the context menu thinking it should be opened even though no one clicked in this viewport, + // due to RenderViewportWidget ensuring all controllers get InputChannel::State::Ended events. + if (m_state.m_mouseButtons.m_mouseButtons & mouseButtonValue) + { + // Erase the button from our state if we're done processing events. + if (event.m_priority == InteractionPriority) + { + m_state.m_mouseButtons.m_mouseButtons &= ~mouseButtonValue; + } + eventType = MouseEvent::Up; + } } } else if (auto keyboardModifier = GetKeyboardModifier(event.m_inputChannel); keyboardModifier != KeyboardModifier::None) diff --git a/Gems/Atom/Tools/AtomToolsFramework/Code/Source/Viewport/RenderViewportWidget.cpp b/Gems/Atom/Tools/AtomToolsFramework/Code/Source/Viewport/RenderViewportWidget.cpp index e08a5a045c..9ea2144289 100644 --- a/Gems/Atom/Tools/AtomToolsFramework/Code/Source/Viewport/RenderViewportWidget.cpp +++ b/Gems/Atom/Tools/AtomToolsFramework/Code/Source/Viewport/RenderViewportWidget.cpp @@ -164,6 +164,8 @@ namespace AtomToolsFramework bool RenderViewportWidget::OnInputChannelEventFiltered(const AzFramework::InputChannel& inputChannel) { + bool shouldConsumeEvent = true; + // Grab keyboard focus if we've been clicked on. // Qt normally handles this for us, but we're filtering native events before they get // synthesized into QMouseEvents. @@ -175,9 +177,18 @@ namespace AtomToolsFramework // Don't consume new input events if we don't currently have focus. // We do forward Ended events, as they may be relevant to our current state // (e.g. a key gets released after we lose focus, it shouldn't remain "stuck"). - if (!hasFocus() && inputChannel.GetState() != AzFramework::InputChannel::State::Ended) + if (!hasFocus()) { - return false; + if (inputChannel.GetState() == AzFramework::InputChannel::State::Ended) + { + // Forward the input ended event to our controllers, but don't prevent other viewports from receiving it. + shouldConsumeEvent = false; + } + else + { + // Not an event we should listen to, abort + return false; + } } // If we receive a mouse button event from outside of our viewport, ignore it even if we have focus. @@ -196,7 +207,9 @@ namespace AtomToolsFramework } AzFramework::NativeWindowHandle windowId = reinterpret_cast(winId()); - return m_controllerList->HandleInputChannelEvent({GetId(), windowId, inputChannel}); + const bool eventHandled = m_controllerList->HandleInputChannelEvent({GetId(), windowId, inputChannel}); + // If our controllers handled the event and it's one we can safely consume (i.e. it's not an Ended event that other viewports might need), consume it. + return eventHandled && shouldConsumeEvent; } void RenderViewportWidget::OnTick([[maybe_unused]]float deltaTime, AZ::ScriptTimePoint time) From dd7334471f9920b6312738c5abcf9d5fc37e0b1d Mon Sep 17 00:00:00 2001 From: nvsickle Date: Fri, 16 Apr 2021 12:17:35 -0700 Subject: [PATCH 25/68] Fix comment punctuation --- .../Code/Source/Viewport/RenderViewportWidget.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gems/Atom/Tools/AtomToolsFramework/Code/Source/Viewport/RenderViewportWidget.cpp b/Gems/Atom/Tools/AtomToolsFramework/Code/Source/Viewport/RenderViewportWidget.cpp index 9ea2144289..bf46ece27b 100644 --- a/Gems/Atom/Tools/AtomToolsFramework/Code/Source/Viewport/RenderViewportWidget.cpp +++ b/Gems/Atom/Tools/AtomToolsFramework/Code/Source/Viewport/RenderViewportWidget.cpp @@ -186,7 +186,7 @@ namespace AtomToolsFramework } else { - // Not an event we should listen to, abort + // Not an event we should listen to, abort. return false; } } From ebf41d2bdf58dcc3f7899bf94cf84e380c0f8428 Mon Sep 17 00:00:00 2001 From: nvsickle Date: Fri, 16 Apr 2021 14:26:58 -0700 Subject: [PATCH 26/68] Update code style --- Code/Sandbox/Editor/LayoutWnd.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Code/Sandbox/Editor/LayoutWnd.cpp b/Code/Sandbox/Editor/LayoutWnd.cpp index dc3ae14d90..34a96bca53 100644 --- a/Code/Sandbox/Editor/LayoutWnd.cpp +++ b/Code/Sandbox/Editor/LayoutWnd.cpp @@ -420,7 +420,9 @@ void CLayoutWnd::CreateLayout(EViewLayout layout, bool bBindViewports, EViewport // Ensure we delete our old view immediately so it can relinquish its backing ViewportContext if (m_maximizedView) + { delete m_maximizedView; + } m_maximizedView = new CLayoutViewPane(this); m_maximizedView->SetId(0); From 6abf17439a836ddbccd4258ebb97b1bc926cf1ea Mon Sep 17 00:00:00 2001 From: mnaumov Date: Mon, 19 Apr 2021 15:22:32 -0700 Subject: [PATCH 27/68] Adding "Create New Material" context menu option to folder in Material Editor Improving MaterialBrowser filter to show empty folders --- .../AssetBrowser/Search/SearchWidget.cpp | 9 +++++++++ .../AssetBrowser/Search/SearchWidget.h | 4 ++++ .../CreateMaterialDialog.cpp | 9 +++++++-- .../CreateMaterialDialog.h | 3 +++ .../Window/MaterialBrowserInteractions.cpp | 19 +++++++++++++++++++ .../Source/Window/MaterialBrowserWidget.cpp | 14 ++++++++++++-- 6 files changed, 54 insertions(+), 4 deletions(-) diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/AssetBrowser/Search/SearchWidget.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/AssetBrowser/Search/SearchWidget.cpp index 7c2f26042f..d2edbcce32 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/AssetBrowser/Search/SearchWidget.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/AssetBrowser/Search/SearchWidget.cpp @@ -170,6 +170,15 @@ namespace AzToolsFramework return m_filter; } + QSharedPointer SearchWidget::GetStringFilter() const + { + return m_stringFilter; + } + + QSharedPointer SearchWidget::GetTypesFilter() const + { + return m_typesFilter; + } } // namespace AssetBrowser } // namespace AzToolsFramework diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/AssetBrowser/Search/SearchWidget.h b/Code/Framework/AzToolsFramework/AzToolsFramework/AssetBrowser/Search/SearchWidget.h index 0453333c94..be649bc81d 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/AssetBrowser/Search/SearchWidget.h +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/AssetBrowser/Search/SearchWidget.h @@ -39,6 +39,10 @@ namespace AzToolsFramework QSharedPointer GetFilter() const; + QSharedPointer GetStringFilter() const; + + QSharedPointer GetTypesFilter() const; + QString GetFilterString() const { return textFilter(); } void ClearStringFilter() { ClearTextFilter(); } diff --git a/Gems/Atom/Tools/MaterialEditor/Code/Source/Window/CreateMaterialDialog/CreateMaterialDialog.cpp b/Gems/Atom/Tools/MaterialEditor/Code/Source/Window/CreateMaterialDialog/CreateMaterialDialog.cpp index 76aee99e52..6c30540392 100644 --- a/Gems/Atom/Tools/MaterialEditor/Code/Source/Window/CreateMaterialDialog/CreateMaterialDialog.cpp +++ b/Gems/Atom/Tools/MaterialEditor/Code/Source/Window/CreateMaterialDialog/CreateMaterialDialog.cpp @@ -26,8 +26,14 @@ namespace MaterialEditor { CreateMaterialDialog::CreateMaterialDialog(QWidget* parent) + : CreateMaterialDialog(QString(AZ::IO::FileIOBase::GetInstance()->GetAlias("@devassets@")) + AZ_CORRECT_FILESYSTEM_SEPARATOR + "Materials", parent) + { + } + + CreateMaterialDialog::CreateMaterialDialog(const QString& path, QWidget* parent) : QDialog(parent) , m_ui(new Ui::CreateMaterialDialog) + , m_path(path) { m_ui->setupUi(this); @@ -77,8 +83,7 @@ namespace MaterialEditor { //Select a default location and unique name for the new material m_materialFileInfo = AtomToolsFramework::GetUniqueFileInfo( - QString(AZ::IO::FileIOBase::GetInstance()->GetAlias("@devassets@")) + - AZ_CORRECT_FILESYSTEM_SEPARATOR + "Materials" + + m_path + AZ_CORRECT_FILESYSTEM_SEPARATOR + "untitled." + AZ::RPI::MaterialSourceData::Extension).absoluteFilePath(); diff --git a/Gems/Atom/Tools/MaterialEditor/Code/Source/Window/CreateMaterialDialog/CreateMaterialDialog.h b/Gems/Atom/Tools/MaterialEditor/Code/Source/Window/CreateMaterialDialog/CreateMaterialDialog.h index 54d7c2175d..63d166e95c 100644 --- a/Gems/Atom/Tools/MaterialEditor/Code/Source/Window/CreateMaterialDialog/CreateMaterialDialog.h +++ b/Gems/Atom/Tools/MaterialEditor/Code/Source/Window/CreateMaterialDialog/CreateMaterialDialog.h @@ -27,6 +27,7 @@ namespace MaterialEditor Q_OBJECT public: CreateMaterialDialog(QWidget* parent = nullptr); + CreateMaterialDialog(const QString& path, QWidget* parent = nullptr); ~CreateMaterialDialog() = default; QFileInfo m_materialFileInfo; @@ -34,6 +35,8 @@ namespace MaterialEditor private: QScopedPointer m_ui; + QString m_path; + void InitMaterialTypeSelection(); void InitMaterialFileSelection(); void UpdateMaterialTypeSelection(); diff --git a/Gems/Atom/Tools/MaterialEditor/Code/Source/Window/MaterialBrowserInteractions.cpp b/Gems/Atom/Tools/MaterialEditor/Code/Source/Window/MaterialBrowserInteractions.cpp index b0412c001c..167f7d38f5 100644 --- a/Gems/Atom/Tools/MaterialEditor/Code/Source/Window/MaterialBrowserInteractions.cpp +++ b/Gems/Atom/Tools/MaterialEditor/Code/Source/Window/MaterialBrowserInteractions.cpp @@ -29,6 +29,7 @@ #include #include +#include #include #include @@ -246,6 +247,24 @@ namespace MaterialEditor } } }); + + menu->addSeparator(); + + QAction* createMaterialAction = menu->addAction(QObject::tr("Create New Material")); + QObject::connect(createMaterialAction, &QAction::triggered, caller, [caller, entry]() + { + CreateMaterialDialog createDialog(entry->GetFullPath().c_str(), caller); + createDialog.adjustSize(); + + if (createDialog.exec() == QDialog::Accepted && + !createDialog.m_materialFileInfo.absoluteFilePath().isEmpty() && + !createDialog.m_materialTypeFileInfo.absoluteFilePath().isEmpty()) + { + MaterialDocumentSystemRequestBus::Broadcast(&MaterialDocumentSystemRequestBus::Events::CreateDocumentFromFile, + createDialog.m_materialTypeFileInfo.absoluteFilePath().toUtf8().constData(), + createDialog.m_materialFileInfo.absoluteFilePath().toUtf8().constData()); + } + }); } void MaterialBrowserInteractions::AddPerforceMenuActions([[maybe_unused]] QWidget* caller, QMenu* menu, const AzToolsFramework::AssetBrowser::AssetBrowserEntry* entry) diff --git a/Gems/Atom/Tools/MaterialEditor/Code/Source/Window/MaterialBrowserWidget.cpp b/Gems/Atom/Tools/MaterialEditor/Code/Source/Window/MaterialBrowserWidget.cpp index 6272312b90..1d579e5a10 100644 --- a/Gems/Atom/Tools/MaterialEditor/Code/Source/Window/MaterialBrowserWidget.cpp +++ b/Gems/Atom/Tools/MaterialEditor/Code/Source/Window/MaterialBrowserWidget.cpp @@ -115,19 +115,29 @@ namespace MaterialEditor { using namespace AzToolsFramework::AssetBrowser; + // Material Browser uses the following filters: + // 1. [All source files (no products) that contain products matching the assetType specified by searchWidget (default is materials and textures)] + // 2. [All folders (including empty folders)] + // 3. [All Sources and folders matching the search text typed in search widget] + // Final filter = ((1 OR 2) AND 3) + QSharedPointer sourceFilter(new EntryTypeFilter); sourceFilter->SetEntryType(AssetBrowserEntry::AssetEntryType::Source); + QSharedPointer assetTypeFilter(new CompositeFilter(CompositeFilter::LogicOperatorType::AND)); + assetTypeFilter->AddFilter(sourceFilter); + assetTypeFilter->AddFilter(m_ui->m_searchWidget->GetTypesFilter()); + QSharedPointer folderFilter(new EntryTypeFilter); folderFilter->SetEntryType(AssetBrowserEntry::AssetEntryType::Folder); QSharedPointer sourceOrFolderFilter(new CompositeFilter(CompositeFilter::LogicOperatorType::OR)); - sourceOrFolderFilter->AddFilter(sourceFilter); + sourceOrFolderFilter->AddFilter(assetTypeFilter); sourceOrFolderFilter->AddFilter(folderFilter); QSharedPointer finalFilter(new CompositeFilter(CompositeFilter::LogicOperatorType::AND)); finalFilter->AddFilter(sourceOrFolderFilter); - finalFilter->AddFilter(m_ui->m_searchWidget->GetFilter()); + finalFilter->AddFilter(m_ui->m_searchWidget->GetStringFilter()); return finalFilter; } From e2a76299938d5e7a2f942917e434f9f4f2f8cb3f Mon Sep 17 00:00:00 2001 From: nvsickle Date: Mon, 19 Apr 2021 15:24:08 -0700 Subject: [PATCH 28/68] Remove statistics rendering from EditorViewportWidget - it's wrong at the moment, and needs to be moved to a controller --- Code/Sandbox/Editor/EditorViewportWidget.cpp | 5 ----- 1 file changed, 5 deletions(-) diff --git a/Code/Sandbox/Editor/EditorViewportWidget.cpp b/Code/Sandbox/Editor/EditorViewportWidget.cpp index 897b3c569d..3c714b1d4c 100644 --- a/Code/Sandbox/Editor/EditorViewportWidget.cpp +++ b/Code/Sandbox/Editor/EditorViewportWidget.cpp @@ -906,11 +906,6 @@ void EditorViewportWidget::OnBeginPrepareRender() m_debugDisplay->DepthTestOn(); PostWidgetRendering(); - - if (!m_renderer->IsStereoEnabled()) - { - GetIEditor()->GetSystem()->RenderStatistics(); - } } ////////////////////////////////////////////////////////////////////////// From 0472bc49aaf76351b6c7eedf3d873f61f9a9fe95 Mon Sep 17 00:00:00 2001 From: shiranj Date: Mon, 19 Apr 2021 15:25:51 -0700 Subject: [PATCH 29/68] Set winSlashReplacement to false when running incremental_build_util.py --- scripts/build/Jenkins/Jenkinsfile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/build/Jenkins/Jenkinsfile b/scripts/build/Jenkins/Jenkinsfile index 7f269c0012..9751d5f31b 100644 --- a/scripts/build/Jenkins/Jenkinsfile +++ b/scripts/build/Jenkins/Jenkinsfile @@ -276,10 +276,10 @@ def PreBuildCommonSteps(Map pipelineConfig, String repositoryName, String projec else pythonCmd = 'python -u ' if(env.RECREATE_VOLUME?.toBoolean()) { - palSh("${pythonCmd} ${INCREMENTAL_BUILD_SCRIPT_PATH} --action delete --repository_name ${repositoryName} --project ${projectName} --pipeline ${pipeline} --branch ${branchName} --platform ${platform} --build_type ${buildType}", 'Deleting volume') + palSh("${pythonCmd} ${INCREMENTAL_BUILD_SCRIPT_PATH} --action delete --repository_name ${repositoryName} --project ${projectName} --pipeline ${pipeline} --branch ${branchName} --platform ${platform} --build_type ${buildType}", 'Deleting volume', winSlashReplacement=false) } timeout(5) { - palSh("${pythonCmd} ${INCREMENTAL_BUILD_SCRIPT_PATH} --action mount --repository_name ${repositoryName} --project ${projectName} --pipeline ${pipeline} --branch ${branchName} --platform ${platform} --build_type ${buildType}", 'Mounting volume') + palSh("${pythonCmd} ${INCREMENTAL_BUILD_SCRIPT_PATH} --action mount --repository_name ${repositoryName} --project ${projectName} --pipeline ${pipeline} --branch ${branchName} --platform ${platform} --build_type ${buildType}", 'Mounting volume', winSlashReplacement=false) } if(env.IS_UNIX) { From 34be0cd4b5feeb370a14873a90a37898de440bf9 Mon Sep 17 00:00:00 2001 From: mnaumov Date: Mon, 19 Apr 2021 15:31:45 -0700 Subject: [PATCH 30/68] Fixing string search --- .../MaterialEditor/Code/Source/Window/MaterialBrowserWidget.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/Gems/Atom/Tools/MaterialEditor/Code/Source/Window/MaterialBrowserWidget.cpp b/Gems/Atom/Tools/MaterialEditor/Code/Source/Window/MaterialBrowserWidget.cpp index 1d579e5a10..406c585b73 100644 --- a/Gems/Atom/Tools/MaterialEditor/Code/Source/Window/MaterialBrowserWidget.cpp +++ b/Gems/Atom/Tools/MaterialEditor/Code/Source/Window/MaterialBrowserWidget.cpp @@ -138,6 +138,7 @@ namespace MaterialEditor QSharedPointer finalFilter(new CompositeFilter(CompositeFilter::LogicOperatorType::AND)); finalFilter->AddFilter(sourceOrFolderFilter); finalFilter->AddFilter(m_ui->m_searchWidget->GetStringFilter()); + finalFilter->SetFilterPropagation(AssetBrowserEntryFilter::PropagateDirection::Down); return finalFilter; } From 6aabf2ee3db06bc56725b7cecea2e45f4d508621 Mon Sep 17 00:00:00 2001 From: nvsickle Date: Mon, 19 Apr 2021 15:36:25 -0700 Subject: [PATCH 31/68] Don't attempt to render manipulators in game mode --- Code/Sandbox/Editor/EditorViewportWidget.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Code/Sandbox/Editor/EditorViewportWidget.cpp b/Code/Sandbox/Editor/EditorViewportWidget.cpp index 3c714b1d4c..91c70b720f 100644 --- a/Code/Sandbox/Editor/EditorViewportWidget.cpp +++ b/Code/Sandbox/Editor/EditorViewportWidget.cpp @@ -881,6 +881,11 @@ void EditorViewportWidget::OnBeginPrepareRender() GetIEditor()->GetSystem()->SetViewCamera(m_Camera); + if (GetIEditor()->IsInGameMode()) + { + return; + } + PreWidgetRendering(); RenderAll(); From 23b9b3e12b4a9c870f38e7bc1753cd00dfca99de Mon Sep 17 00:00:00 2001 From: shiranj Date: Mon, 19 Apr 2021 15:52:43 -0700 Subject: [PATCH 32/68] Fix indentation --- scripts/build/bootstrap/incremental_build_util.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/build/bootstrap/incremental_build_util.py b/scripts/build/bootstrap/incremental_build_util.py index 0228f129d0..28bb70955e 100755 --- a/scripts/build/bootstrap/incremental_build_util.py +++ b/scripts/build/bootstrap/incremental_build_util.py @@ -205,7 +205,7 @@ def create_volume(ec2_client, availability_zone, repository_name, project, pipel 'ResourceType': 'volume', 'Tags': [ { 'Key': 'Name', 'Value': mount_name }, - {'Key': 'RepositoryName', 'Value': repository_name}, + { 'Key': 'RepositoryName', 'Value': repository_name}, { 'Key': 'Project', 'Value': project }, { 'Key': 'Pipeline', 'Value': pipeline }, { 'Key': 'BranchName', 'Value': branch }, From d1ba2155c52c410e91452ed0b130e692500d30d4 Mon Sep 17 00:00:00 2001 From: mnaumov Date: Mon, 19 Apr 2021 15:55:58 -0700 Subject: [PATCH 33/68] PR feedback --- .../Code/Source/Window/MaterialBrowserInteractions.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gems/Atom/Tools/MaterialEditor/Code/Source/Window/MaterialBrowserInteractions.cpp b/Gems/Atom/Tools/MaterialEditor/Code/Source/Window/MaterialBrowserInteractions.cpp index 167f7d38f5..39654af211 100644 --- a/Gems/Atom/Tools/MaterialEditor/Code/Source/Window/MaterialBrowserInteractions.cpp +++ b/Gems/Atom/Tools/MaterialEditor/Code/Source/Window/MaterialBrowserInteractions.cpp @@ -250,7 +250,7 @@ namespace MaterialEditor menu->addSeparator(); - QAction* createMaterialAction = menu->addAction(QObject::tr("Create New Material")); + QAction* createMaterialAction = menu->addAction(QObject::tr("Create Material...")); QObject::connect(createMaterialAction, &QAction::triggered, caller, [caller, entry]() { CreateMaterialDialog createDialog(entry->GetFullPath().c_str(), caller); From dee0f8470448c5ce4d60944f0db6df091e17c3f0 Mon Sep 17 00:00:00 2001 From: nvsickle Date: Mon, 19 Apr 2021 17:00:36 -0700 Subject: [PATCH 34/68] Clarified lazy initialization and added some thread sanity logic after discussion with @rgba16f --- .../Include/AtomLyIntegration/AtomFont/FFont.h | 1 + .../AtomFont/Code/Source/FFont.cpp | 15 ++++++++++++++- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/Gems/AtomLyIntegration/AtomFont/Code/Include/AtomLyIntegration/AtomFont/FFont.h b/Gems/AtomLyIntegration/AtomFont/Code/Include/AtomLyIntegration/AtomFont/FFont.h index a6066984c7..91fc0834ec 100644 --- a/Gems/AtomLyIntegration/AtomFont/Code/Include/AtomLyIntegration/AtomFont/FFont.h +++ b/Gems/AtomLyIntegration/AtomFont/Code/Include/AtomLyIntegration/AtomFont/FFont.h @@ -302,6 +302,7 @@ namespace AZ bool m_fontTexDirty = false; bool m_fontInitialized = false; + AZStd::atomic_bool m_fontInitializing = false; FontEffects m_effects; diff --git a/Gems/AtomLyIntegration/AtomFont/Code/Source/FFont.cpp b/Gems/AtomLyIntegration/AtomFont/Code/Source/FFont.cpp index 38024393fa..edbf148940 100644 --- a/Gems/AtomLyIntegration/AtomFont/Code/Source/FFont.cpp +++ b/Gems/AtomLyIntegration/AtomFont/Code/Source/FFont.cpp @@ -106,6 +106,14 @@ bool AZ::FFont::InitFont() return true; } + // If we're being initialized in another thread, abort. + if (m_fontInitializing) + { + return false; + } + + m_fontInitializing = true; + // Create and initialize DynamicDrawContext for font draw AZ::RPI::Ptr dynamicDraw = m_atomFont->GetOrCreateDynamicDrawForScene(GetDefaultViewportContext()->GetRenderScene().get()); @@ -129,6 +137,7 @@ bool AZ::FFont::InitFont() m_indexCount = 0; m_fontInitialized = true; + m_fontInitializing = false; return true; } @@ -293,7 +302,11 @@ void AZ::FFont::DrawStringUInternal( const bool asciiMultiLine, const TextDrawContext& ctx) { - InitFont(); + // Lazily ensure we're initialized before attempting to render. + if (!InitFont()) + { + return; + } if (!str || !m_vertexBuffer // vertex buffer isn't created until BootstrapScene is ready, Editor tries to render text before that. From 967d182ccc9f6deb7c2f95bd9c0cef3a5ff60fe8 Mon Sep 17 00:00:00 2001 From: srikappa Date: Mon, 19 Apr 2021 17:29:03 -0700 Subject: [PATCH 35/68] Fixed a couple of typos --- .../Prefab/Instance/InstanceUpdateExecutor.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/Instance/InstanceUpdateExecutor.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/Instance/InstanceUpdateExecutor.cpp index b307d8290c..71b1e04ec8 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/Instance/InstanceUpdateExecutor.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/Instance/InstanceUpdateExecutor.cpp @@ -117,7 +117,7 @@ namespace AzToolsFramework "Could not find Template using Id '%llu'. Unable to update Instance.", currentTemplateId); - // Remove the instance from update queue if it's corresponding template couldn't be found + // Remove the instance from update queue if its corresponding template couldn't be found isUpdateSuccessful = false; m_instancesUpdateQueue.pop(); continue; @@ -128,7 +128,7 @@ namespace AzToolsFramework if (findInstancesResult.find(instanceToUpdate) == findInstancesResult.end()) { - // Since nested instances get reconstructed during propgation, remove any nested instance that no longer + // Since nested instances get reconstructed during propagation, remove any nested instance that no longer // maps to a template. isUpdateSuccessful = false; m_instancesUpdateQueue.pop(); From 7e48bee48fbef40e281ffb3f68aa82dcedf7e515 Mon Sep 17 00:00:00 2001 From: mnaumov Date: Mon, 19 Apr 2021 18:24:23 -0700 Subject: [PATCH 36/68] Fixing thumbnail pixelation --- .../AzToolsFramework/Thumbnails/ThumbnailWidget.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Thumbnails/ThumbnailWidget.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/Thumbnails/ThumbnailWidget.cpp index f2b81fdb98..1aefa6f189 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Thumbnails/ThumbnailWidget.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Thumbnails/ThumbnailWidget.cpp @@ -79,7 +79,9 @@ namespace AzToolsFramework int realHeight = qMin(aznumeric_cast(originalWidth /aspectRatio), originalHeight); int realWidth = aznumeric_cast(realHeight * aspectRatio); int x = (originalWidth - realWidth) / 2; - painter.drawPixmap(QRect(x, 0, realHeight, realWidth), pixmap); + // pixmap needs to be manually scaled to produce smoother result and avoid looking pixelated + // using painter.setRenderHint(QPainter::SmoothPixmapTransform); does not seem to work + painter.drawPixmap(QPoint(x, 0), pixmap.scaled(realWidth, realHeight, Qt::IgnoreAspectRatio, Qt::SmoothTransformation)); } QWidget::paintEvent(event); } From 7901fe8625b3bbd31a569f0c7dd89a7d43cd8830 Mon Sep 17 00:00:00 2001 From: AMZN-daimini <82231674+AMZN-daimini@users.noreply.github.com> Date: Mon, 19 Apr 2021 21:52:10 -0700 Subject: [PATCH 37/68] Reset the whole Qt model when an entry in the EditorEntityModel is removed. (#48) (#82) An optimization introduced in Prefab mode currently changes the relative ordering of children, causing stale QModelIndex variables to still be referenced and crash the Editor sporadically. This change is theoretically a bit slower, but still much faster than the pre-optimization times. Co-authored-by: Shirang Jia Co-authored-by: Shirang Jia --- .../AzToolsFramework/UI/Outliner/EntityOutlinerListModel.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Outliner/EntityOutlinerListModel.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Outliner/EntityOutlinerListModel.cpp index ea281aacf7..de10ae18b4 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Outliner/EntityOutlinerListModel.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Outliner/EntityOutlinerListModel.cpp @@ -1344,14 +1344,15 @@ namespace AzToolsFramework emit EnableSelectionUpdates(false); auto parentIndex = GetIndexFromEntity(parentId); auto childIndex = GetIndexFromEntity(childId); - beginRemoveRows(parentIndex, childIndex.row(), childIndex.row()); + beginResetModel(); } void EntityOutlinerListModel::OnEntityInfoUpdatedRemoveChildEnd(AZ::EntityId parentId, AZ::EntityId childId) { (void)childId; AZ_PROFILE_FUNCTION(AZ::Debug::ProfileCategory::AzToolsFramework); - endRemoveRows(); + + endResetModel(); //must refresh partial lock/visibility of parents m_isFilterDirty = true; From 9cc0d3fa2d14596efdbfccf5e4650b778c60a78f Mon Sep 17 00:00:00 2001 From: dmcdiar Date: Tue, 20 Apr 2021 01:01:27 -0700 Subject: [PATCH 38/68] Minor cleanup --- .../DiffuseProbeGrid/DiffuseProbeGridClassificationPass.h | 3 --- 1 file changed, 3 deletions(-) diff --git a/Gems/Atom/Feature/Common/Code/Source/DiffuseProbeGrid/DiffuseProbeGridClassificationPass.h b/Gems/Atom/Feature/Common/Code/Source/DiffuseProbeGrid/DiffuseProbeGridClassificationPass.h index df0a237e1a..677e16ac42 100644 --- a/Gems/Atom/Feature/Common/Code/Source/DiffuseProbeGrid/DiffuseProbeGridClassificationPass.h +++ b/Gems/Atom/Feature/Common/Code/Source/DiffuseProbeGrid/DiffuseProbeGridClassificationPass.h @@ -58,9 +58,6 @@ namespace AZ const RHI::PipelineState* m_pipelineState = nullptr; Data::Asset m_srgAsset; RHI::DispatchDirect m_dispatchArgs; - - // revision number of the ray tracing data when the shader table was built - uint32_t m_rayTracingDataRevision = 0; }; } // namespace Render } // namespace AZ From 33e61ad35ba191fd8490e02fe151476256e0bb54 Mon Sep 17 00:00:00 2001 From: mbalfour Date: Wed, 14 Apr 2021 16:03:27 -0500 Subject: [PATCH 39/68] Added SetEntityName and exposed Get/SetEntityName to the behavior context for use from scripts. (cherry picked from commit 4f2e0b74727cfe99c74ed588769a540f24d7aa46) --- .../AzCore/Component/ComponentApplication.cpp | 24 +++++++++++++++++++ .../AzCore/Component/ComponentApplication.h | 1 + .../Component/ComponentApplicationBus.h | 8 ++++++- 3 files changed, 32 insertions(+), 1 deletion(-) diff --git a/Code/Framework/AzCore/AzCore/Component/ComponentApplication.cpp b/Code/Framework/AzCore/AzCore/Component/ComponentApplication.cpp index a3af2648cf..a3986f72dd 100644 --- a/Code/Framework/AzCore/AzCore/Component/ComponentApplication.cpp +++ b/Code/Framework/AzCore/AzCore/Component/ComponentApplication.cpp @@ -341,6 +341,16 @@ namespace AZ ; } } + + if (auto behaviorContext = azrtti_cast(context)) + { + behaviorContext->EBus("ComponentApplicationBus") + ->Attribute(AZ::Script::Attributes::Scope, AZ::Script::Attributes::ScopeFlags::Common) + ->Attribute(AZ::Script::Attributes::Category, "Components") + + ->Event("GetEntityName", &ComponentApplicationBus::Events::GetEntityName) + ->Event("SetEntityName", &ComponentApplicationBus::Events::SetEntityName); + } } //========================================================================= @@ -1050,6 +1060,20 @@ namespace AZ return AZStd::string(); } + //========================================================================= + // SetEntityName + //========================================================================= + bool ComponentApplication::SetEntityName(const EntityId& id, const AZStd::string& name) + { + Entity* entity = FindEntity(id); + if (entity) + { + entity->SetName(name); + return true; + } + return false; + } + //========================================================================= // EnumerateEntities //========================================================================= diff --git a/Code/Framework/AzCore/AzCore/Component/ComponentApplication.h b/Code/Framework/AzCore/AzCore/Component/ComponentApplication.h index ef5c813573..a66409eaf3 100644 --- a/Code/Framework/AzCore/AzCore/Component/ComponentApplication.h +++ b/Code/Framework/AzCore/AzCore/Component/ComponentApplication.h @@ -209,6 +209,7 @@ namespace AZ bool DeleteEntity(const EntityId& id) override; Entity* FindEntity(const EntityId& id) override; AZStd::string GetEntityName(const EntityId& id) override; + bool SetEntityName(const EntityId& id, const AZStd::string& name) override; void EnumerateEntities(const ComponentApplicationRequests::EntityCallback& callback) override; ComponentApplication* GetApplication() override { return this; } /// Returns the serialize context that has been registered with the app, if there is one. diff --git a/Code/Framework/AzCore/AzCore/Component/ComponentApplicationBus.h b/Code/Framework/AzCore/AzCore/Component/ComponentApplicationBus.h index d0f161aa39..a3602c303e 100644 --- a/Code/Framework/AzCore/AzCore/Component/ComponentApplicationBus.h +++ b/Code/Framework/AzCore/AzCore/Component/ComponentApplicationBus.h @@ -130,7 +130,13 @@ namespace AZ //! @param entity A reference to the entity whose name you are seeking. //! @return The name of the entity with the specified entity ID. //! If no entity is found for the specified ID, it returns an empty string. - virtual AZStd::string GetEntityName(const EntityId& id) { (void)id; return AZStd::string(); }; + virtual AZStd::string GetEntityName(const EntityId& id) { (void)id; return AZStd::string(); } + + //! Sets the name of the entity that has the specified entity ID. + //! Entity names are not enforced to be unique. + //! @param entityId A reference to the entity whose name you want to change. + //! @return True if the name was changed successfully, false if it wasn't. + virtual bool SetEntityName([[maybe_unused]] const EntityId& id, [[maybe_unused]] const AZStd::string& name) { return false; } //! The type that AZ::ComponentApplicationRequests::EnumerateEntities uses to //! pass entity callbacks to the application for enumeration. From e8459898a7f887008fe2375673e3cddb39f1d40c Mon Sep 17 00:00:00 2001 From: mbalfour Date: Wed, 14 Apr 2021 16:04:44 -0500 Subject: [PATCH 40/68] Exposed Quaternion::CreateFromEulerAnglesDegrees and Transform::Transform(Vector3, Quaternion, Vector3) to the behavior context to improve usability of these classes from scripts. (cherry picked from commit 8156beb21181f9ff20972c8ea8be5e3dc61f1700) --- Code/Framework/AzCore/AzCore/Math/Quaternion.cpp | 3 ++- Code/Framework/AzCore/AzCore/Math/Transform.cpp | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/Code/Framework/AzCore/AzCore/Math/Quaternion.cpp b/Code/Framework/AzCore/AzCore/Math/Quaternion.cpp index ca09f8b453..143fe59ca7 100644 --- a/Code/Framework/AzCore/AzCore/Math/Quaternion.cpp +++ b/Code/Framework/AzCore/AzCore/Math/Quaternion.cpp @@ -258,7 +258,8 @@ namespace AZ Method("CreateFromMatrix3x3", &Quaternion::CreateFromMatrix3x3)-> Method("CreateFromMatrix4x4", &Quaternion::CreateFromMatrix4x4)-> Method("CreateFromAxisAngle", &Quaternion::CreateFromAxisAngle)-> - Method("CreateShortestArc", &Quaternion::CreateShortestArc) + Method("CreateShortestArc", &Quaternion::CreateShortestArc)-> + Method("CreateFromEulerAnglesDegrees", &Quaternion::CreateFromEulerAnglesDegrees) ; } } diff --git a/Code/Framework/AzCore/AzCore/Math/Transform.cpp b/Code/Framework/AzCore/AzCore/Math/Transform.cpp index 77d8658d0f..bb3f764492 100644 --- a/Code/Framework/AzCore/AzCore/Math/Transform.cpp +++ b/Code/Framework/AzCore/AzCore/Math/Transform.cpp @@ -250,6 +250,7 @@ namespace AZ Attribute(Script::Attributes::ExcludeFrom, Script::Attributes::ExcludeFlags::All)-> Attribute(Script::Attributes::Storage, Script::Attributes::StorageType::Value)-> Attribute(Script::Attributes::GenericConstructorOverride, &Internal::TransformDefaultConstructor)-> + Constructor()-> Method("GetBasis", &Transform::GetBasis)-> Method("GetBasisX", &Transform::GetBasisX)-> Method("GetBasisY", &Transform::GetBasisY)-> From 5aa4642c12df54a6f7c53986bbe6dd5169f89d5f Mon Sep 17 00:00:00 2001 From: mbalfour Date: Wed, 14 Apr 2021 16:05:50 -0500 Subject: [PATCH 41/68] Added another implicit converter to MaterialPropertyValue so that generated images can be used with material properties more easily. (cherry picked from commit 66d7e9672ca0d6ced068dd95d8b52f88b5492c1f) --- .../Include/Atom/RPI.Reflect/Material/MaterialPropertyValue.h | 1 + 1 file changed, 1 insertion(+) diff --git a/Gems/Atom/RPI/Code/Include/Atom/RPI.Reflect/Material/MaterialPropertyValue.h b/Gems/Atom/RPI/Code/Include/Atom/RPI.Reflect/Material/MaterialPropertyValue.h index cafd31d8a5..758afb1c66 100644 --- a/Gems/Atom/RPI/Code/Include/Atom/RPI.Reflect/Material/MaterialPropertyValue.h +++ b/Gems/Atom/RPI/Code/Include/Atom/RPI.Reflect/Material/MaterialPropertyValue.h @@ -65,6 +65,7 @@ namespace AZ MaterialPropertyValue(const Vector4& value) : m_value(value) {} MaterialPropertyValue(const Color& value) : m_value(value) {} MaterialPropertyValue(const Data::Asset& value) : m_value(value) {} + MaterialPropertyValue(const Data::Instance& value) : m_value(value) {} MaterialPropertyValue(const AZStd::string& value) : m_value(value) {} //! Copy constructor From 3e8625b78b83a56ae3f9557060f3e9bf4387517b Mon Sep 17 00:00:00 2001 From: mbalfour Date: Wed, 14 Apr 2021 16:09:02 -0500 Subject: [PATCH 42/68] Added "IsReadyToSpawn" to help detect when a spawner is ready to start spawning. Also added a small optimization to SetDynamicSliceByAssetId so that it doesn't do anything when setting it to the same value as before. (cherry picked from commit ff8a93e71f3017e8555012855f3e2155ec74a405) --- .../Source/Scripting/SpawnerComponent.cpp | 25 +++++++++++-------- .../Code/Source/Scripting/SpawnerComponent.h | 3 ++- .../Scripting/SpawnerComponentBus.h | 3 +++ 3 files changed, 20 insertions(+), 11 deletions(-) diff --git a/Gems/LmbrCentral/Code/Source/Scripting/SpawnerComponent.cpp b/Gems/LmbrCentral/Code/Source/Scripting/SpawnerComponent.cpp index 2595fc09fd..7b76a1465c 100644 --- a/Gems/LmbrCentral/Code/Source/Scripting/SpawnerComponent.cpp +++ b/Gems/LmbrCentral/Code/Source/Scripting/SpawnerComponent.cpp @@ -148,6 +148,7 @@ namespace LmbrCentral ->Event("GetCurrentEntitiesFromSpawnedSlice", &SpawnerComponentRequestBus::Events::GetCurrentEntitiesFromSpawnedSlice) ->Event("GetAllCurrentlySpawnedEntities", &SpawnerComponentRequestBus::Events::GetAllCurrentlySpawnedEntities) ->Event("SetDynamicSlice", &SpawnerComponentRequestBus::Events::SetDynamicSliceByAssetId) + ->Event("IsReadyToSpawn", &SpawnerComponentRequestBus::Events::IsReadyToSpawn) ; behaviorContext->EBus("SpawnerComponentNotificationBus") @@ -250,17 +251,15 @@ namespace LmbrCentral //========================================================================= void SpawnerComponent::SetDynamicSliceByAssetId(AZ::Data::AssetId& assetId) { - auto sliceAsset = AZ::Data::AssetManager::Instance().GetAsset(assetId, AZ::AzTypeInfo::Uuid(), m_sliceAsset.GetAutoLoadBehavior()); + if (m_sliceAsset.GetId() == assetId) + { + return; + } - if (sliceAsset.IsReady()) - { - m_sliceAsset = sliceAsset; - } - else - { - AZ::Data::AssetBus::Handler::BusDisconnect(); - AZ::Data::AssetBus::Handler::BusConnect(assetId); - } + m_sliceAsset = AZ::Data::AssetManager::Instance().GetAsset( + assetId, AZ::AzTypeInfo::Uuid(), m_sliceAsset.GetAutoLoadBehavior()); + AZ::Data::AssetBus::Handler::BusDisconnect(); + AZ::Data::AssetBus::Handler::BusConnect(assetId); } //========================================================================= @@ -444,6 +443,12 @@ namespace LmbrCentral return entities; } + //========================================================================= + bool SpawnerComponent::IsReadyToSpawn() + { + return m_sliceAsset.IsReady(); + } + //========================================================================= void SpawnerComponent::OnSlicePreInstantiate(const AZ::Data::AssetId& /*sliceAssetId*/, [[maybe_unused]] const AZ::SliceComponent::SliceInstanceAddress& sliceAddress) { diff --git a/Gems/LmbrCentral/Code/Source/Scripting/SpawnerComponent.h b/Gems/LmbrCentral/Code/Source/Scripting/SpawnerComponent.h index 3dee332df3..75f5db8df2 100644 --- a/Gems/LmbrCentral/Code/Source/Scripting/SpawnerComponent.h +++ b/Gems/LmbrCentral/Code/Source/Scripting/SpawnerComponent.h @@ -70,7 +70,8 @@ namespace LmbrCentral AZStd::vector GetCurrentlySpawnedSlices() override; bool HasAnyCurrentlySpawnedSlices() override; AZStd::vector GetCurrentEntitiesFromSpawnedSlice(const AzFramework::SliceInstantiationTicket& ticket) override; - AZStd::vector GetAllCurrentlySpawnedEntities(); + AZStd::vector GetAllCurrentlySpawnedEntities() override; + bool IsReadyToSpawn() override; ////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////// diff --git a/Gems/LmbrCentral/Code/include/LmbrCentral/Scripting/SpawnerComponentBus.h b/Gems/LmbrCentral/Code/include/LmbrCentral/Scripting/SpawnerComponentBus.h index 6122a747f3..92ca003300 100644 --- a/Gems/LmbrCentral/Code/include/LmbrCentral/Scripting/SpawnerComponentBus.h +++ b/Gems/LmbrCentral/Code/include/LmbrCentral/Scripting/SpawnerComponentBus.h @@ -91,6 +91,9 @@ namespace LmbrCentral //! Note that spawning is not instant, if a slice hasn't finished spawning then none of its entities are returned. //! If an entity has been destroyed since it was spawned, its ID is not returned. virtual AZStd::vector GetAllCurrentlySpawnedEntities() = 0; + + //! Returns whether or not the spawner is in a state that's ready to spawn. + virtual bool IsReadyToSpawn() = 0; }; using SpawnerComponentRequestBus = AZ::EBus; From 1256994696a847a0c82662a1994555ecccda22ba Mon Sep 17 00:00:00 2001 From: Aaron Ruiz Mora Date: Tue, 20 Apr 2021 15:38:26 +0100 Subject: [PATCH 43/68] Cleaning up NvCloth gem. Removed any reference to LmbrCentral and legacy renderer since now it uses Atom. (#154) - Removed any usage of LmbCentral and legacy renderer from NvCloth gem. - Cloth rule can only be added to Mesh groups, not allowed in Actor groups anymore. - Removed ActorAssetHelper since actors now share the mesh model format and therefore they also use MeshAssetHelper. - Updated NvCloth gem.json file with the fields from the template. - Updated cloth chicken asset to not convert axis. --- .../cloth/Chicken/Actor/chicken.fbx.assetinfo | 94 ++++++- Gems/NvCloth/Code/CMakeLists.txt | 20 +- .../ClothComponentMesh/ClothDebugDisplay.cpp | 27 +-- Gems/NvCloth/Code/Source/Module.cpp | 2 - .../Pipeline/RCExt/CgfClothExporter.cpp | 120 --------- .../Source/Pipeline/RCExt/CgfClothExporter.h | 50 ---- .../SceneAPIExt/ClothRuleBehavior.cpp | 6 +- .../Code/Source/System/SystemComponent.cpp | 3 - .../Code/Source/Utils/ActorAssetHelper.cpp | 229 ------------------ .../Code/Source/Utils/ActorAssetHelper.h | 49 ---- .../NvCloth/Code/Source/Utils/AssetHelper.cpp | 1 - Gems/NvCloth/Code/Source/Utils/AssetHelper.h | 3 - .../Code/Source/Utils/MeshAssetHelper.cpp | 6 - .../Code/Source/Utils/MeshAssetHelper.h | 6 - .../ClothComponentMeshTest.cpp | 7 +- Gems/NvCloth/Code/Tests/CryRenderMeshStub.h | 130 ---------- .../Tests/NvClothEditorTestEnvironment.cpp | 2 - .../Code/Tests/Utils/ActorAssetHelperTest.cpp | 16 -- Gems/NvCloth/Code/nvcloth_editor_files.cmake | 2 - Gems/NvCloth/Code/nvcloth_files.cmake | 2 - Gems/NvCloth/Code/nvcloth_tests_files.cmake | 1 - Gems/NvCloth/gem.json | 47 +--- 22 files changed, 104 insertions(+), 719 deletions(-) delete mode 100644 Gems/NvCloth/Code/Source/Pipeline/RCExt/CgfClothExporter.cpp delete mode 100644 Gems/NvCloth/Code/Source/Pipeline/RCExt/CgfClothExporter.h delete mode 100644 Gems/NvCloth/Code/Source/Utils/ActorAssetHelper.cpp delete mode 100644 Gems/NvCloth/Code/Source/Utils/ActorAssetHelper.h delete mode 100644 Gems/NvCloth/Code/Tests/CryRenderMeshStub.h diff --git a/Gems/NvCloth/Assets/Objects/cloth/Chicken/Actor/chicken.fbx.assetinfo b/Gems/NvCloth/Assets/Objects/cloth/Chicken/Actor/chicken.fbx.assetinfo index a6024e0c5f..92c20c02ac 100644 --- a/Gems/NvCloth/Assets/Objects/cloth/Chicken/Actor/chicken.fbx.assetinfo +++ b/Gems/NvCloth/Assets/Objects/cloth/Chicken/Actor/chicken.fbx.assetinfo @@ -8,7 +8,7 @@ "rules": [ { "$type": "MetaDataRule", - "metaData": "AdjustActor -actorID $(ACTORID) -name \"chicken\"\r\nActorSetCollisionMeshes -actorID $(ACTORID) -lod 0 -nodeList \"\"\r\nAdjustActor -actorID $(ACTORID) -nodesExcludedFromBounds \"\" -nodeAction \"select\"\r\nAdjustActor -actorID $(ACTORID) -nodeAction \"replace\" -attachmentNodes \"\"\r\n" + "metaData": "AdjustActor -actorID $(ACTORID) -name \"chicken\"\nActorSetCollisionMeshes -actorID $(ACTORID) -lod 0 -nodeList \"\"\nAdjustActor -actorID $(ACTORID) -nodesExcludedFromBounds \"\" -nodeAction \"select\"\nAdjustActor -actorID $(ACTORID) -nodeAction \"replace\" -attachmentNodes \"\"\nAdjustActor -actorID $(ACTORID) -mirrorSetup \"\"\n" }, { "$type": "ActorPhysicsSetupRule", @@ -50,15 +50,15 @@ { "Visible": true, "Position": [ - -0.03810190036892891, - 0.0, - -0.03132440149784088 + 0.08189810067415238, + -2.4586914726398847e-9, + -0.4713243842124939 ], "propertyVisibilityFlags": 248 }, { "$type": "SphereShapeConfiguration", - "Radius": 0.16069939732551576 + "Radius": 0.2406993955373764 } ] ] @@ -82,14 +82,38 @@ } ] ] + }, + { + "name": "def_c_feather2_joint", + "shapes": [ + [ + { + "Visible": true, + "Position": [ + 0.06151500344276428, + 0.1300000101327896, + 7.729977369308472e-8 + ], + "Rotation": [ + 0.0, + 0.7071062922477722, + 0.0, + 0.7071072459220886 + ], + "propertyVisibilityFlags": 248 + }, + { + "$type": "CapsuleShapeConfiguration", + "Height": 0.5730299949645996, + "Radius": 0.06151498109102249 + } + ] + ] } ] } } } - }, - { - "$type": "CoordinateSystemRule" } ] } @@ -99,47 +123,94 @@ "name": "chicken", "nodeSelectionList": { "selectedNodes": [ - {}, "RootNode", "RootNode.chicken_skeleton", "RootNode.chicken_feet_skin", "RootNode.chicken_eyes_skin", "RootNode.chicken_body_skin", "RootNode.chicken_mohawk", + "RootNode.chicken_skeleton.transform", "RootNode.chicken_skeleton.def_c_chickenRoot_joint", + "RootNode.chicken_feet_skin.SkinWeight_0", + "RootNode.chicken_feet_skin.map1", + "RootNode.chicken_feet_skin.chicken_body_mat", + "RootNode.chicken_eyes_skin.SkinWeight_0", + "RootNode.chicken_eyes_skin.uvSet1", + "RootNode.chicken_eyes_skin.chicken_eye_mat", + "RootNode.chicken_body_skin.SkinWeight_0", + "RootNode.chicken_body_skin.map1", + "RootNode.chicken_body_skin.chicken_body_mat", + "RootNode.chicken_mohawk.SkinWeight_0", + "RootNode.chicken_mohawk.colorSet1", + "RootNode.chicken_mohawk.map1", + "RootNode.chicken_mohawk.mohawkMat", + "RootNode.chicken_skeleton.def_c_chickenRoot_joint.transform", "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint", + "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.transform", "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_c_spine2_joint", "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_l_uprLeg_joint", "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_r_uprLeg_joint", + "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_c_spine2_joint.transform", "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_c_spine2_joint.def_c_spine3_joint", + "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_l_uprLeg_joint.transform", "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_l_uprLeg_joint.def_l_lwrLeg_joint", + "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_r_uprLeg_joint.transform", "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_r_uprLeg_joint.def_r_lwrLeg_joint", + "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_c_spine2_joint.def_c_spine3_joint.transform", "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_c_spine2_joint.def_c_spine3_joint.def_c_spine_end", "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_c_spine2_joint.def_c_spine3_joint.def_l_wing1_joint", "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_c_spine2_joint.def_c_spine3_joint.def_r_wing1_joint", + "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_l_uprLeg_joint.def_l_lwrLeg_joint.transform", "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_l_uprLeg_joint.def_l_lwrLeg_joint.def_l_foot_joint", + "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_r_uprLeg_joint.def_r_lwrLeg_joint.transform", "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_r_uprLeg_joint.def_r_lwrLeg_joint.def_r_foot_joint", + "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_c_spine2_joint.def_c_spine3_joint.def_c_spine_end.transform", "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_c_spine2_joint.def_c_spine3_joint.def_c_spine_end.def_c_tail1_joint", "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_c_spine2_joint.def_c_spine3_joint.def_c_spine_end.def_c_neck_joint", + "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_c_spine2_joint.def_c_spine3_joint.def_l_wing1_joint.transform", "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_c_spine2_joint.def_c_spine3_joint.def_l_wing1_joint.def_l_wing2_joint", + "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_c_spine2_joint.def_c_spine3_joint.def_r_wing1_joint.transform", "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_c_spine2_joint.def_c_spine3_joint.def_r_wing1_joint.def_r_wing2_joint", + "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_l_uprLeg_joint.def_l_lwrLeg_joint.def_l_foot_joint.transform", "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_l_uprLeg_joint.def_l_lwrLeg_joint.def_l_foot_joint.def_l_ball_joint", + "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_r_uprLeg_joint.def_r_lwrLeg_joint.def_r_foot_joint.transform", "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_r_uprLeg_joint.def_r_lwrLeg_joint.def_r_foot_joint.def_r_ball_joint", + "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_c_spine2_joint.def_c_spine3_joint.def_c_spine_end.def_c_tail1_joint.transform", "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_c_spine2_joint.def_c_spine3_joint.def_c_spine_end.def_c_tail1_joint.def_c_tail2_joint", + "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_c_spine2_joint.def_c_spine3_joint.def_c_spine_end.def_c_neck_joint.transform", "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_c_spine2_joint.def_c_spine3_joint.def_c_spine_end.def_c_neck_joint.def_c_head_joint", + "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_c_spine2_joint.def_c_spine3_joint.def_l_wing1_joint.def_l_wing2_joint.transform", "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_c_spine2_joint.def_c_spine3_joint.def_l_wing1_joint.def_l_wing2_joint.def_l_wing_end", + "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_c_spine2_joint.def_c_spine3_joint.def_r_wing1_joint.def_r_wing2_joint.transform", "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_c_spine2_joint.def_c_spine3_joint.def_r_wing1_joint.def_r_wing2_joint.def_r_wing_end", + "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_l_uprLeg_joint.def_l_lwrLeg_joint.def_l_foot_joint.def_l_ball_joint.transform", + "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_r_uprLeg_joint.def_r_lwrLeg_joint.def_r_foot_joint.def_r_ball_joint.transform", + "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_c_spine2_joint.def_c_spine3_joint.def_c_spine_end.def_c_tail1_joint.def_c_tail2_joint.transform", + "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_c_spine2_joint.def_c_spine3_joint.def_c_spine_end.def_c_neck_joint.def_c_head_joint.transform", "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_c_spine2_joint.def_c_spine3_joint.def_c_spine_end.def_c_neck_joint.def_c_head_joint.def_c_feather1_joint", "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_c_spine2_joint.def_c_spine3_joint.def_c_spine_end.def_c_neck_joint.def_c_head_joint.def_c_mouth_joint", "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_c_spine2_joint.def_c_spine3_joint.def_c_spine_end.def_c_neck_joint.def_c_head_joint.def_c_waddle1_joint", + "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_c_spine2_joint.def_c_spine3_joint.def_l_wing1_joint.def_l_wing2_joint.def_l_wing_end.transform", + "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_c_spine2_joint.def_c_spine3_joint.def_r_wing1_joint.def_r_wing2_joint.def_r_wing_end.transform", + "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_c_spine2_joint.def_c_spine3_joint.def_c_spine_end.def_c_neck_joint.def_c_head_joint.def_c_feather1_joint.transform", "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_c_spine2_joint.def_c_spine3_joint.def_c_spine_end.def_c_neck_joint.def_c_head_joint.def_c_feather1_joint.def_c_feather2_joint", + "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_c_spine2_joint.def_c_spine3_joint.def_c_spine_end.def_c_neck_joint.def_c_head_joint.def_c_mouth_joint.transform", "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_c_spine2_joint.def_c_spine3_joint.def_c_spine_end.def_c_neck_joint.def_c_head_joint.def_c_mouth_joint.def_c_mouth_end", + "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_c_spine2_joint.def_c_spine3_joint.def_c_spine_end.def_c_neck_joint.def_c_head_joint.def_c_waddle1_joint.transform", "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_c_spine2_joint.def_c_spine3_joint.def_c_spine_end.def_c_neck_joint.def_c_head_joint.def_c_waddle1_joint.def_c_waddle2_joint", + "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_c_spine2_joint.def_c_spine3_joint.def_c_spine_end.def_c_neck_joint.def_c_head_joint.def_c_feather1_joint.def_c_feather2_joint.transform", "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_c_spine2_joint.def_c_spine3_joint.def_c_spine_end.def_c_neck_joint.def_c_head_joint.def_c_feather1_joint.def_c_feather2_joint.def_c_feather3_joint", + "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_c_spine2_joint.def_c_spine3_joint.def_c_spine_end.def_c_neck_joint.def_c_head_joint.def_c_mouth_joint.def_c_mouth_end.transform", + "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_c_spine2_joint.def_c_spine3_joint.def_c_spine_end.def_c_neck_joint.def_c_head_joint.def_c_waddle1_joint.def_c_waddle2_joint.transform", "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_c_spine2_joint.def_c_spine3_joint.def_c_spine_end.def_c_neck_joint.def_c_head_joint.def_c_waddle1_joint.def_c_waddle2_joint.def_c_waddle3_joint", + "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_c_spine2_joint.def_c_spine3_joint.def_c_spine_end.def_c_neck_joint.def_c_head_joint.def_c_feather1_joint.def_c_feather2_joint.def_c_feather3_joint.transform", "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_c_spine2_joint.def_c_spine3_joint.def_c_spine_end.def_c_neck_joint.def_c_head_joint.def_c_feather1_joint.def_c_feather2_joint.def_c_feather3_joint.def_c_feather4_joint", + "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_c_spine2_joint.def_c_spine3_joint.def_c_spine_end.def_c_neck_joint.def_c_head_joint.def_c_waddle1_joint.def_c_waddle2_joint.def_c_waddle3_joint.transform", "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_c_spine2_joint.def_c_spine3_joint.def_c_spine_end.def_c_neck_joint.def_c_head_joint.def_c_waddle1_joint.def_c_waddle2_joint.def_c_waddle3_joint.def_c_waddle_end", - "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_c_spine2_joint.def_c_spine3_joint.def_c_spine_end.def_c_neck_joint.def_c_head_joint.def_c_feather1_joint.def_c_feather2_joint.def_c_feather3_joint.def_c_feather4_joint.def_c_feather_end" + "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_c_spine2_joint.def_c_spine3_joint.def_c_spine_end.def_c_neck_joint.def_c_head_joint.def_c_feather1_joint.def_c_feather2_joint.def_c_feather3_joint.def_c_feather4_joint.transform", + "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_c_spine2_joint.def_c_spine3_joint.def_c_spine_end.def_c_neck_joint.def_c_head_joint.def_c_feather1_joint.def_c_feather2_joint.def_c_feather3_joint.def_c_feather4_joint.def_c_feather_end", + "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_c_spine2_joint.def_c_spine3_joint.def_c_spine_end.def_c_neck_joint.def_c_head_joint.def_c_waddle1_joint.def_c_waddle2_joint.def_c_waddle3_joint.def_c_waddle_end.transform", + "RootNode.chicken_skeleton.def_c_chickenRoot_joint.def_c_spine1_joint.def_c_spine2_joint.def_c_spine3_joint.def_c_spine_end.def_c_neck_joint.def_c_head_joint.def_c_feather1_joint.def_c_feather2_joint.def_c_feather3_joint.def_c_feather4_joint.def_c_feather_end.transform" ] }, "rules": { @@ -154,9 +225,6 @@ { "$type": "MaterialRule" }, - { - "$type": "CoordinateSystemRule" - }, { "$type": "ClothRule", "meshNodeName": "RootNode.chicken_mohawk", diff --git a/Gems/NvCloth/Code/CMakeLists.txt b/Gems/NvCloth/Code/CMakeLists.txt index 8c2c5cafab..983e7ff8f8 100644 --- a/Gems/NvCloth/Code/CMakeLists.txt +++ b/Gems/NvCloth/Code/CMakeLists.txt @@ -30,8 +30,12 @@ ly_add_target( BUILD_DEPENDENCIES PUBLIC 3rdParty::NvCloth - Gem::LmbrCentral - Gem::AtomLyIntegration_CommonFeatures.Static + # CryCommon required for 'gEnv->IsDedicated()'. + # Because of this the module will need CrySystemEventBus to initialize gEnv + # and tests targets will need to fake gEnv. To be removed when there is + # an AZ replacement for asking if the game is running on a server or not. + Legacy::CryCommon + Gem::AtomLyIntegration_CommonFeatures.Public PRIVATE Gem::EMotionFXStaticLib ) @@ -50,10 +54,9 @@ ly_add_target( PUBLIC AZ::AzCore PRIVATE - Legacy::CryCommon Gem::NvCloth.Static RUNTIME_DEPENDENCIES - Gem::LmbrCentral + Gem::AtomLyIntegration_CommonFeatures ) if(PAL_TRAIT_BUILD_HOST_TOOLS) @@ -76,8 +79,6 @@ if(PAL_TRAIT_BUILD_HOST_TOOLS) Gem::NvCloth.Static AZ::AzToolsFramework AZ::SceneCore - PRIVATE - Gem::EMotionFXStaticLib ) ly_add_target( @@ -95,10 +96,9 @@ if(PAL_TRAIT_BUILD_HOST_TOOLS) NVCLOTH_EDITOR BUILD_DEPENDENCIES PRIVATE - Legacy::CryCommon Gem::NvCloth.Editor.Static RUNTIME_DEPENDENCIES - Gem::LmbrCentral.Editor + Gem::AtomLyIntegration_CommonFeatures.Editor ) endif() @@ -118,7 +118,6 @@ if(PAL_TRAIT_BUILD_TESTS_SUPPORTED) Source BUILD_DEPENDENCIES PRIVATE - Legacy::CryCommon AZ::AzTestShared AZ::AzTest Gem::NvCloth.Static @@ -126,7 +125,6 @@ if(PAL_TRAIT_BUILD_TESTS_SUPPORTED) Gem::EMotionFX.Tests.Static RUNTIME_DEPENDENCIES Gem::EMotionFX - Gem::LmbrCentral ) ly_add_googletest( NAME Gem::NvCloth.Tests @@ -148,7 +146,6 @@ if(PAL_TRAIT_BUILD_TESTS_SUPPORTED) NVCLOTH_EDITOR BUILD_DEPENDENCIES PRIVATE - Legacy::CryCommon AZ::AzTestShared AZ::AzTest AZ::AzToolsFrameworkTestCommon @@ -157,7 +154,6 @@ if(PAL_TRAIT_BUILD_TESTS_SUPPORTED) Gem::EMotionFX.Tests.Static RUNTIME_DEPENDENCIES Gem::EMotionFX.Editor - Gem::LmbrCentral.Editor ) ly_add_googletest( NAME Gem::NvCloth.Editor.Tests diff --git a/Gems/NvCloth/Code/Source/Components/ClothComponentMesh/ClothDebugDisplay.cpp b/Gems/NvCloth/Code/Source/Components/ClothComponentMesh/ClothDebugDisplay.cpp index d5f891e117..809a3a5129 100644 --- a/Gems/NvCloth/Code/Source/Components/ClothComponentMesh/ClothDebugDisplay.cpp +++ b/Gems/NvCloth/Code/Source/Components/ClothComponentMesh/ClothDebugDisplay.cpp @@ -13,7 +13,6 @@ #include #include -#include #include #include @@ -285,29 +284,11 @@ namespace NvCloth AzFramework::DebugDisplayRequests& debugDisplay, float radius, float height, const AZ::Transform& transform, - const AZ::Color& color) + [[maybe_unused]] const AZ::Color& color) { - debugDisplay.PushMatrix(transform); + const float heightStraightSection = AZStd::max(AZ::Constants::FloatEpsilon, height - 2.0f * radius); - AZStd::vector capsuleVertexBuffer; - AZStd::vector capsuleIndexBuffer; - AZStd::vector capsuleLineBuffer; - const AZ::u32 sides = 16; - const AZ::u32 capSegments = 8; - - LmbrCentral::CapsuleGeometrySystemRequestBus::Broadcast( - &LmbrCentral::CapsuleGeometrySystemRequestBus::Events::GenerateCapsuleMesh, - radius, - height, - sides, capSegments, - capsuleVertexBuffer, - capsuleIndexBuffer, - capsuleLineBuffer - ); - - debugDisplay.DrawTrianglesIndexed(capsuleVertexBuffer, capsuleIndexBuffer, color); - debugDisplay.DrawLines(capsuleLineBuffer, AzFramework::ViewportColors::WireColor); - - debugDisplay.PopMatrix(); + debugDisplay.SetColor(AzFramework::ViewportColors::WireColor); + debugDisplay.DrawWireCapsule(transform.GetTranslation(), transform.GetBasisZ(), radius, heightStraightSection); } } // namespace NvCloth diff --git a/Gems/NvCloth/Code/Source/Module.cpp b/Gems/NvCloth/Code/Source/Module.cpp index 3a884b306c..08d673fd07 100644 --- a/Gems/NvCloth/Code/Source/Module.cpp +++ b/Gems/NvCloth/Code/Source/Module.cpp @@ -25,7 +25,6 @@ #include #include #include -#include #endif //NVCLOTH_EDITOR namespace NvCloth @@ -59,7 +58,6 @@ namespace NvCloth EditorSystemComponent::CreateDescriptor(), EditorClothComponent::CreateDescriptor(), Pipeline::ClothRuleBehavior::CreateDescriptor(), - Pipeline::CgfClothExporter::CreateDescriptor(), #endif //NVCLOTH_EDITOR }); } diff --git a/Gems/NvCloth/Code/Source/Pipeline/RCExt/CgfClothExporter.cpp b/Gems/NvCloth/Code/Source/Pipeline/RCExt/CgfClothExporter.cpp deleted file mode 100644 index 9c4e44998f..0000000000 --- a/Gems/NvCloth/Code/Source/Pipeline/RCExt/CgfClothExporter.cpp +++ /dev/null @@ -1,120 +0,0 @@ -/* -* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or -* its licensors. -* -* For complete copyright and license terms please see the LICENSE at the root of this -* distribution (the "License"). All use of this software is governed by the License, -* or, if provided, by the license below or the license accompanying this file. Do not -* remove or modify any license notices. This file is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* -*/ - -#include - -#include // Needed for CGFContent.h -#include -#include -#include - -#include -#include -#include -#include - -#include - -#include - -namespace NvCloth -{ - namespace Pipeline - { - namespace - { - // Index for the Vertex color stream that contains the cloth inverse masses. - const int ClothVertexBufferStreamIndex = 1; - } - - CgfClothExporter::CgfClothExporter() - { - // Binding the processing functions so when exporters call - // SceneAPI::Events::Process() these functions will - // get called if their Context was used. - BindToCall(&CgfClothExporter::ProcessMeshNodeContext); - BindToCall(&CgfClothExporter::ProcessContainerContext); - } - - void CgfClothExporter::Reflect(AZ::ReflectContext* context) - { - AZ::SerializeContext* serializeContext = azrtti_cast(context); - if (serializeContext) - { - serializeContext->Class()->Version(1); - } - } - - AZ::SceneAPI::Events::ProcessingResult CgfClothExporter::ProcessContainerContext(AZ::RC::ContainerExportContext& context) const - { - if (!context.m_group.GetRuleContainerConst().ContainsRuleOfType()) - { - return AZ::SceneAPI::Events::ProcessingResult::Ignored; - } - - if (context.m_phase == AZ::RC::Phase::Finalizing) - { - if (context.m_container.GetExportInfo()->bMergeAllNodes) - { - AZ_TracePrintf(AZ::SceneAPI::Utilities::ErrorWindow, - "Mesh group '%s' has cloth rules and trying to merge all nodes.", - context.m_group.GetName().c_str()); - return AZ::SceneAPI::Events::ProcessingResult::Failure; - } - } - else - { - // If the current mesh group contains a cloth rule it should not merge all the nodes. - context.m_container.GetExportInfo()->bMergeAllNodes = false; - } - - return AZ::SceneAPI::Events::ProcessingResult::Success; - } - - AZ::SceneAPI::Events::ProcessingResult CgfClothExporter::ProcessMeshNodeContext(AZ::RC::MeshNodeExportContext& context) const - { - if (context.m_phase != AZ::RC::Phase::Filling) - { - return AZ::SceneAPI::Events::ProcessingResult::Ignored; - } - - AZStd::vector clothData = - AZ::SceneAPI::DataTypes::IClothRule::FindClothData( - context.m_scene.GetGraph(), - context.m_nodeIndex, - static_cast(context.m_mesh.GetVertexCount()), - context.m_group.GetRuleContainerConst()); - - if (!clothData.empty()) - { - const int numVertices = context.m_mesh.GetVertexCount(); - - // Allocate and get the vertex color stream for cloth - context.m_mesh.ReallocStream(CMesh::COLORS, ClothVertexBufferStreamIndex, numVertices); - auto meshColorStream = context.m_mesh.GetStreamPtr(CMesh::COLORS, ClothVertexBufferStreamIndex); - AZ_Assert(meshColorStream, "Mesh color stream is invalid"); - - for (int i = 0; i < numVertices; ++i) - { - const auto& clothVertexData = clothData[i]; - meshColorStream[i] = SMeshColor( - clothVertexData.GetR8(), - clothVertexData.GetG8(), - clothVertexData.GetB8(), - clothVertexData.GetA8()); - } - } - - return AZ::SceneAPI::Events::ProcessingResult::Success; - } - } // namespace Pipeline -} // namespace NvCloth diff --git a/Gems/NvCloth/Code/Source/Pipeline/RCExt/CgfClothExporter.h b/Gems/NvCloth/Code/Source/Pipeline/RCExt/CgfClothExporter.h deleted file mode 100644 index d02f8d7f99..0000000000 --- a/Gems/NvCloth/Code/Source/Pipeline/RCExt/CgfClothExporter.h +++ /dev/null @@ -1,50 +0,0 @@ -/* -* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or -* its licensors. -* -* For complete copyright and license terms please see the LICENSE at the root of this -* distribution (the "License"). All use of this software is governed by the License, -* or, if provided, by the license below or the license accompanying this file. Do not -* remove or modify any license notices. This file is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* -*/ - -#pragma once - -#include - -namespace AZ -{ - namespace RC - { - struct MeshNodeExportContext; - struct ContainerExportContext; - } -} - -namespace NvCloth -{ - namespace Pipeline - { - //! This class processes the Scene graph to export cloth data into CGF. - class CgfClothExporter - : public AZ::SceneAPI::SceneCore::RCExportingComponent - { - public: - AZ_COMPONENT(CgfClothExporter, "{3D7287BB-1109-4220-AC44-AEBA59E03FFF}", AZ::SceneAPI::SceneCore::RCExportingComponent); - - CgfClothExporter(); - - static void Reflect(AZ::ReflectContext* context); - - //! Process call at CGF Container level. - //! This function gets called once per Mesh Group from CGF Group Exporter when it's processing meshes. - AZ::SceneAPI::Events::ProcessingResult ProcessContainerContext(AZ::RC::ContainerExportContext& context) const; - - //! Process call at Mesh Node level. - //! This function gets called once per Mesh Node inside a Mesh Group from CGF Group Exporter when it's processing meshes. - AZ::SceneAPI::Events::ProcessingResult ProcessMeshNodeContext(AZ::RC::MeshNodeExportContext& context) const; - }; - } // namespace Pipeline -} // namespace NvCloth diff --git a/Gems/NvCloth/Code/Source/Pipeline/SceneAPIExt/ClothRuleBehavior.cpp b/Gems/NvCloth/Code/Source/Pipeline/SceneAPIExt/ClothRuleBehavior.cpp index c04b7f71ef..63aa651aa2 100644 --- a/Gems/NvCloth/Code/Source/Pipeline/SceneAPIExt/ClothRuleBehavior.cpp +++ b/Gems/NvCloth/Code/Source/Pipeline/SceneAPIExt/ClothRuleBehavior.cpp @@ -15,7 +15,6 @@ #include #include -#include #include #include @@ -100,9 +99,8 @@ namespace NvCloth bool ClothRuleBehavior::IsValidGroupType(const AZ::SceneAPI::DataTypes::ISceneNodeGroup& group) const { - // Cloth rules are available in Mesh and Actor Groups - return group.RTTI_IsTypeOf(AZ::SceneAPI::DataTypes::IMeshGroup::TYPEINFO_Uuid()) - || group.RTTI_IsTypeOf(EMotionFX::Pipeline::Group::IActorGroup::TYPEINFO_Uuid()); + // Cloth rules are available in Mesh Groups + return group.RTTI_IsTypeOf(AZ::SceneAPI::DataTypes::IMeshGroup::TYPEINFO_Uuid()); } bool ClothRuleBehavior::UpdateClothRules(AZ::SceneAPI::Containers::Scene& scene) diff --git a/Gems/NvCloth/Code/Source/System/SystemComponent.cpp b/Gems/NvCloth/Code/Source/System/SystemComponent.cpp index b73622b883..dbddb62d2b 100644 --- a/Gems/NvCloth/Code/Source/System/SystemComponent.cpp +++ b/Gems/NvCloth/Code/Source/System/SystemComponent.cpp @@ -10,9 +10,6 @@ * */ -#include -#include - #include #include #include diff --git a/Gems/NvCloth/Code/Source/Utils/ActorAssetHelper.cpp b/Gems/NvCloth/Code/Source/Utils/ActorAssetHelper.cpp deleted file mode 100644 index 5a60b6d7e5..0000000000 --- a/Gems/NvCloth/Code/Source/Utils/ActorAssetHelper.cpp +++ /dev/null @@ -1,229 +0,0 @@ -/* - * All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or - * its licensors. - * - * For complete copyright and license terms please see the LICENSE at the root of this - * distribution (the "License"). All use of this software is governed by the License, - * or, if provided, by the license below or the license accompanying this file. Do not - * remove or modify any license notices. This file is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * - */ - -#include - -// Needed to access the Mesh information inside Actor. -#include -#include -#include -#include - -#include - -namespace NvCloth -{ - ActorAssetHelper::ActorAssetHelper(AZ::EntityId entityId) - : AssetHelper(entityId) - { - } - - void ActorAssetHelper::GatherClothMeshNodes(MeshNodeList& meshNodes) - { - EMotionFX::ActorInstance* actorInstance = nullptr; - EMotionFX::Integration::ActorComponentRequestBus::EventResult( - actorInstance, m_entityId, &EMotionFX::Integration::ActorComponentRequestBus::Events::GetActorInstance); - if (!actorInstance) - { - return; - } - - const EMotionFX::Actor* actor = actorInstance->GetActor(); - if (!actor) - { - return; - } - - const uint32 numNodes = actor->GetNumNodes(); - const uint32 numLODs = actor->GetNumLODLevels(); - - for (uint32 lodLevel = 0; lodLevel < numLODs; ++lodLevel) - { - for (uint32 nodeIndex = 0; nodeIndex < numNodes; ++nodeIndex) - { - const EMotionFX::Mesh* mesh = actor->GetMesh(lodLevel, nodeIndex); - if (!mesh) - { - continue; - } - - const bool hasClothData = (mesh->FindOriginalVertexData(EMotionFX::Mesh::ATTRIB_CLOTH_DATA) != nullptr); - if (hasClothData) - { - const EMotionFX::Node* node = actor->GetSkeleton()->GetNode(nodeIndex); - AZ_Assert(node, "Invalid node %u in actor '%s'", nodeIndex, actor->GetFileNameString().c_str()); - meshNodes.push_back(node->GetNameString()); - } - } - } - } - - bool ActorAssetHelper::ObtainClothMeshNodeInfo( - const AZStd::string& meshNode, - MeshNodeInfo& meshNodeInfo, - MeshClothInfo& meshClothInfo) - { - AZ_PROFILE_FUNCTION(AZ::Debug::ProfileCategory::Cloth); - - EMotionFX::ActorInstance* actorInstance = nullptr; - EMotionFX::Integration::ActorComponentRequestBus::EventResult( - actorInstance, m_entityId, &EMotionFX::Integration::ActorComponentRequestBus::Events::GetActorInstance); - if (!actorInstance) - { - return false; - } - - const EMotionFX::Actor* actor = actorInstance->GetActor(); - if (!actor) - { - return false; - } - - const uint32 numNodes = actor->GetNumNodes(); - const uint32 numLODs = actor->GetNumLODLevels(); - - const EMotionFX::Mesh* emfxMesh = nullptr; - uint32 meshFirstPrimitiveIndex = 0; - - // Find the render data of the mesh node - for (uint32 lodLevel = 0; lodLevel < numLODs; ++lodLevel) - { - meshFirstPrimitiveIndex = 0; - - for (uint32 nodeIndex = 0; nodeIndex < numNodes; ++nodeIndex) - { - const EMotionFX::Mesh* mesh = actor->GetMesh(lodLevel, nodeIndex); - if (!mesh || mesh->GetIsCollisionMesh()) - { - // Skip invalid and collision meshes. - continue; - } - - const EMotionFX::Node* node = actor->GetSkeleton()->GetNode(nodeIndex); - if (meshNode != node->GetNameString()) - { - // Skip. Increase the index of all primitives of the mesh we're skipping. - meshFirstPrimitiveIndex += mesh->GetNumSubMeshes(); - continue; - } - - // Mesh found, save the lod in mesh info - meshNodeInfo.m_lodLevel = lodLevel; - emfxMesh = mesh; - break; - } - - if (emfxMesh) - { - break; - } - } - - bool infoObtained = false; - - if (emfxMesh) - { - bool dataCopied = CopyDataFromEMotionFXMesh(*emfxMesh, meshClothInfo); - - if (dataCopied) - { - const uint32 numSubMeshes = emfxMesh->GetNumSubMeshes(); - for (uint32 subMeshIndex = 0; subMeshIndex < numSubMeshes; ++subMeshIndex) - { - const EMotionFX::SubMesh* emfxSubMesh = emfxMesh->GetSubMesh(subMeshIndex); - - MeshNodeInfo::SubMesh subMesh; - subMesh.m_primitiveIndex = static_cast(meshFirstPrimitiveIndex + subMeshIndex); - subMesh.m_verticesFirstIndex = emfxSubMesh->GetStartVertex(); - subMesh.m_numVertices = emfxSubMesh->GetNumVertices(); - subMesh.m_indicesFirstIndex = emfxSubMesh->GetStartIndex(); - subMesh.m_numIndices = emfxSubMesh->GetNumIndices(); - - meshNodeInfo.m_subMeshes.push_back(subMesh); - } - - infoObtained = true; - } - else - { - AZ_Error("ActorAssetHelper", false, "Failed to extract data from node %s in actor %s", - meshNode.c_str(), actor->GetFileNameString().c_str()); - } - } - - return infoObtained; - } - - bool ActorAssetHelper::CopyDataFromEMotionFXMesh( - const EMotionFX::Mesh& emfxMesh, - MeshClothInfo& meshClothInfo) - { - const int numVertices = emfxMesh.GetNumVertices(); - const int numIndices = emfxMesh.GetNumIndices(); - if (numVertices == 0 || numIndices == 0) - { - return false; - } - - const uint32* sourceIndices = emfxMesh.GetIndices(); - const AZ::Vector3* sourcePositions = static_cast(emfxMesh.FindOriginalVertexData(EMotionFX::Mesh::ATTRIB_POSITIONS)); - const AZ::u32* sourceClothData = static_cast(emfxMesh.FindOriginalVertexData(EMotionFX::Mesh::ATTRIB_CLOTH_DATA)); - const AZ::Vector2* sourceUVs = static_cast(emfxMesh.FindOriginalVertexData(EMotionFX::Mesh::ATTRIB_UVCOORDS, 0)); // first UV set - - if (!sourceIndices || !sourcePositions || !sourceClothData) - { - return false; - } - - const SimUVType uvZero(0.0f, 0.0f); - - meshClothInfo.m_particles.resize_no_construct(numVertices); - meshClothInfo.m_uvs.resize_no_construct(numVertices); - meshClothInfo.m_motionConstraints.resize_no_construct(numVertices); - meshClothInfo.m_backstopData.resize_no_construct(numVertices); - for (int index = 0; index < numVertices; ++index) - { - AZ::Color clothVertexData; - clothVertexData.FromU32(sourceClothData[index]); - - const float inverseMass = clothVertexData.GetR(); - const float motionConstraint = clothVertexData.GetG(); - const float backstopRadius = clothVertexData.GetA(); - const float backstopOffset = ConvertBackstopOffset(clothVertexData.GetB()); - - meshClothInfo.m_particles[index].Set( - sourcePositions[index], - inverseMass); - - meshClothInfo.m_motionConstraints[index] = motionConstraint; - meshClothInfo.m_backstopData[index].Set(backstopOffset, backstopRadius); - - meshClothInfo.m_uvs[index] = (sourceUVs) ? SimUVType(sourceUVs[index].GetX(), sourceUVs[index].GetY()) : uvZero; - } - - meshClothInfo.m_indices.resize_no_construct(numIndices); - // Fast copy when SimIndexType is the same size as the EMFX indices type. - if constexpr (sizeof(SimIndexType) == sizeof(uint32)) - { - memcpy(meshClothInfo.m_indices.data(), sourceIndices, numIndices * sizeof(SimIndexType)); - } - else - { - for (int index = 0; index < numIndices; ++index) - { - meshClothInfo.m_indices[index] = static_cast(sourceIndices[index]); - } - } - - return true; - } -} // namespace NvCloth diff --git a/Gems/NvCloth/Code/Source/Utils/ActorAssetHelper.h b/Gems/NvCloth/Code/Source/Utils/ActorAssetHelper.h deleted file mode 100644 index ce2ede8e4b..0000000000 --- a/Gems/NvCloth/Code/Source/Utils/ActorAssetHelper.h +++ /dev/null @@ -1,49 +0,0 @@ -/* - * All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or - * its licensors. - * - * For complete copyright and license terms please see the LICENSE at the root of this - * distribution (the "License"). All use of this software is governed by the License, - * or, if provided, by the license below or the license accompanying this file. Do not - * remove or modify any license notices. This file is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * - */ - -#pragma once - -#include - -namespace EMotionFX -{ - class Mesh; -} - -namespace NvCloth -{ - //! Helper class to obtain cloth information from an Actor Asset. - class ActorAssetHelper - : public AssetHelper - { - public: - AZ_RTTI(ActorAssetHelper, "{3246EAC6-595F-4AFB-BA10-44EB0B824398}", AssetHelper); - - explicit ActorAssetHelper(AZ::EntityId entityId); - - // AssetHelper overrides ... - void GatherClothMeshNodes(MeshNodeList& meshNodes) override; - bool ObtainClothMeshNodeInfo( - const AZStd::string& meshNode, - MeshNodeInfo& meshNodeInfo, - MeshClothInfo& meshClothInfo) override; - bool DoesSupportSkinnedAnimation() const override - { - return true; - } - - private: - bool CopyDataFromEMotionFXMesh( - const EMotionFX::Mesh& emfxMesh, - MeshClothInfo& meshClothInfo); - }; -} // namespace NvCloth diff --git a/Gems/NvCloth/Code/Source/Utils/AssetHelper.cpp b/Gems/NvCloth/Code/Source/Utils/AssetHelper.cpp index c7558580b3..d75144a5ff 100644 --- a/Gems/NvCloth/Code/Source/Utils/AssetHelper.cpp +++ b/Gems/NvCloth/Code/Source/Utils/AssetHelper.cpp @@ -14,7 +14,6 @@ #include - namespace NvCloth { const int InvalidIndex = -1; diff --git a/Gems/NvCloth/Code/Source/Utils/AssetHelper.h b/Gems/NvCloth/Code/Source/Utils/AssetHelper.h index 253245426c..9630eeb5e1 100644 --- a/Gems/NvCloth/Code/Source/Utils/AssetHelper.h +++ b/Gems/NvCloth/Code/Source/Utils/AssetHelper.h @@ -88,9 +88,6 @@ namespace NvCloth MeshNodeInfo& meshNodeInfo, MeshClothInfo& meshClothInfo) = 0; - //! Returns whether the asset has support for skinned animation or not. - virtual bool DoesSupportSkinnedAnimation() const = 0; - protected: static float ConvertBackstopOffset(float backstopOffset); diff --git a/Gems/NvCloth/Code/Source/Utils/MeshAssetHelper.cpp b/Gems/NvCloth/Code/Source/Utils/MeshAssetHelper.cpp index 6852d245d2..fa8d6e5455 100644 --- a/Gems/NvCloth/Code/Source/Utils/MeshAssetHelper.cpp +++ b/Gems/NvCloth/Code/Source/Utils/MeshAssetHelper.cpp @@ -14,17 +14,11 @@ #include -#include - namespace NvCloth { MeshAssetHelper::MeshAssetHelper(AZ::EntityId entityId) : AssetHelper(entityId) { - EMotionFX::ActorInstance* actorInstance = nullptr; - EMotionFX::Integration::ActorComponentRequestBus::EventResult( - actorInstance, entityId, &EMotionFX::Integration::ActorComponentRequestBus::Events::GetActorInstance); - m_supportSkinnedAnimation = actorInstance != nullptr; } void MeshAssetHelper::GatherClothMeshNodes(MeshNodeList& meshNodes) diff --git a/Gems/NvCloth/Code/Source/Utils/MeshAssetHelper.h b/Gems/NvCloth/Code/Source/Utils/MeshAssetHelper.h index a7849583e7..724f8598c8 100644 --- a/Gems/NvCloth/Code/Source/Utils/MeshAssetHelper.h +++ b/Gems/NvCloth/Code/Source/Utils/MeshAssetHelper.h @@ -33,16 +33,10 @@ namespace NvCloth const AZStd::string& meshNode, MeshNodeInfo& meshNodeInfo, MeshClothInfo& meshClothInfo) override; - bool DoesSupportSkinnedAnimation() const override - { - return m_supportSkinnedAnimation; - } private: bool CopyDataFromMeshes( const AZStd::vector& meshes, MeshClothInfo& meshClothInfo); - - bool m_supportSkinnedAnimation = false; }; } // namespace NvCloth diff --git a/Gems/NvCloth/Code/Tests/Components/ClothComponentMesh/ClothComponentMeshTest.cpp b/Gems/NvCloth/Code/Tests/Components/ClothComponentMesh/ClothComponentMeshTest.cpp index 3d5b7713b3..9916029d3b 100644 --- a/Gems/NvCloth/Code/Tests/Components/ClothComponentMesh/ClothComponentMeshTest.cpp +++ b/Gems/NvCloth/Code/Tests/Components/ClothComponentMesh/ClothComponentMeshTest.cpp @@ -19,7 +19,6 @@ #include #include -#include #include #include @@ -465,14 +464,15 @@ namespace UnitTest AZ::ScriptTimePoint(AZStd::chrono::system_clock::now())); } + /* CryRenderMeshStub renderMesh(MeshVertices); - /*LmbrCentral::MeshModificationNotificationBus::Event( + LmbrCentral::MeshModificationNotificationBus::Event( m_actorComponent->GetEntityId(), &LmbrCentral::MeshModificationNotificationBus::Events::ModifyMesh, LodLevel, 0, - &renderMesh);*/ + &renderMesh); const AZStd::vector& clothParticles = clothComponentMesh.GetRenderData().m_particles; const AZStd::vector& renderMeshPositions = renderMesh.m_positions; @@ -482,5 +482,6 @@ namespace UnitTest { EXPECT_THAT(LYVec3ToAZVec3(renderMeshPositions[i]), IsCloseTolerance(clothParticles[i].GetAsVector3(), Tolerance)); } + */ } } // namespace UnitTest diff --git a/Gems/NvCloth/Code/Tests/CryRenderMeshStub.h b/Gems/NvCloth/Code/Tests/CryRenderMeshStub.h deleted file mode 100644 index a81495c79f..0000000000 --- a/Gems/NvCloth/Code/Tests/CryRenderMeshStub.h +++ /dev/null @@ -1,130 +0,0 @@ -/* - * All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or - * its licensors. - * - * For complete copyright and license terms please see the LICENSE at the root of this - * distribution (the "License"). All use of this software is governed by the License, - * or, if provided, by the license below or the license accompanying this file. Do not - * remove or modify any license notices. This file is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * - */ -#pragma once - -#include -#include - -namespace UnitTest -{ - class CryRenderMeshStub - : public IRenderMesh - { - public: - explicit CryRenderMeshStub(const AZStd::vector& vertices) - { - m_positions.reserve(vertices.size()); - for (const auto& vertex : vertices) - { - m_positions.emplace_back(AZVec3ToLYVec3(vertex)); - } - } - - int GetNumVerts() const override - { - return static_cast(m_positions.size()); - } - - byte* GetPosPtr(int32& nStride, uint32 /*nFlags*/) override - { - nStride = sizeof(Vec3); - return reinterpret_cast(m_positions.data()); - } - - AZStd::vector m_positions; - - // ---------------------------------------- - // IRenderMesh unused functions ... - void AddRef() override {} - int Release() override { return 0; } - bool CanRender() override { return false; } - const char* GetTypeName() override { return ""; } - const char* GetSourceName() const override { return ""; } - int GetIndicesCount() override { return 0; } - int GetVerticesCount() override { return 0; } - AZ::Vertex::Format GetVertexFormat() override { return {}; } - ERenderMeshType GetMeshType() override { return eRMT_Dynamic; } - float GetGeometricMeanFaceArea() const override { return 0.0f; } - bool CheckUpdate(uint32 /*nStreamMask*/) override { return false; } - int GetStreamStride(int /*nStream*/) const override { return 0; } - const uintptr_t GetVBStream(int /*nStream*/) const override { return 0; } - const uintptr_t GetIBStream() const override { return 0; } - int GetNumInds() const override { return 0; } - const eRenderPrimitiveType GetPrimitiveType() const override { return static_cast(0); } - void SetSkinned(bool /*bSkinned*/ = true) override {} - uint GetSkinningWeightCount() const override { return 0; } - size_t SetMesh(CMesh& /*mesh*/, int /*nSecColorsSetOffset*/, uint32 /*flags*/, bool /*requiresLock*/) override { return 0; } - void CopyTo(IRenderMesh* /*pDst*/, int /*nAppendVtx*/ = 0, bool /*bDynamic*/ = false, bool /*fullCopy*/ = true) override {} - void SetSkinningDataVegetation(struct SMeshBoneMapping_uint8* /*pBoneMapping*/) override {} - void SetSkinningDataCharacter(CMesh& /*mesh*/, struct SMeshBoneMapping_uint16* /*pBoneMapping*/, struct SMeshBoneMapping_uint16* /*pExtraBoneMapping*/) override {} - IIndexedMesh* GetIndexedMesh(IIndexedMesh* /*pIdxMesh*/ = 0) override { return nullptr; } - int GetRenderChunksCount(_smart_ptr /*pMat*/, int& /*nRenderTrisCount*/) override { return 0; } - IRenderMesh* GenerateMorphWeights() override { return nullptr; } - IRenderMesh* GetMorphBuddy() override { return nullptr; } - void SetMorphBuddy(IRenderMesh* /*pMorph*/) override {} - bool UpdateVertices(const void* /*pVertBuffer*/, int /*nVertCount*/, int /*nOffset*/, int /*nStream*/, uint32 /*copyFlags*/, bool /*requiresLock*/ = true) override { return false; } - bool UpdateIndices(const vtx_idx* /*pNewInds*/, int /*nInds*/, int /*nOffsInd*/, uint32 /*copyFlags*/, bool /*requiresLock*/ = true) override { return false; } - void SetCustomTexID(int /*nCustomTID*/) override {} - void SetChunk(int /*nIndex*/, CRenderChunk& /*chunk*/) override {} - void SetChunk(_smart_ptr /*pNewMat*/, int /*nFirstVertId*/, int /*nVertCount*/, int /*nFirstIndexId*/, int /*nIndexCount*/, float /*texelAreaDensity*/, const AZ::Vertex::Format& /*vertexFormat*/, int /*nMatID*/ = 0) override {} - void SetRenderChunks(CRenderChunk* /*pChunksArray*/, int /*nCount*/, bool /*bSubObjectChunks*/) override {} - void GenerateQTangents() override {} - void CreateChunksSkinned() override {} - void NextDrawSkinned() override {} - IRenderMesh* GetVertexContainer() override { return nullptr; } - void SetVertexContainer(IRenderMesh* /*pBuf*/) override {} - TRenderChunkArray m_chunk; - TRenderChunkArray& GetChunks() override { return m_chunk; } - TRenderChunkArray& GetChunksSkinned() override { return m_chunk; } - TRenderChunkArray& GetChunksSubObjects() override { return m_chunk; } - void SetBBox(const Vec3& /*vBoxMin*/, const Vec3& /*vBoxMax*/) override {} - void GetBBox(Vec3& /*vBoxMin*/, Vec3& /*vBoxMax*/) override {} - void UpdateBBoxFromMesh() override {} - uint32* GetPhysVertexMap() override { return nullptr; } - bool IsEmpty() override { return false; } - byte* GetPosPtrNoCache(int32& /*nStride*/, uint32 /*nFlags*/) override { return nullptr; } - byte* GetColorPtr(int32& /*nStride*/, uint32 /*nFlags*/) override { return nullptr; } - byte* GetNormPtr(int32& /*nStride*/, uint32 /*nFlags*/) override { return nullptr; } - byte* GetUVPtrNoCache(int32& /*nStride*/, uint32 /*nFlags*/, uint32 /*uvSetIndex*/ = 0) override { return nullptr; } - byte* GetUVPtr(int32& /*nStride*/, uint32 /*nFlags*/, uint32 /*uvSetIndex*/ = 0) override { return nullptr; } - byte* GetTangentPtr(int32& /*nStride*/, uint32 /*nFlags*/) override { return nullptr; } - byte* GetQTangentPtr(int32& /*nStride*/, uint32 /*nFlags*/) override { return nullptr; } - byte* GetHWSkinPtr(int32& /*nStride*/, uint32 /*nFlags*/, bool /*remapped*/ = false) override { return nullptr; } - byte* GetVelocityPtr(int32& /*nStride*/, uint32 /*nFlags*/) override { return nullptr; } - void UnlockStream(int /*nStream*/) override {} - void UnlockIndexStream() override {} - vtx_idx* GetIndexPtr(uint32 /*nFlags*/, int32 /*nOffset*/ = 0) override { return nullptr; } - const PodArray >* GetTrisForPosition(const Vec3& /*vPos*/, _smart_ptr /*pMaterial*/) override { return nullptr; } - float GetExtent(EGeomForm /*eForm*/) override { return 0.0f; } - void GetRandomPos(PosNorm& /*ran*/, EGeomForm /*eForm*/, SSkinningData const* /*pSkinning*/ = NULL) override {} - void Render(const struct SRendParams& /*rParams*/, CRenderObject* /*pObj*/, _smart_ptr /*pMaterial*/, const SRenderingPassInfo& /*passInfo*/, bool /*bSkinned*/ = false) override {} - void Render(CRenderObject* /*pObj*/, const SRenderingPassInfo& /*passInfo*/, const SRendItemSorter& /*rendItemSorter*/) override {} - void AddRenderElements(_smart_ptr /*pIMatInfo*/, CRenderObject* /*pObj*/, const SRenderingPassInfo& /*passInfo*/, int /*nSortId*/ = EFSLIST_GENERAL, int /*nAW*/ = 1) override {} - void AddRE(_smart_ptr /*pMaterial*/, CRenderObject* /*pObj*/, IShader* /*pEf*/, const SRenderingPassInfo& /*passInfo*/, int /*nList*/, int /*nAW*/, const SRendItemSorter& /*rendItemSorter*/) override {} - void SetREUserData(float* /*pfCustomData*/, float /*fFogScale*/ = 0, float /*fAlpha*/ = 1) override {} - void DebugDraw(const struct SGeometryDebugDrawInfo& /*info*/, uint32 /*nVisibleChunksMask*/ = ~0, float /*fExtrdueScale*/ = 0.01f) override {} - size_t GetMemoryUsage(ICrySizer* /*pSizer*/, EMemoryUsageArgument /*nType*/) const override { return 0; } - void GetMemoryUsage(ICrySizer* /*pSizer*/) const override {} - int GetAllocatedBytes(bool /*bVideoMem*/) const override { return 0; } - float GetAverageTrisNumPerChunk(_smart_ptr /*pMat*/) override { return 0.0f; } - int GetTextureMemoryUsage(const _smart_ptr /*pMaterial*/, ICrySizer* /*pSizer*/ = NULL, bool /*bStreamedIn*/ = true) const override { return 0; } - void KeepSysMesh(bool /*keep*/) override {} - void UnKeepSysMesh() override {} - void SetMeshLod(int /*nLod*/) override {} - void LockForThreadAccess() override {} - void UnLockForThreadAccess() override {} - volatile int* SetAsyncUpdateState(void) override { return nullptr; } - void CreateRemappedBoneIndicesPair(const DynArray& /*arrRemapTable*/, const uint /*pairGuid*/) override {} - void ReleaseRemappedBoneIndicesPair(const uint /*pairGuid*/) override {} - void OffsetPosition(const Vec3& /*delta*/) override {} - }; -} // namespace UnitTest diff --git a/Gems/NvCloth/Code/Tests/NvClothEditorTestEnvironment.cpp b/Gems/NvCloth/Code/Tests/NvClothEditorTestEnvironment.cpp index e65385722d..1afbe1f476 100644 --- a/Gems/NvCloth/Code/Tests/NvClothEditorTestEnvironment.cpp +++ b/Gems/NvCloth/Code/Tests/NvClothEditorTestEnvironment.cpp @@ -25,7 +25,6 @@ #include #include #include -#include namespace UnitTest { @@ -80,7 +79,6 @@ namespace UnitTest NvCloth::EditorSystemComponent::CreateDescriptor(), NvCloth::EditorClothComponent::CreateDescriptor(), NvCloth::Pipeline::ClothRuleBehavior::CreateDescriptor(), - NvCloth::Pipeline::CgfClothExporter::CreateDescriptor(), }); AddRequiredComponents({ diff --git a/Gems/NvCloth/Code/Tests/Utils/ActorAssetHelperTest.cpp b/Gems/NvCloth/Code/Tests/Utils/ActorAssetHelperTest.cpp index de0ba9031e..ad3a87d5ff 100644 --- a/Gems/NvCloth/Code/Tests/Utils/ActorAssetHelperTest.cpp +++ b/Gems/NvCloth/Code/Tests/Utils/ActorAssetHelperTest.cpp @@ -108,7 +108,6 @@ namespace UnitTest EXPECT_TRUE(assetHelper.get() != nullptr); EXPECT_TRUE(azrtti_cast(assetHelper.get()) != nullptr); - EXPECT_FALSE(assetHelper->DoesSupportSkinnedAnimation()); } TEST_F(NvClothMeshAssetHelper, MeshAssetHelper_CreateAssetHelperWithActor_ReturnsValidMeshAssetHelper) @@ -124,21 +123,6 @@ namespace UnitTest EXPECT_TRUE(assetHelper.get() != nullptr); EXPECT_TRUE(azrtti_cast(assetHelper.get()) != nullptr); - EXPECT_TRUE(assetHelper->DoesSupportSkinnedAnimation()); - } - - TEST_F(NvClothMeshAssetHelper, MeshAssetHelper_DoesSupportSkinnedAnimation_ReturnsTrue) - { - { - auto actor = AZStd::make_unique("actor_test"); - actor->FinishSetup(); - - m_actorComponent->SetActorAsset(CreateAssetFromActor(AZStd::move(actor))); - } - - AZStd::unique_ptr assetHelper = NvCloth::AssetHelper::CreateAssetHelper(m_actorComponent->GetEntityId()); - - EXPECT_TRUE(assetHelper->DoesSupportSkinnedAnimation()); } TEST_F(NvClothMeshAssetHelper, MeshAssetHelper_GatherClothMeshNodesWithEmptyActor_ReturnsEmptyInfo) diff --git a/Gems/NvCloth/Code/nvcloth_editor_files.cmake b/Gems/NvCloth/Code/nvcloth_editor_files.cmake index 8048241f98..c2383f876f 100644 --- a/Gems/NvCloth/Code/nvcloth_editor_files.cmake +++ b/Gems/NvCloth/Code/nvcloth_editor_files.cmake @@ -10,8 +10,6 @@ # set(FILES - Source/Pipeline/RCExt/CgfClothExporter.h - Source/Pipeline/RCExt/CgfClothExporter.cpp Source/Pipeline/SceneAPIExt/ClothRule.h Source/Pipeline/SceneAPIExt/ClothRule.cpp Source/Pipeline/SceneAPIExt/ClothRuleBehavior.h diff --git a/Gems/NvCloth/Code/nvcloth_files.cmake b/Gems/NvCloth/Code/nvcloth_files.cmake index 347ff27b6f..47d4fecdc6 100644 --- a/Gems/NvCloth/Code/nvcloth_files.cmake +++ b/Gems/NvCloth/Code/nvcloth_files.cmake @@ -51,6 +51,4 @@ set(FILES Source/Utils/AssetHelper.cpp Source/Utils/MeshAssetHelper.cpp Source/Utils/MeshAssetHelper.h - Source/Utils/ActorAssetHelper.cpp - Source/Utils/ActorAssetHelper.h ) diff --git a/Gems/NvCloth/Code/nvcloth_tests_files.cmake b/Gems/NvCloth/Code/nvcloth_tests_files.cmake index d027251389..abe1789a66 100644 --- a/Gems/NvCloth/Code/nvcloth_tests_files.cmake +++ b/Gems/NvCloth/Code/nvcloth_tests_files.cmake @@ -18,7 +18,6 @@ set(FILES Tests/ActorHelper.cpp Tests/TriangleInputHelper.h Tests/TriangleInputHelper.cpp - Tests/CryRenderMeshStub.h Tests/System/ClothSystemTest.cpp Tests/System/ClothTest.cpp Tests/System/FabricCookerTest.cpp diff --git a/Gems/NvCloth/gem.json b/Gems/NvCloth/gem.json index a97e9c979d..f71d71e592 100644 --- a/Gems/NvCloth/gem.json +++ b/Gems/NvCloth/gem.json @@ -1,45 +1,8 @@ { "gem_name": "NvCloth", - "GemFormatVersion": 4, - "Uuid": "6ab53783d9f54c9e97a15ad729e7c182", - "Name": "NvCloth", - "DisplayName": "NVIDIA Cloth [PREVIEW]", - "Version": "0.1.0", - "LinkType": "Dynamic", - "Summary": "Provides the functionality needed to add cloth simulation.", - "Tags": ["Physics"], - "IconPath": "preview.png", - "Modules": [ - { - "Type": "GameModule" - }, - { - "Name": "Editor", - "Type": "EditorModule", - "Extends": "GameModule" - } - ], - "Dependencies": [ - { - "Uuid": "ff06785f7145416b9d46fde39098cb0c", - "VersionConstraints": [ - "~>0.1" - ], - "_comment": "LmbrCentral" - }, - { - "Uuid": "4e981f3b17394f5d84d674fff0f54f4f", - "VersionConstraints": [ - "~>0.1" - ], - "_comment": "AtomLyIntegration_CommonFeatures" - }, - { - "Uuid": "044a63ea67d04479aa5daf62ded9d9ca", - "VersionConstraints": [ - "~>0.1" - ], - "_comment": "EMotionFX" - } - ] + "display_name": "NVIDIA Cloth [PREVIEW]", + "summary": "Provides the functionality needed to add cloth simulation.", + "canonical_tags": ["Gem"], + "user_tags": ["Physics"], + "icon_path": "preview.png" } From fd7d3a41ee89305e1f16e78981d15924fc49b24d Mon Sep 17 00:00:00 2001 From: spham Date: Tue, 20 Apr 2021 08:06:27 -0700 Subject: [PATCH 44/68] Removing 'periodic_test_profile' job from Android due to the fact that the Android Virtual Device is not supported on virtualized systems (Windows) --- .../build/Platform/Android/build_config.json | 18 ------------------ 1 file changed, 18 deletions(-) diff --git a/scripts/build/Platform/Android/build_config.json b/scripts/build/Platform/Android/build_config.json index e5b41973e0..0b71268a43 100644 --- a/scripts/build/Platform/Android/build_config.json +++ b/scripts/build/Platform/Android/build_config.json @@ -145,23 +145,5 @@ "GRADLE_BUILD_CMD": "build", "ADDITIONAL_GENERATE_ARGS": "" } - }, - "periodic_test_profile": { - "TAGS":[ - "nightly", - "weekly-build-metrics" - ], - "COMMAND":"build_and_run_unit_tests.cmd", - "PARAMETERS": { - "CONFIGURATION":"profile", - "OUTPUT_DIRECTORY":"build\\android_unittest", - "GAME_PROJECT": "AutomatedTesting", - "ANDROID_NDK_PLATFORM": "21", - "ANDROID_SDK_PLATFORM": "29", - "SIGN_APK": "true", - "GRADLE_BUILD_CMD": "assemble", - "ADDITIONAL_GENERATE_ARGS": "--unit-test" - } } - } From 37949abe2505033e6c23205bc9f3c0fdbef6ce2a Mon Sep 17 00:00:00 2001 From: spham Date: Tue, 20 Apr 2021 08:48:52 -0700 Subject: [PATCH 45/68] Restoring original periodic_test_profile block but with the TAGS removed --- scripts/build/Platform/Android/build_config.json | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/scripts/build/Platform/Android/build_config.json b/scripts/build/Platform/Android/build_config.json index 0b71268a43..0fa4d9ade3 100644 --- a/scripts/build/Platform/Android/build_config.json +++ b/scripts/build/Platform/Android/build_config.json @@ -145,5 +145,20 @@ "GRADLE_BUILD_CMD": "build", "ADDITIONAL_GENERATE_ARGS": "" } + }, + "periodic_test_profile": { + "TAGS":[ + ], + "COMMAND":"build_and_run_unit_tests.cmd", + "PARAMETERS": { + "CONFIGURATION":"profile", + "OUTPUT_DIRECTORY":"build\\android_unittest", + "GAME_PROJECT": "AutomatedTesting", + "ANDROID_NDK_PLATFORM": "21", + "ANDROID_SDK_PLATFORM": "29", + "SIGN_APK": "true", + "GRADLE_BUILD_CMD": "assemble", + "ADDITIONAL_GENERATE_ARGS": "--unit-test" + } } } From 1a359ac50d6463cfafed4801ed69c794b2245a8c Mon Sep 17 00:00:00 2001 From: garrieta Date: Tue, 20 Apr 2021 10:51:20 -0500 Subject: [PATCH 46/68] [ATOM-15285] ShaderVariantAssetBuilder code merge bug Fixing what appears to be a code merge/integration bug. Signed-off-by: garrieta --- .../Source/Editor/ShaderVariantAssetBuilder.cpp | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/Gems/Atom/Asset/Shader/Code/Source/Editor/ShaderVariantAssetBuilder.cpp b/Gems/Atom/Asset/Shader/Code/Source/Editor/ShaderVariantAssetBuilder.cpp index 1e3c7b6759..3572fb72ae 100644 --- a/Gems/Atom/Asset/Shader/Code/Source/Editor/ShaderVariantAssetBuilder.cpp +++ b/Gems/Atom/Asset/Shader/Code/Source/Editor/ShaderVariantAssetBuilder.cpp @@ -407,17 +407,20 @@ namespace AZ const auto& jobParameters = request.m_jobDescription.m_jobParameters; if (jobParameters.find(ShaderVariantLoadErrorParam) != jobParameters.end()) { - if (jobParameters.find(ShouldExitEarlyFromProcessJobParam) != jobParameters.end()) - { - AZ_TracePrintf(ShaderVariantAssetBuilderName, "Doing nothing on behalf of [%s] because it's been overriden by game project.", jobParameters.at(ShaderVariantLoadErrorParam).c_str()); - response.m_resultCode = AssetBuilderSDK::ProcessJobResult_Success; - return; - } AZ_Error(ShaderVariantAssetBuilderName, false, "Error during CreateJobs: %s", jobParameters.at(ShaderVariantLoadErrorParam).c_str()); response.m_resultCode = AssetBuilderSDK::ProcessJobResult_Failed; return; } + if (jobParameters.find(ShouldExitEarlyFromProcessJobParam) != jobParameters.end()) + { + AZ_TracePrintf( + ShaderVariantAssetBuilderName, "Doing nothing on behalf of [%s] because it's been overriden by game project.", + jobParameters.at(ShaderVariantLoadErrorParam).c_str()); + response.m_resultCode = AssetBuilderSDK::ProcessJobResult_Success; + return; + } + AssetBuilderSDK::JobCancelListener jobCancelListener(request.m_jobId); if (jobCancelListener.IsCancelled()) { From fbc69e5fd7f692d5e93acf3e8ec0a62f4d5be971 Mon Sep 17 00:00:00 2001 From: Chris Galvan Date: Tue, 20 Apr 2021 11:08:51 -0500 Subject: [PATCH 47/68] [LYN-3079] Removed IPickObjectCallback and edit tools that used it. --- Code/Sandbox/Editor/AlignTool.cpp | 142 --------- Code/Sandbox/Editor/AlignTool.h | 40 --- .../Editor/Core/LevelEditorMenuHandler.cpp | 1 - Code/Sandbox/Editor/CryEdit.cpp | 67 ---- Code/Sandbox/Editor/CryEdit.h | 6 - Code/Sandbox/Editor/IEditor.h | 29 -- Code/Sandbox/Editor/IEditorImpl.cpp | 35 --- Code/Sandbox/Editor/IEditorImpl.h | 4 - Code/Sandbox/Editor/Lib/Tests/IEditorMock.h | 3 - Code/Sandbox/Editor/LinkTool.cpp | 286 ------------------ Code/Sandbox/Editor/LinkTool.h | 85 ------ Code/Sandbox/Editor/MainWindow.cpp | 18 -- Code/Sandbox/Editor/PickObjectTool.cpp | 173 ----------- Code/Sandbox/Editor/PickObjectTool.h | 76 ----- Code/Sandbox/Editor/Resource.h | 3 - Code/Sandbox/Editor/ToolbarManager.cpp | 8 - Code/Sandbox/Editor/editor_lib_files.cmake | 6 - 17 files changed, 982 deletions(-) delete mode 100644 Code/Sandbox/Editor/AlignTool.cpp delete mode 100644 Code/Sandbox/Editor/AlignTool.h delete mode 100644 Code/Sandbox/Editor/LinkTool.cpp delete mode 100644 Code/Sandbox/Editor/LinkTool.h delete mode 100644 Code/Sandbox/Editor/PickObjectTool.cpp delete mode 100644 Code/Sandbox/Editor/PickObjectTool.h diff --git a/Code/Sandbox/Editor/AlignTool.cpp b/Code/Sandbox/Editor/AlignTool.cpp deleted file mode 100644 index 4b3aedfbfa..0000000000 --- a/Code/Sandbox/Editor/AlignTool.cpp +++ /dev/null @@ -1,142 +0,0 @@ -/* -* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or -* its licensors. -* -* For complete copyright and license terms please see the LICENSE at the root of this -* distribution (the "License"). All use of this software is governed by the License, -* or, if provided, by the license below or the license accompanying this file. Do not -* remove or modify any license notices. This file is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* -*/ -// Original file Copyright Crytek GMBH or its affiliates, used under license. - -#include "EditorDefs.h" - -#include "AlignTool.h" - -// Editor -#include "Objects/BaseObject.h" -#include "Objects/SelectionGroup.h" - -////////////////////////////////////////////////////////////////////////// -bool CAlignPickCallback::m_bActive = false; - -////////////////////////////////////////////////////////////////////////// -//! Called when object picked. -void CAlignPickCallback::OnPick(CBaseObject* picked) -{ - Matrix34 pickedTM(picked->GetWorldTM()); - - AABB pickedAABB; - picked->GetBoundBox(pickedAABB); - pickedAABB.Move(-pickedTM.GetTranslation()); - Vec3 pickedPivot = pickedAABB.GetCenter(); - - AABB pickedLocalAABB; - picked->GetLocalBounds(pickedLocalAABB); - - const Quat& pickedRot = picked->GetRotation(); - const Vec3& pickedScale = picked->GetScale(); - const Vec3& pickedPos = picked->GetPos(); - - bool bKeepScale = CheckVirtualKey(Qt::Key_Shift); - bool bKeepRotation = CheckVirtualKey(Qt::Key_Alt); - bool bAlignToBoundBox = CheckVirtualKey(Qt::Key_Control); - bool bApplyTransform = !bKeepScale && !bKeepRotation && !bAlignToBoundBox; - - { - bool bUndo = !CUndo::IsRecording(); - if (bUndo) - { - GetIEditor()->BeginUndo(); - } - - CSelectionGroup* selGroup = GetIEditor()->GetSelection(); - selGroup->FilterParents(); - - for (int i = 0; i < selGroup->GetFilteredCount(); i++) - { - CBaseObject* pMovedObj = selGroup->GetFilteredObject(i); - - if (bKeepScale || bKeepRotation || bApplyTransform) - { - if (bKeepScale && bKeepRotation) // Keep scale and rotation of a moved object - { - pMovedObj->SetWorldTM(Matrix34::Create(pMovedObj->GetScale(), pMovedObj->GetRotation(), pickedPos), eObjectUpdateFlags_UserInput); - } - else if (bKeepScale) // Keep only scale of a moved object - { - pMovedObj->SetWorldTM(Matrix34::Create(pMovedObj->GetScale(), pickedRot, pickedPos), eObjectUpdateFlags_UserInput); - } - else if (bKeepRotation) // Keep only rotation of a moved object - { - pMovedObj->SetWorldTM(Matrix34::Create(pickedScale, pMovedObj->GetRotation(), pickedPos), eObjectUpdateFlags_UserInput); - } - else // Scale, Rotation and Position of a picked object are applied to a moved object. - { - pMovedObj->SetWorldTM(pickedTM, eObjectUpdateFlags_UserInput); - } - } - else if (bAlignToBoundBox) // align to the bounding box. - { - if (pickedLocalAABB.GetVolume() == 0.0f) - { - continue; - } - - AABB movedLocalAABB; - pMovedObj->GetLocalBounds(movedLocalAABB); - if (fabs(movedLocalAABB.max.x - movedLocalAABB.min.x) < VEC_EPSILON && - fabs(movedLocalAABB.max.y - movedLocalAABB.min.y) < VEC_EPSILON && - fabs(movedLocalAABB.max.z - movedLocalAABB.min.z) < VEC_EPSILON) - { - continue; - } - - const Vec3& movedScale(pMovedObj->GetScale()); - Matrix34 movedScaleTM = Matrix34::CreateScale(movedScale); - AABB movedLocalScaledAABB; - movedLocalScaledAABB.min = movedScaleTM.TransformVector(movedLocalAABB.min); - movedLocalScaledAABB.max = movedScaleTM.TransformVector(movedLocalAABB.max); - - float fMovedWidth = movedLocalScaledAABB.max.x - movedLocalScaledAABB.min.x; - float fMovedHeight = movedLocalScaledAABB.max.z - movedLocalScaledAABB.min.z; - float fMovedLength = movedLocalScaledAABB.max.y - movedLocalScaledAABB.min.y; - - Matrix34 pickedScaleTM = Matrix34::CreateScale(picked->GetScale()); - AABB pickedLocalScaledAABB; - pickedLocalScaledAABB.min = pickedScaleTM.TransformVector(pickedLocalAABB.min); - pickedLocalScaledAABB.max = pickedScaleTM.TransformVector(pickedLocalAABB.max); - float fScaledPickedtWidth = pickedLocalScaledAABB.max.x - pickedLocalScaledAABB.min.x; - float fScaledPickedHeight = pickedLocalScaledAABB.max.z - pickedLocalScaledAABB.min.z; - float fScaledPickedLength = pickedLocalScaledAABB.max.y - pickedLocalScaledAABB.min.y; - - Vec3 scale((fScaledPickedtWidth / fMovedWidth) * movedScale.x, (fScaledPickedLength / fMovedLength) * movedScale.y, (fScaledPickedHeight / fMovedHeight) * movedScale.z); - Matrix34 scaleRotTM = Matrix34::Create(scale, pickedRot, Vec3(0, 0, 0)); - Vec3 movedPivot = scaleRotTM.TransformVector(movedLocalAABB.GetCenter()); - - pMovedObj->SetWorldTM(Matrix34::Create(scale, pickedRot, Vec3(pickedPos + (pickedPivot - movedPivot))), eObjectUpdateFlags_UserInput); - } - } - m_bActive = false; - if (bUndo) - { - GetIEditor()->AcceptUndo("Align To Object"); - } - } - delete this; -} - -//! Called when pick mode cancelled. -void CAlignPickCallback::OnCancelPick() -{ - m_bActive = false; - delete this; -} - -//! Return true if specified object is pickable. -bool CAlignPickCallback::OnPickFilter([[maybe_unused]] CBaseObject* filterObject) -{ - return true; -}; diff --git a/Code/Sandbox/Editor/AlignTool.h b/Code/Sandbox/Editor/AlignTool.h deleted file mode 100644 index 43cd01013d..0000000000 --- a/Code/Sandbox/Editor/AlignTool.h +++ /dev/null @@ -1,40 +0,0 @@ -/* -* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or -* its licensors. -* -* For complete copyright and license terms please see the LICENSE at the root of this -* distribution (the "License"). All use of this software is governed by the License, -* or, if provided, by the license below or the license accompanying this file. Do not -* remove or modify any license notices. This file is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* -*/ -// Original file Copyright Crytek GMBH or its affiliates, used under license. - -#ifndef CRYINCLUDE_EDITOR_ALIGNTOOL_H -#define CRYINCLUDE_EDITOR_ALIGNTOOL_H - -#pragma once - -////////////////////////////////////////////////////////////////////////// -class CAlignPickCallback - : public IPickObjectCallback -{ -public: - CAlignPickCallback() { m_bActive = true; }; - //! Called when object picked. - virtual void OnPick(CBaseObject* picked); - //! Called when pick mode cancelled. - virtual void OnCancelPick(); - //! Return true if specified object is pickable. - virtual bool OnPickFilter(CBaseObject* filterObject); - - static bool IsActive() { return m_bActive; } - - virtual bool IsNeedSpecificBehaviorForSpaceAcce() { return true; } -private: - static bool m_bActive; -}; - - -#endif // CRYINCLUDE_EDITOR_ALIGNTOOL_H diff --git a/Code/Sandbox/Editor/Core/LevelEditorMenuHandler.cpp b/Code/Sandbox/Editor/Core/LevelEditorMenuHandler.cpp index 1c9e7d90d2..f00085d5ad 100644 --- a/Code/Sandbox/Editor/Core/LevelEditorMenuHandler.cpp +++ b/Code/Sandbox/Editor/Core/LevelEditorMenuHandler.cpp @@ -580,7 +580,6 @@ void LevelEditorMenuHandler::PopulateEditMenu(ActionManager::MenuWrapper& editMe auto alignMenu = modifyMenu.AddMenu(tr("Align")); alignMenu.AddAction(ID_OBJECTMODIFY_ALIGNTOGRID); - alignMenu.AddAction(ID_OBJECTMODIFY_ALIGN); alignMenu.AddAction(ID_MODIFY_ALIGNOBJTOSURF); auto constrainMenu = modifyMenu.AddMenu(tr("Constrain")); diff --git a/Code/Sandbox/Editor/CryEdit.cpp b/Code/Sandbox/Editor/CryEdit.cpp index e4f06a1bc3..7aefcffb5a 100644 --- a/Code/Sandbox/Editor/CryEdit.cpp +++ b/Code/Sandbox/Editor/CryEdit.cpp @@ -95,8 +95,6 @@ AZ_POP_DISABLE_WARNING #include "Core/QtEditorApplication.h" #include "StringDlg.h" -#include "LinkTool.h" -#include "AlignTool.h" #include "VoxelAligningTool.h" #include "NewLevelDialog.h" #include "GridSettingsDialog.h" @@ -400,8 +398,6 @@ void CCryEditApp::RegisterActionHandlers() ON_COMMAND(ID_EDITMODE_MOVE, OnEditmodeMove) ON_COMMAND(ID_EDITMODE_ROTATE, OnEditmodeRotate) ON_COMMAND(ID_EDITMODE_SCALE, OnEditmodeScale) - ON_COMMAND(ID_EDITTOOL_LINK, OnEditToolLink) - ON_COMMAND(ID_EDITTOOL_UNLINK, OnEditToolUnlink) ON_COMMAND(ID_EDITMODE_SELECT, OnEditmodeSelect) ON_COMMAND(ID_EDIT_ESCAPE, OnEditEscape) ON_COMMAND(ID_OBJECTMODIFY_SETAREA, OnObjectSetArea) @@ -421,7 +417,6 @@ void CCryEditApp::RegisterActionHandlers() ON_COMMAND(ID_SELECTION_SAVE, OnSelectionSave) ON_COMMAND(ID_IMPORT_ASSET, OnOpenAssetImporter) ON_COMMAND(ID_SELECTION_LOAD, OnSelectionLoad) - ON_COMMAND(ID_OBJECTMODIFY_ALIGN, OnAlignObject) ON_COMMAND(ID_MODIFY_ALIGNOBJTOSURF, OnAlignToVoxel) ON_COMMAND(ID_OBJECTMODIFY_ALIGNTOGRID, OnAlignToGrid) ON_COMMAND(ID_LOCK_SELECTION, OnLockSelection) @@ -2896,51 +2891,6 @@ void CCryEditApp::OnEditmodeScale() } } -////////////////////////////////////////////////////////////////////////// -void CCryEditApp::OnEditToolLink() -{ - // TODO: Add your command handler code here - if (qobject_cast(GetIEditor()->GetEditTool())) - { - GetIEditor()->SetEditTool(0); - } - else - { - GetIEditor()->SetEditTool(new CLinkTool()); - } -} - -////////////////////////////////////////////////////////////////////////// -void CCryEditApp::OnUpdateEditToolLink(QAction* action) -{ - if (!GetIEditor()->GetDocument()) - { - action->setEnabled(false); - return; - } - action->setEnabled(GetIEditor()->GetDocument()->IsDocumentReady()); - CEditTool* pEditTool = GetIEditor()->GetEditTool(); - action->setChecked(qobject_cast(pEditTool) != nullptr); -} - -////////////////////////////////////////////////////////////////////////// -void CCryEditApp::OnEditToolUnlink() -{ - CUndo undo("Unlink Object(s)"); - CSelectionGroup* pSelection = GetIEditor()->GetObjectManager()->GetSelection(); - for (int i = 0; i < pSelection->GetCount(); i++) - { - CBaseObject* pBaseObj = pSelection->GetObject(i); - pBaseObj->DetachThis(); - } -} - -////////////////////////////////////////////////////////////////////////// -void CCryEditApp::OnUpdateEditToolUnlink(QAction* action) -{ - action->setEnabled(false); -} - ////////////////////////////////////////////////////////////////////////// void CCryEditApp::OnEditmodeSelect() { @@ -3510,14 +3460,6 @@ void CCryEditApp::OnUpdateSelected(QAction* action) action->setEnabled(!GetIEditor()->GetSelection()->IsEmpty()); } -////////////////////////////////////////////////////////////////////////// -void CCryEditApp::OnAlignObject() -{ - // Align pick callback will release itself. - CAlignPickCallback* alignCallback = new CAlignPickCallback; - GetIEditor()->PickObject(alignCallback, 0, "Align to Object"); -} - ////////////////////////////////////////////////////////////////////////// void CCryEditApp::OnAlignToGrid() { @@ -3538,15 +3480,6 @@ void CCryEditApp::OnAlignToGrid() } } -////////////////////////////////////////////////////////////////////////// -void CCryEditApp::OnUpdateAlignObject(QAction* action) -{ - Q_ASSERT(action->isCheckable()); - action->setChecked(CAlignPickCallback::IsActive()); - - action->setEnabled(!GetIEditor()->GetSelection()->IsEmpty()); -} - ////////////////////////////////////////////////////////////////////////// void CCryEditApp::OnAlignToVoxel() { diff --git a/Code/Sandbox/Editor/CryEdit.h b/Code/Sandbox/Editor/CryEdit.h index 6a17f9a8bf..94c39991e9 100644 --- a/Code/Sandbox/Editor/CryEdit.h +++ b/Code/Sandbox/Editor/CryEdit.h @@ -224,10 +224,6 @@ public: void OnEditmodeMove(); void OnEditmodeRotate(); void OnEditmodeScale(); - void OnEditToolLink(); - void OnUpdateEditToolLink(QAction* action); - void OnEditToolUnlink(); - void OnUpdateEditToolUnlink(QAction* action); void OnEditmodeSelect(); void OnEditEscape(); void OnObjectSetArea(); @@ -256,10 +252,8 @@ public: void OnOpenAssetImporter(); void OnSelectionLoad(); void OnUpdateSelected(QAction* action); - void OnAlignObject(); void OnAlignToVoxel(); void OnAlignToGrid(); - void OnUpdateAlignObject(QAction* action); void OnUpdateAlignToVoxel(QAction* action); void OnLockSelection(); void OnEditLevelData(); diff --git a/Code/Sandbox/Editor/IEditor.h b/Code/Sandbox/Editor/IEditor.h index 7715e64fe5..722f2a7c25 100644 --- a/Code/Sandbox/Editor/IEditor.h +++ b/Code/Sandbox/Editor/IEditor.h @@ -391,21 +391,6 @@ enum EModifiedModule eModifiedAll = -1 }; -//! Callback class passed to PickObject. -struct IPickObjectCallback -{ - virtual ~IPickObjectCallback() = default; - - //! Called when object picked. - virtual void OnPick(CBaseObject* picked) = 0; - //! Called when pick mode cancelled. - virtual void OnCancelPick() = 0; - //! Return true if specified object is pickable. - virtual bool OnPickFilter([[maybe_unused]] CBaseObject* filterObject) { return true; }; - //! If need a specific behavior when holding space, return true or if not, return false. - virtual bool IsNeedSpecificBehaviorForSpaceAcce() { return false; } -}; - //! Class provided by editor for various registration functions. struct CRegistrationContext { @@ -570,20 +555,6 @@ struct IEditor //! Get access to object manager. virtual struct IObjectManager* GetObjectManager() = 0; virtual CSettingsManager* GetSettingsManager() = 0; - //! Set pick object mode. - //! When object picked callback will be called, with OnPick - //! If pick operation is canceled Cancel will be called - //! @param targetClass specifies objects of which class are supposed to be picked - //! @param bMultipick if true pick tool will pick multiple object - virtual void PickObject( - IPickObjectCallback* callback, - const QMetaObject* targetClass = 0, - const char* statusText = 0, - bool bMultipick = false) = 0; - //! Cancel current pick operation - virtual void CancelPick() = 0; - //! Return true if editor now in object picking mode - virtual bool IsPicking() = 0; //! Get DB manager that own items of specified type. virtual IDataBaseManager* GetDBItemManager(EDataBaseItemType itemType) = 0; //! Get Manager of Materials. diff --git a/Code/Sandbox/Editor/IEditorImpl.cpp b/Code/Sandbox/Editor/IEditorImpl.cpp index 4a0a73c9ac..399ac45794 100644 --- a/Code/Sandbox/Editor/IEditorImpl.cpp +++ b/Code/Sandbox/Editor/IEditorImpl.cpp @@ -65,7 +65,6 @@ AZ_POP_DISABLE_WARNING #include "UIEnumsDatabase.h" #include "Util/Ruler.h" #include "RenderHelpers/AxisHelper.h" -#include "PickObjectTool.h" #include "Settings.h" #include "Include/IObjectManager.h" #include "Include/ISourceControl.h" @@ -170,7 +169,6 @@ CEditorImpl::CEditorImpl() , m_pShaderEnum(nullptr) , m_pIconManager(nullptr) , m_bSelectionLocked(true) - , m_pPickTool(nullptr) , m_pAxisGizmo(nullptr) , m_pGameEngine(nullptr) , m_pAnimationContext(nullptr) @@ -794,11 +792,6 @@ void CEditorImpl::SetEditTool(CEditTool* tool, bool bStopCurrentTool) m_pEditTool->BeginEditParams(this, 0); } - // Make sure pick is aborted. - if (tool != m_pPickTool) - { - m_pPickTool = nullptr; - } Notify(eNotify_OnEditToolChange); } @@ -1069,34 +1062,6 @@ bool CEditorImpl::IsSelectionLocked() return m_bSelectionLocked; } -void CEditorImpl::PickObject(IPickObjectCallback* callback, const QMetaObject* targetClass, const char* statusText, bool bMultipick) -{ - m_pPickTool = new CPickObjectTool(callback, targetClass); - - static_cast(m_pPickTool.get())->SetMultiplePicks(bMultipick); - if (statusText) - { - m_pPickTool.get()->SetStatusText(statusText); - } - - SetEditTool(m_pPickTool); -} - -void CEditorImpl::CancelPick() -{ - SetEditTool(0); - m_pPickTool = 0; -} - -bool CEditorImpl::IsPicking() -{ - if (GetEditTool() == m_pPickTool && m_pPickTool != 0) - { - return true; - } - return false; -} - CViewManager* CEditorImpl::GetViewManager() { return m_pViewManager; diff --git a/Code/Sandbox/Editor/IEditorImpl.h b/Code/Sandbox/Editor/IEditorImpl.h index 9e3b3abc66..4a8d5fa191 100644 --- a/Code/Sandbox/Editor/IEditorImpl.h +++ b/Code/Sandbox/Editor/IEditorImpl.h @@ -181,10 +181,7 @@ public: void SelectObject(CBaseObject* obj); void LockSelection(bool bLock); bool IsSelectionLocked(); - void PickObject(IPickObjectCallback* callback, const QMetaObject* targetClass = 0, const char* statusText = 0, bool bMultipick = false); - void CancelPick(); - bool IsPicking(); IDataBaseManager* GetDBItemManager(EDataBaseItemType itemType); CMaterialManager* GetMaterialManager() { return m_pMaterialManager; } CMusicManager* GetMusicManager() { return m_pMusicManager; }; @@ -409,7 +406,6 @@ protected: QString m_primaryCDFolder; QString m_userFolder; bool m_bSelectionLocked; - _smart_ptr m_pPickTool; class CAxisGizmo* m_pAxisGizmo; CGameEngine* m_pGameEngine; CAnimationContext* m_pAnimationContext; diff --git a/Code/Sandbox/Editor/Lib/Tests/IEditorMock.h b/Code/Sandbox/Editor/Lib/Tests/IEditorMock.h index a290ef5de5..e48fb5fec1 100644 --- a/Code/Sandbox/Editor/Lib/Tests/IEditorMock.h +++ b/Code/Sandbox/Editor/Lib/Tests/IEditorMock.h @@ -90,9 +90,6 @@ public: MOCK_METHOD0(IsSelectionLocked, bool()); MOCK_METHOD0(GetObjectManager, struct IObjectManager* ()); MOCK_METHOD0(GetSettingsManager, CSettingsManager* ()); - MOCK_METHOD4(PickObject, void(IPickObjectCallback*,const QMetaObject*,const char* ,bool bMultipick)); - MOCK_METHOD0(CancelPick, void()); - MOCK_METHOD0(IsPicking, bool()); MOCK_METHOD1(GetDBItemManager, IDataBaseManager* (EDataBaseItemType)); MOCK_METHOD0(GetMaterialManager, CMaterialManager* ()); MOCK_METHOD0(GetMaterialManagerLibrary, IBaseLibraryManager* ()); diff --git a/Code/Sandbox/Editor/LinkTool.cpp b/Code/Sandbox/Editor/LinkTool.cpp deleted file mode 100644 index 4602875b77..0000000000 --- a/Code/Sandbox/Editor/LinkTool.cpp +++ /dev/null @@ -1,286 +0,0 @@ -/* -* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or -* its licensors. -* -* For complete copyright and license terms please see the LICENSE at the root of this -* distribution (the "License"). All use of this software is governed by the License, -* or, if provided, by the license below or the license accompanying this file. Do not -* remove or modify any license notices. This file is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* -*/ -// Original file Copyright Crytek GMBH or its affiliates, used under license. - -#include "EditorDefs.h" - -#include "LinkTool.h" - -// Editor -#include "Viewport.h" -#include "Objects/EntityObject.h" -#include "Objects/SelectionGroup.h" -#include - -// AzCore -#include - -#ifdef LoadCursor -#undef LoadCursor -#endif - -namespace -{ - const float kGeomCacheNodePivotSizeScale = 0.0025f; -} - -////////////////////////////////////////////////////////////////////////// -CLinkTool::CLinkTool() - : m_nodeName(nullptr) - , m_pGeomCacheRenderNode(nullptr) -{ - m_pChild = NULL; - SetStatusText("Click on object and drag a link to a new parent"); - - m_hLinkCursor = CMFCUtils::LoadCursor(IDC_POINTER_LINK); - m_hLinkNowCursor = CMFCUtils::LoadCursor(IDC_POINTER_LINKNOW); - m_hCurrCursor = &m_hLinkCursor; - AZ::EntitySystemBus::Handler::BusConnect(); -} - -////////////////////////////////////////////////////////////////////////// -CLinkTool::~CLinkTool() -{ - AZ::EntitySystemBus::Handler::BusDisconnect(); -} - -////////////////////////////////////////////////////////////////////////// -void CLinkTool::LinkObject(CBaseObject* pChild, CBaseObject* pParent) -{ - if (pChild == NULL) - { - return; - } - - if (ChildIsValid(pParent, pChild)) - { - CUndo undo("Link Object"); - - if (qobject_cast(pChild)) - { - static_cast(pChild)->SetAttachTarget(""); - static_cast(pChild)->SetAttachType(CEntityObject::eAT_Pivot); - } - - pParent->AttachChild(pChild, true); - - QString str; - str = tr("%1 attached to %2").arg(pChild->GetName(), pParent->GetName()); - SetStatusText(str); - } - else - { - SetStatusText("Error: Cyclic linking or already linked."); - } -} - -////////////////////////////////////////////////////////////////////////// -void CLinkTool::LinkSelectedToParent(CBaseObject* pParent) -{ - if (pParent) - { - if (IsRelevant(pParent)) - { - CSelectionGroup* pSel = GetIEditor()->GetSelection(); - if (!pSel->GetCount()) - { - return; - } - CUndo undo("Link Object(s)"); - for (int i = 0; i < pSel->GetCount(); i++) - { - CBaseObject* pChild = pSel->GetObject(i); - if (pChild == pParent) - { - continue; - } - LinkObject(pChild, pParent); - } - } - } -} - -////////////////////////////////////////////////////////////////////////// -bool CLinkTool::MouseCallback(CViewport* view, EMouseEvent event, QPoint& point, [[maybe_unused]] int flags) -{ - view->SetCursorString(""); - - m_hCurrCursor = &m_hLinkCursor; - if (event == eMouseLDown) - { - HitContext hitInfo; - view->HitTest(point, hitInfo); - CBaseObject* obj = hitInfo.object; - if (obj) - { - if (IsRelevant(obj)) - { - m_StartDrag = obj->GetWorldPos(); - m_pChild = obj; - } - } - } - else if (event == eMouseLUp) - { - HitContext hitInfo; - view->HitTest(point, hitInfo); - CBaseObject* obj = hitInfo.object; - if (obj) - { - if (IsRelevant(obj)) - { - CSelectionGroup* pSelectionGroup = GetIEditor()->GetSelection(); - int nGroupCount = pSelectionGroup->GetCount(); - if (pSelectionGroup && nGroupCount > 1) - { - LinkSelectedToParent(obj); - } - if (!pSelectionGroup || nGroupCount <= 1 || !pSelectionGroup->IsContainObject(m_pChild)) - { - LinkObject(m_pChild, obj); - } - } - } - m_pChild = NULL; - } - else if (event == eMouseMove) - { - m_EndDrag = view->ViewToWorld(point); - m_nodeName = nullptr; - m_pGeomCacheRenderNode = nullptr; - - HitContext hitInfo; - if (view->HitTest(point, hitInfo)) - { - m_EndDrag = hitInfo.raySrc + hitInfo.rayDir * hitInfo.dist; - } - - CBaseObject* obj = hitInfo.object; - if (obj) - { - if (IsRelevant(obj)) - { - QString name = obj->GetName(); - if (hitInfo.name) - { - name += QString("\n ") + hitInfo.name; - } - - // Set Cursors. - view->SetCursorString(name); - if (m_pChild) - { - if (ChildIsValid(obj, m_pChild)) - { - m_hCurrCursor = &m_hLinkNowCursor; - } - } - } - } - } - return true; -} - -////////////////////////////////////////////////////////////////////////// -bool CLinkTool::OnKeyDown([[maybe_unused]] CViewport* view, uint32 nChar, [[maybe_unused]] uint32 nRepCnt, [[maybe_unused]] uint32 nFlags) -{ - if (nChar == VK_ESCAPE) - { - // Cancel selection. - GetIEditor()->SetEditTool(nullptr); - } - return false; -} - -////////////////////////////////////////////////////////////////////////// -void CLinkTool::Display(DisplayContext& dc) -{ - if (m_pChild && m_EndDrag != Vec3(ZERO)) - { - ColorF lineColor = (m_hCurrCursor == &m_hLinkNowCursor) ? ColorF(0, 1, 0) : ColorF(1, 0, 0); - dc.DrawLine(m_StartDrag, m_EndDrag, lineColor, lineColor); - } -} - -////////////////////////////////////////////////////////////////////////// -void CLinkTool::OnEntityDestruction(const AZ::EntityId& entityId) -{ - if (m_pChild && (m_pChild->GetType() == OBJTYPE_AZENTITY)) - { - CComponentEntityObject* childComponentEntity = static_cast(m_pChild); - AZ::EntityId childEntityId = childComponentEntity->GetAssociatedEntityId(); - if(entityId == childEntityId) - { - GetIEditor()->SetEditTool(nullptr); - } - } -} - -////////////////////////////////////////////////////////////////////////// -bool CLinkTool::ChildIsValid(CBaseObject* pParent, CBaseObject* pChild, int nDir) -{ - if (!pParent) - { - return false; - } - if (!pChild) - { - return false; - } - if (pParent == pChild) - { - return false; - } - - // Legacy entities and AZ entities shouldn't be linked. - if ((pParent->GetType() == OBJTYPE_AZENTITY) != (pChild->GetType() == OBJTYPE_AZENTITY)) - { - return false; - } - - CBaseObject* pObj; - if (nDir & 1) - { - pObj = pChild->GetParent(); - if (pObj) - { - if (!ChildIsValid(pParent, pObj, 1)) - { - return false; - } - } - } - if (nDir & 2) - { - for (int i = 0; i < pChild->GetChildCount(); i++) - { - pObj = pChild->GetChild(i); - if (pObj) - { - if (!ChildIsValid(pParent, pObj, 2)) - { - return false; - } - } - } - } - return true; -} - -////////////////////////////////////////////////////////////////////////// -bool CLinkTool::OnSetCursor(CViewport* vp) -{ - vp->SetCursor(*m_hCurrCursor); - return true; -} - -#include diff --git a/Code/Sandbox/Editor/LinkTool.h b/Code/Sandbox/Editor/LinkTool.h deleted file mode 100644 index a24370f7fe..0000000000 --- a/Code/Sandbox/Editor/LinkTool.h +++ /dev/null @@ -1,85 +0,0 @@ -/* -* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or -* its licensors. -* -* For complete copyright and license terms please see the LICENSE at the root of this -* distribution (the "License"). All use of this software is governed by the License, -* or, if provided, by the license below or the license accompanying this file. Do not -* remove or modify any license notices. This file is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* -*/ -// Original file Copyright Crytek GMBH or its affiliates, used under license. - -// Description : Definition of CLinkTool, tool used to link objects. - - -#ifndef CRYINCLUDE_EDITOR_LINKTOOL_H -#define CRYINCLUDE_EDITOR_LINKTOOL_H - -#pragma once - -#if !defined(Q_MOC_RUN) -#include -#include "EditTool.h" -#include "Include/IObjectManager.h" -#endif - -class CEntityObject; - -////////////////////////////////////////////////////////////////////////// -class CLinkTool - : public CEditTool - , public IObjectSelectCallback - , private AZ::EntitySystemBus::Handler -{ - Q_OBJECT -public: - Q_INVOKABLE CLinkTool(); // IPickObjectCallback *callback,CRuntimeClass *targetClass=NULL ); - - // Ovverides from CEditTool - bool MouseCallback(CViewport* view, EMouseEvent event, QPoint& point, int flags); - - virtual void BeginEditParams([[maybe_unused]] IEditor* ie, [[maybe_unused]] int flags) {}; - virtual void EndEditParams() {}; - - virtual void Display(DisplayContext& dc); - virtual bool OnKeyDown(CViewport* view, uint32 nChar, uint32 nRepCnt, uint32 nFlags); - virtual bool OnKeyUp([[maybe_unused]] CViewport* view, [[maybe_unused]] uint32 nChar, [[maybe_unused]] uint32 nRepCnt, [[maybe_unused]] uint32 nFlags) { return false; }; - - virtual bool OnSelectObject([[maybe_unused]] CBaseObject* obj) {return false; } - virtual bool CanSelectObject([[maybe_unused]] CBaseObject* obj) { return true; }; - - virtual bool OnSetCursor(CViewport* vp); - - void LinkSelectedToParent(CBaseObject* pParent); - -protected: - virtual ~CLinkTool(); - // Delete itself. - void DeleteThis() { delete this; }; - -private: - bool IsRelevant([[maybe_unused]] CBaseObject* obj) { return true; } - bool ChildIsValid(CBaseObject* pParent, CBaseObject* pChild, int nDir = 3); - void LinkObject(CBaseObject* pChild, CBaseObject* pParent); - void LinkToNode(CEntityObject* pChild, CEntityObject* pParent, const char* nodeName); - - // AZ::EntitySystemBus::Handler - void OnEntityDestruction(const AZ::EntityId& entityId) override; - - - CBaseObject* m_pChild; - Vec3 m_StartDrag; - Vec3 m_EndDrag; - - QCursor m_hLinkCursor; - QCursor m_hLinkNowCursor; - QCursor* m_hCurrCursor; - - const char* m_nodeName; - IGeomCacheRenderNode* m_pGeomCacheRenderNode; -}; - - -#endif // CRYINCLUDE_EDITOR_LINKTOOL_H diff --git a/Code/Sandbox/Editor/MainWindow.cpp b/Code/Sandbox/Editor/MainWindow.cpp index b926c00fc8..6acd8cfc20 100644 --- a/Code/Sandbox/Editor/MainWindow.cpp +++ b/Code/Sandbox/Editor/MainWindow.cpp @@ -1104,15 +1104,6 @@ void MainWindow::InitActions() .RegisterUpdateCallback(cryEdit, &CCryEditApp::OnUpdateSelected) .SetIcon(Style::icon("Align_to_grid")) .SetApplyHoverEffect(); - am->AddAction(ID_OBJECTMODIFY_ALIGN, tr("Align to object")).SetCheckable(true) -#if AZ_TRAIT_OS_PLATFORM_APPLE - .SetStatusTip(tr(u8"\u2318: Align an object to a bounding box, \u2325 : Keep Rotation of the moved object, Shift : Keep Scale of the moved object")) -#else - .SetStatusTip(tr("Ctrl: Align an object to a bounding box, Alt : Keep Rotation of the moved object, Shift : Keep Scale of the moved object")) -#endif - .RegisterUpdateCallback(cryEdit, &CCryEditApp::OnUpdateAlignObject) - .SetIcon(Style::icon("Align_to_Object")) - .SetApplyHoverEffect(); am->AddAction(ID_MODIFY_ALIGNOBJTOSURF, tr("Align object to surface (Hold CTRL)")).SetCheckable(true) .SetToolTip(tr("Align object to surface (Hold CTRL)")) .RegisterUpdateCallback(cryEdit, &CCryEditApp::OnUpdateAlignToVoxel) @@ -1449,15 +1440,6 @@ void MainWindow::InitActions() .SetApplyHoverEffect(); // Edit Mode Toolbar Actions - am->AddAction(ID_EDITTOOL_LINK, tr("Link an object to parent")) - .SetIcon(Style::icon("add_link")) - .SetApplyHoverEffect() - .SetCheckable(true) - .RegisterUpdateCallback(cryEdit, &CCryEditApp::OnUpdateEditToolLink); - am->AddAction(ID_EDITTOOL_UNLINK, tr("Unlink all selected objects")) - .SetIcon(Style::icon("remove_link")) - .SetApplyHoverEffect() - .RegisterUpdateCallback(cryEdit, &CCryEditApp::OnUpdateEditToolUnlink); am->AddAction(IDC_SELECTION_MASK, tr("Selected Object Types")); am->AddAction(ID_REF_COORDS_SYS, tr("Reference coordinate system")) .SetShortcut(tr("Ctrl+W")) diff --git a/Code/Sandbox/Editor/PickObjectTool.cpp b/Code/Sandbox/Editor/PickObjectTool.cpp deleted file mode 100644 index dc1fce110e..0000000000 --- a/Code/Sandbox/Editor/PickObjectTool.cpp +++ /dev/null @@ -1,173 +0,0 @@ -/* -* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or -* its licensors. -* -* For complete copyright and license terms please see the LICENSE at the root of this -* distribution (the "License"). All use of this software is governed by the License, -* or, if provided, by the license below or the license accompanying this file. Do not -* remove or modify any license notices. This file is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* -*/ -// Original file Copyright Crytek GMBH or its affiliates, used under license. - -#include "EditorDefs.h" - -#include "PickObjectTool.h" - -// Editor -#include "Viewport.h" -#include "Include/HitContext.h" -#include "Objects/BaseObject.h" - - -////////////////////////////////////////////////////////////////////////// -CPickObjectTool::CPickObjectTool(IPickObjectCallback* callback, const QMetaObject* targetClass) -{ - assert(callback != 0); - m_callback = callback; - m_targetClass = targetClass; - m_bMultiPick = false; -} - -////////////////////////////////////////////////////////////////////////// -CPickObjectTool::~CPickObjectTool() -{ - GetIEditor()->GetObjectManager()->SetSelectCallback(0); - //m_prevSelectCallback = 0; - if (m_callback) - { - m_callback->OnCancelPick(); - } -} - -////////////////////////////////////////////////////////////////////////// -void CPickObjectTool::BeginEditParams([[maybe_unused]] IEditor* ie, [[maybe_unused]] int flags) -{ - QString str = "Pick object"; - if (m_targetClass) - { - str = tr("Pick %1 object").arg(m_targetClass->className()); - } - SetStatusText(str); - - //m_prevSelectCallback = - GetIEditor()->GetObjectManager()->SetSelectCallback(this); -} - -////////////////////////////////////////////////////////////////////////// -bool CPickObjectTool::MouseCallback(CViewport* view, EMouseEvent event, QPoint& point, [[maybe_unused]] int flags) -{ - if (event == eMouseLDown) - { - HitContext hitInfo; - view->HitTest(point, hitInfo); - CBaseObject* obj = hitInfo.object; - if (obj) - { - if (IsRelevant(obj)) - { - if (m_callback) - { - // Can pick this one. - m_callback->OnPick(obj); - } - if (!m_bMultiPick) - { - m_callback = 0; - GetIEditor()->SetEditTool(0); - } - } - } - } - else if (event == eMouseMove) - { - HitContext hitInfo; - view->HitTest(point, hitInfo); - CBaseObject* obj = hitInfo.object; - if (obj) - { - if (IsRelevant(obj)) - { - // Set Cursors. - view->SetCurrentCursor(STD_CURSOR_HIT, obj->GetName()); - } - } - } - return true; -} - -////////////////////////////////////////////////////////////////////////// -bool CPickObjectTool::OnSelectObject(CBaseObject* obj) -{ - if (IsRelevant(obj)) - { - // Can pick this one. - if (m_callback) - { - m_callback->OnPick(obj); - m_callback = 0; - } - if (!m_bMultiPick) - { - GetIEditor()->SetEditTool(0); - } - } - return false; -} - -////////////////////////////////////////////////////////////////////////// -bool CPickObjectTool::CanSelectObject(CBaseObject* obj) -{ - return IsRelevant(obj); -} - -////////////////////////////////////////////////////////////////////////// -bool CPickObjectTool::OnKeyDown([[maybe_unused]] CViewport* view, uint32 nChar, [[maybe_unused]] uint32 nRepCnt, [[maybe_unused]] uint32 nFlags) -{ - if (nChar == VK_ESCAPE) - { - // Cancel selection. - GetIEditor()->SetEditTool(0); - } - return false; -} - -////////////////////////////////////////////////////////////////////////// -bool CPickObjectTool::IsRelevant(CBaseObject* obj) -{ - assert(obj != 0); - if (obj == NULL) - { - return false; - } - if (!m_callback) - { - return false; - } - - if (!m_targetClass) - { - return m_callback->OnPickFilter(obj); - } - else - { - if (obj->metaObject() == m_targetClass || m_targetClass->cast(obj)) - { - return m_callback->OnPickFilter(obj); - } - } - return false; -} - -////////////////////////////////////////////////////////////////////////// -bool CPickObjectTool::IsNeedSpecificBehaviorForSpaceAcce() -{ - if (m_callback && m_callback->IsNeedSpecificBehaviorForSpaceAcce()) - { - return true; - } - return false; -} - -#include diff --git a/Code/Sandbox/Editor/PickObjectTool.h b/Code/Sandbox/Editor/PickObjectTool.h deleted file mode 100644 index 3b0241042a..0000000000 --- a/Code/Sandbox/Editor/PickObjectTool.h +++ /dev/null @@ -1,76 +0,0 @@ -/* -* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or -* its licensors. -* -* For complete copyright and license terms please see the LICENSE at the root of this -* distribution (the "License"). All use of this software is governed by the License, -* or, if provided, by the license below or the license accompanying this file. Do not -* remove or modify any license notices. This file is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* -*/ -// Original file Copyright Crytek GMBH or its affiliates, used under license. - -// Description : Definition of PickObjectTool, tool used to pick objects. - - -#ifndef CRYINCLUDE_EDITOR_PICKOBJECTTOOL_H -#define CRYINCLUDE_EDITOR_PICKOBJECTTOOL_H - -#if !defined(Q_MOC_RUN) -#include "EditTool.h" -#include "IObjectManager.h" -#endif - -#pragma once - -////////////////////////////////////////////////////////////////////////// -class CPickObjectTool - : public CEditTool - , public IObjectSelectCallback -{ - Q_OBJECT -public: - CPickObjectTool(IPickObjectCallback* callback, const QMetaObject* targetClass = NULL); - - //! If set to true, pick tool will not stop picking after first pick. - void SetMultiplePicks(bool bEnable) { m_bMultiPick = bEnable; }; - - // Ovverides from CEditTool - bool MouseCallback(CViewport* view, EMouseEvent event, QPoint& point, int flags); - - virtual void BeginEditParams(IEditor* ie, int flags); - virtual void EndEditParams() {}; - - virtual void Display([[maybe_unused]] DisplayContext& dc) {}; - virtual bool OnKeyDown(CViewport* view, uint32 nChar, uint32 nRepCnt, uint32 nFlags); - virtual bool OnKeyUp([[maybe_unused]] CViewport* view, [[maybe_unused]] uint32 nChar, [[maybe_unused]] uint32 nRepCnt, [[maybe_unused]] uint32 nFlags) { return false; }; - - ////////////////////////////////////////////////////////////////////////// - // IObjectSelectCallback - ////////////////////////////////////////////////////////////////////////// - virtual bool OnSelectObject(CBaseObject* obj); - virtual bool CanSelectObject(CBaseObject* obj); - ////////////////////////////////////////////////////////////////////////// - - virtual bool IsNeedSpecificBehaviorForSpaceAcce(); - -protected: - virtual ~CPickObjectTool(); - // Delete itself. - void DeleteThis() { delete this; }; - -private: - bool IsRelevant(CBaseObject* obj); - - //! Object that requested pick. - IPickObjectCallback* m_callback; - - //! If target class specified, will pick only objects that belongs to that runtime class. - const QMetaObject* m_targetClass; - - bool m_bMultiPick; -}; - - -#endif // CRYINCLUDE_EDITOR_PICKOBJECTTOOL_H diff --git a/Code/Sandbox/Editor/Resource.h b/Code/Sandbox/Editor/Resource.h index a4bd2c1143..afcd0c7a6f 100644 --- a/Code/Sandbox/Editor/Resource.h +++ b/Code/Sandbox/Editor/Resource.h @@ -181,8 +181,6 @@ #define ID_TV_STOP 33568 #define ID_TV_PAUSE 33569 #define ID_ADDNODE 33570 -#define ID_EDITTOOL_LINK 33571 -#define ID_EDITTOOL_UNLINK 33572 #define ID_ADDSCENETRACK 33573 #define ID_FIND 33574 #define ID_SNAP_TO_GRID 33575 @@ -214,7 +212,6 @@ #define ID_TV_JUMPSTART 33601 #define ID_TV_PREVKEY 33602 #define ID_TV_NEXTKEY 33603 -#define ID_OBJECTMODIFY_ALIGN 33604 #define ID_PLAY_LOOP 33607 #define ID_TERRAIN 33611 #define ID_OBJECTMODIFY_ALIGNTOGRID 33619 diff --git a/Code/Sandbox/Editor/ToolbarManager.cpp b/Code/Sandbox/Editor/ToolbarManager.cpp index 4679f9cb6a..d39dabf034 100644 --- a/Code/Sandbox/Editor/ToolbarManager.cpp +++ b/Code/Sandbox/Editor/ToolbarManager.cpp @@ -585,13 +585,6 @@ AmazonToolbar ToolbarManager::GetEditModeToolbar() const t.AddAction(ID_TOOLBAR_WIDGET_UNDO, ORIGINAL_TOOLBAR_VERSION); t.AddAction(ID_TOOLBAR_WIDGET_REDO, ORIGINAL_TOOLBAR_VERSION); - if (!GetIEditor()->IsNewViewportInteractionModelEnabled()) - { - t.AddAction(ID_TOOLBAR_SEPARATOR, ORIGINAL_TOOLBAR_VERSION); - t.AddAction(ID_EDITTOOL_LINK, ORIGINAL_TOOLBAR_VERSION); - t.AddAction(ID_EDITTOOL_UNLINK, ORIGINAL_TOOLBAR_VERSION); - } - t.AddAction(ID_TOOLBAR_SEPARATOR, ORIGINAL_TOOLBAR_VERSION); if (!GetIEditor()->IsNewViewportInteractionModelEnabled()) @@ -630,7 +623,6 @@ AmazonToolbar ToolbarManager::GetObjectToolbar() const AmazonToolbar t = AmazonToolbar("Object", QObject::tr("Object Toolbar")); t.SetMainToolbar(true); t.AddAction(ID_GOTO_SELECTED, ORIGINAL_TOOLBAR_VERSION); - t.AddAction(ID_OBJECTMODIFY_ALIGN, ORIGINAL_TOOLBAR_VERSION); t.AddAction(ID_OBJECTMODIFY_ALIGNTOGRID, ORIGINAL_TOOLBAR_VERSION); t.AddAction(ID_OBJECTMODIFY_SETHEIGHT, ORIGINAL_TOOLBAR_VERSION); t.AddAction(ID_MODIFY_ALIGNOBJTOSURF, ORIGINAL_TOOLBAR_VERSION); diff --git a/Code/Sandbox/Editor/editor_lib_files.cmake b/Code/Sandbox/Editor/editor_lib_files.cmake index c91d6ce428..5696931f26 100644 --- a/Code/Sandbox/Editor/editor_lib_files.cmake +++ b/Code/Sandbox/Editor/editor_lib_files.cmake @@ -533,8 +533,6 @@ set(FILES Dialogs/PythonScriptsDialog.ui Dialogs/Generic/UserOptions.cpp Dialogs/Generic/UserOptions.h - AlignTool.cpp - AlignTool.h ObjectCloneTool.cpp ObjectCloneTool.h EditMode/SubObjectSelectionReferenceFrameCalculator.cpp @@ -545,10 +543,6 @@ set(FILES RotateTool.h EditTool.cpp EditTool.h - LinkTool.cpp - LinkTool.h - PickObjectTool.cpp - PickObjectTool.h VoxelAligningTool.cpp VoxelAligningTool.h Export/ExportManager.cpp From 8804ab8f1f6990418df4afba0a5e9b889c8f0cbe Mon Sep 17 00:00:00 2001 From: Brian Herrera Date: Tue, 20 Apr 2021 09:56:46 -0700 Subject: [PATCH 48/68] Add script to sync repo with upstream --- scripts/build/tools/sync_repo.py | 153 +++++++++++++++++++++++++++++++ 1 file changed, 153 insertions(+) create mode 100644 scripts/build/tools/sync_repo.py diff --git a/scripts/build/tools/sync_repo.py b/scripts/build/tools/sync_repo.py new file mode 100644 index 0000000000..0275cc6661 --- /dev/null +++ b/scripts/build/tools/sync_repo.py @@ -0,0 +1,153 @@ +# +# All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or +# its licensors. +# +# For complete copyright and license terms please see the LICENSE at the root of this +# distribution (the "License"). All use of this software is governed by the License, +# or, if provided, by the license below or the license accompanying this file. Do not +# remove or modify any license notices. This file is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# + +import argparse +import boto3 +import logging +import os +import subprocess +import sys + +from botocore.exceptions import ClientError +from urllib.parse import urlparse, urlunparse + +log = logging.getLogger(__name__) +log.setLevel(logging.INFO) + +DEFAULT_BRANCH = "main" +DEFAULT_WORKSPACE_ROOT = "." + + +class MergeError(Exception): + pass + + +class SyncRepo: + """A git repo with configured remotes to sync with GitHub. + + Used by the sync pipeline to push branches to GitHub and pull down latest from main. Changes flow from + the upstream remote down to origin. Remotes can be swapped to pull changes in the other direction. + + Attributes: + origin: URL for the origin repo. This is the target for the sync. + upstream: URL for the upstream repo. This is the source with the latest changes. + workspace_root: Path to the parent directory for the local workspace. + parameter: Name of the parameter used to store GitHub credentials. + + """ + + def __init__(self, origin, upstream, workspace_root, region=None, parameter=None): + self.workspace_root = workspace_root + self.parameter = parameter + self.region = region + + if self.parameter and self.region: + log.info(f"Adding credentials from {self.parameter} in {self.region}") + self.origin = self._add_credentials(origin) + self.upstream = self._add_credentials(upstream) + else: + self.origin = origin + self.upstream = upstream + + self.origin_name = self.origin.split("/")[-1] + self.upstream_name = self.upstream.split("/")[-1] + self.workspace = os.path.join(workspace_root, self.origin_name) + + def _add_credentials(self, url): + """Add credentials to a github repo URL from parameter store.""" + parsed_url = urlparse(url) + if parsed_url.netloc == "github.com": + try: + ssm = boto3.client("ssm", self.region) + credentials = ssm.get_parameter( + Name=self.parameter, + WithDecryption=True + )["Parameter"]["Value"] + url = urlunparse(parsed_url._replace(netloc=f"{credentials}@github.com")) + except ClientError as e: + log.error(f"Error retrieving credentials from parameter store: {e}") + return url + + def clone(self): + """Clones repo to the instance workspace. Refreshes remote configs for existing repos.""" + if not os.path.exists(self.workspace): + os.mkdir(self.workspace) + + if subprocess.run(["git", "rev-parse", "--is-inside-work-tree"], cwd=self.workspace).returncode != 0: + log.info(f"Cloning repo {self.origin} to {self.workspace}.") + subprocess.run(["git", "clone", self.origin, self.origin_name], cwd=self.workspace_root, check=True) + subprocess.run(["git", "remote", "add", "upstream", self.upstream], cwd=self.workspace) + else: + log.info("Update remote config for existing repos.") + subprocess.run(["git", "remote", "set-url", "origin", self.origin], cwd=self.workspace) + subprocess.run(["git", "remote", "set-url", "upstream", self.upstream], cwd=self.workspace) + + def sync(self, branch): + """Fetches latest from upstream and syncs changes to origin. + + Syncs are one-way and conflicts are not expected. Fast-forward merges are performed if possible. If a + fast-forward merge is not possible, a merge will not be attempted and will raise an exception. + + The checkout command will create a new branch from upstream/ if it does not exist in origin. The + remote will be remapped to origin during the push. + + Args: + branch: Name of the upstream branch to sync with origin. + + Raises: + MergeError: An error occured when attempting to merge to the target branch. + + """ + subprocess.run(["git", "fetch", "origin"], cwd=self.workspace, check=True) + subprocess.run(["git", "fetch", "upstream"], cwd=self.workspace, check=True) + subprocess.run(["git", "checkout", branch], cwd=self.workspace, check=True) + + # If the branch exists in origin, merge from upstream. New branches do not require a merge. + if subprocess.run(["git", "ls-remote", "--exit-code", "-h", "origin", branch], cwd=self.workspace).returncode == 0: + subprocess.run(["git", "reset", "--hard", "HEAD"], cwd=self.workspace, check=True) + subprocess.run(["git", "pull"], cwd=self.workspace, check=True) + + if subprocess.run(["git", "merge", "--ff-only", f"upstream/{branch}"], cwd=self.workspace).returncode != 0: + raise MergeError(f"Unable to perform ff merge to target branch: {self.origin}/{branch} Intervention required.") + + subprocess.run(["git", "push", "-u", "origin", branch], cwd=self.workspace, check=True) + + +def process_args(): + """Process arguements. + + Example: + sync_repo.py [Options] + + """ + parser = argparse.ArgumentParser() + parser.add_argument("upstream") + parser.add_argument("origin") + parser.add_argument("-b", "--branch", default=DEFAULT_BRANCH) + parser.add_argument("-w", "--workspace-root", default=DEFAULT_WORKSPACE_ROOT) + parser.add_argument("-r", "--region", default=None) + parser.add_argument("-p", "--parameter", default=None) + return parser.parse_args() + + +def main(): + args = process_args() + + repo = SyncRepo(args.origin, args.upstream, args.workspace_root, args.region, args.parameter) + repo.clone() + try: + repo.sync(args.branch) + except MergeError as e: + log.error(e) + + +if __name__ == "__main__": + sys.exit(main()) From 83324762b58438c954a75851d3a277511e2c5628 Mon Sep 17 00:00:00 2001 From: luissemp Date: Tue, 20 Apr 2021 10:40:53 -0700 Subject: [PATCH 49/68] Brought over SC's command line fixes and add_node example script --- .../Code/Editor/View/Widgets/CommandLine.cpp | 215 ++++++++++++++---- .../Code/Editor/View/Widgets/CommandLine.h | 106 ++++++++- .../Code/Editor/View/Windows/MainWindow.cpp | 2 +- .../Code/Editor/View/Windows/mainwindow.ui | 2 +- .../AutoGen/ScriptCanvasGrammar_Header.jinja | 2 +- 5 files changed, 275 insertions(+), 52 deletions(-) diff --git a/Gems/ScriptCanvas/Code/Editor/View/Widgets/CommandLine.cpp b/Gems/ScriptCanvas/Code/Editor/View/Widgets/CommandLine.cpp index 6fa930ba34..19390de956 100644 --- a/Gems/ScriptCanvas/Code/Editor/View/Widgets/CommandLine.cpp +++ b/Gems/ScriptCanvas/Code/Editor/View/Widgets/CommandLine.cpp @@ -79,15 +79,19 @@ namespace // Create the nodes in a horizontal list at the top of the canvas. - AZ::Vector2 pos(20.0f, -100.0f); + AZ::Vector2 pos(20.0f, 20.0f); for (const auto& index : ui->commandList->selectionModel()->selectedIndexes()) { - if (index.column() != CommandListDataModel::ColumnIndex::Command) + if (index.column() != CommandListDataModel::ColumnIndex::CommandIndex) { continue; } AZ::Uuid type = dataModel->data(index, CommandListDataModel::CustomRole::Types).value(); + if (type.IsNull()) + { + continue; + } [[maybe_unused]] const AZ::SerializeContext::ClassData* classData = serializeContext->FindClassData(type); AZ_Assert(classData, "Failed to find ClassData for ID: %s", type.ToString().data()); @@ -115,6 +119,8 @@ namespace ScriptCanvasEditor ///////////////////////////////////////////////////////////////////////////////////////////// CommandListDataModel::CommandListDataModel([[maybe_unused]] QWidget* parent /*= nullptr*/) { + ScriptCanvasCommandLineRequestBus::Handler::BusConnect(); + AZ::SerializeContext* serializeContext = nullptr; AZ::ComponentApplicationBus::BroadcastResult(serializeContext, &AZ::ComponentApplicationRequests::GetSerializeContext); @@ -138,12 +144,62 @@ namespace ScriptCanvasEditor if (add) { - m_nodeTypes.push_back(classData->m_typeId); + Entry entry; + entry.m_type = classData->m_typeId; + m_entries.emplace_back(entry); } } return true; } - ); + ); + + ScriptCanvasCommandLineRequestBus::Broadcast(&ScriptCanvasCommandLineRequests::AddCommand, "add_node", "Adds the specified node to the graph", + [serializeContext](const AZStd::vector& nodes) + { + AZ::Uuid nodeTypeToAdd = AZ::Uuid::CreateNull(); + if (nodes.size() > 0) + { + const AZStd::string& nodeName = *(nodes.begin()); + + serializeContext->EnumerateDerived( + [&nodeName, &nodeTypeToAdd](const AZ::SerializeContext::ClassData* classData, [[maybe_unused]] const AZ::Uuid& classUuid) -> bool + { + if (classData && classData->m_editData) + { + if (nodeName.compare(classData->m_name) == 0) + { + nodeTypeToAdd = classData->m_typeId; + } + } + return true; + } + ); + + if (!nodeTypeToAdd.IsNull()) + { + ScriptCanvas::ScriptCanvasId scriptCanvasId; + ScriptCanvasEditor::GeneralRequestBus::BroadcastResult(scriptCanvasId, &ScriptCanvasEditor::GeneralRequests::GetActiveScriptCanvasId); + + AZ::EntityId graphCanvasGraphId; + ScriptCanvasEditor::GeneralRequestBus::BroadcastResult(graphCanvasGraphId, &ScriptCanvasEditor::GeneralRequests::GetActiveGraphCanvasGraphId); + + if (scriptCanvasId.IsValid() && graphCanvasGraphId.IsValid()) + { + ScriptCanvasEditor::Nodes::StyleConfiguration styleConfiguration; + + AZ::Vector2 pos(100.0f, 20.0f); + NodeIdPair nodePair = ScriptCanvasEditor::Nodes::CreateNode(nodeTypeToAdd, scriptCanvasId, styleConfiguration); + GraphCanvas::SceneRequestBus::Event(graphCanvasGraphId, &GraphCanvas::SceneRequests::AddNode, nodePair.m_graphCanvasId, pos, false); + } + } + } + } + ); + } + + CommandListDataModel::~CommandListDataModel() + { + ScriptCanvasCommandLineRequestBus::Handler::BusDisconnect(); } QModelIndex CommandListDataModel::index(int row, int column, const QModelIndex& parent /*= QModelIndex()*/) const @@ -162,7 +218,7 @@ namespace ScriptCanvasEditor int CommandListDataModel::rowCount([[maybe_unused]] const QModelIndex& parent /*= QModelIndex()*/) const { - return static_cast(m_nodeTypes.size()); + return static_cast(m_entries.size()); } int CommandListDataModel::columnCount([[maybe_unused]] const QModelIndex& parent /*= QModelIndex()*/) const @@ -190,19 +246,40 @@ namespace ScriptCanvasEditor } } - AZ::Uuid nodeType = m_nodeTypes[index.row()]; - const AZ::SerializeContext::ClassData* classData = serializeContext->FindClassData(nodeType); - if (index.column() == ColumnIndex::Command) + AZ::Uuid nodeType = m_entries[index.row()].m_type; + if (nodeType.IsNull()) { - return QVariant(QString(classData->m_name)); + if (index.column() == ColumnIndex::CommandIndex) + { + return QVariant(QString(m_entries[index.row()].m_command.c_str())); + } + if (index.column() == ColumnIndex::DescriptionIndex) + { + AZStd::string command = m_entries[index.row()].m_command; + const auto& entry = m_commands.find(command); + if (entry != m_commands.end()) + { + return QVariant(QString(entry->second->GetDescription().c_str())); + } + } } - if (index.column() == ColumnIndex::Description) + else { - return QVariant(QString(classData->m_editData ? classData->m_editData->m_description : tr("No description provided."))); - } - if (index.column() == ColumnIndex::Trail) - { - return QVariant(QString("")); + if (const AZ::SerializeContext::ClassData* classData = serializeContext->FindClassData(nodeType)) + { + if (index.column() == ColumnIndex::CommandIndex) + { + return QVariant(QString(classData->m_name)); + } + if (index.column() == ColumnIndex::DescriptionIndex) + { + return QVariant(QString(classData->m_editData ? classData->m_editData->m_description : tr("No description provided."))); + } + if (index.column() == ColumnIndex::TrailIndex) + { + return QVariant(QString("")); + } + } } } @@ -210,25 +287,42 @@ namespace ScriptCanvasEditor { case CustomRole::Types: { - AZ::Uuid nodeType = m_nodeTypes[index.row()]; + AZ::Uuid nodeType = m_entries[index.row()].m_type; return QVariant::fromValue(nodeType); } break; case CustomRole::Node: { - AZ::Uuid nodeType = m_nodeTypes[index.row()]; - const AZ::SerializeContext::ClassData* classData = serializeContext->FindClassData(nodeType); - if (index.column() == ColumnIndex::Command) + AZ::Uuid nodeType = m_entries[index.row()].m_type; + if (nodeType.IsNull()) { - return QVariant(QString(classData->m_name)); + return QVariant(QString(m_entries[index.row()].m_command.c_str())); } - if (index.column() == ColumnIndex::Description) + else { - return QVariant(QString(classData->m_editData ? classData->m_editData->m_description : tr("No description provided."))); + if (const AZ::SerializeContext::ClassData* classData = serializeContext->FindClassData(nodeType)) + { + if (index.column() == ColumnIndex::CommandIndex) + { + return QVariant(QString(classData->m_name)); + } + if (index.column() == ColumnIndex::DescriptionIndex) + { + return QVariant(QString(classData->m_editData ? classData->m_editData->m_description : tr("No description provided."))); + } + if (index.column() == ColumnIndex::TrailIndex) + { + return QVariant(QString("")); + } + } } - if (index.column() == ColumnIndex::Trail) + } + break; + case CustomRole::Commands: + { + if (index.column() == ColumnIndex::CommandIndex) { - return QVariant(QString("")); + return QVariant(QString(m_entries[index.row()].m_command.c_str())); } } break; @@ -250,21 +344,31 @@ namespace ScriptCanvasEditor AZ::SerializeContext* serializeContext = nullptr; AZ::ComponentApplicationBus::BroadcastResult(serializeContext, &AZ::ComponentApplicationRequests::GetSerializeContext); - for (const auto& entry : m_nodeTypes) + for (const auto& entry : m_entries) { - const AZ::SerializeContext::ClassData* classData = serializeContext->FindClassData(entry); - if (classData) + if (!entry.m_type.IsNull()) { - QString name = QString(classData->m_name); - if (name.startsWith(input.c_str(), Qt::CaseSensitivity::CaseInsensitive)) + if (const AZ::SerializeContext::ClassData* classData = serializeContext->FindClassData(entry.m_type)) { - return true; + QString name = QString(classData->m_name); + if (name.startsWith(input.c_str(), Qt::CaseSensitivity::CaseInsensitive)) + { + return true; + } } } + else + { + QString commandName = entry.m_command.c_str(); + return (commandName.startsWith(input.c_str(), Qt::CaseSensitivity::CaseInsensitive)); + } } + return false; } + ScriptCanvasEditor::Widget::CommandRegistry CommandListDataModel::m_commands; + // CommandLineEdit ///////////////////////////////////////////////////////////////////////////////////////////// @@ -335,8 +439,25 @@ namespace ScriptCanvasEditor case Qt::Key_Return: { // Invoke the command - // TODO: trigger invoke - // CommandRequestBus::Broadcast(&CommandRequest::Invoke, text().toStdString().c_str()); + AZStd::string commandText = text().toStdString().c_str(); + AZStd::vector tokens; + AZ::StringFunc::Tokenize(commandText, tokens, " "); + if (tokens.size() == 1) + { + ScriptCanvasCommandLineRequestBus::Broadcast(&ScriptCanvasCommandLineRequests::Invoke, tokens.begin()->c_str()); + } + else if (tokens.size() > 1) + { + AZStd::string command = *(tokens.begin()); + AZStd::vector args; + for (auto it = tokens.begin() + 1; it != tokens.end(); ++it) + { + args.push_back(*it); + } + ScriptCanvasCommandLineRequestBus::Broadcast(&ScriptCanvasCommandLineRequests::InvokeWithArguments, command.c_str(), args); + } + + ResetState(); qobject_cast(parent())->hide(); } @@ -376,20 +497,29 @@ namespace ScriptCanvasEditor // CommandListDataProxyModel ///////////////////////////////////////////////////////////////////////////////////////////// - CommandListDataProxyModel::CommandListDataProxyModel(QObject* parent /*= nullptr*/) + CommandListDataProxyModel::CommandListDataProxyModel(CommandListDataModel* commandListData, QObject* parent /*= nullptr*/) : QSortFilterProxyModel(parent) { - QStringList commands; + setSourceModel(commandListData); + + QStringList commandList; - CommandListDataModel* commandListData = new CommandListDataModel(); for (int i = 0; i < commandListData->rowCount(); ++i) { - QModelIndex index = commandListData->index(i, CommandListDataModel::ColumnIndex::Command); + QModelIndex index = commandListData->index(i, CommandListDataModel::ColumnIndex::CommandIndex); QString command = commandListData->data(index, CommandListDataModel::CustomRole::Node).toString(); - commands.push_back(command); + commandList.push_back(command); } - m_completer = new QCompleter(commands); + ScriptCanvasCommandLineRequests::CommandNameList commands; + ScriptCanvasCommandLineRequestBus::BroadcastResult(commands, &ScriptCanvasCommandLineRequests::GetCommands); + for (auto& command : commands) + { + QString commandName = command.first.c_str(); + commandList.push_back(commandName); + } + + m_completer = new QCompleter(commandList); m_completer->setCompletionMode(QCompleter::UnfilteredPopupCompletion); m_completer->setCaseSensitivity(Qt::CaseInsensitive); } @@ -421,7 +551,7 @@ namespace ScriptCanvasEditor } } - QModelIndex index = dataModel->index(sourceRow, CommandListDataModel::ColumnIndex::Command); + QModelIndex index = dataModel->index(sourceRow, CommandListDataModel::ColumnIndex::CommandIndex); QString sourceStr = dataModel->data(index).toString(); if (sourceRow > 0 && sourceStr.startsWith(m_input.c_str(), Qt::CaseSensitivity::CaseInsensitive)) @@ -450,8 +580,7 @@ namespace ScriptCanvasEditor ui->setupUi(this); CommandListDataModel* commandListDataModel = new CommandListDataModel(); - CommandListDataProxyModel* commandListDataProxyModel = new CommandListDataProxyModel(); - commandListDataProxyModel->setSourceModel(commandListDataModel); + CommandListDataProxyModel* commandListDataProxyModel = new CommandListDataProxyModel(commandListDataModel); ui->commandList->setModel(commandListDataProxyModel); @@ -460,8 +589,8 @@ namespace ScriptCanvasEditor connect(ui->commandText, &CommandLineEdit::onKeyReleased, this, &CommandLine::onEditKeyReleaseEvent); connect(ui->commandList, &CommandLineList::onKeyReleased, this, &CommandLine::onListKeyReleaseEvent); - ui->commandList->setColumnWidth(CommandListDataModel::ColumnIndex::Command, 250); - ui->commandList->setColumnWidth(CommandListDataModel::ColumnIndex::Description, 1000); + ui->commandList->setColumnWidth(CommandListDataModel::ColumnIndex::CommandIndex, 250); + ui->commandList->setColumnWidth(CommandListDataModel::ColumnIndex::DescriptionIndex, 1000); } void CommandLine::onTextChanged(const QString& text) diff --git a/Gems/ScriptCanvas/Code/Editor/View/Widgets/CommandLine.h b/Gems/ScriptCanvas/Code/Editor/View/Widgets/CommandLine.h index ab9b115bde..28e3ce4671 100644 --- a/Gems/ScriptCanvas/Code/Editor/View/Widgets/CommandLine.h +++ b/Gems/ScriptCanvas/Code/Editor/View/Widgets/CommandLine.h @@ -25,6 +25,7 @@ #include #include #include +#include #endif namespace Ui @@ -36,10 +37,49 @@ namespace ScriptCanvasEditor { namespace Widget { + class Command + { + public: + using Functor = AZStd::function)>; + + Command(const AZStd::string& name, const AZStd::string& description, Functor functor) + : m_name(name) + , m_description(description) + , m_functor(functor) + {} + + void operator()(const AZStd::vector& args) + { + m_functor(args); + } + + const AZStd::string& GetName() const { return m_name; } + const AZStd::string& GetDescription() const { return m_description; } + + private: + AZStd::string m_name; + AZStd::string m_description; + Functor m_functor; + }; + + using CommandRegistry = AZStd::unordered_map>; + + struct ScriptCanvasCommandLineRequests : public AZ::EBusTraits + { + virtual void AddCommand(const AZStd::string commandName, const AZStd::string description, Command::Functor) = 0; + virtual void Invoke(const char* commandName) = 0; + virtual void InvokeWithArguments(const char* commandName, const AZStd::vector&) = 0; + + using CommandNameList = AZStd::list>; + virtual CommandNameList GetCommands() = 0; + }; + using ScriptCanvasCommandLineRequestBus = AZ::EBus; + // TODO #lsempe: this deserves its own file // CommandListDataModel ///////////////////////////////////////////////////////////////////////////////////////////// class CommandListDataModel : public QAbstractTableModel + , ScriptCanvasCommandLineRequestBus::Handler { Q_OBJECT @@ -49,9 +89,9 @@ namespace ScriptCanvasEditor enum ColumnIndex { - Command, - Description, - Trail, + CommandIndex, + DescriptionIndex, + TrailIndex, Count }; @@ -65,6 +105,8 @@ namespace ScriptCanvasEditor }; CommandListDataModel(QWidget* parent = nullptr); + ~CommandListDataModel() override; + QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const override; QModelIndex parent(const QModelIndex &child) const override; int rowCount(const QModelIndex &parent = QModelIndex()) const override; @@ -75,10 +117,62 @@ namespace ScriptCanvasEditor bool HasMatches(const AZStd::string& input); + struct Entry + { + AZ::Uuid m_type; + AZStd::string m_command; + + Entry() + { + m_type = AZ::Uuid::CreateNull(); + } + }; + protected: - AZStd::vector m_nodeTypes; + AZStd::vector m_entries; + static CommandRegistry m_commands; + + void AddCommand(const AZStd::string commandName, const AZStd::string description, Command::Functor f) override + { + if (m_commands.find(commandName) == m_commands.end()) + { + m_commands[commandName] = AZStd::make_unique(commandName, description, f); + Entry entry; + entry.m_command = commandName; + entry.m_type = AZ::Uuid::CreateNull(); + m_entries.emplace_back(entry); + } + } + + void Invoke(const char* commandName) override + { + auto command = m_commands.find(commandName); + if (command != m_commands.end()) + { + command->second->operator()({}); + } + } + + void InvokeWithArguments(const char* commandName, const AZStd::vector& args) override + { + auto command = m_commands.find(commandName); + if (command != m_commands.end()) + { + command->second->operator()(args); + } + } + + ScriptCanvasCommandLineRequests::CommandNameList GetCommands() override + { + ScriptCanvasCommandLineRequests::CommandNameList commands; + for (auto& command : m_commands) + { + commands.push_back(AZStd::make_pair(command.second->GetName(), command.second->GetDescription())); + } + return commands; + } }; class CommandListDataProxyModel : public QSortFilterProxyModel @@ -88,7 +182,7 @@ namespace ScriptCanvasEditor public: AZ_CLASS_ALLOCATOR(CommandListDataProxyModel, AZ::SystemAllocator, 0); - CommandListDataProxyModel(QObject* parent = nullptr); + CommandListDataProxyModel(CommandListDataModel* commandListData, QObject* parent = nullptr); bool filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const override; @@ -168,4 +262,4 @@ namespace ScriptCanvasEditor AZStd::unique_ptr ui; }; } -} \ No newline at end of file +} diff --git a/Gems/ScriptCanvas/Code/Editor/View/Windows/MainWindow.cpp b/Gems/ScriptCanvas/Code/Editor/View/Windows/MainWindow.cpp index 3f226e62e0..85abf68332 100644 --- a/Gems/ScriptCanvas/Code/Editor/View/Windows/MainWindow.cpp +++ b/Gems/ScriptCanvas/Code/Editor/View/Windows/MainWindow.cpp @@ -595,7 +595,7 @@ namespace ScriptCanvasEditor m_commandLine = new Widget::CommandLine(this); m_commandLine->setBaseSize(QSize(size().width(), m_commandLine->size().height())); m_commandLine->setObjectName("CommandLine"); - m_commandLine->hide(); +// m_commandLine->hide(); m_layout->addWidget(m_commandLine); m_layout->addWidget(m_emptyCanvas); diff --git a/Gems/ScriptCanvas/Code/Editor/View/Windows/mainwindow.ui b/Gems/ScriptCanvas/Code/Editor/View/Windows/mainwindow.ui index 40ba00bb31..3b3043a4a0 100644 --- a/Gems/ScriptCanvas/Code/Editor/View/Windows/mainwindow.ui +++ b/Gems/ScriptCanvas/Code/Editor/View/Windows/mainwindow.ui @@ -244,7 +244,7 @@ false - false + true diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/AutoGen/ScriptCanvasGrammar_Header.jinja b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/AutoGen/ScriptCanvasGrammar_Header.jinja index b7394ef212..185cf82c86 100644 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/AutoGen/ScriptCanvasGrammar_Header.jinja +++ b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/AutoGen/ScriptCanvasGrammar_Header.jinja @@ -66,7 +66,7 @@ namespace {{attribute_Namespace}} {% set deprecationUuid = Class.attrib['DeprecationUUID'] %} -// The following will be injected directly into the source header file for which AzCodeGenerator is being run. +// The following will be injected directly into the source header file for which AZ AutoGen is being run. // You must #include the generated header into the source header #define SCRIPTCANVAS_NODE_{{ className }} \ public: \ From dc5b4ee1dd665c08a47e36cc622678bd9529fd90 Mon Sep 17 00:00:00 2001 From: shiranj Date: Tue, 20 Apr 2021 10:50:41 -0700 Subject: [PATCH 50/68] Add Android package in packaging pipeline --- .../build/Platform/Android/build_config.json | 10 ++++++++ .../package/Platform/Android/package_env.json | 25 +++++++++++++++++++ 2 files changed, 35 insertions(+) create mode 100644 scripts/build/package/Platform/Android/package_env.json diff --git a/scripts/build/Platform/Android/build_config.json b/scripts/build/Platform/Android/build_config.json index 0fa4d9ade3..097ff59e4e 100644 --- a/scripts/build/Platform/Android/build_config.json +++ b/scripts/build/Platform/Android/build_config.json @@ -40,6 +40,16 @@ "CMAKE_BUILD_ARGS":"-j!NUMBER_OF_PROCESSORS!" } }, + "android_packaging_all": { + "TAGS": [ + "packaging" + ], + "COMMAND": "python_windows.cmd", + "PARAMETERS": { + "SCRIPT_PATH": "scripts/build/package/package.py", + "SCRIPT_PARAMETERS": "--platform Android --type all" + } + }, "profile": { "TAGS":[ "weekly-build-metrics", diff --git a/scripts/build/package/Platform/Android/package_env.json b/scripts/build/package/Platform/Android/package_env.json new file mode 100644 index 0000000000..017937413a --- /dev/null +++ b/scripts/build/package/Platform/Android/package_env.json @@ -0,0 +1,25 @@ +{ + "local_env": { + "S3_PREFIX": "${BRANCH_NAME}/Android" + }, + "types":{ + "all":{ + "PACKAGE_TARGETS":[ + { + "FILE_LIST": "all.json", + "FILE_LIST_TYPE": "All", + "PACKAGE_NAME": "${PACKAGE_NAME_PATTERN}-android-all-${BUILD_NUMBER}.zip" + } + ], + "BOOTSTRAP_CFG_GAME_FOLDER":"AutomatedTesting", + "SKIP_BUILD": 0, + "BUILD_TARGETS":[ + { + "BUILD_CONFIG_FILENAME": "build_config.json", + "PLATFORM": "Android", + "TYPE": "profile" + } + ] + } + } +} From 841d16055adb3ce2bf4081f0799c4020d0671340 Mon Sep 17 00:00:00 2001 From: shiranj Date: Tue, 20 Apr 2021 11:30:26 -0700 Subject: [PATCH 51/68] Add lambda function to delete branch ebs volumes on github branch deletion event --- ...uto_delete_ebs.py => delete_branch_ebs.py} | 27 ++++-- .../build/lambda/delete_github_branch_ebs.py | 89 +++++++++++++++++++ 2 files changed, 110 insertions(+), 6 deletions(-) rename scripts/build/lambda/{auto_delete_ebs.py => delete_branch_ebs.py} (77%) mode change 100755 => 100644 create mode 100644 scripts/build/lambda/delete_github_branch_ebs.py diff --git a/scripts/build/lambda/auto_delete_ebs.py b/scripts/build/lambda/delete_branch_ebs.py old mode 100755 new mode 100644 similarity index 77% rename from scripts/build/lambda/auto_delete_ebs.py rename to scripts/build/lambda/delete_branch_ebs.py index a004c2a575..b9d52b0c61 --- a/scripts/build/lambda/auto_delete_ebs.py +++ b/scripts/build/lambda/delete_branch_ebs.py @@ -14,20 +14,25 @@ import time import logging TIMEOUT = 300 +log = logging.getLogger(__name__) +log.setLevel(logging.INFO) -def lambda_handler(event, context): - log = logging.getLogger(__name__) - log.setLevel(logging.INFO) - branch_name = event['detail']['referenceName'] +def delete_ebs_volumes(repository_name, branch_name): + success = 0 + failure = 0 ec2_client = boto3.resource('ec2') response = ec2_client.volumes.filter(Filters=[ + { + 'Name': 'tag:RepositoryName', + 'Values': [repository_name] + }, { 'Name': 'tag:BranchName', 'Values': [branch_name] } ]) - log.info(f'Deleting EBS volumes for remote-branch {branch_name}.') + log.info(f'Deleting EBS volumes for remote-branch {branch_name} in repository {repository_name}.') for volume in response: if volume.attachments: ec2_instance_id = volume.attachments[0]['InstanceId'] @@ -49,9 +54,19 @@ def lambda_handler(event, context): try: log.info(f'Deleting volume {volume.volume_id}') volume.delete() + success += 1 except Exception as e: log.error(f'Failed to delete volume {volume.volume_id}.') log.error(e) + failure += 1 + return success, failure -lambda_handler(event, context) \ No newline at end of file +def lambda_handler(event, context): + repository_name = event['repository_name'] + branch_name = event['branch_name'] + (success, failure) = delete_ebs_volumes(repository_name, branch_name) + return { + 'success': success, + 'failure': failure + } diff --git a/scripts/build/lambda/delete_github_branch_ebs.py b/scripts/build/lambda/delete_github_branch_ebs.py new file mode 100644 index 0000000000..0797c55366 --- /dev/null +++ b/scripts/build/lambda/delete_github_branch_ebs.py @@ -0,0 +1,89 @@ +# +# All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or +# its licensors. +# +# For complete copyright and license terms please see the LICENSE at the root of this +# distribution (the "License"). All use of this software is governed by the License, +# or, if provided, by the license below or the license accompanying this file. Do not +# remove or modify any license notices. This file is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# + +import os +import boto3 +import time +import logging +import json +import hmac +import hashlib + +TIMEOUT = 300 +log = logging.getLogger(__name__) +log.setLevel(logging.INFO) + + +def delete_volumes(repository_name, branch_name): + client = boto3.client('lambda') + payload = { + 'repository_name': repository_name, + 'branch_name': branch_name + } + response = client.invoke( + FunctionName='delete_branch_ebs', + Payload=json.dumps(payload), + ) + status = response['Payload'].read() + response_json = json.loads(status.decode()) + return response_json['success'], response_json['failure'] + + +def verify_signature(headers, payload): + # GITHUB_WEBHOOK_SECRET is encrypted with AWS KMS key + secret = os.environ.get('GITHUB_WEBHOOK_SECRET', '') + # Using X-Hub-Signature-256 is recommended by https://docs.github.com/en/developers/webhooks-and-events/securing-your-webhooks + signature = headers.get('X-Hub-Signature-256', '') + computed_hash = hmac.new(secret.encode(), payload.encode(), hashlib.sha256).hexdigest() + computed_signature = f'sha256={computed_hash}' + return computed_signature, hmac.compare_digest(computed_signature.encode(), signature.encode()) + + +def create_response(status, success=0, failure=0, repository_name=None, branch_name=None): + response = { + 'success': { + 'statusCode': 200, + 'body': f'[SUCCESS] All {success + failure} EBS volumes are deleted for branch {branch_name} in repository {repository_name}', + 'isBase64Encoded': 'false' + }, + 'failure': { + 'statusCode': 500, + 'body': f'[FAILURE] Failed to delete {failure}/{success + failure} EBS volumes for branch {branch_name} in repository {repository_name}', + 'isBase64Encoded': 'false' + }, + 'unauthorized': { + 'statusCode': 401, + 'body': 'Unauthorized', + 'isBase64Encoded': 'false' + } + } + return response[status] + + +def lambda_handler(event, context): + # This function is triggered by AWS API Gateway, + if event.get('resource', '') == '/delete-github-branch-ebs': + headers = event['headers'] + payload = event['body'] + if headers['X-GitHub-Event'] == 'delete': + # Validate github webhook request here since request body cannot be passed to API Gateway lambda authorizer. + if verify_signature(headers, payload): + # Convert payload from string type to json to get repository name and branch name + payload = json.loads(payload) + repository_name = payload['repository']['full_name'] + branch_name = payload['ref'] + (success, failure) = delete_volumes(repository_name, branch_name) + if not failure: + return create_response('success', success, failure, repository_name, branch_name) + else: + return create_response('failure', success, failure, repository_name, branch_name) + else: + return create_response('unauthorized') From d9fe89ba56a1c7d344538951909f086386ba5947 Mon Sep 17 00:00:00 2001 From: mbalfour Date: Tue, 20 Apr 2021 13:37:10 -0500 Subject: [PATCH 52/68] Addressed feedback - made string& into a string_view. --- Code/Framework/AzCore/AzCore/Component/ComponentApplication.cpp | 2 +- Code/Framework/AzCore/AzCore/Component/ComponentApplication.h | 2 +- .../Framework/AzCore/AzCore/Component/ComponentApplicationBus.h | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Code/Framework/AzCore/AzCore/Component/ComponentApplication.cpp b/Code/Framework/AzCore/AzCore/Component/ComponentApplication.cpp index a3986f72dd..c55f565615 100644 --- a/Code/Framework/AzCore/AzCore/Component/ComponentApplication.cpp +++ b/Code/Framework/AzCore/AzCore/Component/ComponentApplication.cpp @@ -1063,7 +1063,7 @@ namespace AZ //========================================================================= // SetEntityName //========================================================================= - bool ComponentApplication::SetEntityName(const EntityId& id, const AZStd::string& name) + bool ComponentApplication::SetEntityName(const EntityId& id, const AZStd::string_view name) { Entity* entity = FindEntity(id); if (entity) diff --git a/Code/Framework/AzCore/AzCore/Component/ComponentApplication.h b/Code/Framework/AzCore/AzCore/Component/ComponentApplication.h index a66409eaf3..3ebcf39d95 100644 --- a/Code/Framework/AzCore/AzCore/Component/ComponentApplication.h +++ b/Code/Framework/AzCore/AzCore/Component/ComponentApplication.h @@ -209,7 +209,7 @@ namespace AZ bool DeleteEntity(const EntityId& id) override; Entity* FindEntity(const EntityId& id) override; AZStd::string GetEntityName(const EntityId& id) override; - bool SetEntityName(const EntityId& id, const AZStd::string& name) override; + bool SetEntityName(const EntityId& id, const AZStd::string_view name) override; void EnumerateEntities(const ComponentApplicationRequests::EntityCallback& callback) override; ComponentApplication* GetApplication() override { return this; } /// Returns the serialize context that has been registered with the app, if there is one. diff --git a/Code/Framework/AzCore/AzCore/Component/ComponentApplicationBus.h b/Code/Framework/AzCore/AzCore/Component/ComponentApplicationBus.h index a3602c303e..3582e6ebb8 100644 --- a/Code/Framework/AzCore/AzCore/Component/ComponentApplicationBus.h +++ b/Code/Framework/AzCore/AzCore/Component/ComponentApplicationBus.h @@ -136,7 +136,7 @@ namespace AZ //! Entity names are not enforced to be unique. //! @param entityId A reference to the entity whose name you want to change. //! @return True if the name was changed successfully, false if it wasn't. - virtual bool SetEntityName([[maybe_unused]] const EntityId& id, [[maybe_unused]] const AZStd::string& name) { return false; } + virtual bool SetEntityName([[maybe_unused]] const EntityId& id, [[maybe_unused]] const AZStd::string_view name) { return false; } //! The type that AZ::ComponentApplicationRequests::EnumerateEntities uses to //! pass entity callbacks to the application for enumeration. From 33b485767f584bef006049ed3beb792325190830 Mon Sep 17 00:00:00 2001 From: nvsickle Date: Tue, 20 Apr 2021 11:49:59 -0700 Subject: [PATCH 53/68] Address reviewer feedback, make FFont initialization state an atomic state machine --- .../AtomLyIntegration/AtomFont/FFont.h | 9 +++++-- .../AtomFont/Code/Source/FFont.cpp | 24 ++++++++----------- 2 files changed, 17 insertions(+), 16 deletions(-) diff --git a/Gems/AtomLyIntegration/AtomFont/Code/Include/AtomLyIntegration/AtomFont/FFont.h b/Gems/AtomLyIntegration/AtomFont/Code/Include/AtomLyIntegration/AtomFont/FFont.h index 91fc0834ec..8e60cc2055 100644 --- a/Gems/AtomLyIntegration/AtomFont/Code/Include/AtomLyIntegration/AtomFont/FFont.h +++ b/Gems/AtomLyIntegration/AtomFont/Code/Include/AtomLyIntegration/AtomFont/FFont.h @@ -301,8 +301,13 @@ namespace AZ AtomFont* m_atomFont = nullptr; bool m_fontTexDirty = false; - bool m_fontInitialized = false; - AZStd::atomic_bool m_fontInitializing = false; + enum class InitializationState : AZ::u8 + { + Uninitialized, + Initializing, + Initialized + }; + AZStd::atomic m_fontInitializationState = InitializationState::Uninitialized; FontEffects m_effects; diff --git a/Gems/AtomLyIntegration/AtomFont/Code/Source/FFont.cpp b/Gems/AtomLyIntegration/AtomFont/Code/Source/FFont.cpp index edbf148940..20879876e7 100644 --- a/Gems/AtomLyIntegration/AtomFont/Code/Source/FFont.cpp +++ b/Gems/AtomLyIntegration/AtomFont/Code/Source/FFont.cpp @@ -101,19 +101,16 @@ AZ::RPI::WindowContextSharedPtr AZ::FFont::GetDefaultWindowContext() const bool AZ::FFont::InitFont() { - if (m_fontInitialized) + auto initializationState = InitializationState::Uninitialized; + // Do an atomic transition to Initializing if we're in the Uninitialized state. + // Otherwise, check the current state. + // If we're Initialized, there's no more work to be done, return true to indicate we're good to go. + // If we're Initializing (on another thread), return false to let the consumer know it's not safe for us to be used yet. + if (!m_fontInitializationState.compare_exchange_strong(initializationState, InitializationState::Initializing)) { - return true; + return initializationState == InitializationState::Initialized; } - // If we're being initialized in another thread, abort. - if (m_fontInitializing) - { - return false; - } - - m_fontInitializing = true; - // Create and initialize DynamicDrawContext for font draw AZ::RPI::Ptr dynamicDraw = m_atomFont->GetOrCreateDynamicDrawForScene(GetDefaultViewportContext()->GetRenderScene().get()); @@ -136,8 +133,7 @@ bool AZ::FFont::InitFont() m_vertexCount = 0; m_indexCount = 0; - m_fontInitialized = true; - m_fontInitializing = false; + m_fontInitializationState = InitializationState::Initialized; return true; } @@ -1522,7 +1518,7 @@ bool AZ::FFont::UpdateTexture() { using namespace AZ; - if (!m_fontInitialized || !m_fontImage) + if (m_fontInitializationState != InitializationState::Initialized || !m_fontImage) { return false; } @@ -1590,7 +1586,7 @@ void AZ::FFont::Prepare(const char* str, bool updateTexture, const AtomFont::Gly const bool rerenderGlyphs = m_sizeBehavior == SizeBehavior::Rerender; const AtomFont::GlyphSize usedGlyphSize = rerenderGlyphs ? glyphSize : AtomFont::defaultGlyphSize; bool texUpdateNeeded = m_fontTexture->PreCacheString(str, nullptr, m_sizeRatio, usedGlyphSize, m_fontHintParams) == 1 || m_fontTexDirty; - if (m_fontInitialized && updateTexture && texUpdateNeeded && m_fontImage) + if (m_fontInitializationState == InitializationState::Initialized && updateTexture && texUpdateNeeded && m_fontImage) { UpdateTexture(); m_fontTexDirty = false; From f53c1e808411085f37ed373a674d98984fb87e68 Mon Sep 17 00:00:00 2001 From: amzn-sj Date: Tue, 20 Apr 2021 12:16:40 -0700 Subject: [PATCH 54/68] 3rd Party static libraries need to be public dependencies to work from installed engine. --- Code/Framework/AzCore/CMakeLists.txt | 7 +++---- Code/Framework/AzFramework/CMakeLists.txt | 4 ++-- Code/Framework/GridMate/CMakeLists.txt | 3 ++- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/Code/Framework/AzCore/CMakeLists.txt b/Code/Framework/AzCore/CMakeLists.txt index c77205a760..db2c79f0c9 100644 --- a/Code/Framework/AzCore/CMakeLists.txt +++ b/Code/Framework/AzCore/CMakeLists.txt @@ -40,14 +40,13 @@ ly_add_target( ${common_dir} ${AZ_CORE_RADTELEMETRY_INCLUDE_DIRECTORIES} BUILD_DEPENDENCIES - PRIVATE - 3rdParty::zlib - 3rdParty::zstd - 3rdParty::cityhash PUBLIC 3rdParty::Lua 3rdParty::RapidJSON 3rdParty::RapidXML + 3rdParty::zlib + 3rdParty::zstd + 3rdParty::cityhash ${AZ_CORE_RADTELEMETRY_BUILD_DEPENDENCIES} ) ly_add_source_properties( diff --git a/Code/Framework/AzFramework/CMakeLists.txt b/Code/Framework/AzFramework/CMakeLists.txt index f62f205efd..50e1fcb5a4 100644 --- a/Code/Framework/AzFramework/CMakeLists.txt +++ b/Code/Framework/AzFramework/CMakeLists.txt @@ -33,12 +33,12 @@ ly_add_target( BUILD_DEPENDENCIES PRIVATE AZ::AzCore + PUBLIC + AZ::GridMate 3rdParty::md5 3rdParty::zlib 3rdParty::zstd 3rdParty::lz4 - PUBLIC - AZ::GridMate ) if(LY_ENABLE_STATISTICAL_PROFILING) diff --git a/Code/Framework/GridMate/CMakeLists.txt b/Code/Framework/GridMate/CMakeLists.txt index f326bda179..20ce582307 100644 --- a/Code/Framework/GridMate/CMakeLists.txt +++ b/Code/Framework/GridMate/CMakeLists.txt @@ -28,8 +28,9 @@ ly_add_target( ${pal_dir} BUILD_DEPENDENCIES PRIVATE - 3rdParty::OpenSSL AZ::AzCore + PUBLIC + 3rdParty::OpenSSL ) ly_add_source_properties( From 990a40199b5567429f1d88d62edf2c6b34876987 Mon Sep 17 00:00:00 2001 From: Terry Michaels <81711813+tjmichaels@users.noreply.github.com> Date: Tue, 20 Apr 2021 15:05:45 -0500 Subject: [PATCH 55/68] Removed the last remaining connections to the Clang 3rd Party (#159) --- .../3rdParty/Platform/Linux/Clang_linux.cmake | 43 ---------------- .../Platform/Linux/cmake_linux_files.cmake | 1 - cmake/3rdParty/Platform/Mac/Clang_mac.cmake | 49 ------------------- .../Platform/Mac/cmake_mac_files.cmake | 1 - .../Platform/Windows/Clang_windows.cmake | 44 ----------------- .../Windows/cmake_windows_files.cmake | 1 - 6 files changed, 139 deletions(-) delete mode 100644 cmake/3rdParty/Platform/Linux/Clang_linux.cmake delete mode 100644 cmake/3rdParty/Platform/Mac/Clang_mac.cmake delete mode 100644 cmake/3rdParty/Platform/Windows/Clang_windows.cmake diff --git a/cmake/3rdParty/Platform/Linux/Clang_linux.cmake b/cmake/3rdParty/Platform/Linux/Clang_linux.cmake deleted file mode 100644 index 1cf269d1a2..0000000000 --- a/cmake/3rdParty/Platform/Linux/Clang_linux.cmake +++ /dev/null @@ -1,43 +0,0 @@ -# -# All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or -# its licensors. -# -# For complete copyright and license terms please see the LICENSE at the root of this -# distribution (the "License"). All use of this software is governed by the License, -# or, if provided, by the license below or the license accompanying this file. Do not -# remove or modify any license notices. This file is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# - -set(CLANG_PLATFORM_LIB_PATH ${BASE_PATH}/linux_x64/release/lib) - -set(CLANG_INCLUDE_DIRECTORIES - llvm/include - linux_x64/release/include -) - -set(CLANG_LIBS - ${CLANG_PLATFORM_LIB_PATH}/libclangFrontend.a - ${CLANG_PLATFORM_LIB_PATH}/libclangSerialization.a - ${CLANG_PLATFORM_LIB_PATH}/libclangDriver.a - ${CLANG_PLATFORM_LIB_PATH}/libclangTooling.a - ${CLANG_PLATFORM_LIB_PATH}/libclangParse.a - ${CLANG_PLATFORM_LIB_PATH}/libclangSema.a - ${CLANG_PLATFORM_LIB_PATH}/libclangAnalysis.a - ${CLANG_PLATFORM_LIB_PATH}/libclangRewriteFrontend.a - ${CLANG_PLATFORM_LIB_PATH}/libclangRewrite.a - ${CLANG_PLATFORM_LIB_PATH}/libclangEdit.a - ${CLANG_PLATFORM_LIB_PATH}/libclangAST.a - ${CLANG_PLATFORM_LIB_PATH}/libclangLex.a - ${CLANG_PLATFORM_LIB_PATH}/libclangBasic.a - ${CLANG_PLATFORM_LIB_PATH}/libLLVMCore.a - ${CLANG_PLATFORM_LIB_PATH}/libLLVMBinaryFormat.a - ${CLANG_PLATFORM_LIB_PATH}/libLLVMDebugInfoDWARF.a - ${CLANG_PLATFORM_LIB_PATH}/libLLVMMC.a - ${CLANG_PLATFORM_LIB_PATH}/libLLVMOption.a - ${CLANG_PLATFORM_LIB_PATH}/libLLVMBitReader.a - ${CLANG_PLATFORM_LIB_PATH}/libLLVMMCParser.a - ${CLANG_PLATFORM_LIB_PATH}/libLLVMProfileData.a - ${CLANG_PLATFORM_LIB_PATH}/libLLVMTarget.a - ${CLANG_PLATFORM_LIB_PATH}/libLLVMSupport.a -) diff --git a/cmake/3rdParty/Platform/Linux/cmake_linux_files.cmake b/cmake/3rdParty/Platform/Linux/cmake_linux_files.cmake index 2b1ba4d0e5..83d862ee78 100644 --- a/cmake/3rdParty/Platform/Linux/cmake_linux_files.cmake +++ b/cmake/3rdParty/Platform/Linux/cmake_linux_files.cmake @@ -13,7 +13,6 @@ set(FILES AWSGameLiftServerSDK_linux.cmake BuiltInPackages_linux.cmake civetweb_linux.cmake - Clang_linux.cmake dyad_linux.cmake FbxSdk_linux.cmake OpenSSL_linux.cmake diff --git a/cmake/3rdParty/Platform/Mac/Clang_mac.cmake b/cmake/3rdParty/Platform/Mac/Clang_mac.cmake deleted file mode 100644 index 3d7fc64465..0000000000 --- a/cmake/3rdParty/Platform/Mac/Clang_mac.cmake +++ /dev/null @@ -1,49 +0,0 @@ -# -# All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or -# its licensors. -# -# For complete copyright and license terms please see the LICENSE at the root of this -# distribution (the "License"). All use of this software is governed by the License, -# or, if provided, by the license below or the license accompanying this file. Do not -# remove or modify any license notices. This file is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# - -set(CLANG_PLATFORM_LIB_PATH ${BASE_PATH}/xcode/$,debug,release>/lib) - -set(CLANG_INCLUDE_DIRECTORIES - llvm/include - xcode/$,debug,release>/include -) - -set(CLANG_LIBS - ${CLANG_PLATFORM_LIB_PATH}/libclangFrontend.a - ${CLANG_PLATFORM_LIB_PATH}/libclangSerialization.a - ${CLANG_PLATFORM_LIB_PATH}/libclangDriver.a - ${CLANG_PLATFORM_LIB_PATH}/libclangTooling.a - ${CLANG_PLATFORM_LIB_PATH}/libclangParse.a - ${CLANG_PLATFORM_LIB_PATH}/libclangSema.a - ${CLANG_PLATFORM_LIB_PATH}/libclangAnalysis.a - ${CLANG_PLATFORM_LIB_PATH}/libclangRewriteFrontend.a - ${CLANG_PLATFORM_LIB_PATH}/libclangRewrite.a - ${CLANG_PLATFORM_LIB_PATH}/libclangEdit.a - ${CLANG_PLATFORM_LIB_PATH}/libclangAST.a - ${CLANG_PLATFORM_LIB_PATH}/libclangASTMatchers.a - ${CLANG_PLATFORM_LIB_PATH}/libclangLex.a - ${CLANG_PLATFORM_LIB_PATH}/libclangBasic.a - ${CLANG_PLATFORM_LIB_PATH}/libLLVMCore.a - ${CLANG_PLATFORM_LIB_PATH}/libLLVMBinaryFormat.a - ${CLANG_PLATFORM_LIB_PATH}/libLLVMDebugInfoDWARF.a - ${CLANG_PLATFORM_LIB_PATH}/libLLVMMC.a - ${CLANG_PLATFORM_LIB_PATH}/libLLVMOption.a - ${CLANG_PLATFORM_LIB_PATH}/libLLVMBitReader.a - ${CLANG_PLATFORM_LIB_PATH}/libLLVMMCParser.a - ${CLANG_PLATFORM_LIB_PATH}/libLLVMProfileData.a - ${CLANG_PLATFORM_LIB_PATH}/libLLVMTarget.a - ${CLANG_PLATFORM_LIB_PATH}/libLLVMSupport.a - - ${CLANG_PLATFORM_LIB_PATH}/libLLVMDemangle.a - ${CLANG_PLATFORM_LIB_PATH}/libLLVMSupport.a - ${CLANG_PLATFORM_LIB_PATH}/libLLVMCore.a - -) diff --git a/cmake/3rdParty/Platform/Mac/cmake_mac_files.cmake b/cmake/3rdParty/Platform/Mac/cmake_mac_files.cmake index 0e3cc53262..9d0166913a 100644 --- a/cmake/3rdParty/Platform/Mac/cmake_mac_files.cmake +++ b/cmake/3rdParty/Platform/Mac/cmake_mac_files.cmake @@ -12,7 +12,6 @@ set(FILES BuiltInPackages_mac.cmake civetweb_mac.cmake - Clang_mac.cmake DirectXShaderCompiler_mac.cmake FbxSdk_mac.cmake OpenGLInterface_mac.cmake diff --git a/cmake/3rdParty/Platform/Windows/Clang_windows.cmake b/cmake/3rdParty/Platform/Windows/Clang_windows.cmake deleted file mode 100644 index 69a6b77119..0000000000 --- a/cmake/3rdParty/Platform/Windows/Clang_windows.cmake +++ /dev/null @@ -1,44 +0,0 @@ -# -# All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or -# its licensors. -# -# For complete copyright and license terms please see the LICENSE at the root of this -# distribution (the "License"). All use of this software is governed by the License, -# or, if provided, by the license below or the license accompanying this file. Do not -# remove or modify any license notices. This file is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# - -set(CLANG_PLATFORM_LIB_PATH ${BASE_PATH}/vs2015/$,debug,release>/lib) - -set(CLANG_INCLUDE_DIRECTORIES - llvm/include - vs2015/$,debug,release>/include -) - -set(CLANG_LIBS - ${CLANG_PLATFORM_LIB_PATH}/clangFrontend.lib - ${CLANG_PLATFORM_LIB_PATH}/clangSerialization.lib - ${CLANG_PLATFORM_LIB_PATH}/clangDriver.lib - ${CLANG_PLATFORM_LIB_PATH}/clangTooling.lib - ${CLANG_PLATFORM_LIB_PATH}/clangParse.lib - ${CLANG_PLATFORM_LIB_PATH}/clangSema.lib - ${CLANG_PLATFORM_LIB_PATH}/clangAnalysis.lib - ${CLANG_PLATFORM_LIB_PATH}/clangRewriteFrontend.lib - ${CLANG_PLATFORM_LIB_PATH}/clangRewrite.lib - ${CLANG_PLATFORM_LIB_PATH}/clangEdit.lib - ${CLANG_PLATFORM_LIB_PATH}/clangAST.lib - ${CLANG_PLATFORM_LIB_PATH}/clangLex.lib - ${CLANG_PLATFORM_LIB_PATH}/clangBasic.lib - ${CLANG_PLATFORM_LIB_PATH}/LLVMBinaryFormat.lib - ${CLANG_PLATFORM_LIB_PATH}/LLVMDebugInfoDWARF.lib - ${CLANG_PLATFORM_LIB_PATH}/LLVMMC.lib - ${CLANG_PLATFORM_LIB_PATH}/LLVMOption.lib - ${CLANG_PLATFORM_LIB_PATH}/LLVMBitReader.lib - ${CLANG_PLATFORM_LIB_PATH}/LLVMMCParser.lib - ${CLANG_PLATFORM_LIB_PATH}/LLVMProfileData.lib - ${CLANG_PLATFORM_LIB_PATH}/LLVMTarget.lib - ${CLANG_PLATFORM_LIB_PATH}/LLVMCore.lib - ${CLANG_PLATFORM_LIB_PATH}/LLVMSupport.lib - Version.lib -) diff --git a/cmake/3rdParty/Platform/Windows/cmake_windows_files.cmake b/cmake/3rdParty/Platform/Windows/cmake_windows_files.cmake index 2c7890fcc4..fe4aa6bc82 100644 --- a/cmake/3rdParty/Platform/Windows/cmake_windows_files.cmake +++ b/cmake/3rdParty/Platform/Windows/cmake_windows_files.cmake @@ -12,7 +12,6 @@ set(FILES AWSGameLiftServerSDK_windows.cmake BuiltInPackages_windows.cmake - Clang_windows.cmake Crashpad_windows.cmake DirectXShaderCompiler_windows.cmake dyad_windows.cmake From 2f9102f10a678bf6fa798b79a869610fd94f5b12 Mon Sep 17 00:00:00 2001 From: sharmajs-amzn <82233357+sharmajs-amzn@users.noreply.github.com> Date: Tue, 20 Apr 2021 13:10:25 -0700 Subject: [PATCH 56/68] AssImp asserts on Linux processing (#118) (#138) LYN-2645} Helios - AssImp asserts on Linux processing * Linux builds have asserts off, to match Windows and Mac. * Secondary UV channels support names are available now Jira: https://jira.agscollab.com/browse/LYN-2645 --- cmake/3rdParty/Platform/Linux/BuiltInPackages_linux.cmake | 2 +- cmake/3rdParty/Platform/Mac/BuiltInPackages_mac.cmake | 2 +- cmake/3rdParty/Platform/Windows/BuiltInPackages_windows.cmake | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/cmake/3rdParty/Platform/Linux/BuiltInPackages_linux.cmake b/cmake/3rdParty/Platform/Linux/BuiltInPackages_linux.cmake index 9057b5ba1b..e42e8e40ea 100644 --- a/cmake/3rdParty/Platform/Linux/BuiltInPackages_linux.cmake +++ b/cmake/3rdParty/Platform/Linux/BuiltInPackages_linux.cmake @@ -15,7 +15,7 @@ ly_associate_package(PACKAGE_NAME Lua-5.3.5-rev3-multiplatform TARG ly_associate_package(PACKAGE_NAME ilmbase-2.3.0-rev4-multiplatform TARGETS ilmbase PACKAGE_HASH 97547fdf1fbc4d81b8ccf382261f8c25514ed3b3c4f8fd493f0a4fa873bba348) ly_associate_package(PACKAGE_NAME hdf5-1.0.11-rev2-multiplatform TARGETS hdf5 PACKAGE_HASH 11d5e04df8a93f8c52a5684a4cacbf0d9003056360983ce34f8d7b601082c6bd) ly_associate_package(PACKAGE_NAME alembic-1.7.11-rev3-multiplatform TARGETS alembic PACKAGE_HASH ba7a7d4943dd752f5a662374f6c48b93493df1d8e2c5f6a8d101f3b50700dd25) -ly_associate_package(PACKAGE_NAME assimp-5.0.1-rev6-multiplatform TARGETS assimplib PACKAGE_HASH 47f1a6d05d101def036c030484c4a6e19d745aacd57037174715c7afe2b19b4c) +ly_associate_package(PACKAGE_NAME assimp-5.0.1-rev7-multiplatform TARGETS assimplib PACKAGE_HASH def855c89d8210db3040f1cb6ec837141ab9b8e74c158eae7c03d50160fcf30b) ly_associate_package(PACKAGE_NAME squish-ccr-20150601-rev3-multiplatform TARGETS squish-ccr PACKAGE_HASH c878c6c0c705e78403c397d03f5aa7bc87e5978298710e14d09c9daf951a83b3) ly_associate_package(PACKAGE_NAME ASTCEncoder-2017_11_14-rev2-multiplatform TARGETS ASTCEncoder PACKAGE_HASH c240ffc12083ee39a5ce9dc241de44d116e513e1e3e4cc1d05305e7aa3bdc326) ly_associate_package(PACKAGE_NAME md5-2.0-multiplatform TARGETS md5 PACKAGE_HASH 29e52ad22c78051551f78a40c2709594f0378762ae03b417adca3f4b700affdf) diff --git a/cmake/3rdParty/Platform/Mac/BuiltInPackages_mac.cmake b/cmake/3rdParty/Platform/Mac/BuiltInPackages_mac.cmake index ef66259e22..d6d017d1d1 100644 --- a/cmake/3rdParty/Platform/Mac/BuiltInPackages_mac.cmake +++ b/cmake/3rdParty/Platform/Mac/BuiltInPackages_mac.cmake @@ -15,7 +15,7 @@ ly_associate_package(PACKAGE_NAME Lua-5.3.5-rev3-multiplatform ly_associate_package(PACKAGE_NAME ilmbase-2.3.0-rev4-multiplatform TARGETS ilmbase PACKAGE_HASH 97547fdf1fbc4d81b8ccf382261f8c25514ed3b3c4f8fd493f0a4fa873bba348) ly_associate_package(PACKAGE_NAME hdf5-1.0.11-rev2-multiplatform TARGETS hdf5 PACKAGE_HASH 11d5e04df8a93f8c52a5684a4cacbf0d9003056360983ce34f8d7b601082c6bd) ly_associate_package(PACKAGE_NAME alembic-1.7.11-rev3-multiplatform TARGETS alembic PACKAGE_HASH ba7a7d4943dd752f5a662374f6c48b93493df1d8e2c5f6a8d101f3b50700dd25) -ly_associate_package(PACKAGE_NAME assimp-5.0.1-rev6-multiplatform TARGETS assimplib PACKAGE_HASH 47f1a6d05d101def036c030484c4a6e19d745aacd57037174715c7afe2b19b4c) +ly_associate_package(PACKAGE_NAME assimp-5.0.1-rev7-multiplatform TARGETS assimplib PACKAGE_HASH def855c89d8210db3040f1cb6ec837141ab9b8e74c158eae7c03d50160fcf30b) ly_associate_package(PACKAGE_NAME squish-ccr-20150601-rev3-multiplatform TARGETS squish-ccr PACKAGE_HASH c878c6c0c705e78403c397d03f5aa7bc87e5978298710e14d09c9daf951a83b3) ly_associate_package(PACKAGE_NAME ASTCEncoder-2017_11_14-rev2-multiplatform TARGETS ASTCEncoder PACKAGE_HASH c240ffc12083ee39a5ce9dc241de44d116e513e1e3e4cc1d05305e7aa3bdc326) ly_associate_package(PACKAGE_NAME md5-2.0-multiplatform TARGETS md5 PACKAGE_HASH 29e52ad22c78051551f78a40c2709594f0378762ae03b417adca3f4b700affdf) diff --git a/cmake/3rdParty/Platform/Windows/BuiltInPackages_windows.cmake b/cmake/3rdParty/Platform/Windows/BuiltInPackages_windows.cmake index 58050652c0..09dd543e5c 100644 --- a/cmake/3rdParty/Platform/Windows/BuiltInPackages_windows.cmake +++ b/cmake/3rdParty/Platform/Windows/BuiltInPackages_windows.cmake @@ -15,7 +15,7 @@ ly_associate_package(PACKAGE_NAME Lua-5.3.5-rev3-multiplatform ly_associate_package(PACKAGE_NAME ilmbase-2.3.0-rev4-multiplatform TARGETS ilmbase PACKAGE_HASH 97547fdf1fbc4d81b8ccf382261f8c25514ed3b3c4f8fd493f0a4fa873bba348) ly_associate_package(PACKAGE_NAME hdf5-1.0.11-rev2-multiplatform TARGETS hdf5 PACKAGE_HASH 11d5e04df8a93f8c52a5684a4cacbf0d9003056360983ce34f8d7b601082c6bd) ly_associate_package(PACKAGE_NAME alembic-1.7.11-rev3-multiplatform TARGETS alembic PACKAGE_HASH ba7a7d4943dd752f5a662374f6c48b93493df1d8e2c5f6a8d101f3b50700dd25) -ly_associate_package(PACKAGE_NAME assimp-5.0.1-rev6-multiplatform TARGETS assimplib PACKAGE_HASH 47f1a6d05d101def036c030484c4a6e19d745aacd57037174715c7afe2b19b4c) +ly_associate_package(PACKAGE_NAME assimp-5.0.1-rev7-multiplatform TARGETS assimplib PACKAGE_HASH def855c89d8210db3040f1cb6ec837141ab9b8e74c158eae7c03d50160fcf30b) ly_associate_package(PACKAGE_NAME squish-ccr-20150601-rev3-multiplatform TARGETS squish-ccr PACKAGE_HASH c878c6c0c705e78403c397d03f5aa7bc87e5978298710e14d09c9daf951a83b3) ly_associate_package(PACKAGE_NAME ASTCEncoder-2017_11_14-rev2-multiplatform TARGETS ASTCEncoder PACKAGE_HASH c240ffc12083ee39a5ce9dc241de44d116e513e1e3e4cc1d05305e7aa3bdc326) ly_associate_package(PACKAGE_NAME md5-2.0-multiplatform TARGETS md5 PACKAGE_HASH 29e52ad22c78051551f78a40c2709594f0378762ae03b417adca3f4b700affdf) From 78892c8d7eb566b43c7a4364b01163e45eb304e6 Mon Sep 17 00:00:00 2001 From: srikappa Date: Tue, 20 Apr 2021 14:30:56 -0700 Subject: [PATCH 57/68] Improved a couple of comments --- .../AzToolsFramework/Prefab/PrefabPublicHandler.cpp | 3 ++- .../AzToolsFramework/Prefab/PrefabPublicHandler.h | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabPublicHandler.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabPublicHandler.cpp index 69ccf707d7..46bd924f30 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabPublicHandler.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabPublicHandler.cpp @@ -92,7 +92,8 @@ namespace AzToolsFramework AZStd::string("Could not create a new prefab out of the entities provided - entities do not share a common root.")); } - // When you move instances from another template, you have to remove the links and propagate changes to target template. + // When we create a prefab with other prefab instances, we have to remove the existing links between the source and + // target templates of the other instances. for (auto& nestedInstance : instances) { PrefabUndoHelpers::RemoveLink( diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabPublicHandler.h b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabPublicHandler.h index d92f33b634..19985bbf51 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabPublicHandler.h +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabPublicHandler.h @@ -72,7 +72,7 @@ namespace AzToolsFramework /** * Creates a link between the templates of an instance and its parent. * - * \param topLevelEntities The list of entities that are immediate children of container entity of instance. + * \param topLevelEntities The list of entities that are immediate children to the container entity of the instance. * \param sourceInstance The instance that corresponds to the source template of the link. * \param targetInstance The id of the target template. * \param undoBatch The undo batch to set as parent for this create link action. From 1865ae71ca6a6a4854639a376137de285210c31f Mon Sep 17 00:00:00 2001 From: shiranj Date: Tue, 20 Apr 2021 14:31:43 -0700 Subject: [PATCH 58/68] Retrieve Github secret from AWS Secret Manager --- scripts/build/lambda/delete_branch_ebs.py | 6 ++++ .../build/lambda/delete_github_branch_ebs.py | 35 ++++++++++++++----- 2 files changed, 32 insertions(+), 9 deletions(-) diff --git a/scripts/build/lambda/delete_branch_ebs.py b/scripts/build/lambda/delete_branch_ebs.py index b9d52b0c61..8b8100f04e 100644 --- a/scripts/build/lambda/delete_branch_ebs.py +++ b/scripts/build/lambda/delete_branch_ebs.py @@ -19,6 +19,12 @@ log.setLevel(logging.INFO) def delete_ebs_volumes(repository_name, branch_name): + """ + Delete all EBS volumes that are tagged with repository_name and branch_name + :param repository_name: Full repository name. + :param branch_name: Branch name that is deleted. + :return: Number of EBS volumes that are deleted successfully, number of EBS volumes that are not deleted. + """ success = 0 failure = 0 ec2_client = boto3.resource('ec2') diff --git a/scripts/build/lambda/delete_github_branch_ebs.py b/scripts/build/lambda/delete_github_branch_ebs.py index 0797c55366..8163cee762 100644 --- a/scripts/build/lambda/delete_github_branch_ebs.py +++ b/scripts/build/lambda/delete_github_branch_ebs.py @@ -11,18 +11,18 @@ import os import boto3 -import time -import logging import json import hmac import hashlib -TIMEOUT = 300 -log = logging.getLogger(__name__) -log.setLevel(logging.INFO) - def delete_volumes(repository_name, branch_name): + """ + Trigger lambda function that deletes EBS volumes. + :param repository_name: Full repository name. + :param branch_name: Branch name that is deleted. + :return: Number of EBS volumes that are deleted successfully, number of EBS volumes that are not deleted. + """ client = boto3.client('lambda') payload = { 'repository_name': repository_name, @@ -38,16 +38,33 @@ def delete_volumes(repository_name, branch_name): def verify_signature(headers, payload): - # GITHUB_WEBHOOK_SECRET is encrypted with AWS KMS key - secret = os.environ.get('GITHUB_WEBHOOK_SECRET', '') + """ + Validate POST request headers and payload to only receive the expected GitHub webhook requests. + :param headers: Headers from POST request. + :param payload: Payload from POST request. + :return: True if request is verified, otherwise, return False. + """ + # secret is stored in AWS Secret Manager + secret_name = os.environ.get('GITHUB_WEBHOOK_SECRET_NAME', '') + client = boto3.client(service_name='secretsmanager') + response = client.get_secret_value(SecretId=secret_name) + secret = response['SecretString'] # Using X-Hub-Signature-256 is recommended by https://docs.github.com/en/developers/webhooks-and-events/securing-your-webhooks signature = headers.get('X-Hub-Signature-256', '') computed_hash = hmac.new(secret.encode(), payload.encode(), hashlib.sha256).hexdigest() computed_signature = f'sha256={computed_hash}' - return computed_signature, hmac.compare_digest(computed_signature.encode(), signature.encode()) + return hmac.compare_digest(computed_signature.encode(), signature.encode()) def create_response(status, success=0, failure=0, repository_name=None, branch_name=None): + """ + :param status: Status of EBS deletion request. + :param success: Number of EBS volumes that are deleted successfully. + :param failure: Number of EBS volumes that are not deleted. + :param repository_name: Full repository name. + :param branch_name: Branch name that is deleted. + :return: JSON response. + """ response = { 'success': { 'statusCode': 200, From 65a1840e1dc9ff283da27d2ed08e3411b3e20d89 Mon Sep 17 00:00:00 2001 From: luissemp Date: Tue, 20 Apr 2021 14:38:03 -0700 Subject: [PATCH 59/68] Removed commented out line --- Gems/ScriptCanvas/Code/Editor/View/Windows/MainWindow.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/Gems/ScriptCanvas/Code/Editor/View/Windows/MainWindow.cpp b/Gems/ScriptCanvas/Code/Editor/View/Windows/MainWindow.cpp index 85abf68332..ee4d6d9371 100644 --- a/Gems/ScriptCanvas/Code/Editor/View/Windows/MainWindow.cpp +++ b/Gems/ScriptCanvas/Code/Editor/View/Windows/MainWindow.cpp @@ -595,7 +595,6 @@ namespace ScriptCanvasEditor m_commandLine = new Widget::CommandLine(this); m_commandLine->setBaseSize(QSize(size().width(), m_commandLine->size().height())); m_commandLine->setObjectName("CommandLine"); -// m_commandLine->hide(); m_layout->addWidget(m_commandLine); m_layout->addWidget(m_emptyCanvas); From 3c5c540f09596d7ab51bd8fa31abfe78c11c827c Mon Sep 17 00:00:00 2001 From: shiranj Date: Tue, 20 Apr 2021 14:54:39 -0700 Subject: [PATCH 60/68] Fix python path for Android packaging job --- scripts/build/Platform/Android/build_config.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/build/Platform/Android/build_config.json b/scripts/build/Platform/Android/build_config.json index 097ff59e4e..07dc363296 100644 --- a/scripts/build/Platform/Android/build_config.json +++ b/scripts/build/Platform/Android/build_config.json @@ -44,7 +44,7 @@ "TAGS": [ "packaging" ], - "COMMAND": "python_windows.cmd", + "COMMAND": "../Windows/python_windows.cmd", "PARAMETERS": { "SCRIPT_PATH": "scripts/build/package/package.py", "SCRIPT_PARAMETERS": "--platform Android --type all" From 7e2cbda2d390c758d402cd1bf68451f48275cfa8 Mon Sep 17 00:00:00 2001 From: nvsickle Date: Tue, 20 Apr 2021 12:05:52 -0700 Subject: [PATCH 61/68] Fix viewport display on new level creation --- Code/Sandbox/Editor/EditorViewportWidget.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Code/Sandbox/Editor/EditorViewportWidget.cpp b/Code/Sandbox/Editor/EditorViewportWidget.cpp index 91c70b720f..5998d0349b 100644 --- a/Code/Sandbox/Editor/EditorViewportWidget.cpp +++ b/Code/Sandbox/Editor/EditorViewportWidget.cpp @@ -727,6 +727,8 @@ void EditorViewportWidget::OnEditorNotifyEvent(EEditorNotifyEvent event) // meters above the terrain (default terrain height is 32) viewTM.SetTranslation(Vec3(sx * 0.5f, sy * 0.5f, 34.0f)); SetViewTM(viewTM); + + UpdateScene(); } break; From 5ea22407872f291d5de262b2ee32818eef1260c6 Mon Sep 17 00:00:00 2001 From: nvsickle Date: Tue, 20 Apr 2021 12:31:10 -0700 Subject: [PATCH 62/68] Fix editor controls working in game mode -Implements ResetInputChannels for ViewportController API and SetEnabled for ViewportControllerList -Disables all viewport controllers while in game mode --- .../Viewport/MultiViewportController.h | 2 + .../Viewport/MultiViewportController.inl | 9 ++++ .../Viewport/ViewportControllerList.cpp | 53 +++++++++++++++++++ .../Viewport/ViewportControllerList.h | 10 ++++ Code/Sandbox/Editor/EditorViewportWidget.cpp | 10 ++++ .../Editor/LegacyViewportCameraController.cpp | 15 +++++- .../Editor/LegacyViewportCameraController.h | 2 + .../Editor/ViewportManipulatorController.cpp | 6 +++ .../Editor/ViewportManipulatorController.h | 1 + 9 files changed, 107 insertions(+), 1 deletion(-) diff --git a/Code/Framework/AzFramework/AzFramework/Viewport/MultiViewportController.h b/Code/Framework/AzFramework/AzFramework/Viewport/MultiViewportController.h index 54aa4394cc..2649655f50 100644 --- a/Code/Framework/AzFramework/AzFramework/Viewport/MultiViewportController.h +++ b/Code/Framework/AzFramework/AzFramework/Viewport/MultiViewportController.h @@ -37,6 +37,7 @@ namespace AzFramework // ViewportControllerInterface ... bool HandleInputChannelEvent(const ViewportControllerInputEvent& event) override; + void ResetInputChannels() override; void UpdateViewport(const ViewportControllerUpdateEvent& event) override; void RegisterViewportContext(ViewportId viewport) override; void UnregisterViewportContext(ViewportId viewport) override; @@ -58,6 +59,7 @@ namespace AzFramework ViewportId GetViewportId() const { return m_viewportId; } virtual bool HandleInputChannelEvent([[maybe_unused]]const ViewportControllerInputEvent& event) { return false; } + virtual void ResetInputChannels() {} virtual void UpdateViewport([[maybe_unused]]const ViewportControllerUpdateEvent& event) {} private: diff --git a/Code/Framework/AzFramework/AzFramework/Viewport/MultiViewportController.inl b/Code/Framework/AzFramework/AzFramework/Viewport/MultiViewportController.inl index 011c30b520..cc59418dac 100644 --- a/Code/Framework/AzFramework/AzFramework/Viewport/MultiViewportController.inl +++ b/Code/Framework/AzFramework/AzFramework/Viewport/MultiViewportController.inl @@ -30,6 +30,15 @@ namespace AzFramework return instanceIt->second->HandleInputChannelEvent(event); } + template + void MultiViewportController::ResetInputChannels() + { + for (auto instanceIt = m_instances.begin(); instanceIt != m_instances.end(); ++instanceIt) + { + instanceIt->second->ResetInputChannels(); + } + } + template void MultiViewportController::UpdateViewport(const ViewportControllerUpdateEvent& event) { diff --git a/Code/Framework/AzFramework/AzFramework/Viewport/ViewportControllerList.cpp b/Code/Framework/AzFramework/AzFramework/Viewport/ViewportControllerList.cpp index 39cdb1440e..7f2059c1c4 100644 --- a/Code/Framework/AzFramework/AzFramework/Viewport/ViewportControllerList.cpp +++ b/Code/Framework/AzFramework/AzFramework/Viewport/ViewportControllerList.cpp @@ -49,6 +49,11 @@ namespace AzFramework bool ViewportControllerList::HandleInputChannelEvent(const AzFramework::ViewportControllerInputEvent& event) { + if (!IsEnabled()) + { + return false; + } + // If our event priority is "custom", we should dispatch at all priority levels in order using AzFramework::ViewportControllerPriority; if (event.m_priority == AzFramework::ViewportControllerPriority::DispatchToAllPriorities) @@ -76,6 +81,31 @@ namespace AzFramework } } + void ViewportControllerList::ResetInputChannels() + { + // We don't need to send this while we're disabled, we're guaranteed to call ResetInputChannels after being re-enabled. + if (!IsEnabled()) + { + return; + } + + for (const auto priority : { + ViewportControllerPriority::Highest, + ViewportControllerPriority::High, + ViewportControllerPriority::Normal, + ViewportControllerPriority::Low, + ViewportControllerPriority::Lowest }) + { + if (auto priorityListIt = m_controllers.find(priority); priorityListIt != m_controllers.end()) + { + for (const auto& controller : priorityListIt->second) + { + controller->ResetInputChannels(); + } + } + } + } + bool ViewportControllerList::DispatchInputChannelEvent(const AzFramework::ViewportControllerInputEvent& event) { if (auto priorityListIt = m_controllers.find(event.m_priority); priorityListIt != m_controllers.end()) @@ -106,6 +136,11 @@ namespace AzFramework void ViewportControllerList::UpdateViewport(const AzFramework::ViewportControllerUpdateEvent& event) { + if (!IsEnabled()) + { + return; + } + // If our event priority is "custom", we should dispatch at all priority levels in reverse order // Reverse order lets high priority controllers get the last say in viewport update operations using AzFramework::ViewportControllerPriority; @@ -174,4 +209,22 @@ namespace AzFramework } } } + + bool ViewportControllerList::IsEnabled() const + { + return m_enabled; + } + + void ViewportControllerList::SetEnabled(bool enabled) + { + if (m_enabled != enabled) + { + m_enabled = enabled; + // If we've been re-enabled, reset our input channels as they may have missed state changes. + if (m_enabled) + { + ResetInputChannels(); + } + } + } } //namespace AzFramework diff --git a/Code/Framework/AzFramework/AzFramework/Viewport/ViewportControllerList.h b/Code/Framework/AzFramework/AzFramework/Viewport/ViewportControllerList.h index 294a784dff..2d071498df 100644 --- a/Code/Framework/AzFramework/AzFramework/Viewport/ViewportControllerList.h +++ b/Code/Framework/AzFramework/AzFramework/Viewport/ViewportControllerList.h @@ -37,6 +37,9 @@ namespace AzFramework //! either a controller returns true to consume the event in OnInputChannelEvent or the controller list is exhausted. //! InputChannelEvents are sent to controllers in priority order (from the lowest priority value to the highest). bool HandleInputChannelEvent(const AzFramework::ViewportControllerInputEvent& event) override; + //! Dispatches a ResetInputChannels call to all controllers registered to this list. + //! Calls to controllers are made in priority order (from the lowest priority value to the highest). + void ResetInputChannels() override; //! Dispatches an update tick to all controllers registered to this list. //! This occurs in *reverse* priority order (i.e. from the highest priority value to the lowest) so that //! controllers with the highest registration priority may override the transforms of the controllers with the @@ -50,6 +53,12 @@ namespace AzFramework //! All ViewportControllerLists have a priority of Custom to ensure //! that they receive events at all priorities from any parent controllers. AzFramework::ViewportControllerPriority GetPriority() const { return ViewportControllerPriority::DispatchToAllPriorities; } + //! Returns true if this controller list is enabled, i.e. + //! it is accepting and forwarding input and update events to its children. + bool IsEnabled() const; + //! Set this controller list's enabled state. + //! If a controller list is disabled, it will ignore all input and update events rather than dispatching them to its children. + void SetEnabled(bool enabled); private: void SortControllers(); @@ -58,5 +67,6 @@ namespace AzFramework AZStd::unordered_map> m_controllers; AZStd::unordered_set m_viewports; + bool m_enabled = true; }; } //namespace AzFramework diff --git a/Code/Sandbox/Editor/EditorViewportWidget.cpp b/Code/Sandbox/Editor/EditorViewportWidget.cpp index 5998d0349b..977850bc58 100644 --- a/Code/Sandbox/Editor/EditorViewportWidget.cpp +++ b/Code/Sandbox/Editor/EditorViewportWidget.cpp @@ -679,6 +679,11 @@ void EditorViewportWidget::OnEditorNotifyEvent(EEditorNotifyEvent event) } SetCurrentCursor(STD_CURSOR_GAME); } + + if (m_renderViewport) + { + m_renderViewport->GetControllerList()->SetEnabled(false); + } } break; @@ -697,6 +702,11 @@ void EditorViewportWidget::OnEditorNotifyEvent(EEditorNotifyEvent event) RestoreViewportAfterGameMode(); } + + if (m_renderViewport) + { + m_renderViewport->GetControllerList()->SetEnabled(true); + } break; case eNotify_OnCloseScene: diff --git a/Code/Sandbox/Editor/LegacyViewportCameraController.cpp b/Code/Sandbox/Editor/LegacyViewportCameraController.cpp index 7a33dff377..518b17f898 100644 --- a/Code/Sandbox/Editor/LegacyViewportCameraController.cpp +++ b/Code/Sandbox/Editor/LegacyViewportCameraController.cpp @@ -408,6 +408,13 @@ bool LegacyViewportCameraControllerInstance::HandleInputChannelEvent(const AzFra } } + UpdateCursorCapture(shouldCaptureCursor); + + return shouldConsumeEvent; +} + +void LegacyViewportCameraControllerInstance::UpdateCursorCapture(bool shouldCaptureCursor) +{ if (m_capturingCursor != shouldCaptureCursor) { if (shouldCaptureCursor) @@ -427,8 +434,14 @@ bool LegacyViewportCameraControllerInstance::HandleInputChannelEvent(const AzFra m_capturingCursor = shouldCaptureCursor; } +} - return shouldConsumeEvent; +void LegacyViewportCameraControllerInstance::ResetInputChannels() +{ + m_modifiers = 0; + m_pressedKeys.clear(); + UpdateCursorCapture(false); + m_inRotateMode = m_inMoveMode = m_inOrbitMode = m_inZoomMode = false; } void LegacyViewportCameraControllerInstance::UpdateViewport(const AzFramework::ViewportControllerUpdateEvent& event) diff --git a/Code/Sandbox/Editor/LegacyViewportCameraController.h b/Code/Sandbox/Editor/LegacyViewportCameraController.h index b4a36f44a5..129a2409da 100644 --- a/Code/Sandbox/Editor/LegacyViewportCameraController.h +++ b/Code/Sandbox/Editor/LegacyViewportCameraController.h @@ -35,6 +35,7 @@ namespace SandboxEditor explicit LegacyViewportCameraControllerInstance(AzFramework::ViewportId viewport); bool HandleInputChannelEvent(const AzFramework::ViewportControllerInputEvent& event) override; + void ResetInputChannels() override; void UpdateViewport(const AzFramework::ViewportControllerUpdateEvent& event) override; private: @@ -53,6 +54,7 @@ namespace SandboxEditor bool HandleMouseMove(const AzFramework::ScreenPoint& currentMousePos, const AzFramework::ScreenPoint& previousMousePos); bool HandleMouseWheel(float zDelta); bool IsKeyDown(Qt::Key key) const; + void UpdateCursorCapture(bool shouldCaptureCursor); bool m_inRotateMode = false; bool m_inMoveMode = false; diff --git a/Code/Sandbox/Editor/ViewportManipulatorController.cpp b/Code/Sandbox/Editor/ViewportManipulatorController.cpp index 8ce2ea1cd9..fc376b27d0 100644 --- a/Code/Sandbox/Editor/ViewportManipulatorController.cpp +++ b/Code/Sandbox/Editor/ViewportManipulatorController.cpp @@ -202,6 +202,12 @@ bool ViewportManipulatorControllerInstance::HandleInputChannelEvent(const AzFram return interactionHandled; } +void ViewportManipulatorControllerInstance::ResetInputChannels() +{ + m_pendingDoubleClicks.clear(); + m_state = AzToolsFramework::ViewportInteraction::MouseInteraction(); +} + void ViewportManipulatorControllerInstance::UpdateViewport(const AzFramework::ViewportControllerUpdateEvent& event) { m_curTime = event.m_time; diff --git a/Code/Sandbox/Editor/ViewportManipulatorController.h b/Code/Sandbox/Editor/ViewportManipulatorController.h index a4f373c48f..03a823fa64 100644 --- a/Code/Sandbox/Editor/ViewportManipulatorController.h +++ b/Code/Sandbox/Editor/ViewportManipulatorController.h @@ -26,6 +26,7 @@ namespace SandboxEditor explicit ViewportManipulatorControllerInstance(AzFramework::ViewportId viewport); bool HandleInputChannelEvent(const AzFramework::ViewportControllerInputEvent& event) override; + void ResetInputChannels() override; void UpdateViewport(const AzFramework::ViewportControllerUpdateEvent& event) override; private: From ba5e0170a2eea3fea6a1f89ce9c3c67f9d3b0d2b Mon Sep 17 00:00:00 2001 From: nvsickle Date: Tue, 20 Apr 2021 14:36:11 -0700 Subject: [PATCH 63/68] Fix ImGui rendering in-Editor -Ensure ViewportContext rendertick notifications always fire -Use viewport size to determine ImGui resolution, ensure OnViewportSizeChanged is always up-to-date for the default viewport context --- .../Include/Atom/RPI.Public/ViewportContext.h | 2 ++ .../Code/Source/RPI.Public/ViewportContext.cpp | 8 ++++++-- .../Source/RPI.Public/ViewportContextManager.cpp | 11 +++++++++-- .../Code/Source/ImguiAtomSystemComponent.cpp | 16 ++++++++++++++++ .../Code/Source/ImguiAtomSystemComponent.h | 1 + 5 files changed, 34 insertions(+), 4 deletions(-) diff --git a/Gems/Atom/RPI/Code/Include/Atom/RPI.Public/ViewportContext.h b/Gems/Atom/RPI/Code/Include/Atom/RPI.Public/ViewportContext.h index 24922fbe98..d3d3155715 100644 --- a/Gems/Atom/RPI/Code/Include/Atom/RPI.Public/ViewportContext.h +++ b/Gems/Atom/RPI/Code/Include/Atom/RPI.Public/ViewportContext.h @@ -77,6 +77,8 @@ namespace AZ void OnRenderPipelineAdded(RenderPipelinePtr pipeline) override; //! Ensures our default view remains set when our scene's render pipelines are modified. void OnRenderPipelineRemoved(RenderPipeline* pipeline) override; + //! OnBeginPrepareRender is forwarded to our RenderTick notification to allow subscribers to do rendering. + void OnBeginPrepareRender() override; //WindowNotificationBus interface //! Used to fire a notification when our window resizes diff --git a/Gems/Atom/RPI/Code/Source/RPI.Public/ViewportContext.cpp b/Gems/Atom/RPI/Code/Source/RPI.Public/ViewportContext.cpp index b67ead9896..c9386b1fc0 100644 --- a/Gems/Atom/RPI/Code/Source/RPI.Public/ViewportContext.cpp +++ b/Gems/Atom/RPI/Code/Source/RPI.Public/ViewportContext.cpp @@ -104,12 +104,16 @@ namespace AZ // add the current pipeline to next render tick if it's not already added. if (m_currentPipeline && m_currentPipeline->GetRenderMode() != RenderPipeline::RenderMode::RenderOnce) { - ViewportContextNotificationBus::Event(GetName(), &ViewportContextNotificationBus::Events::OnRenderTick); - ViewportContextIdNotificationBus::Event(GetId(), &ViewportContextIdNotificationBus::Events::OnRenderTick); m_currentPipeline->AddToRenderTickOnce(); } } + void ViewportContext::OnBeginPrepareRender() + { + ViewportContextNotificationBus::Event(GetName(), &ViewportContextNotificationBus::Events::OnRenderTick); + ViewportContextIdNotificationBus::Event(GetId(), &ViewportContextIdNotificationBus::Events::OnRenderTick); + } + AZ::Name ViewportContext::GetName() const { return m_name; diff --git a/Gems/Atom/RPI/Code/Source/RPI.Public/ViewportContextManager.cpp b/Gems/Atom/RPI/Code/Source/RPI.Public/ViewportContextManager.cpp index 8d578352d8..2b525df4d4 100644 --- a/Gems/Atom/RPI/Code/Source/RPI.Public/ViewportContextManager.cpp +++ b/Gems/Atom/RPI/Code/Source/RPI.Public/ViewportContextManager.cpp @@ -57,9 +57,14 @@ namespace AZ return; } viewportData.context = viewportContext; - auto onSizeChanged = [contextName, viewportId](AzFramework::WindowSize size) + auto onSizeChanged = [this, viewportId](AzFramework::WindowSize size) { - ViewportContextNotificationBus::Event(contextName, &ViewportContextNotificationBus::Events::OnViewportSizeChanged, size); + // Ensure we emit OnViewportSizeChanged with the correct name. + auto viewportContext = this->GetViewportContextById(viewportId); + if (viewportContext) + { + ViewportContextNotificationBus::Event(viewportContext->GetName(), &ViewportContextNotificationBus::Events::OnViewportSizeChanged, size); + } ViewportContextIdNotificationBus::Event(viewportId, &ViewportContextIdNotificationBus::Events::OnViewportSizeChanged, size); }; viewportContext->m_name = contextName; @@ -174,6 +179,8 @@ namespace AZ GetOrCreateViewStackForContext(newContextName); viewportContext->m_name = newContextName; UpdateViewForContext(newContextName); + // Ensure anyone listening on per-name viewport size updates gets notified. + ViewportContextNotificationBus::Event(newContextName, &ViewportContextNotificationBus::Events::OnViewportSizeChanged, viewportContext->GetViewportSize()); } void ViewportContextManager::EnumerateViewportContexts(AZStd::function visitorFunction) diff --git a/Gems/AtomLyIntegration/ImguiAtom/Code/Source/ImguiAtomSystemComponent.cpp b/Gems/AtomLyIntegration/ImguiAtom/Code/Source/ImguiAtomSystemComponent.cpp index 3f25228406..2ae62023c7 100644 --- a/Gems/AtomLyIntegration/ImguiAtom/Code/Source/ImguiAtomSystemComponent.cpp +++ b/Gems/AtomLyIntegration/ImguiAtom/Code/Source/ImguiAtomSystemComponent.cpp @@ -58,6 +58,15 @@ namespace AZ auto atomViewportRequests = AZ::Interface::Get(); const AZ::Name contextName = atomViewportRequests->GetDefaultViewportContextName(); AZ::RPI::ViewportContextNotificationBus::Handler::BusConnect(contextName); + +#if defined(IMGUI_ENABLED) + ImGui::ImGuiManagerListenerBus::Broadcast(&ImGui::IImGuiManagerListener::SetResolutionMode, ImGui::ImGuiResolutionMode::LockToResolution); + auto defaultViewportContext = atomViewportRequests->GetDefaultViewportContext(); + if (defaultViewportContext) + { + OnViewportSizeChanged(defaultViewportContext->GetViewportSize()); + } +#endif } void ImguiAtomSystemComponent::Deactivate() @@ -75,6 +84,13 @@ namespace AZ { #if defined(IMGUI_ENABLED) ImGui::ImGuiManagerListenerBus::Broadcast(&ImGui::IImGuiManagerListener::Render); +#endif + } + + void ImguiAtomSystemComponent::OnViewportSizeChanged(AzFramework::WindowSize size) + { +#if defined(IMGUI_ENABLED) + ImGui::ImGuiManagerListenerBus::Broadcast(&ImGui::IImGuiManagerListener::SetImGuiRenderResolution, ImVec2{aznumeric_cast(size.m_width), aznumeric_cast(size.m_height)}); #endif } } diff --git a/Gems/AtomLyIntegration/ImguiAtom/Code/Source/ImguiAtomSystemComponent.h b/Gems/AtomLyIntegration/ImguiAtom/Code/Source/ImguiAtomSystemComponent.h index a554ab0339..d3bdb7c4fc 100644 --- a/Gems/AtomLyIntegration/ImguiAtom/Code/Source/ImguiAtomSystemComponent.h +++ b/Gems/AtomLyIntegration/ImguiAtom/Code/Source/ImguiAtomSystemComponent.h @@ -54,6 +54,7 @@ namespace AZ // ViewportContextNotificationBus overrides... void OnRenderTick() override; + void OnViewportSizeChanged(AzFramework::WindowSize size) override; DebugConsole m_debugConsole; }; From 4f9d7e37822849d916d9df57dff4eaee2887ef37 Mon Sep 17 00:00:00 2001 From: nvsickle Date: Tue, 20 Apr 2021 15:12:39 -0700 Subject: [PATCH 64/68] Simplify ResetInputChannels --- .../Viewport/ViewportControllerList.cpp | 14 +++----------- .../AzFramework/Viewport/ViewportControllerList.h | 2 +- 2 files changed, 4 insertions(+), 12 deletions(-) diff --git a/Code/Framework/AzFramework/AzFramework/Viewport/ViewportControllerList.cpp b/Code/Framework/AzFramework/AzFramework/Viewport/ViewportControllerList.cpp index 7f2059c1c4..1dd608319a 100644 --- a/Code/Framework/AzFramework/AzFramework/Viewport/ViewportControllerList.cpp +++ b/Code/Framework/AzFramework/AzFramework/Viewport/ViewportControllerList.cpp @@ -89,19 +89,11 @@ namespace AzFramework return; } - for (const auto priority : { - ViewportControllerPriority::Highest, - ViewportControllerPriority::High, - ViewportControllerPriority::Normal, - ViewportControllerPriority::Low, - ViewportControllerPriority::Lowest }) + for (const auto& controllerList : m_controllers) { - if (auto priorityListIt = m_controllers.find(priority); priorityListIt != m_controllers.end()) + for (const auto& controller : controllerList.second) { - for (const auto& controller : priorityListIt->second) - { - controller->ResetInputChannels(); - } + controller->ResetInputChannels(); } } } diff --git a/Code/Framework/AzFramework/AzFramework/Viewport/ViewportControllerList.h b/Code/Framework/AzFramework/AzFramework/Viewport/ViewportControllerList.h index 2d071498df..9da1d65dff 100644 --- a/Code/Framework/AzFramework/AzFramework/Viewport/ViewportControllerList.h +++ b/Code/Framework/AzFramework/AzFramework/Viewport/ViewportControllerList.h @@ -38,7 +38,7 @@ namespace AzFramework //! InputChannelEvents are sent to controllers in priority order (from the lowest priority value to the highest). bool HandleInputChannelEvent(const AzFramework::ViewportControllerInputEvent& event) override; //! Dispatches a ResetInputChannels call to all controllers registered to this list. - //! Calls to controllers are made in priority order (from the lowest priority value to the highest). + //! Calls to controllers are made in an undefined order. void ResetInputChannels() override; //! Dispatches an update tick to all controllers registered to this list. //! This occurs in *reverse* priority order (i.e. from the highest priority value to the lowest) so that From 62bc7a66bb82dfdc390dec81cdfaf2e3d72711cf Mon Sep 17 00:00:00 2001 From: AMZN-daimini <82231674+AMZN-daimini@users.noreply.github.com> Date: Tue, 20 Apr 2021 16:22:34 -0700 Subject: [PATCH 65/68] Remove the Level Inspector from Prefab mode and move behavior to Entity Inspector. (#149) * Remove Level Inspector from Prefab mode, and integrate the same behavior in the Entity Inspector * Show prefab name in level entity row of the Outliner. Allow Ui Handlers to prevent renaming. * Separate setting the prefab's template path and the container entity name. * Disable reparenting to root level * Disable the ability to rename the level entity. * Fixes as per Ram's review --- .../PrefabEditorEntityOwnershipService.cpp | 2 + .../Prefab/Instance/Instance.cpp | 8 ++- .../Prefab/Instance/Instance.h | 1 + .../Prefab/PrefabPublicHandler.cpp | 4 +- .../Prefab/PrefabSystemComponent.cpp | 1 + .../EditorEntityUiHandlerBase.cpp | 5 ++ .../EditorEntityUiHandlerBase.h | 2 + .../UI/Outliner/EntityOutlinerListModel.cpp | 44 +++++++------- .../UI/Outliner/EntityOutlinerWidget.cpp | 29 ++++++++-- .../UI/Outliner/EntityOutlinerWidget.hxx | 3 + .../UI/Prefab/LevelRootUiHandler.cpp | 20 +++++++ .../UI/Prefab/LevelRootUiHandler.h | 2 + .../PropertyEditor/EntityPropertyEditor.cpp | 57 +++++++++++++++---- .../PropertyEditor/EntityPropertyEditor.hxx | 9 +++ Code/Sandbox/Editor/QtViewPaneManager.cpp | 20 ++++++- .../ComponentEntityEditorPlugin.cpp | 17 +++--- 16 files changed, 171 insertions(+), 53 deletions(-) diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Entity/PrefabEditorEntityOwnershipService.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/Entity/PrefabEditorEntityOwnershipService.cpp index 2424658ecf..cb16e0c099 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Entity/PrefabEditorEntityOwnershipService.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Entity/PrefabEditorEntityOwnershipService.cpp @@ -94,6 +94,7 @@ namespace AzToolsFramework m_prefabSystemComponent->RemoveTemplate(templateId); } m_rootInstance->Reset(); + m_rootInstance->SetContainerEntityName("Level"); AzFramework::EntityOwnershipServiceNotificationBus::Event( m_entityContextId, &AzFramework::EntityOwnershipServiceNotificationBus::Events::OnEntityOwnershipServiceReset); @@ -198,6 +199,7 @@ namespace AzToolsFramework m_rootInstance->SetTemplateId(templateId); m_rootInstance->SetTemplateSourcePath(m_loaderInterface->GetRelativePathToProject(filename)); + m_rootInstance->SetContainerEntityName("Level"); m_prefabSystemComponent->PropagateTemplateChanges(templateId); return true; diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/Instance/Instance.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/Instance/Instance.cpp index 0a5b43482e..c1eee62dbc 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/Instance/Instance.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/Instance/Instance.cpp @@ -123,7 +123,11 @@ namespace AzToolsFramework void Instance::SetTemplateSourcePath(AZ::IO::PathView sourcePath) { m_templateSourcePath = sourcePath; - m_containerEntity->SetName(sourcePath.Filename().Native()); + } + + void Instance::SetContainerEntityName(AZStd::string_view containerName) + { + m_containerEntity->SetName(containerName); } bool Instance::AddEntity(AZ::Entity& entity) @@ -563,7 +567,7 @@ namespace AzToolsFramework AZ::EntityId Instance::GetContainerEntityId() const { - return m_containerEntity->GetId(); + return m_containerEntity ? m_containerEntity->GetId() : AZ::EntityId(); } bool Instance::HasContainerEntity() const diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/Instance/Instance.h b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/Instance/Instance.h index d1c7a4d853..186dce0f50 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/Instance/Instance.h +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/Instance/Instance.h @@ -80,6 +80,7 @@ namespace AzToolsFramework const AZ::IO::Path& GetTemplateSourcePath() const; void SetTemplateSourcePath(AZ::IO::PathView sourcePath); + void SetContainerEntityName(AZStd::string_view containerName); bool AddEntity(AZ::Entity& entity); bool AddEntity(AZ::Entity& entity, EntityAlias entityAlias); diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabPublicHandler.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabPublicHandler.cpp index 46bd924f30..772e0ae52e 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabPublicHandler.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabPublicHandler.cpp @@ -721,7 +721,7 @@ namespace AzToolsFramework InstanceOptionalReference owningInstance = m_instanceEntityMapperInterface->FindOwningInstance(entity->GetId()); AZ_Assert( owningInstance.has_value(), - "An error occored while retrieving entities and prefab instances : " + "An error occurred while retrieving entities and prefab instances : " "Owning instance of entity with id '%llu' couldn't be found", entity->GetId()); @@ -805,7 +805,7 @@ namespace AzToolsFramework { AZ_Assert( false, - "An error occored in function EntitiesBelongToSameInstance: " + "An error occurred in function EntitiesBelongToSameInstance: " "Owning instance of entity with id '%llu' couldn't be found", entityId); return false; diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabSystemComponent.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabSystemComponent.cpp index 9070630e56..54e99c9416 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabSystemComponent.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabSystemComponent.cpp @@ -121,6 +121,7 @@ namespace AzToolsFramework } newInstance->SetTemplateSourcePath(relativeFilePath); + newInstance->SetContainerEntityName(relativeFilePath.Stem().Native()); TemplateId newTemplateId = CreateTemplateFromInstance(*newInstance); if (newTemplateId == InvalidTemplateId) diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/EditorEntityUi/EditorEntityUiHandlerBase.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/EditorEntityUi/EditorEntityUiHandlerBase.cpp index 98edd26f88..84266d3707 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/EditorEntityUi/EditorEntityUiHandlerBase.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/EditorEntityUi/EditorEntityUiHandlerBase.cpp @@ -61,6 +61,11 @@ namespace AzToolsFramework return true; } + bool EditorEntityUiHandlerBase::CanRename(AZ::EntityId /*entityId*/) const + { + return true; + } + void EditorEntityUiHandlerBase::PaintItemBackground(QPainter* /*painter*/, const QStyleOptionViewItem& /*option*/, const QModelIndex& /*index*/) const { } diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/EditorEntityUi/EditorEntityUiHandlerBase.h b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/EditorEntityUi/EditorEntityUiHandlerBase.h index 7360e7ff0b..1aa5e5720f 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/EditorEntityUi/EditorEntityUiHandlerBase.h +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/EditorEntityUi/EditorEntityUiHandlerBase.h @@ -47,6 +47,8 @@ namespace AzToolsFramework virtual QPixmap GenerateItemIcon(AZ::EntityId entityId) const; //! Returns whether the element's lock and visibility state should be accessible in the Outliner virtual bool CanToggleLockVisibility(AZ::EntityId entityId) const; + //! Returns whether the element's name should be editable + virtual bool CanRename(AZ::EntityId entityId) const; //! Paints the background of the item in the Outliner. virtual void PaintItemBackground(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const; diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Outliner/EntityOutlinerListModel.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Outliner/EntityOutlinerListModel.cpp index de10ae18b4..5b44594398 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Outliner/EntityOutlinerListModel.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Outliner/EntityOutlinerListModel.cpp @@ -945,6 +945,12 @@ namespace AzToolsFramework return false; } + // Disable reparenting to the root level + if (!newParentId.IsValid()) + { + return false; + } + // Ignore entities not owned by the editor context. It is assumed that all entities belong // to the same context since multiple selection doesn't span across views. for (const AZ::EntityId& entityId : selectedEntityIds) @@ -974,39 +980,33 @@ namespace AzToolsFramework } } - if (newParentId.IsValid()) + bool isLayerEntity = false; + Layers::EditorLayerComponentRequestBus::EventResult( + isLayerEntity, + entityId, + &Layers::EditorLayerComponentRequestBus::Events::HasLayer); + // Layers can only have other layers as parents, or have no parent. + if (isLayerEntity) { - bool isLayerEntity = false; + bool newParentIsLayer = false; Layers::EditorLayerComponentRequestBus::EventResult( - isLayerEntity, - entityId, + newParentIsLayer, + newParentId, &Layers::EditorLayerComponentRequestBus::Events::HasLayer); - // Layers can only have other layers as parents, or have no parent. - if (isLayerEntity) + if (!newParentIsLayer) { - bool newParentIsLayer = false; - Layers::EditorLayerComponentRequestBus::EventResult( - newParentIsLayer, - newParentId, - &Layers::EditorLayerComponentRequestBus::Events::HasLayer); - if (!newParentIsLayer) - { - return false; - } + return false; } } } //Only check the entity pointer if the entity id is valid because //we want to allow dragging items to unoccupied parts of the tree to un-parent them - if (newParentId.IsValid()) + AZ::Entity* newParentEntity = nullptr; + AZ::ComponentApplicationBus::BroadcastResult(newParentEntity, &AZ::ComponentApplicationRequests::FindEntity, newParentId); + if (!newParentEntity) { - AZ::Entity* newParentEntity = nullptr; - AZ::ComponentApplicationBus::BroadcastResult(newParentEntity, &AZ::ComponentApplicationRequests::FindEntity, newParentId); - if (!newParentEntity) - { - return false; - } + return false; } //reject dragging on to yourself or your children diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Outliner/EntityOutlinerWidget.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Outliner/EntityOutlinerWidget.cpp index 08fc764507..3ee8a14285 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Outliner/EntityOutlinerWidget.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Outliner/EntityOutlinerWidget.cpp @@ -30,6 +30,7 @@ #include #include #include +#include #include #include #include @@ -271,6 +272,12 @@ namespace AzToolsFramework m_listModel->Initialize(); + m_editorEntityUiInterface = AZ::Interface::Get(); + + AZ_Assert( + m_editorEntityUiInterface != nullptr, + "EntityOutlinerWidget requires a EditorEntityUiInterface instance on Initialize."); + EditorPickModeNotificationBus::Handler::BusConnect(GetEntityContextId()); EntityHighlightMessages::Bus::Handler::BusConnect(); EntityOutlinerModelNotificationBus::Handler::BusConnect(); @@ -562,7 +569,13 @@ namespace AzToolsFramework if (m_selectedEntityIds.size() == 1) { - contextMenu->addAction(m_actionToRenameSelection); + auto entityId = m_selectedEntityIds.front(); + auto entityUiHandler = m_editorEntityUiInterface->GetHandler(entityId); + + if (!entityUiHandler || entityUiHandler->CanRename(entityId)) + { + contextMenu->addAction(m_actionToRenameSelection); + } } if (m_selectedEntityIds.size() == 1) @@ -688,11 +701,17 @@ namespace AzToolsFramework if (m_selectedEntityIds.size() == 1) { - const QModelIndex proxyIndex = GetIndexFromEntityId(m_selectedEntityIds.front()); - if (proxyIndex.isValid()) + auto entityId = m_selectedEntityIds.front(); + auto entityUiHandler = m_editorEntityUiInterface->GetHandler(entityId); + + if (!entityUiHandler || entityUiHandler->CanRename(entityId)) { - m_gui->m_objectTree->setCurrentIndex(proxyIndex); - m_gui->m_objectTree->QTreeView::edit(proxyIndex); + const QModelIndex proxyIndex = GetIndexFromEntityId(entityId); + if (proxyIndex.isValid()) + { + m_gui->m_objectTree->setCurrentIndex(proxyIndex); + m_gui->m_objectTree->QTreeView::edit(proxyIndex); + } } } } diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Outliner/EntityOutlinerWidget.hxx b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Outliner/EntityOutlinerWidget.hxx index cf8c55abd1..f225bb49b8 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Outliner/EntityOutlinerWidget.hxx +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Outliner/EntityOutlinerWidget.hxx @@ -42,6 +42,7 @@ namespace Ui namespace AzToolsFramework { + class EditorEntityUiInterface; class EntityOutlinerListModel; class EntityOutlinerSortFilterProxyModel; @@ -193,6 +194,8 @@ namespace AzToolsFramework EntityIdSet m_entitiesToSort; EntityOutliner::DisplaySortMode m_sortMode; bool m_sortContentQueued; + + EditorEntityUiInterface* m_editorEntityUiInterface = nullptr; }; } diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Prefab/LevelRootUiHandler.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Prefab/LevelRootUiHandler.cpp index 828a49ef94..7915403c0a 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Prefab/LevelRootUiHandler.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Prefab/LevelRootUiHandler.cpp @@ -50,11 +50,31 @@ namespace AzToolsFramework return QPixmap(m_levelRootIconPath); } + QString LevelRootUiHandler::GenerateItemInfoString(AZ::EntityId entityId) const + { + QString infoString; + + AZ::IO::Path path = m_prefabPublicInterface->GetOwningInstancePrefabPath(entityId); + + if (!path.empty()) + { + infoString = + QObject::tr("(%1)").arg(path.Filename().Native().data()); + } + + return infoString; + } + bool LevelRootUiHandler::CanToggleLockVisibility(AZ::EntityId /*entityId*/) const { return false; } + bool LevelRootUiHandler::CanRename(AZ::EntityId /*entityId*/) const + { + return false; + } + void LevelRootUiHandler::PaintItemBackground(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& /*index*/) const { if (!painter) diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Prefab/LevelRootUiHandler.h b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Prefab/LevelRootUiHandler.h index a8b2e4a4f8..19c1244040 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Prefab/LevelRootUiHandler.h +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Prefab/LevelRootUiHandler.h @@ -34,7 +34,9 @@ namespace AzToolsFramework // EditorEntityUiHandler... QPixmap GenerateItemIcon(AZ::EntityId entityId) const override; + QString GenerateItemInfoString(AZ::EntityId entityId) const override; bool CanToggleLockVisibility(AZ::EntityId entityId) const override; + bool CanRename(AZ::EntityId entityId) const override; void PaintItemBackground(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const override; private: diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/PropertyEditor/EntityPropertyEditor.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/PropertyEditor/EntityPropertyEditor.cpp index 55c7fb3f65..181f5b9a9d 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/PropertyEditor/EntityPropertyEditor.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/PropertyEditor/EntityPropertyEditor.cpp @@ -310,6 +310,9 @@ namespace AzToolsFramework { initEntityPropertyEditorResources(); + m_prefabPublicInterface = AZ::Interface::Get(); + AZ_Assert(m_prefabPublicInterface != nullptr, "EntityPropertyEditor requires a PrefabPublicInterface instance on Initialize."); + setObjectName("EntityPropertyEditor"); setAcceptDrops(true); @@ -405,8 +408,6 @@ namespace AzToolsFramework CreateActions(); UpdateContents(); - m_prefabPublicInterface = AZ::Interface::Get(); - EditorEntityContextNotificationBus::Handler::BusConnect(); //forced to register global event filter with application for selection @@ -693,11 +694,38 @@ namespace AzToolsFramework m_gui->m_entityIcon->repaint(); } + EntityPropertyEditor::InspectorLayout EntityPropertyEditor::GetCurrentInspectorLayout() const + { + if (!m_prefabsAreEnabled) + { + return m_isLevelEntityEditor ? InspectorLayout::LEVEL : InspectorLayout::ENTITY; + } + + AZ::EntityId levelContainerEntityId = m_prefabPublicInterface->GetLevelInstanceContainerEntityId(); + if (AZStd::find(m_selectedEntityIds.begin(), m_selectedEntityIds.end(), levelContainerEntityId) != m_selectedEntityIds.end()) + { + if (m_selectedEntityIds.size() > 1) + { + return InspectorLayout::INVALID; + } + else + { + return InspectorLayout::LEVEL; + } + } + else + { + return InspectorLayout::ENTITY; + } + } + void EntityPropertyEditor::UpdateEntityDisplay() { UpdateStatusComboBox(); - if (m_isLevelEntityEditor) + InspectorLayout layout = GetCurrentInspectorLayout(); + + if (layout == InspectorLayout::LEVEL) { AZStd::string levelName; AzToolsFramework::EditorRequestBus::BroadcastResult(levelName, &AzToolsFramework::EditorRequests::GetLevelName); @@ -737,13 +765,20 @@ namespace AzToolsFramework AZ_PROFILE_FUNCTION(AZ::Debug::ProfileCategory::AzToolsFramework); SelectionEntityTypeInfo result = SelectionEntityTypeInfo::None; - if (m_isLevelEntityEditor) + InspectorLayout layout = GetCurrentInspectorLayout(); + + if (layout == InspectorLayout::LEVEL) { // The Level Inspector should only have a list of selectable components after the // level entity itself is valid (i.e. "selected"). return selection.empty() ? SelectionEntityTypeInfo::None : SelectionEntityTypeInfo::LevelEntity; } + if (layout == InspectorLayout::INVALID) + { + return SelectionEntityTypeInfo::Mixed; + } + for (AZ::EntityId selectedEntityId : selection) { bool isLayerEntity = false; @@ -909,16 +944,18 @@ namespace AzToolsFramework } } + bool isLevelLayout = GetCurrentInspectorLayout() == InspectorLayout::LEVEL; + m_gui->m_entityDetailsLabel->setText(entityDetailsLabelText); m_gui->m_entityDetailsLabel->setVisible(entityDetailsVisible); m_gui->m_entityNameEditor->setVisible(hasEntitiesDisplayed); m_gui->m_entityNameLabel->setVisible(hasEntitiesDisplayed); m_gui->m_entityIcon->setVisible(hasEntitiesDisplayed); - m_gui->m_pinButton->setVisible(m_overrideSelectedEntityIds.empty() && hasEntitiesDisplayed && !m_isSystemEntityEditor && !m_isLevelEntityEditor); - m_gui->m_statusLabel->setVisible(hasEntitiesDisplayed && !m_isSystemEntityEditor && !m_isLevelEntityEditor); - m_gui->m_statusComboBox->setVisible(hasEntitiesDisplayed && !m_isSystemEntityEditor && !m_isLevelEntityEditor); - m_gui->m_entityIdLabel->setVisible(hasEntitiesDisplayed && !m_isSystemEntityEditor && !m_isLevelEntityEditor); - m_gui->m_entityIdText->setVisible(hasEntitiesDisplayed && !m_isSystemEntityEditor && !m_isLevelEntityEditor); + m_gui->m_pinButton->setVisible(m_overrideSelectedEntityIds.empty() && hasEntitiesDisplayed && !m_isSystemEntityEditor); + m_gui->m_statusLabel->setVisible(hasEntitiesDisplayed && !m_isSystemEntityEditor && !isLevelLayout); + m_gui->m_statusComboBox->setVisible(hasEntitiesDisplayed && !m_isSystemEntityEditor && !isLevelLayout); + m_gui->m_entityIdLabel->setVisible(hasEntitiesDisplayed && !m_isSystemEntityEditor && !isLevelLayout); + m_gui->m_entityIdText->setVisible(hasEntitiesDisplayed && !m_isSystemEntityEditor && !isLevelLayout); bool displayComponentSearchBox = hasEntitiesDisplayed; if (hasEntitiesDisplayed) @@ -941,7 +978,7 @@ namespace AzToolsFramework UpdateEntityDisplay(); } - m_gui->m_darkBox->setVisible(displayComponentSearchBox && !m_isSystemEntityEditor && !m_isLevelEntityEditor); + m_gui->m_darkBox->setVisible(displayComponentSearchBox && !m_isSystemEntityEditor && !isLevelLayout); m_gui->m_entitySearchBox->setVisible(displayComponentSearchBox); bool displayAddComponentMenu = CanAddComponentsToSelection(selectionEntityTypeInfo); diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/PropertyEditor/EntityPropertyEditor.hxx b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/PropertyEditor/EntityPropertyEditor.hxx index fed9c55f15..677dc98277 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/PropertyEditor/EntityPropertyEditor.hxx +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/PropertyEditor/EntityPropertyEditor.hxx @@ -521,6 +521,15 @@ namespace AzToolsFramework bool m_isSystemEntityEditor; bool m_isLevelEntityEditor = false; + enum class InspectorLayout + { + ENTITY = 0, // All selected entities are regular entities + LEVEL, // The selected entity is the level prefab container entity + INVALID // Other entities are selected alongside the level prefab container entity + }; + + InspectorLayout GetCurrentInspectorLayout() const; + // the spacer's job is to make sure that its always at the end of the list of components. QSpacerItem* m_spacer; bool m_isAlreadyQueuedRefresh; diff --git a/Code/Sandbox/Editor/QtViewPaneManager.cpp b/Code/Sandbox/Editor/QtViewPaneManager.cpp index ad33eecfee..b242f3d914 100644 --- a/Code/Sandbox/Editor/QtViewPaneManager.cpp +++ b/Code/Sandbox/Editor/QtViewPaneManager.cpp @@ -36,6 +36,8 @@ #include #include +#include + #include #include #include @@ -983,6 +985,11 @@ bool QtViewPaneManager::ClosePanesWithRollback(const QVector& panesToKe */ void QtViewPaneManager::RestoreDefaultLayout(bool resetSettings) { + // Get whether the prefab system is enabled + bool isPrefabSystemEnabled = false; + AzFramework::ApplicationRequests::Bus::BroadcastResult( + isPrefabSystemEnabled, &AzFramework::ApplicationRequests::IsPrefabSystemEnabled); + if (resetSettings) { // We're going to do something destructive (removing all of the viewpane settings). Better confirm with the user @@ -1022,7 +1029,11 @@ void QtViewPaneManager::RestoreDefaultLayout(bool resetSettings) state.viewPanes.push_back(LyViewPane::EntityInspector); state.viewPanes.push_back(LyViewPane::AssetBrowser); state.viewPanes.push_back(LyViewPane::Console); - state.viewPanes.push_back(LyViewPane::LevelInspector); + + if (!isPrefabSystemEnabled) + { + state.viewPanes.push_back(LyViewPane::LevelInspector); + } state.mainWindowState = m_defaultMainWindowState; @@ -1047,7 +1058,12 @@ void QtViewPaneManager::RestoreDefaultLayout(bool resetSettings) const QtViewPane* assetBrowserViewPane = OpenPane(LyViewPane::AssetBrowser, QtViewPane::OpenMode::UseDefaultState); const QtViewPane* entityInspectorViewPane = OpenPane(LyViewPane::EntityInspector, QtViewPane::OpenMode::UseDefaultState); const QtViewPane* consoleViewPane = OpenPane(LyViewPane::Console, QtViewPane::OpenMode::UseDefaultState); - const QtViewPane* levelInspectorPane = OpenPane(LyViewPane::LevelInspector, QtViewPane::OpenMode::UseDefaultState); + + const QtViewPane* levelInspectorPane = nullptr; + if (!isPrefabSystemEnabled) + { + levelInspectorPane = OpenPane(LyViewPane::LevelInspector, QtViewPane::OpenMode::UseDefaultState); + } // This class does all kinds of behind the scenes magic to make docking / restore work, especially with groups // so instead of doing our special default layout attach / docking right now, we want to make it happen diff --git a/Code/Sandbox/Plugins/ComponentEntityEditorPlugin/ComponentEntityEditorPlugin.cpp b/Code/Sandbox/Plugins/ComponentEntityEditorPlugin/ComponentEntityEditorPlugin.cpp index 17face523b..e5ad2a2872 100644 --- a/Code/Sandbox/Plugins/ComponentEntityEditorPlugin/ComponentEntityEditorPlugin.cpp +++ b/Code/Sandbox/Plugins/ComponentEntityEditorPlugin/ComponentEntityEditorPlugin.cpp @@ -143,15 +143,6 @@ ComponentEntityEditorPlugin::ComponentEntityEditorPlugin([[maybe_unused]] IEdito LyViewPane::CategoryTools, pinnedInspectorOptions); - ViewPaneOptions levelInspectorOptions; - levelInspectorOptions.canHaveMultipleInstances = false; - levelInspectorOptions.preferedDockingArea = Qt::RightDockWidgetArea; - levelInspectorOptions.paneRect = QRect(50, 50, 400, 700); - RegisterViewPane( - LyViewPane::LevelInspector, - LyViewPane::CategoryTools, - levelInspectorOptions); - bool prefabSystemEnabled = false; AzFramework::ApplicationRequests::Bus::BroadcastResult(prefabSystemEnabled, &AzFramework::ApplicationRequests::IsPrefabSystemEnabled); @@ -170,8 +161,14 @@ ComponentEntityEditorPlugin::ComponentEntityEditorPlugin([[maybe_unused]] IEdito } else { - // Add the Legacy Outliner to the Tools Menu + ViewPaneOptions levelInspectorOptions; + levelInspectorOptions.canHaveMultipleInstances = false; + levelInspectorOptions.preferedDockingArea = Qt::RightDockWidgetArea; + levelInspectorOptions.paneRect = QRect(50, 50, 400, 700); + RegisterViewPane( + LyViewPane::LevelInspector, LyViewPane::CategoryTools, levelInspectorOptions); + // Add the Legacy Outliner to the Tools Menu ViewPaneOptions outlinerOptions; outlinerOptions.canHaveMultipleInstances = true; outlinerOptions.preferedDockingArea = Qt::LeftDockWidgetArea; From 707f5a07b2da251933b19b451b8e5f6e06783291 Mon Sep 17 00:00:00 2001 From: Alex Peterson <26804013+AMZN-alexpete@users.noreply.github.com> Date: Tue, 20 Apr 2021 17:25:31 -0700 Subject: [PATCH 66/68] Converted Civetweb to 3p package --- Gems/Metastream/Code/CMakeLists.txt | 2 -- .../Platform/Common/MSVC/metastream_msvc.cmake | 4 ++++ cmake/3rdParty/Findcivetweb.cmake | 16 ---------------- .../Platform/Android/civetweb_android.cmake | 10 ---------- .../Platform/Android/cmake_android_files.cmake | 1 - .../3rdParty/Platform/Linux/civetweb_linux.cmake | 10 ---------- .../Platform/Linux/cmake_linux_files.cmake | 1 - cmake/3rdParty/Platform/Mac/civetweb_mac.cmake | 10 ---------- .../3rdParty/Platform/Mac/cmake_mac_files.cmake | 1 - .../Windows/BuiltInPackages_windows.cmake | 3 ++- .../Platform/Windows/civetweb_windows.cmake | 13 ------------- cmake/3rdParty/cmake_files.cmake | 1 - .../3rdParty/package_filelists/3rdParty.json | 1 - .../Windows/package_filelists/3rdParty.json | 6 ------ 14 files changed, 6 insertions(+), 73 deletions(-) delete mode 100644 cmake/3rdParty/Findcivetweb.cmake delete mode 100644 cmake/3rdParty/Platform/Android/civetweb_android.cmake delete mode 100644 cmake/3rdParty/Platform/Linux/civetweb_linux.cmake delete mode 100644 cmake/3rdParty/Platform/Mac/civetweb_mac.cmake delete mode 100644 cmake/3rdParty/Platform/Windows/civetweb_windows.cmake diff --git a/Gems/Metastream/Code/CMakeLists.txt b/Gems/Metastream/Code/CMakeLists.txt index 6d2983c91d..47b6f6f9c5 100644 --- a/Gems/Metastream/Code/CMakeLists.txt +++ b/Gems/Metastream/Code/CMakeLists.txt @@ -47,7 +47,6 @@ ly_add_target( PRIVATE Gem::Metastream.Static Legacy::CryCommon - 3rdParty::civetweb ) @@ -74,7 +73,6 @@ if(PAL_TRAIT_BUILD_TESTS_SUPPORTED) AZ::AzTest Gem::Metastream.Static Legacy::CryCommon - 3rdParty::civetweb ) ly_add_googletest( NAME Gem::Metastream.Tests diff --git a/Gems/Metastream/Code/Source/Platform/Common/MSVC/metastream_msvc.cmake b/Gems/Metastream/Code/Source/Platform/Common/MSVC/metastream_msvc.cmake index 5cebdbd198..2a42a01b08 100644 --- a/Gems/Metastream/Code/Source/Platform/Common/MSVC/metastream_msvc.cmake +++ b/Gems/Metastream/Code/Source/Platform/Common/MSVC/metastream_msvc.cmake @@ -11,3 +11,7 @@ # CivetHttpServer.cpp uses a try catch block set(LY_COMPILE_OPTIONS PRIVATE /EHsc) +set(LY_BUILD_DEPENDENCIES + PRIVATE + 3rdParty::civetweb +) \ No newline at end of file diff --git a/cmake/3rdParty/Findcivetweb.cmake b/cmake/3rdParty/Findcivetweb.cmake deleted file mode 100644 index b882957b84..0000000000 --- a/cmake/3rdParty/Findcivetweb.cmake +++ /dev/null @@ -1,16 +0,0 @@ -# -# All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or -# its licensors. -# -# For complete copyright and license terms please see the LICENSE at the root of this -# distribution (the "License"). All use of this software is governed by the License, -# or, if provided, by the license below or the license accompanying this file. Do not -# remove or modify any license notices. This file is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# - -ly_add_external_target( - NAME civetweb - VERSION civetweb-20160922-az.2 - INCLUDE_DIRECTORIES include -) diff --git a/cmake/3rdParty/Platform/Android/civetweb_android.cmake b/cmake/3rdParty/Platform/Android/civetweb_android.cmake deleted file mode 100644 index 4d5680a30d..0000000000 --- a/cmake/3rdParty/Platform/Android/civetweb_android.cmake +++ /dev/null @@ -1,10 +0,0 @@ -# -# All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or -# its licensors. -# -# For complete copyright and license terms please see the LICENSE at the root of this -# distribution (the "License"). All use of this software is governed by the License, -# or, if provided, by the license below or the license accompanying this file. Do not -# remove or modify any license notices. This file is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# diff --git a/cmake/3rdParty/Platform/Android/cmake_android_files.cmake b/cmake/3rdParty/Platform/Android/cmake_android_files.cmake index 07e453f862..59015d8704 100644 --- a/cmake/3rdParty/Platform/Android/cmake_android_files.cmake +++ b/cmake/3rdParty/Platform/Android/cmake_android_files.cmake @@ -11,7 +11,6 @@ set(FILES BuiltInPackages_android.cmake - civetweb_android.cmake VkValidation_android.cmake Wwise_android.cmake ) diff --git a/cmake/3rdParty/Platform/Linux/civetweb_linux.cmake b/cmake/3rdParty/Platform/Linux/civetweb_linux.cmake deleted file mode 100644 index 4d5680a30d..0000000000 --- a/cmake/3rdParty/Platform/Linux/civetweb_linux.cmake +++ /dev/null @@ -1,10 +0,0 @@ -# -# All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or -# its licensors. -# -# For complete copyright and license terms please see the LICENSE at the root of this -# distribution (the "License"). All use of this software is governed by the License, -# or, if provided, by the license below or the license accompanying this file. Do not -# remove or modify any license notices. This file is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# diff --git a/cmake/3rdParty/Platform/Linux/cmake_linux_files.cmake b/cmake/3rdParty/Platform/Linux/cmake_linux_files.cmake index 83d862ee78..809e8b7198 100644 --- a/cmake/3rdParty/Platform/Linux/cmake_linux_files.cmake +++ b/cmake/3rdParty/Platform/Linux/cmake_linux_files.cmake @@ -12,7 +12,6 @@ set(FILES AWSGameLiftServerSDK_linux.cmake BuiltInPackages_linux.cmake - civetweb_linux.cmake dyad_linux.cmake FbxSdk_linux.cmake OpenSSL_linux.cmake diff --git a/cmake/3rdParty/Platform/Mac/civetweb_mac.cmake b/cmake/3rdParty/Platform/Mac/civetweb_mac.cmake deleted file mode 100644 index 4d5680a30d..0000000000 --- a/cmake/3rdParty/Platform/Mac/civetweb_mac.cmake +++ /dev/null @@ -1,10 +0,0 @@ -# -# All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or -# its licensors. -# -# For complete copyright and license terms please see the LICENSE at the root of this -# distribution (the "License"). All use of this software is governed by the License, -# or, if provided, by the license below or the license accompanying this file. Do not -# remove or modify any license notices. This file is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# diff --git a/cmake/3rdParty/Platform/Mac/cmake_mac_files.cmake b/cmake/3rdParty/Platform/Mac/cmake_mac_files.cmake index 9d0166913a..8cab9da1ba 100644 --- a/cmake/3rdParty/Platform/Mac/cmake_mac_files.cmake +++ b/cmake/3rdParty/Platform/Mac/cmake_mac_files.cmake @@ -11,7 +11,6 @@ set(FILES BuiltInPackages_mac.cmake - civetweb_mac.cmake DirectXShaderCompiler_mac.cmake FbxSdk_mac.cmake OpenGLInterface_mac.cmake diff --git a/cmake/3rdParty/Platform/Windows/BuiltInPackages_windows.cmake b/cmake/3rdParty/Platform/Windows/BuiltInPackages_windows.cmake index 09dd543e5c..a2b03c1a68 100644 --- a/cmake/3rdParty/Platform/Windows/BuiltInPackages_windows.cmake +++ b/cmake/3rdParty/Platform/Windows/BuiltInPackages_windows.cmake @@ -55,4 +55,5 @@ ly_associate_package(PACKAGE_NAME pyside2-qt-5.15.1-rev2-windows TARGETS pys ly_associate_package(PACKAGE_NAME openimageio-2.1.16.0-rev1-windows TARGETS OpenImageIO PACKAGE_HASH b9f6d6df180ad240b9f17a68c1862c7d8f38234de0e692e83116254b0ee467e5) ly_associate_package(PACKAGE_NAME qt-5.15.2-windows TARGETS Qt PACKAGE_HASH edaf954c647c99727bfd313dab2959803d2df0873914bb96368c3d8286eed6d9) ly_associate_package(PACKAGE_NAME libsamplerate-0.2.1-rev2-windows TARGETS libsamplerate PACKAGE_HASH dcf3c11a96f212a52e2c9241abde5c364ee90b0f32fe6eeb6dcdca01d491829f) -ly_associate_package(PACKAGE_NAME OpenMesh-8.1-rev1-windows TARGETS OpenMesh PACKAGE_HASH 1c1df639358526c368e790dfce40c45cbdfcfb1c9a041b9d7054a8949d88ee77) \ No newline at end of file +ly_associate_package(PACKAGE_NAME OpenMesh-8.1-rev1-windows TARGETS OpenMesh PACKAGE_HASH 1c1df639358526c368e790dfce40c45cbdfcfb1c9a041b9d7054a8949d88ee77) +ly_associate_package(PACKAGE_NAME civetweb-1.8-rev1-windows TARGETS civetweb PACKAGE_HASH 36d0e58a59bcdb4dd70493fb1b177aa0354c945b06c30416348fd326cf323dd4) \ No newline at end of file diff --git a/cmake/3rdParty/Platform/Windows/civetweb_windows.cmake b/cmake/3rdParty/Platform/Windows/civetweb_windows.cmake deleted file mode 100644 index f987f76135..0000000000 --- a/cmake/3rdParty/Platform/Windows/civetweb_windows.cmake +++ /dev/null @@ -1,13 +0,0 @@ -# -# All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or -# its licensors. -# -# For complete copyright and license terms please see the LICENSE at the root of this -# distribution (the "License"). All use of this software is governed by the License, -# or, if provided, by the license below or the license accompanying this file. Do not -# remove or modify any license notices. This file is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# - -set(CIVETWEB_LIBS ${BASE_PATH}/lib/Windows/$,debug,release>/civetweb.lib) - diff --git a/cmake/3rdParty/cmake_files.cmake b/cmake/3rdParty/cmake_files.cmake index 46b612df42..0d8e6d4bb1 100644 --- a/cmake/3rdParty/cmake_files.cmake +++ b/cmake/3rdParty/cmake_files.cmake @@ -12,7 +12,6 @@ set(FILES BuiltInPackages.cmake FindAWSGameLiftServerSDK.cmake - Findcivetweb.cmake FindClang.cmake FindDirectXShaderCompiler.cmake Finddyad.cmake diff --git a/scripts/build/package/Platform/3rdParty/package_filelists/3rdParty.json b/scripts/build/package/Platform/3rdParty/package_filelists/3rdParty.json index 26733303a6..cb974afd7e 100644 --- a/scripts/build/package/Platform/3rdParty/package_filelists/3rdParty.json +++ b/scripts/build/package/Platform/3rdParty/package_filelists/3rdParty.json @@ -3,7 +3,6 @@ "3rdParty.txt": "#include", "AWS/AWSNativeSDK/1.7.167-az.2/**": "#include", "AWS/GameLift/3.4.0/**": "#include", - "civetweb/civetweb-20160922-az.2/**": "#include", "CMake/3.19.1/**": "#include", "DirectXShaderCompiler/1.0.1-az.1/**": "#include", "DirectXShaderCompiler/2020.08.07/**": "#include", diff --git a/scripts/build/package/Platform/Windows/package_filelists/3rdParty.json b/scripts/build/package/Platform/Windows/package_filelists/3rdParty.json index c43e11cdf1..75add157b4 100644 --- a/scripts/build/package/Platform/Windows/package_filelists/3rdParty.json +++ b/scripts/build/package/Platform/Windows/package_filelists/3rdParty.json @@ -23,12 +23,6 @@ "bin/windows/**":"#include", "lib/linux/libstdcxx/**":"#include" }, - "civetweb/civetweb-20160922-az.2":{ - "src/**":"#include", - "include/**":"#include", - "lib/Windows/**":"#include", - "*":"#include" - }, "DirectXShaderCompiler/1.0.1-az.1":{ "*":"#include", "src/**":"#include", From 041f68c238ae74552f36095fb33e7db6f68b6e3e Mon Sep 17 00:00:00 2001 From: Benjamin Jillich <43751992+amzn-jillich@users.noreply.github.com> Date: Wed, 21 Apr 2021 07:54:37 +0200 Subject: [PATCH 67/68] [LYN-2859] EMotionFX: Getting active states from anim graph via script crashes the editor (#150) --- .../Components/AnimGraphComponent.cpp | 30 +++++++-- .../Components/AnimGraphComponent.h | 2 + .../Tests/AnimGraphNetworkingBusTests.cpp | 65 +++++++++++++++++++ .../Code/emotionfx_tests_files.cmake | 1 + 4 files changed, 92 insertions(+), 6 deletions(-) create mode 100644 Gems/EMotionFX/Code/Tests/AnimGraphNetworkingBusTests.cpp diff --git a/Gems/EMotionFX/Code/Source/Integration/Components/AnimGraphComponent.cpp b/Gems/EMotionFX/Code/Source/Integration/Components/AnimGraphComponent.cpp index 9dabade61f..7b444d3970 100644 --- a/Gems/EMotionFX/Code/Source/Integration/Components/AnimGraphComponent.cpp +++ b/Gems/EMotionFX/Code/Source/Integration/Components/AnimGraphComponent.cpp @@ -378,18 +378,36 @@ namespace EMotionFX } } + NodeIndexContainer AnimGraphComponent::s_emptyNodeIndexContainer = {}; const NodeIndexContainer& AnimGraphComponent::GetActiveStates() const { - const AZStd::shared_ptr snapshot = m_animGraphInstance->GetSnapshot(); - AZ_Error("EMotionFX", snapshot, "Call GetActiveStates function but no snapshot is created for this instance."); - return snapshot->GetActiveNodes(); + if (m_animGraphInstance) + { + const AZStd::shared_ptr snapshot = m_animGraphInstance->GetSnapshot(); + if (snapshot) + { + AZ_Warning("EMotionFX", false, "Call GetActiveStates function but no snapshot is created for this instance."); + return snapshot->GetActiveNodes(); + } + } + + return s_emptyNodeIndexContainer; } + MotionNodePlaytimeContainer AnimGraphComponent::s_emptyMotionNodePlaytimeContainer = {}; const MotionNodePlaytimeContainer& AnimGraphComponent::GetMotionPlaytimes() const { - const AZStd::shared_ptr snapshot = m_animGraphInstance->GetSnapshot(); - AZ_Error("EMotionFX", snapshot, "Call GetActiveStates function but no snapshot is created for this instance."); - return snapshot->GetMotionNodePlaytimes(); + if (m_animGraphInstance) + { + const AZStd::shared_ptr snapshot = m_animGraphInstance->GetSnapshot(); + if (snapshot) + { + AZ_Warning("EMotionFX", false, "Call GetActiveStates function but no snapshot is created for this instance."); + return snapshot->GetMotionNodePlaytimes(); + } + } + + return s_emptyMotionNodePlaytimeContainer; } void AnimGraphComponent::UpdateActorExternal(float deltatime) diff --git a/Gems/EMotionFX/Code/Source/Integration/Components/AnimGraphComponent.h b/Gems/EMotionFX/Code/Source/Integration/Components/AnimGraphComponent.h index 37e6a57199..db4a2c62b9 100644 --- a/Gems/EMotionFX/Code/Source/Integration/Components/AnimGraphComponent.h +++ b/Gems/EMotionFX/Code/Source/Integration/Components/AnimGraphComponent.h @@ -155,7 +155,9 @@ namespace EMotionFX bool HasSnapshot() const override; void CreateSnapshot(bool isAuthoritative) override; void SetActiveStates(const NodeIndexContainer& activeStates) override; + static NodeIndexContainer s_emptyNodeIndexContainer; const NodeIndexContainer& GetActiveStates() const override; + static MotionNodePlaytimeContainer s_emptyMotionNodePlaytimeContainer; void SetMotionPlaytimes(const MotionNodePlaytimeContainer& motionNodePlaytimes) override; const MotionNodePlaytimeContainer& GetMotionPlaytimes() const override; void UpdateActorExternal(float deltatime) override; diff --git a/Gems/EMotionFX/Code/Tests/AnimGraphNetworkingBusTests.cpp b/Gems/EMotionFX/Code/Tests/AnimGraphNetworkingBusTests.cpp new file mode 100644 index 0000000000..2c94a9689e --- /dev/null +++ b/Gems/EMotionFX/Code/Tests/AnimGraphNetworkingBusTests.cpp @@ -0,0 +1,65 @@ +/* +* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or +* its licensors. +* +* For complete copyright and license terms please see the LICENSE at the root of this +* distribution (the "License"). All use of this software is governed by the License, +* or, if provided, by the license below or the license accompanying this file. Do not +* remove or modify any license notices. This file is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* +*/ + +#include +#include +#include +#include +#include + +namespace EMotionFX +{ + class AnimGraphNetworkingBusTests + : public EntityComponentFixture + { + public: + void SetUp() override + { + EntityComponentFixture::SetUp(); + + m_entity = AZStd::make_unique(); + m_entityId = AZ::EntityId(740216387); + m_entity->SetId(m_entityId); + + m_entity->CreateComponent(); + m_entity->CreateComponent(); + auto animGraphComponent = m_entity->CreateComponent(); + + m_entity->Init(); + + m_entity->Activate(); + AnimGraphInstance* animGraphInstance = animGraphComponent->GetAnimGraphInstance(); + EXPECT_EQ(animGraphInstance, nullptr) << "Expecting an invalid anim graph instance as no asset has been set."; + } + + void TearDown() override + { + m_entity->Deactivate(); + EntityComponentFixture::TearDown(); + } + + AZ::EntityId m_entityId; + AZStd::unique_ptr m_entity; + }; + + TEST_F(AnimGraphNetworkingBusTests, AnimGraphNetworkingBus_GetActiveStates_Test) + { + NodeIndexContainer result; + EMotionFX::AnimGraphComponentNetworkRequestBus::EventResult(result, m_entityId, &EMotionFX::AnimGraphComponentNetworkRequestBus::Events::GetActiveStates); + } + + TEST_F(AnimGraphNetworkingBusTests, AnimGraphNetworkingBus_GetMotionPlaytimes_Test) + { + MotionNodePlaytimeContainer result; + EMotionFX::AnimGraphComponentNetworkRequestBus::EventResult(result, m_entityId, &EMotionFX::AnimGraphComponentNetworkRequestBus::Events::GetMotionPlaytimes); + } +} // end namespace EMotionFX diff --git a/Gems/EMotionFX/Code/emotionfx_tests_files.cmake b/Gems/EMotionFX/Code/emotionfx_tests_files.cmake index fff931d98d..7017975a98 100644 --- a/Gems/EMotionFX/Code/emotionfx_tests_files.cmake +++ b/Gems/EMotionFX/Code/emotionfx_tests_files.cmake @@ -22,6 +22,7 @@ set(FILES Tests/AnimGraphActionCommandTests.cpp Tests/AnimGraphActionTests.cpp Tests/AnimGraphComponentBusTests.cpp + Tests/AnimGraphNetworkingBusTests.cpp Tests/AnimGraphCopyPasteTests.cpp Tests/AnimGraphDeferredInitTests.cpp Tests/AnimGraphEventHandlerCounter.h From b95865b2d856f55f741eab9e8d310b7992e0e002 Mon Sep 17 00:00:00 2001 From: Tommy Walton <82672795+amzn-tommy@users.noreply.github.com> Date: Wed, 21 Apr 2021 00:37:51 -0700 Subject: [PATCH 68/68] Simple Motion component doesn't animate actors (#179) Buffers that have InputAssembly bind flags but also have ShaderRead flags should create buffer views --- Gems/Atom/RPI/Code/Source/RPI.Public/Buffer/Buffer.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Gems/Atom/RPI/Code/Source/RPI.Public/Buffer/Buffer.cpp b/Gems/Atom/RPI/Code/Source/RPI.Public/Buffer/Buffer.cpp index afcf4670f3..470b66c28e 100644 --- a/Gems/Atom/RPI/Code/Source/RPI.Public/Buffer/Buffer.cpp +++ b/Gems/Atom/RPI/Code/Source/RPI.Public/Buffer/Buffer.cpp @@ -205,7 +205,8 @@ namespace AZ void Buffer::InitBufferView() { // Skip buffer view creation for input assembly buffers - if(RHI::CheckBitsAny(m_rhiBuffer->GetDescriptor().m_bindFlags, RHI::BufferBindFlags::InputAssembly | RHI::BufferBindFlags::DynamicInputAssembly)) + if (m_rhiBuffer->GetDescriptor().m_bindFlags == RHI::BufferBindFlags::InputAssembly || + m_rhiBuffer->GetDescriptor().m_bindFlags == RHI::BufferBindFlags::DynamicInputAssembly) { return; }