Merge branch 'stabilization/2106' of https://github.com/aws-lumberyard/o3de into jckand/FoundationAutoStabilization
This commit is contained in:
@@ -19,6 +19,7 @@ set(FILES
|
|||||||
native/AssetManager/AssetRequestHandler.cpp
|
native/AssetManager/AssetRequestHandler.cpp
|
||||||
native/AssetManager/AssetRequestHandler.h
|
native/AssetManager/AssetRequestHandler.h
|
||||||
native/AssetManager/assetScanFolderInfo.h
|
native/AssetManager/assetScanFolderInfo.h
|
||||||
|
native/AssetManager/assetScanFolderInfo.cpp
|
||||||
native/AssetManager/assetScanner.cpp
|
native/AssetManager/assetScanner.cpp
|
||||||
native/AssetManager/assetScanner.h
|
native/AssetManager/assetScanner.h
|
||||||
native/AssetManager/assetScannerWorker.cpp
|
native/AssetManager/assetScannerWorker.cpp
|
||||||
|
|||||||
@@ -0,0 +1,42 @@
|
|||||||
|
/*
|
||||||
|
* 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 <native/AssetManager/assetScanFolderInfo.h>
|
||||||
|
#include <native/utilities/assetUtils.h>
|
||||||
|
|
||||||
|
namespace AssetProcessor
|
||||||
|
{
|
||||||
|
ScanFolderInfo::ScanFolderInfo(
|
||||||
|
QString path,
|
||||||
|
QString displayName,
|
||||||
|
QString portableKey,
|
||||||
|
bool isRoot,
|
||||||
|
bool recurseSubFolders,
|
||||||
|
AZStd::vector<AssetBuilderSDK::PlatformInfo> platforms,
|
||||||
|
int order,
|
||||||
|
AZ::s64 scanFolderID,
|
||||||
|
bool canSaveNewAssets)
|
||||||
|
: m_scanPath(path)
|
||||||
|
, m_displayName(displayName)
|
||||||
|
, m_portableKey (portableKey)
|
||||||
|
, m_isRoot(isRoot)
|
||||||
|
, m_recurseSubFolders(recurseSubFolders)
|
||||||
|
, m_order(order)
|
||||||
|
, m_scanFolderID(scanFolderID)
|
||||||
|
, m_platforms(platforms)
|
||||||
|
, m_canSaveNewAssets(canSaveNewAssets)
|
||||||
|
{
|
||||||
|
m_scanPath = AssetUtilities::NormalizeFilePath(m_scanPath);
|
||||||
|
// note that m_scanFolderID is 0 unless its filled in from the DB.
|
||||||
|
}
|
||||||
|
|
||||||
|
} // end namespace AssetProcessor
|
||||||
@@ -33,19 +33,7 @@ namespace AssetProcessor
|
|||||||
AZStd::vector<AssetBuilderSDK::PlatformInfo> platforms = AZStd::vector<AssetBuilderSDK::PlatformInfo>{},
|
AZStd::vector<AssetBuilderSDK::PlatformInfo> platforms = AZStd::vector<AssetBuilderSDK::PlatformInfo>{},
|
||||||
int order = 0,
|
int order = 0,
|
||||||
AZ::s64 scanFolderID = 0,
|
AZ::s64 scanFolderID = 0,
|
||||||
bool canSaveNewAssets = false)
|
bool canSaveNewAssets = false);
|
||||||
: m_scanPath(path)
|
|
||||||
, m_displayName(displayName)
|
|
||||||
, m_portableKey (portableKey)
|
|
||||||
, m_isRoot(isRoot)
|
|
||||||
, m_recurseSubFolders(recurseSubFolders)
|
|
||||||
, m_order(order)
|
|
||||||
, m_scanFolderID(scanFolderID)
|
|
||||||
, m_platforms(platforms)
|
|
||||||
, m_canSaveNewAssets(canSaveNewAssets)
|
|
||||||
{
|
|
||||||
// note that m_scanFolderID is 0 unless its filled in from the DB.
|
|
||||||
}
|
|
||||||
|
|
||||||
ScanFolderInfo() = default;
|
ScanFolderInfo() = default;
|
||||||
ScanFolderInfo(const ScanFolderInfo& other) = default;
|
ScanFolderInfo(const ScanFolderInfo& other) = default;
|
||||||
|
|||||||
@@ -177,9 +177,10 @@ namespace AZ
|
|||||||
|
|
||||||
AZ::Entity* rootEntity = reinterpret_cast<AZ::Entity*>(classPtr);
|
AZ::Entity* rootEntity = reinterpret_cast<AZ::Entity*>(classPtr);
|
||||||
bool convertResult = ConvertSliceToPrefab(context, outputPath, isDryRun, rootEntity);
|
bool convertResult = ConvertSliceToPrefab(context, outputPath, isDryRun, rootEntity);
|
||||||
// Clear out the references to any nested slices so that the nested assets get unloaded correctly at the end of
|
|
||||||
// the conversion.
|
// Delete the root entity pointer. Otherwise, it will leak itself along with all of the slice asset references held
|
||||||
ClearSliceAssetReferences(rootEntity);
|
// within it.
|
||||||
|
delete rootEntity;
|
||||||
return convertResult;
|
return convertResult;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -229,8 +230,12 @@ namespace AZ
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get all of the entities from the slice.
|
// Get all of the entities from the slice. We're taking ownership of them, so we also remove them from the slice component
|
||||||
|
// without deleting them.
|
||||||
|
constexpr bool deleteEntities = false;
|
||||||
|
constexpr bool removeEmptyInstances = true;
|
||||||
SliceComponent::EntityList sliceEntities = sliceComponent->GetNewEntities();
|
SliceComponent::EntityList sliceEntities = sliceComponent->GetNewEntities();
|
||||||
|
sliceComponent->RemoveAllEntities(deleteEntities, removeEmptyInstances);
|
||||||
AZ_Printf("Convert-Slice", " Slice contains %zu entities.\n", sliceEntities.size());
|
AZ_Printf("Convert-Slice", " Slice contains %zu entities.\n", sliceEntities.size());
|
||||||
|
|
||||||
// Create the Prefab with the entities from the slice.
|
// Create the Prefab with the entities from the slice.
|
||||||
@@ -273,6 +278,12 @@ namespace AZ
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Save off a mapping of the slice's metadata entity ID as well, even though we never converted the entity itself.
|
||||||
|
// This will help us better detect entity ID mapping errors for nested slice instances.
|
||||||
|
AZ::Entity* metadataEntity = sliceComponent->GetMetadataEntity();
|
||||||
|
constexpr bool isMetadataEntity = true;
|
||||||
|
m_aliasIdMapper.emplace(metadataEntity->GetId(), SliceEntityMappingInfo(templateId, "MetadataEntity", isMetadataEntity));
|
||||||
|
|
||||||
// Update the prefab template with the fixed-up data in our prefab instance.
|
// Update the prefab template with the fixed-up data in our prefab instance.
|
||||||
AzToolsFramework::Prefab::PrefabDom prefabDom;
|
AzToolsFramework::Prefab::PrefabDom prefabDom;
|
||||||
bool storeResult = AzToolsFramework::Prefab::PrefabDomUtils::StoreInstanceInPrefabDom(*sourceInstance, prefabDom);
|
bool storeResult = AzToolsFramework::Prefab::PrefabDomUtils::StoreInstanceInPrefabDom(*sourceInstance, prefabDom);
|
||||||
@@ -402,6 +413,21 @@ namespace AZ
|
|||||||
"Convert-Slice", " Attaching %zu instances of nested slice '%s'.\n", instances.size(),
|
"Convert-Slice", " Attaching %zu instances of nested slice '%s'.\n", instances.size(),
|
||||||
nestedPrefabPath.Native().c_str());
|
nestedPrefabPath.Native().c_str());
|
||||||
|
|
||||||
|
// Before processing any further, save off all the known entity IDs from all the instances and how they map back to
|
||||||
|
// the base nested prefab that they've come from (i.e. this one). As we proceed up the chain of nesting, this will
|
||||||
|
// build out a hierarchical list of owning instances for each entity that we can trace upwards to know where to add
|
||||||
|
// the entity into our nested prefab instance.
|
||||||
|
// This step needs to occur *before* converting the instances themselves, because while converting instances, they
|
||||||
|
// might have entity ID references that point to other instances. By having the full instance entity ID map in place
|
||||||
|
// before conversion, we'll be able to fix them up appropriately.
|
||||||
|
|
||||||
|
for (auto& instance : instances)
|
||||||
|
{
|
||||||
|
AZStd::string instanceAlias = GetInstanceAlias(instance);
|
||||||
|
UpdateSliceEntityInstanceMappings(instance.GetEntityIdToBaseMap(), instanceAlias);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Now that we have all the entity ID mappings, convert all the instances.
|
||||||
for (auto& instance : instances)
|
for (auto& instance : instances)
|
||||||
{
|
{
|
||||||
bool instanceConvertResult = ConvertSliceInstance(instance, sliceAsset, nestedTemplate, sourceInstance);
|
bool instanceConvertResult = ConvertSliceInstance(instance, sliceAsset, nestedTemplate, sourceInstance);
|
||||||
@@ -415,6 +441,28 @@ namespace AZ
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
AZStd::string SliceConverter::GetInstanceAlias(const AZ::SliceComponent::SliceInstance& instance)
|
||||||
|
{
|
||||||
|
// When creating the new instance, we would like to have deterministic instance aliases. Prefabs that depend on this one
|
||||||
|
// will have patches that reference the alias, so if we reconvert this slice a second time, we would like it to produce
|
||||||
|
// the same results. To get a deterministic and unique alias, we rely on the slice instance. The slice instance contains
|
||||||
|
// a map of slice entity IDs to unique instance entity IDs. We'll just consistently use the first entry in the map as the
|
||||||
|
// unique instance ID.
|
||||||
|
AZStd::string instanceAlias;
|
||||||
|
auto entityIdMap = instance.GetEntityIdMap();
|
||||||
|
if (!entityIdMap.empty())
|
||||||
|
{
|
||||||
|
instanceAlias = AZStd::string::format("Instance_%s", entityIdMap.begin()->second.ToString().c_str());
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
AZ_Error("Convert-Slice", false, " Couldn't create deterministic instance alias.");
|
||||||
|
instanceAlias = AZStd::string::format("Instance_%s", AZ::Entity::MakeId().ToString().c_str());
|
||||||
|
}
|
||||||
|
return instanceAlias;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
bool SliceConverter::ConvertSliceInstance(
|
bool SliceConverter::ConvertSliceInstance(
|
||||||
AZ::SliceComponent::SliceInstance& instance,
|
AZ::SliceComponent::SliceInstance& instance,
|
||||||
AZ::Data::Asset<AZ::SliceAsset>& sliceAsset,
|
AZ::Data::Asset<AZ::SliceAsset>& sliceAsset,
|
||||||
@@ -438,27 +486,7 @@ namespace AZ
|
|||||||
auto instanceToTemplateInterface = AZ::Interface<AzToolsFramework::Prefab::InstanceToTemplateInterface>::Get();
|
auto instanceToTemplateInterface = AZ::Interface<AzToolsFramework::Prefab::InstanceToTemplateInterface>::Get();
|
||||||
auto prefabSystemComponentInterface = AZ::Interface<AzToolsFramework::Prefab::PrefabSystemComponentInterface>::Get();
|
auto prefabSystemComponentInterface = AZ::Interface<AzToolsFramework::Prefab::PrefabSystemComponentInterface>::Get();
|
||||||
|
|
||||||
// When creating the new instance, we would like to have deterministic instance aliases. Prefabs that depend on this one
|
AZStd::string instanceAlias = GetInstanceAlias(instance);
|
||||||
// will have patches that reference the alias, so if we reconvert this slice a second time, we would like it to produce
|
|
||||||
// the same results. To get a deterministic and unique alias, we rely on the slice instance. The slice instance contains
|
|
||||||
// a map of slice entity IDs to unique instance entity IDs. We'll just consistently use the first entry in the map as the
|
|
||||||
// unique instance ID.
|
|
||||||
AZStd::string instanceAlias;
|
|
||||||
auto entityIdMap = instance.GetEntityIdMap();
|
|
||||||
if (!entityIdMap.empty())
|
|
||||||
{
|
|
||||||
instanceAlias = AZStd::string::format("Instance_%s", entityIdMap.begin()->second.ToString().c_str());
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
instanceAlias = AZStd::string::format("Instance_%s", AZ::Entity::MakeId().ToString().c_str());
|
|
||||||
}
|
|
||||||
|
|
||||||
// Before processing any further, save off all the known entity IDs from this instance and how they map back to the base
|
|
||||||
// nested prefab that they've come from (i.e. this one). As we proceed up the chain of nesting, this will build out a
|
|
||||||
// hierarchical list of owning instances for each entity that we can trace upwards to know where to add the entity into
|
|
||||||
// our nested prefab instance.
|
|
||||||
UpdateSliceEntityInstanceMappings(instance.GetEntityIdToBaseMap(), instanceAlias);
|
|
||||||
|
|
||||||
// Create a new unmodified prefab Instance for the nested slice instance.
|
// Create a new unmodified prefab Instance for the nested slice instance.
|
||||||
auto nestedInstance = AZStd::make_unique<AzToolsFramework::Prefab::Instance>();
|
auto nestedInstance = AZStd::make_unique<AzToolsFramework::Prefab::Instance>();
|
||||||
@@ -619,6 +647,10 @@ namespace AZ
|
|||||||
SetParentEntity(containerEntity->get(), topLevelInstance->GetContainerEntityId(), onlySetIfInvalid);
|
SetParentEntity(containerEntity->get(), topLevelInstance->GetContainerEntityId(), onlySetIfInvalid);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// After doing all of the above, run through entity references in any of the patched entities, and fix up the entity IDs to
|
||||||
|
// match the new ones in our prefabs.
|
||||||
|
RemapIdReferences(m_aliasIdMapper, topLevelInstance, nestedInstance.get(), instantiated, dependentSlice->GetSerializeContext());
|
||||||
|
|
||||||
// Add the nested instance itself to the top-level prefab. To do this, we need to add it to our top-level instance,
|
// Add the nested instance itself to the top-level prefab. To do this, we need to add it to our top-level instance,
|
||||||
// create a patch out of it, and patch the top-level prefab template.
|
// create a patch out of it, and patch the top-level prefab template.
|
||||||
|
|
||||||
@@ -750,17 +782,6 @@ namespace AZ
|
|||||||
AZ_Error("Convert-Slice", disconnected, "Asset Processor failed to disconnect successfully.");
|
AZ_Error("Convert-Slice", disconnected, "Asset Processor failed to disconnect successfully.");
|
||||||
}
|
}
|
||||||
|
|
||||||
void SliceConverter::ClearSliceAssetReferences(AZ::Entity* rootEntity)
|
|
||||||
{
|
|
||||||
SliceComponent* sliceComponent = AZ::EntityUtils::FindFirstDerivedComponent<SliceComponent>(rootEntity);
|
|
||||||
// Make a copy of the slice list and remove all of them from the loaded component.
|
|
||||||
AZ::SliceComponent::SliceList slices = sliceComponent->GetSlices();
|
|
||||||
for (auto& slice : slices)
|
|
||||||
{
|
|
||||||
sliceComponent->RemoveSlice(&slice);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void SliceConverter::UpdateSliceEntityInstanceMappings(
|
void SliceConverter::UpdateSliceEntityInstanceMappings(
|
||||||
const AZ::SliceComponent::EntityIdToEntityIdMap& sliceEntityIdMap, const AZStd::string& currentInstanceAlias)
|
const AZ::SliceComponent::EntityIdToEntityIdMap& sliceEntityIdMap, const AZStd::string& currentInstanceAlias)
|
||||||
{
|
{
|
||||||
@@ -789,9 +810,108 @@ namespace AZ
|
|||||||
AZ_Assert(oldId == newId, "The same entity instance ID has unexpectedly appeared twice in the same nested prefab.");
|
AZ_Assert(oldId == newId, "The same entity instance ID has unexpectedly appeared twice in the same nested prefab.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
AZ_Warning("Convert-Slice", false, " Couldn't find an entity ID conversion for %s.", oldId.ToString().c_str());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SliceConverter::RemapIdReferences(
|
||||||
|
const AZStd::unordered_map<AZ::EntityId, SliceEntityMappingInfo>& idMapper,
|
||||||
|
AzToolsFramework::Prefab::Instance* topLevelInstance,
|
||||||
|
AzToolsFramework::Prefab::Instance* nestedInstance,
|
||||||
|
SliceComponent::InstantiatedContainer* instantiatedEntities,
|
||||||
|
SerializeContext* context)
|
||||||
|
{
|
||||||
|
// Given a set of instantiated entities, run through all of them, look for entity references, and replace the entity IDs with
|
||||||
|
// new ones that match up with our prefabs.
|
||||||
|
|
||||||
|
IdUtils::Remapper<EntityId>::ReplaceIdsAndIdRefs(
|
||||||
|
instantiatedEntities,
|
||||||
|
[idMapper, &topLevelInstance, &nestedInstance](
|
||||||
|
const EntityId& sourceId, bool isEntityId, [[maybe_unused]] const AZStd::function<EntityId()>& idGenerator) -> EntityId
|
||||||
|
{
|
||||||
|
EntityId newId = sourceId;
|
||||||
|
|
||||||
|
// Only convert valid entity references. Actual entity IDs have already been taken care of elsewhere, so ignore them.
|
||||||
|
if (!isEntityId && sourceId.IsValid())
|
||||||
|
{
|
||||||
|
auto entityEntry = idMapper.find(sourceId);
|
||||||
|
|
||||||
|
// Since we've already remapped transform hierarchies to include container entities, it's possible that our entity
|
||||||
|
// reference is pointing to a container, which means it won't be in our slice mapping table. In that case, just
|
||||||
|
// return it as-is.
|
||||||
|
if (entityEntry == idMapper.end())
|
||||||
|
{
|
||||||
|
return sourceId;
|
||||||
|
}
|
||||||
|
|
||||||
|
// We've got a slice->prefab mapping entry, so now we need to use it.
|
||||||
|
auto& mappingStruct = entityEntry->second;
|
||||||
|
|
||||||
|
if (mappingStruct.m_nestedInstanceAliases.empty())
|
||||||
|
{
|
||||||
|
// If we don't have a chain of nested instance aliases, then this entity reference is either within the
|
||||||
|
// current nested instance or it's pointing to an entity in the top-level instance. We'll try them both
|
||||||
|
// to look for a match.
|
||||||
|
|
||||||
|
EntityId prefabId = nestedInstance->GetEntityId(mappingStruct.m_entityAlias);
|
||||||
|
if (!prefabId.IsValid())
|
||||||
|
{
|
||||||
|
prefabId = topLevelInstance->GetEntityId(mappingStruct.m_entityAlias);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (prefabId.IsValid())
|
||||||
|
{
|
||||||
|
newId = prefabId;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
AZ_Error("Convert-Slice", false, " Couldn't find source ID %s", sourceId.ToString().c_str());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// We *do* have a chain of nested instance aliases. This chain could either be relative to the nested instance
|
||||||
|
// or the top-level instance. We can tell which one it is by which one can find the first nested instance
|
||||||
|
// alias.
|
||||||
|
|
||||||
|
AzToolsFramework::Prefab::Instance* entityInstance = nestedInstance;
|
||||||
|
auto it = mappingStruct.m_nestedInstanceAliases.rbegin();
|
||||||
|
if (!entityInstance->FindNestedInstance(*it).has_value())
|
||||||
|
{
|
||||||
|
entityInstance = topLevelInstance;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Now that we've got a starting point, iterate through the chain of nested instance aliases to find the
|
||||||
|
// correct instance to get the entity ID for. We have to go from slice IDs -> entity aliases -> entity IDs
|
||||||
|
// because prefab instance creation can change some of our entity IDs along the way.
|
||||||
|
for (; it != mappingStruct.m_nestedInstanceAliases.rend(); it++)
|
||||||
|
{
|
||||||
|
auto foundInstance = entityInstance->FindNestedInstance(*it);
|
||||||
|
if (foundInstance.has_value())
|
||||||
|
{
|
||||||
|
entityInstance = &(foundInstance->get());
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
AZ_Assert(false, "Couldn't find nested instance %s", it->c_str());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
EntityId prefabId = entityInstance->GetEntityId(mappingStruct.m_entityAlias);
|
||||||
|
if (prefabId.IsValid())
|
||||||
|
{
|
||||||
|
newId = prefabId;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return newId;
|
||||||
|
},
|
||||||
|
context);
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace SerializeContextTools
|
} // namespace SerializeContextTools
|
||||||
} // namespace AZ
|
} // namespace AZ
|
||||||
|
|||||||
@@ -42,6 +42,28 @@ namespace AZ
|
|||||||
bool ConvertSliceFiles(Application& application);
|
bool ConvertSliceFiles(Application& application);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
// When converting slice entities, especially for nested slices, we need to keep track of the original
|
||||||
|
// entity ID, the entity alias it uses in the prefab, and which template and nested instance path it maps to.
|
||||||
|
// As we encounter each instanced entity ID, we can look it up in this structure and use this to determine how to properly
|
||||||
|
// add it to the correct place in the hierarchy.
|
||||||
|
struct SliceEntityMappingInfo
|
||||||
|
{
|
||||||
|
SliceEntityMappingInfo(
|
||||||
|
AzToolsFramework::Prefab::TemplateId templateId,
|
||||||
|
AzToolsFramework::Prefab::EntityAlias entityAlias,
|
||||||
|
bool isMetadataEntity = false)
|
||||||
|
: m_templateId(templateId)
|
||||||
|
, m_entityAlias(entityAlias)
|
||||||
|
, m_isMetadataEntity(isMetadataEntity)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
AzToolsFramework::Prefab::TemplateId m_templateId;
|
||||||
|
AzToolsFramework::Prefab::EntityAlias m_entityAlias;
|
||||||
|
AZStd::vector<AzToolsFramework::Prefab::InstanceAlias> m_nestedInstanceAliases;
|
||||||
|
bool m_isMetadataEntity{ false };
|
||||||
|
};
|
||||||
|
|
||||||
bool ConnectToAssetProcessor();
|
bool ConnectToAssetProcessor();
|
||||||
void DisconnectFromAssetProcessor();
|
void DisconnectFromAssetProcessor();
|
||||||
|
|
||||||
@@ -58,27 +80,17 @@ namespace AZ
|
|||||||
void SetParentEntity(const AZ::Entity& entity, const AZ::EntityId& parentId, bool onlySetIfInvalid);
|
void SetParentEntity(const AZ::Entity& entity, const AZ::EntityId& parentId, bool onlySetIfInvalid);
|
||||||
void PrintPrefab(AzToolsFramework::Prefab::TemplateId templateId);
|
void PrintPrefab(AzToolsFramework::Prefab::TemplateId templateId);
|
||||||
bool SavePrefab(AZ::IO::PathView outputPath, AzToolsFramework::Prefab::TemplateId templateId);
|
bool SavePrefab(AZ::IO::PathView outputPath, AzToolsFramework::Prefab::TemplateId templateId);
|
||||||
void ClearSliceAssetReferences(AZ::Entity* rootEntity);
|
|
||||||
void UpdateSliceEntityInstanceMappings(
|
void UpdateSliceEntityInstanceMappings(
|
||||||
const AZ::SliceComponent::EntityIdToEntityIdMap& sliceEntityIdMap,
|
const AZ::SliceComponent::EntityIdToEntityIdMap& sliceEntityIdMap,
|
||||||
const AZStd::string& currentInstanceAlias);
|
const AZStd::string& currentInstanceAlias);
|
||||||
|
AZStd::string GetInstanceAlias(const AZ::SliceComponent::SliceInstance& instance);
|
||||||
|
|
||||||
// When converting slice entities, especially for nested slices, we need to keep track of the original
|
void RemapIdReferences(
|
||||||
// entity ID, the entity alias it uses in the prefab, and which template and nested instance path it maps to.
|
const AZStd::unordered_map<AZ::EntityId, SliceEntityMappingInfo>& idMapper,
|
||||||
// As we encounter each instanced entity ID, we can look it up in this structure and use this to determine how to properly
|
AzToolsFramework::Prefab::Instance* topLevelInstance,
|
||||||
// add it to the correct place in the hierarchy.
|
AzToolsFramework::Prefab::Instance* nestedInstance,
|
||||||
struct SliceEntityMappingInfo
|
SliceComponent::InstantiatedContainer* instantiatedEntities,
|
||||||
{
|
SerializeContext* context);
|
||||||
SliceEntityMappingInfo(AzToolsFramework::Prefab::TemplateId templateId, AzToolsFramework::Prefab::EntityAlias entityAlias)
|
|
||||||
: m_templateId(templateId)
|
|
||||||
, m_entityAlias(entityAlias)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
AzToolsFramework::Prefab::TemplateId m_templateId;
|
|
||||||
AzToolsFramework::Prefab::EntityAlias m_entityAlias;
|
|
||||||
AZStd::vector<AzToolsFramework::Prefab::InstanceAlias> m_nestedInstanceAliases;
|
|
||||||
};
|
|
||||||
|
|
||||||
// Track all of the entity IDs created and associate them with enough conversion information to know how to place the
|
// Track all of the entity IDs created and associate them with enough conversion information to know how to place the
|
||||||
// entities in the correct place in the prefab hierarchy and fix up parent entity ID mappings to work with the nested
|
// entities in the correct place in the prefab hierarchy and fix up parent entity ID mappings to work with the nested
|
||||||
|
|||||||
@@ -8,7 +8,7 @@
|
|||||||
"$type": "DX12::PlatformLimitsDescriptor",
|
"$type": "DX12::PlatformLimitsDescriptor",
|
||||||
|
|
||||||
"m_descriptorHeapLimits": {
|
"m_descriptorHeapLimits": {
|
||||||
"DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV": [16384, 262144],
|
"DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV": [1000000, 1000000],
|
||||||
"DESCRIPTOR_HEAP_TYPE_SAMPLER": [2048, 2048],
|
"DESCRIPTOR_HEAP_TYPE_SAMPLER": [2048, 2048],
|
||||||
"DESCRIPTOR_HEAP_TYPE_RTV": [2048, 0],
|
"DESCRIPTOR_HEAP_TYPE_RTV": [2048, 0],
|
||||||
"DESCRIPTOR_HEAP_TYPE_DSV": [2048, 0]
|
"DESCRIPTOR_HEAP_TYPE_DSV": [2048, 0]
|
||||||
|
|||||||
+3
-1
@@ -23,7 +23,9 @@ namespace AZ
|
|||||||
{
|
{
|
||||||
Low,
|
Low,
|
||||||
Medium,
|
Medium,
|
||||||
High
|
High,
|
||||||
|
|
||||||
|
Count
|
||||||
};
|
};
|
||||||
|
|
||||||
//! This class provides general features and configuration for the diffuse global illumination environment,
|
//! This class provides general features and configuration for the diffuse global illumination environment,
|
||||||
|
|||||||
+14
-1
@@ -20,6 +20,8 @@
|
|||||||
#include <Atom/RPI.Public/AuxGeom/AuxGeomDraw.h>
|
#include <Atom/RPI.Public/AuxGeom/AuxGeomDraw.h>
|
||||||
#include <Atom/RPI.Public/ColorManagement/TransformColor.h>
|
#include <Atom/RPI.Public/ColorManagement/TransformColor.h>
|
||||||
#include <Atom/RPI.Public/Pass/PassSystemInterface.h>
|
#include <Atom/RPI.Public/Pass/PassSystemInterface.h>
|
||||||
|
#include <Atom/RPI.Public/Pass/PassFilter.h>
|
||||||
|
#include <Atom/RPI.Public/Pass/Specific/EnvironmentCubeMapPass.h>
|
||||||
#include <Atom/RPI.Public/RenderPipeline.h>
|
#include <Atom/RPI.Public/RenderPipeline.h>
|
||||||
#include <Atom/RPI.Public/Scene.h>
|
#include <Atom/RPI.Public/Scene.h>
|
||||||
#include <Atom/RPI.Public/View.h>
|
#include <Atom/RPI.Public/View.h>
|
||||||
@@ -1070,7 +1072,18 @@ namespace AZ
|
|||||||
segment.m_pipelineViewTag = viewTag;
|
segment.m_pipelineViewTag = viewTag;
|
||||||
if (!segment.m_view || segment.m_view->GetName() != viewName)
|
if (!segment.m_view || segment.m_view->GetName() != viewName)
|
||||||
{
|
{
|
||||||
segment.m_view = RPI::View::CreateView(viewName, RPI::View::UsageShadow);
|
RPI::View::UsageFlags usageFlags = RPI::View::UsageShadow;
|
||||||
|
|
||||||
|
// if the shadow is rendering in an EnvironmentCubeMapPass it also needs to be a ReflectiveCubeMap view,
|
||||||
|
// to filter out shadows from objects that are excluded from the cubemap
|
||||||
|
RPI::PassClassFilter<RPI::EnvironmentCubeMapPass> passFilter;
|
||||||
|
AZStd::vector<AZ::RPI::Pass*> cubeMapPasses = AZ::RPI::PassSystemInterface::Get()->FindPasses(passFilter);
|
||||||
|
if (!cubeMapPasses.empty())
|
||||||
|
{
|
||||||
|
usageFlags |= RPI::View::UsageReflectiveCubeMap;
|
||||||
|
}
|
||||||
|
|
||||||
|
segment.m_view = RPI::View::CreateView(viewName, usageFlags);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+6
@@ -43,6 +43,12 @@ namespace AZ
|
|||||||
|
|
||||||
void DiffuseGlobalIlluminationFeatureProcessor::SetQualityLevel(DiffuseGlobalIlluminationQualityLevel qualityLevel)
|
void DiffuseGlobalIlluminationFeatureProcessor::SetQualityLevel(DiffuseGlobalIlluminationQualityLevel qualityLevel)
|
||||||
{
|
{
|
||||||
|
if (qualityLevel >= DiffuseGlobalIlluminationQualityLevel::Count)
|
||||||
|
{
|
||||||
|
AZ_Assert(false, "SetQualityLevel called with invalid quality level [%d]", qualityLevel);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
m_qualityLevel = qualityLevel;
|
m_qualityLevel = qualityLevel;
|
||||||
|
|
||||||
UpdatePasses();
|
UpdatePasses();
|
||||||
|
|||||||
@@ -12691,8 +12691,7 @@ static int glad_vk_find_extensions_vulkan( VkPhysicalDevice physical_device) {
|
|||||||
#endif
|
#endif
|
||||||
GLAD_VK_KHR_push_descriptor = glad_vk_has_extension("VK_KHR_push_descriptor", extension_count, extensions);
|
GLAD_VK_KHR_push_descriptor = glad_vk_has_extension("VK_KHR_push_descriptor", extension_count, extensions);
|
||||||
GLAD_VK_KHR_ray_tracing = (glad_vk_has_extension("VK_KHR_acceleration_structure", extension_count, extensions)
|
GLAD_VK_KHR_ray_tracing = (glad_vk_has_extension("VK_KHR_acceleration_structure", extension_count, extensions)
|
||||||
&& glad_vk_has_extension("VK_KHR_ray_tracing_pipeline", extension_count, extensions)
|
&& glad_vk_has_extension("VK_KHR_ray_tracing_pipeline", extension_count, extensions));
|
||||||
&& glad_vk_has_extension("VK_KHR_ray_query", extension_count, extensions));
|
|
||||||
GLAD_VK_KHR_relaxed_block_layout = glad_vk_has_extension("VK_KHR_relaxed_block_layout", extension_count, extensions);
|
GLAD_VK_KHR_relaxed_block_layout = glad_vk_has_extension("VK_KHR_relaxed_block_layout", extension_count, extensions);
|
||||||
GLAD_VK_KHR_sampler_mirror_clamp_to_edge = glad_vk_has_extension("VK_KHR_sampler_mirror_clamp_to_edge", extension_count, extensions);
|
GLAD_VK_KHR_sampler_mirror_clamp_to_edge = glad_vk_has_extension("VK_KHR_sampler_mirror_clamp_to_edge", extension_count, extensions);
|
||||||
GLAD_VK_KHR_sampler_ycbcr_conversion = glad_vk_has_extension("VK_KHR_sampler_ycbcr_conversion", extension_count, extensions);
|
GLAD_VK_KHR_sampler_ycbcr_conversion = glad_vk_has_extension("VK_KHR_sampler_ycbcr_conversion", extension_count, extensions);
|
||||||
|
|||||||
+1
-1
@@ -29,7 +29,7 @@ namespace AZ
|
|||||||
|
|
||||||
static void Reflect(ReflectContext* context);
|
static void Reflect(ReflectContext* context);
|
||||||
|
|
||||||
DiffuseGlobalIlluminationQualityLevel m_qualityLevel;
|
DiffuseGlobalIlluminationQualityLevel m_qualityLevel = DiffuseGlobalIlluminationQualityLevel::Low;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -36,7 +36,7 @@ namespace AZ
|
|||||||
->Attribute(Edit::Attributes::Category, "Atom")
|
->Attribute(Edit::Attributes::Category, "Atom")
|
||||||
->Attribute(AZ::Edit::Attributes::Icon, "Icons/Components/Component_Placeholder.svg")
|
->Attribute(AZ::Edit::Attributes::Icon, "Icons/Components/Component_Placeholder.svg")
|
||||||
->Attribute(AZ::Edit::Attributes::ViewportIcon, "Icons/Components/Viewport/Component_Placeholder.png")
|
->Attribute(AZ::Edit::Attributes::ViewportIcon, "Icons/Components/Viewport/Component_Placeholder.png")
|
||||||
->Attribute(Edit::Attributes::AppearsInAddComponentMenu, AZStd::vector<AZ::Crc32>({ AZ_CRC("Level", 0x9aeacc13), AZ_CRC("Game", 0x232b318c) }))
|
->Attribute(Edit::Attributes::AppearsInAddComponentMenu, AZStd::vector<AZ::Crc32>({ AZ_CRC("Level", 0x9aeacc13) }))
|
||||||
->Attribute(Edit::Attributes::AutoExpand, true)
|
->Attribute(Edit::Attributes::AutoExpand, true)
|
||||||
->Attribute(Edit::Attributes::HelpPageURL, "https://")
|
->Attribute(Edit::Attributes::HelpPageURL, "https://")
|
||||||
;
|
;
|
||||||
|
|||||||
@@ -22,6 +22,8 @@
|
|||||||
<bal:WixStandardBootstrapperApplication
|
<bal:WixStandardBootstrapperApplication
|
||||||
LicenseUrl="$(var.CPACK_LICENSE_URL)"
|
LicenseUrl="$(var.CPACK_LICENSE_URL)"
|
||||||
LogoFile="$(var.CPACK_WIX_PRODUCT_LOGO)"
|
LogoFile="$(var.CPACK_WIX_PRODUCT_LOGO)"
|
||||||
|
ThemeFile="$(var.CPACK_BOOTSTRAP_THEME_FILE).xml"
|
||||||
|
LocalizationFile="$(var.CPACK_BOOTSTRAP_THEME_FILE).wxl"
|
||||||
ShowVersion="yes" />
|
ShowVersion="yes" />
|
||||||
</BootstrapperApplicationRef>
|
</BootstrapperApplicationRef>
|
||||||
<?else?>
|
<?else?>
|
||||||
@@ -29,6 +31,8 @@
|
|||||||
<bal:WixStandardBootstrapperApplication
|
<bal:WixStandardBootstrapperApplication
|
||||||
LicenseFile="$(var.CPACK_WIX_LICENSE_RTF)"
|
LicenseFile="$(var.CPACK_WIX_LICENSE_RTF)"
|
||||||
LogoFile="$(var.CPACK_WIX_PRODUCT_LOGO)"
|
LogoFile="$(var.CPACK_WIX_PRODUCT_LOGO)"
|
||||||
|
ThemeFile="$(var.CPACK_BOOTSTRAP_THEME_FILE).xml"
|
||||||
|
LocalizationFile="$(var.CPACK_BOOTSTRAP_THEME_FILE).wxl"
|
||||||
ShowVersion="yes" />
|
ShowVersion="yes" />
|
||||||
</BootstrapperApplicationRef>
|
</BootstrapperApplicationRef>
|
||||||
<?endif?>
|
<?endif?>
|
||||||
|
|||||||
@@ -0,0 +1,70 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<WixLocalization Culture="en-us"
|
||||||
|
Language="1033"
|
||||||
|
xmlns="http://schemas.microsoft.com/wix/2006/localization">
|
||||||
|
|
||||||
|
<!-- common -->
|
||||||
|
<String Id="WindowTitle">[WixBundleName] Setup</String>
|
||||||
|
<String Id="Title">[WixBundleName]</String>
|
||||||
|
<String Id="InstallVersion">Version [WixBundleVersion]</String>
|
||||||
|
<String Id="ConfirmCancelMessage">Are you sure you want to cancel?</String>
|
||||||
|
|
||||||
|
<!-- welcome page -->
|
||||||
|
<String Id="InstallHeader">Welcome</String>
|
||||||
|
<String Id="InstallMessage">
|
||||||
|
Setup will install [WixBundleName] on your computer. Click install to continue, options to set the install directory or Close to exit.
|
||||||
|
</String>
|
||||||
|
<String Id="InstallLicenseLinkText">[WixBundleName] <a href="#">license terms</a>.</String>
|
||||||
|
<String Id="InstallAcceptCheckbox">I &agree to the license terms and conditions</String>
|
||||||
|
<String Id="InstallOptionsButton">&Options</String>
|
||||||
|
<String Id="InstallInstallButton">&Install</String>
|
||||||
|
<String Id="InstallCloseButton">&Close</String>
|
||||||
|
|
||||||
|
<!-- configure install page -->
|
||||||
|
<String Id="OptionsHeader">Setup Options</String>
|
||||||
|
<String Id="OptionsLocationLabel">Install location:</String>
|
||||||
|
<String Id="OptionsBrowseButton">&Browse</String>
|
||||||
|
<String Id="OptionsOkButton">&OK</String>
|
||||||
|
<String Id="OptionsCancelButton">&Cancel</String>
|
||||||
|
|
||||||
|
<!-- edit existing install page -->
|
||||||
|
<String Id="ModifyHeader">Modify Setup</String>
|
||||||
|
<String Id="ModifyRepairButton">&Repair</String>
|
||||||
|
<String Id="ModifyUninstallButton">&Uninstall</String>
|
||||||
|
<String Id="ModifyCloseButton">&Close</String>
|
||||||
|
|
||||||
|
<!-- action progress page -->
|
||||||
|
<String Id="ProgressHeader">Setup Progress</String>
|
||||||
|
<String Id="ProgressLabel">Processing:</String>
|
||||||
|
<String Id="OverallProgressPackageText">Initializing...</String>
|
||||||
|
<String Id="ProgressCancelButton">&Cancel</String>
|
||||||
|
|
||||||
|
<!-- final page (success state) -->
|
||||||
|
<String Id="SuccessHeader">Setup Successful</String>
|
||||||
|
<String Id="SuccessInstallHeader">Installation Successfully Completed</String>
|
||||||
|
<String Id="SuccessRepairHeader">Repair Successfully Completed</String>
|
||||||
|
<String Id="SuccessUninstallHeader">Uninstall Successfully Completed</String>
|
||||||
|
<String Id="SuccessLaunchButton">&Launch</String>
|
||||||
|
<String Id="SuccessCloseButton">&Close</String>
|
||||||
|
|
||||||
|
<!-- final page (fail state) -->
|
||||||
|
<String Id="FailureHeader">Setup Failed</String>
|
||||||
|
<String Id="FailureInstallHeader">Setup Failed</String>
|
||||||
|
<String Id="FailureUninstallHeader">Uninstall Failed</String>
|
||||||
|
<String Id="FailureRepairHeader">Repair Failed</String>
|
||||||
|
<String Id="FailureHyperlinkLogText">
|
||||||
|
One or more issues caused the setup to fail. Please fix the issues and then retry setup. For more information see the <a href="#">log file</a>.
|
||||||
|
</String>
|
||||||
|
<String Id="FailureCloseButton">&Close</String>
|
||||||
|
|
||||||
|
<!-- help page -->
|
||||||
|
<String Id="HelpHeader">Setup Help</String>
|
||||||
|
<String Id="HelpText">
|
||||||
|
/install | /repair | /uninstall | /layout [directory] - installs, repairs, uninstalls or creates a complete local copy of the bundle in directory. Install is the default.
|
||||||
|
|
||||||
|
/passive | /quiet - displays minimal UI with no prompts or displays no UI and no prompts. By default UI and all prompts are displayed.
|
||||||
|
|
||||||
|
/log log.txt - logs to a specific file. By default a log file is created in %TEMP%.
|
||||||
|
</String>
|
||||||
|
<String Id="HelpCloseButton">&Close</String>
|
||||||
|
</WixLocalization>
|
||||||
@@ -0,0 +1,87 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Theme xmlns="http://wixtoolset.org/schemas/thmutil/2010">
|
||||||
|
|
||||||
|
<Window Width="485" Height="300" HexStyle="100a0000" FontId="0">#(loc.WindowTitle)</Window>
|
||||||
|
|
||||||
|
<Font Id="0" Height="-12" Weight="500" Foreground="000000" Background="FFFFFF">Segoe UI</Font>
|
||||||
|
<Font Id="1" Height="-24" Weight="500" Foreground="000000">Segoe UI</Font>
|
||||||
|
<Font Id="2" Height="-22" Weight="500" Foreground="666666">Segoe UI</Font>
|
||||||
|
<Font Id="3" Height="-12" Weight="500" Foreground="000000" Background="FFFFFF">Segoe UI</Font>
|
||||||
|
|
||||||
|
<!-- top banner -->
|
||||||
|
<Image X="11" Y="11" Width="64" Height="64" ImageFile="logo.png" Visible="yes"/>
|
||||||
|
<Text X="80" Y="11" Width="-11" Height="64" FontId="1" Visible="yes" DisablePrefix="yes">#(loc.Title)</Text>
|
||||||
|
|
||||||
|
<!-- welcome page -->
|
||||||
|
<Page Name="Install">
|
||||||
|
@WIX_THEME_INSTALL_LICENSE_ELEMENT@
|
||||||
|
|
||||||
|
<Checkbox Name="EulaAcceptCheckbox" X="-11" Y="-41" Width="260" Height="17" TabStop="yes" FontId="3" HideWhenDisabled="yes">#(loc.InstallAcceptCheckbox)</Checkbox>
|
||||||
|
<Button Name="OptionsButton" X="-171" Y="-11" Width="75" Height="23" TabStop="yes" FontId="0" HideWhenDisabled="yes">#(loc.InstallOptionsButton)</Button>
|
||||||
|
<Button Name="InstallButton" X="-91" Y="-11" Width="75" Height="23" TabStop="yes" FontId="0">#(loc.InstallInstallButton)</Button>
|
||||||
|
<Button Name="WelcomeCancelButton" X="-11" Y="-11" Width="75" Height="23" TabStop="yes" FontId="0">#(loc.InstallCloseButton)</Button>
|
||||||
|
</Page>
|
||||||
|
|
||||||
|
<!-- configure install page -->
|
||||||
|
<Page Name="Options">
|
||||||
|
<Text X="11" Y="80" Width="-11" Height="30" FontId="2" DisablePrefix="yes">#(loc.OptionsHeader)</Text>
|
||||||
|
|
||||||
|
<Text X="11" Y="121" Width="-11" Height="17" FontId="3" DisablePrefix="yes">#(loc.OptionsLocationLabel)</Text>
|
||||||
|
<Editbox Name="FolderEditbox" X="11" Y="143" Width="-91" Height="21" TabStop="yes" FontId="3" FileSystemAutoComplete="yes" />
|
||||||
|
<Button Name="BrowseButton" X="-11" Y="142" Width="75" Height="23" TabStop="yes" FontId="3">#(loc.OptionsBrowseButton)</Button>
|
||||||
|
|
||||||
|
<Button Name="OptionsOkButton" X="-91" Y="-11" Width="75" Height="23" TabStop="yes" FontId="0">#(loc.OptionsOkButton)</Button>
|
||||||
|
<Button Name="OptionsCancelButton" X="-11" Y="-11" Width="75" Height="23" TabStop="yes" FontId="0">#(loc.OptionsCancelButton)</Button>
|
||||||
|
</Page>
|
||||||
|
|
||||||
|
<!-- edit existing install page -->
|
||||||
|
<Page Name="Modify">
|
||||||
|
<Text X="11" Y="80" Width="-11" Height="30" FontId="2" DisablePrefix="yes">#(loc.ModifyHeader)</Text>
|
||||||
|
|
||||||
|
<Button Name="RepairButton" X="-171" Y="-11" Width="75" Height="23" TabStop="yes" FontId="0" HideWhenDisabled="yes">#(loc.ModifyRepairButton)</Button>
|
||||||
|
<Button Name="UninstallButton" X="-91" Y="-11" Width="75" Height="23" TabStop="yes" FontId="0">#(loc.ModifyUninstallButton)</Button>
|
||||||
|
<Button Name="ModifyCancelButton" X="-11" Y="-11" Width="75" Height="23" TabStop="yes" FontId="0">#(loc.ModifyCloseButton)</Button>
|
||||||
|
</Page>
|
||||||
|
|
||||||
|
<!-- action progress page -->
|
||||||
|
<Page Name="Progress">
|
||||||
|
<Text X="11" Y="80" Width="-11" Height="30" FontId="2" DisablePrefix="yes">#(loc.ProgressHeader)</Text>
|
||||||
|
|
||||||
|
<Text X="11" Y="121" Width="70" Height="17" FontId="3" DisablePrefix="yes">#(loc.ProgressLabel)</Text>
|
||||||
|
<Text Name="OverallProgressPackageText" X="85" Y="121" Width="-11" Height="17" FontId="3" DisablePrefix="yes">#(loc.OverallProgressPackageText)</Text>
|
||||||
|
<Progressbar Name="OverallCalculatedProgressbar" X="11" Y="143" Width="-11" Height="15" />
|
||||||
|
|
||||||
|
<Button Name="ProgressCancelButton" X="-11" Y="-11" Width="75" Height="23" TabStop="yes" FontId="0">#(loc.ProgressCancelButton)</Button>
|
||||||
|
</Page>
|
||||||
|
|
||||||
|
<!-- final page (success state) -->
|
||||||
|
<Page Name="Success">
|
||||||
|
<Text Name="SuccessHeader" X="11" Y="80" Width="-11" Height="30" FontId="2" HideWhenDisabled="yes" DisablePrefix="yes">#(loc.SuccessHeader)</Text>
|
||||||
|
<Text Name="SuccessInstallHeader" X="11" Y="80" Width="-11" Height="30" FontId="2" HideWhenDisabled="yes" DisablePrefix="yes">#(loc.SuccessInstallHeader)</Text>
|
||||||
|
<Text Name="SuccessRepairHeader" X="11" Y="80" Width="-11" Height="30" FontId="2" HideWhenDisabled="yes" DisablePrefix="yes">#(loc.SuccessRepairHeader)</Text>
|
||||||
|
<Text Name="SuccessUninstallHeader" X="11" Y="80" Width="-11" Height="30" FontId="2" HideWhenDisabled="yes" DisablePrefix="yes">#(loc.SuccessUninstallHeader)</Text>
|
||||||
|
|
||||||
|
<Button Name="LaunchButton" X="-91" Y="-11" Width="75" Height="23" TabStop="yes" FontId="0" HideWhenDisabled="yes">#(loc.SuccessLaunchButton)</Button>
|
||||||
|
<Button Name="SuccessCancelButton" X="-11" Y="-11" Width="75" Height="23" TabStop="yes" FontId="0">#(loc.SuccessCloseButton)</Button>
|
||||||
|
</Page>
|
||||||
|
|
||||||
|
<!-- final page (failure state) -->
|
||||||
|
<Page Name="Failure">
|
||||||
|
<Text Name="FailureHeader" X="11" Y="80" Width="-11" Height="30" FontId="2" HideWhenDisabled="yes" DisablePrefix="yes">#(loc.FailureHeader)</Text>
|
||||||
|
<Text Name="FailureInstallHeader" X="11" Y="80" Width="-11" Height="30" FontId="2" HideWhenDisabled="yes" DisablePrefix="yes">#(loc.FailureInstallHeader)</Text>
|
||||||
|
<Text Name="FailureUninstallHeader" X="11" Y="80" Width="-11" Height="30" FontId="2" HideWhenDisabled="yes" DisablePrefix="yes">#(loc.FailureUninstallHeader)</Text>
|
||||||
|
<Text Name="FailureRepairHeader" X="11" Y="80" Width="-11" Height="30" FontId="2" HideWhenDisabled="yes" DisablePrefix="yes">#(loc.FailureRepairHeader)</Text>
|
||||||
|
|
||||||
|
<Hypertext Name="FailureLogFileLink" X="11" Y="121" Width="-11" Height="42" FontId="3" TabStop="yes" HideWhenDisabled="yes">#(loc.FailureHyperlinkLogText)</Hypertext>
|
||||||
|
<Hypertext Name="FailureMessageText" X="22" Y="163" Width="-11" Height="51" FontId="3" TabStop="yes" HideWhenDisabled="yes" />
|
||||||
|
|
||||||
|
<Button Name="FailureCloseButton" X="-11" Y="-11" Width="75" Height="23" TabStop="yes" FontId="0">#(loc.FailureCloseButton)</Button>
|
||||||
|
</Page>
|
||||||
|
|
||||||
|
<!-- help page -->
|
||||||
|
<Page Name="Help">
|
||||||
|
<Text X="11" Y="80" Width="-11" Height="30" FontId="2" DisablePrefix="yes">#(loc.HelpHeader)</Text>
|
||||||
|
<Text X="11" Y="112" Width="-11" Height="-35" FontId="3" DisablePrefix="yes">#(loc.HelpText)</Text>
|
||||||
|
<Button Name="HelpCancelButton" X="-11" Y="-11" Width="75" Height="23" TabStop="yes" FontId="0">#(loc.HelpCloseButton)</Button>
|
||||||
|
</Page>
|
||||||
|
</Theme>
|
||||||
@@ -25,6 +25,7 @@ set(_ext_flags
|
|||||||
)
|
)
|
||||||
|
|
||||||
set(_addtional_defines
|
set(_addtional_defines
|
||||||
|
-dCPACK_BOOTSTRAP_THEME_FILE=${CPACK_BINARY_DIR}/BootstrapperTheme
|
||||||
-dCPACK_BOOTSTRAP_UPGRADE_GUID=${CPACK_WIX_BOOTSTRAP_UPGRADE_GUID}
|
-dCPACK_BOOTSTRAP_UPGRADE_GUID=${CPACK_WIX_BOOTSTRAP_UPGRADE_GUID}
|
||||||
-dCPACK_DOWNLOAD_SITE=${CPACK_DOWNLOAD_SITE}
|
-dCPACK_DOWNLOAD_SITE=${CPACK_DOWNLOAD_SITE}
|
||||||
-dCPACK_LOCAL_INSTALLER_DIR=${_cpack_wix_out_dir}
|
-dCPACK_LOCAL_INSTALLER_DIR=${_cpack_wix_out_dir}
|
||||||
|
|||||||
@@ -92,6 +92,28 @@ set(CPACK_WIX_EXTENSIONS
|
|||||||
set(_embed_artifacts "yes")
|
set(_embed_artifacts "yes")
|
||||||
|
|
||||||
if(LY_INSTALLER_DOWNLOAD_URL)
|
if(LY_INSTALLER_DOWNLOAD_URL)
|
||||||
|
|
||||||
|
if(LY_INSTALLER_LICENSE_URL)
|
||||||
|
set(WIX_THEME_INSTALL_LICENSE_ELEMENT
|
||||||
|
"<Hypertext Name=\"EulaHyperlink\" X=\"11\" Y=\"121\" Width=\"-11\" Height=\"51\" TabStop=\"yes\" FontId=\"3\" HideWhenDisabled=\"yes\">#(loc.InstallLicenseLinkText)</Hypertext>"
|
||||||
|
)
|
||||||
|
else()
|
||||||
|
set(WIX_THEME_INSTALL_LICENSE_ELEMENT
|
||||||
|
"<Richedit Name=\"EulaRichedit\" X=\"11\" Y=\"80\" Width=\"-11\" Height=\"-70\" TabStop=\"yes\" FontId=\"0\" HexStyle=\"0x800000\" />"
|
||||||
|
)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
configure_file(
|
||||||
|
"${CPACK_SOURCE_DIR}/Platform/Windows/Packaging/BootstrapperTheme.xml.in"
|
||||||
|
"${CPACK_BINARY_DIR}/BootstrapperTheme.xml"
|
||||||
|
@ONLY
|
||||||
|
)
|
||||||
|
configure_file(
|
||||||
|
"${CPACK_SOURCE_DIR}/Platform/Windows/Packaging/BootstrapperTheme.wxl.in"
|
||||||
|
"${CPACK_BINARY_DIR}/BootstrapperTheme.wxl"
|
||||||
|
@ONLY
|
||||||
|
)
|
||||||
|
|
||||||
set(_embed_artifacts "no")
|
set(_embed_artifacts "no")
|
||||||
|
|
||||||
# the bootstrapper will at the very least need a different upgrade guid
|
# the bootstrapper will at the very least need a different upgrade guid
|
||||||
|
|||||||
@@ -26,6 +26,8 @@ set(FILES
|
|||||||
Packaging_windows.cmake
|
Packaging_windows.cmake
|
||||||
PackagingPostBuild.cmake
|
PackagingPostBuild.cmake
|
||||||
Packaging/Bootstrapper.wxs
|
Packaging/Bootstrapper.wxs
|
||||||
|
Packaging/BootstrapperTheme.wxl.in
|
||||||
|
Packaging/BootstrapperTheme.xml.in
|
||||||
Packaging/Shortcuts.wxs
|
Packaging/Shortcuts.wxs
|
||||||
Packaging/Template.wxs.in
|
Packaging/Template.wxs.in
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -83,7 +83,7 @@
|
|||||||
"CMAKE_OPTIONS": "-G 'Ninja Multi-Config' -DCMAKE_C_COMPILER=clang-6.0 -DCMAKE_CXX_COMPILER=clang++-6.0 -DLY_UNITY_BUILD=TRUE -DLY_PARALLEL_LINK_JOBS=4",
|
"CMAKE_OPTIONS": "-G 'Ninja Multi-Config' -DCMAKE_C_COMPILER=clang-6.0 -DCMAKE_CXX_COMPILER=clang++-6.0 -DLY_UNITY_BUILD=TRUE -DLY_PARALLEL_LINK_JOBS=4",
|
||||||
"CMAKE_LY_PROJECTS": "AutomatedTesting",
|
"CMAKE_LY_PROJECTS": "AutomatedTesting",
|
||||||
"CMAKE_TARGET": "all",
|
"CMAKE_TARGET": "all",
|
||||||
"CTEST_OPTIONS": "-E (Gem::EMotionFX.Editor.Tests|Gem::AWSClientAuth.Tests|Gem::AWSCore.Editor.Tests) -LE SUITE_sandbox -L FRAMEWORK_googletest"
|
"CTEST_OPTIONS": "-E (Gem::EMotionFX.Editor.Tests|Gem::AWSCore.Editor.Tests) -LE SUITE_sandbox -L FRAMEWORK_googletest"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"test_profile_nounity": {
|
"test_profile_nounity": {
|
||||||
@@ -95,7 +95,7 @@
|
|||||||
"CMAKE_OPTIONS": "-G 'Ninja Multi-Config' -DCMAKE_C_COMPILER=clang-6.0 -DCMAKE_CXX_COMPILER=clang++-6.0 -DLY_UNITY_BUILD=FALSE -DLY_PARALLEL_LINK_JOBS=4",
|
"CMAKE_OPTIONS": "-G 'Ninja Multi-Config' -DCMAKE_C_COMPILER=clang-6.0 -DCMAKE_CXX_COMPILER=clang++-6.0 -DLY_UNITY_BUILD=FALSE -DLY_PARALLEL_LINK_JOBS=4",
|
||||||
"CMAKE_LY_PROJECTS": "AutomatedTesting",
|
"CMAKE_LY_PROJECTS": "AutomatedTesting",
|
||||||
"CMAKE_TARGET": "all",
|
"CMAKE_TARGET": "all",
|
||||||
"CTEST_OPTIONS": "-E (Gem::EMotionFX.Editor.Tests|Gem::AWSClientAuth.Tests|Gem::AWSCore.Editor.Tests) -LE SUITE_sandbox -L FRAMEWORK_googletest"
|
"CTEST_OPTIONS": "-E (Gem::EMotionFX.Editor.Tests|Gem::AWSCore.Editor.Tests) -LE SUITE_sandbox -L FRAMEWORK_googletest"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"asset_profile": {
|
"asset_profile": {
|
||||||
|
|||||||
Reference in New Issue
Block a user