From 9de6bdcf2b62a3dce4408394d34fb1a977b1f093 Mon Sep 17 00:00:00 2001 From: rgba16f <82187279+rgba16f@users.noreply.github.com> Date: Tue, 20 Apr 2021 11:58:55 -0500 Subject: [PATCH 01/32] First pass to remove AtomShim Removed CryRenderAtomShim folder from Gems/AtomLyIntegration/CMakeLists.txt Set LOAD_LEGACY_RENDERER_FOR_EDITOR to false --- Code/CryEngine/CrySystem/SystemInit.cpp | 4 +- .../Common/Textures/TextureManager.cpp | 42 +++++++++---------- .../Windows/launcher_project_windows.cmake | 15 ++----- Code/Sandbox/Editor/EditorViewportWidget.cpp | 7 +++- .../Platform/Windows/editor_windows.cmake | 2 +- Gems/AtomLyIntegration/CMakeLists.txt | 2 +- 6 files changed, 35 insertions(+), 37 deletions(-) diff --git a/Code/CryEngine/CrySystem/SystemInit.cpp b/Code/CryEngine/CrySystem/SystemInit.cpp index 5e43d6a1df..8347e3f1f0 100644 --- a/Code/CryEngine/CrySystem/SystemInit.cpp +++ b/Code/CryEngine/CrySystem/SystemInit.cpp @@ -247,7 +247,7 @@ CUNIXConsole* pUnixConsole; #define LOCALIZATION_TRANSLATIONS_LIST_FILE_NAME "Libs/Localization/localization.xml" -#define LOAD_LEGACY_RENDERER_FOR_EDITOR true // If you set this to false you must for now also set 'ed_useAtomNativeViewport' to true (see /Code/Sandbox/Editor/ViewManager.cpp) +#define LOAD_LEGACY_RENDERER_FOR_EDITOR false // If you set this to false you must for now also set 'ed_useAtomNativeViewport' to true (see /Code/Sandbox/Editor/ViewManager.cpp) #define LOAD_LEGACY_RENDERER_FOR_LAUNCHER false ////////////////////////////////////////////////////////////////////////// @@ -1294,7 +1294,7 @@ bool CSystem::OpenRenderLibrary(int type, const SSystemInitParams& initParams) const char* libname = ""; if (AZ::Interface::Get()) { - libname = "CryRenderOther"; + libname = DLL_RENDERER_NULL; } else if (type == R_DX9_RENDERER) { diff --git a/Code/CryEngine/RenderDll/Common/Textures/TextureManager.cpp b/Code/CryEngine/RenderDll/Common/Textures/TextureManager.cpp index 2bdeabefaa..e8c0c085a9 100644 --- a/Code/CryEngine/RenderDll/Common/Textures/TextureManager.cpp +++ b/Code/CryEngine/RenderDll/Common/Textures/TextureManager.cpp @@ -170,26 +170,26 @@ void CTextureManager::LoadDefaultTextures() // Loop over the appropriate texture list and load the textures, storing them in a map keyed by texture name. // Use reduced subset of textures for Other. - if (AZ::Interface::Get()) - { - for (const TextureEntry& entry : texturesFromFileReduced) - { - // Use EF_LoadTexture rather than CTexture::ForName - CTexture* pNewTexture = static_cast(gEnv->pRenderer->EF_LoadTexture(entry.szFileName, entry.flags)); - if (pNewTexture) - { - CCryNameTSCRC texEntry(entry.szTextureName); - m_DefaultTextures[texEntry] = pNewTexture; - } - else - { - AZ_Assert(false, "Error - CTextureManager failed to load default texture %s", entry.szFileName); - AZ_Warning("[Shaders System]", false, "Error - CTextureManager failed to load default texture %s", entry.szFileName); - } - } - } - else - { + //if (AZ::Interface::Get()) + //{ + // for (const TextureEntry& entry : texturesFromFileReduced) + // { + // // Use EF_LoadTexture rather than CTexture::ForName + // CTexture* pNewTexture = static_cast(gEnv->pRenderer->EF_LoadTexture(entry.szFileName, entry.flags)); + // if (pNewTexture) + // { + // CCryNameTSCRC texEntry(entry.szTextureName); + // m_DefaultTextures[texEntry] = pNewTexture; + // } + // else + // { + // AZ_Assert(false, "Error - CTextureManager failed to load default texture %s", entry.szFileName); + // AZ_Warning("[Shaders System]", false, "Error - CTextureManager failed to load default texture %s", entry.szFileName); + // } + // } + //} + //else + //{ for (const TextureEntry& entry : texturesFromFile) { CTexture* pNewTexture = CTexture::ForName(entry.szFileName, entry.flags, eTF_Unknown); @@ -204,7 +204,7 @@ void CTextureManager::LoadDefaultTextures() AZ_Warning("[Shaders System]", false, "Error - CTextureManager failed to load default texture %s", entry.szFileName); } } - } + //} m_texNoTexture = GetDefaultTexture("NoTexture"); m_texNoTextureCM = GetDefaultTexture("NoTextureCM"); diff --git a/Code/LauncherUnified/Platform/Windows/launcher_project_windows.cmake b/Code/LauncherUnified/Platform/Windows/launcher_project_windows.cmake index 93a839ae47..4b5805908e 100644 --- a/Code/LauncherUnified/Platform/Windows/launcher_project_windows.cmake +++ b/Code/LauncherUnified/Platform/Windows/launcher_project_windows.cmake @@ -9,17 +9,10 @@ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # -if (LY_MONOLITHIC_GAME) # only Atom is supported in monolithic - set(LY_BUILD_DEPENDENCIES - PUBLIC - Legacy::CryRenderOther - ) -else() - set(LY_BUILD_DEPENDENCIES - PRIVATE - Legacy::CryRenderD3D11 - ) -endif() +set(LY_BUILD_DEPENDENCIES + PRIVATE + Legacy::CryRenderD3D11 +) set(ICON_FILE ${project_real_path}/Gem/Resources/GameSDK.ico) if(NOT EXISTS ${ICON_FILE}) diff --git a/Code/Sandbox/Editor/EditorViewportWidget.cpp b/Code/Sandbox/Editor/EditorViewportWidget.cpp index 695a0fa5f1..5d8da91644 100644 --- a/Code/Sandbox/Editor/EditorViewportWidget.cpp +++ b/Code/Sandbox/Editor/EditorViewportWidget.cpp @@ -874,8 +874,11 @@ void EditorViewportWidget::OnBeginPrepareRender() fov = 2 * atanf((h * tan(fov / 2)) / maxTargetHeight); } } - +#if 1 // ATOMSHIM FIXUP + m_Camera.SetFrustum(w, h, fov, fNearZ, 8000.0f); +#else m_Camera.SetFrustum(w, h, fov, fNearZ, gEnv->p3DEngine->GetMaxViewDistance()); +#endif } GetIEditor()->GetSystem()->SetViewCamera(m_Camera); @@ -906,7 +909,9 @@ void EditorViewportWidget::OnBeginPrepareRender() PostWidgetRendering(); +#if 0 // ATOMSHIM FIXUP if (!m_renderer->IsStereoEnabled()) +#endif { GetIEditor()->GetSystem()->RenderStatistics(); } diff --git a/Code/Sandbox/Editor/Platform/Windows/editor_windows.cmake b/Code/Sandbox/Editor/Platform/Windows/editor_windows.cmake index 5050034d2d..4058c1d466 100644 --- a/Code/Sandbox/Editor/Platform/Windows/editor_windows.cmake +++ b/Code/Sandbox/Editor/Platform/Windows/editor_windows.cmake @@ -11,5 +11,5 @@ set(LY_BUILD_DEPENDENCIES PRIVATE - Legacy::CryRenderD3D11 + Legacy::CryRenderNULL ) \ No newline at end of file diff --git a/Gems/AtomLyIntegration/CMakeLists.txt b/Gems/AtomLyIntegration/CMakeLists.txt index 66887ce307..e313015b46 100644 --- a/Gems/AtomLyIntegration/CMakeLists.txt +++ b/Gems/AtomLyIntegration/CMakeLists.txt @@ -15,5 +15,5 @@ add_subdirectory(AtomImGuiTools) add_subdirectory(EMotionFXAtom) add_subdirectory(AtomFont) add_subdirectory(TechnicalArt) -add_subdirectory(CryRenderAtomShim) +#add_subdirectory(CryRenderAtomShim) add_subdirectory(AtomBridge) From 23dec3c10e6b1521973ca37725d7c4c6e5751856 Mon Sep 17 00:00:00 2001 From: jromnoa Date: Tue, 20 Apr 2021 18:56:49 -0700 Subject: [PATCH 02/32] Add starting point for Hydra/EPB Atom tests in AutomatedTesting project --- .../Gem/Code/tool_dependencies.cmake | 2 + .../Gem/PythonTests/CMakeLists.txt | 1 + .../PythonTests/atom_renderer/CMakeLists.txt | 46 +++ .../test_Atom_MainSuite.py | 91 ++++++ .../atom_utils/automated_test_utils.py | 266 ++++++++++++++++++ .../atom_utils/hydra_test_utils.py | 166 +++++++++++ .../epb_scripts/epb_AllLevels_OpenClose.py | 102 +++++++ 7 files changed, 674 insertions(+) create mode 100644 AutomatedTesting/Gem/PythonTests/atom_renderer/CMakeLists.txt create mode 100644 AutomatedTesting/Gem/PythonTests/atom_renderer/atom_python_scripts/test_Atom_MainSuite.py create mode 100644 AutomatedTesting/Gem/PythonTests/atom_renderer/atom_utils/automated_test_utils.py create mode 100644 AutomatedTesting/Gem/PythonTests/atom_renderer/atom_utils/hydra_test_utils.py create mode 100644 AutomatedTesting/Gem/PythonTests/atom_renderer/epb_scripts/epb_AllLevels_OpenClose.py diff --git a/AutomatedTesting/Gem/Code/tool_dependencies.cmake b/AutomatedTesting/Gem/Code/tool_dependencies.cmake index 8c5da63f42..a7804cd660 100644 --- a/AutomatedTesting/Gem/Code/tool_dependencies.cmake +++ b/AutomatedTesting/Gem/Code/tool_dependencies.cmake @@ -69,4 +69,6 @@ set(GEM_DEPENDENCIES Gem::AtomFont Gem::AtomToolsFramework.Editor Gem::Blast.Editor + Gem::DccScriptingInterface.Editor + Gem::QtForPython.Editor ) diff --git a/AutomatedTesting/Gem/PythonTests/CMakeLists.txt b/AutomatedTesting/Gem/PythonTests/CMakeLists.txt index c527aea98c..a024a4b6ec 100644 --- a/AutomatedTesting/Gem/PythonTests/CMakeLists.txt +++ b/AutomatedTesting/Gem/PythonTests/CMakeLists.txt @@ -16,6 +16,7 @@ ly_get_list_relative_pal_filename(pal_dir ${CMAKE_CURRENT_LIST_DIR}/Platform/${PAL_PLATFORM_NAME}) add_subdirectory(assetpipeline) +add_subdirectory(atom_renderer) ## Physics ## # DISABLED - see LYN-2536 diff --git a/AutomatedTesting/Gem/PythonTests/atom_renderer/CMakeLists.txt b/AutomatedTesting/Gem/PythonTests/atom_renderer/CMakeLists.txt new file mode 100644 index 0000000000..729da64e57 --- /dev/null +++ b/AutomatedTesting/Gem/PythonTests/atom_renderer/CMakeLists.txt @@ -0,0 +1,46 @@ +# +# 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. +# + +# +# 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. +# + +################################################################################ +# Atom Renderer Automated Tests +# Runs EditorPythonBindings scripts inside the Editor to verify test results. +################################################################################ + +add_subdirectory(atom_python_scripts) +add_subdirectory(atom_utils) +add_subdirectory(epb_utils) +add_subdirectory(epb_scripts) + +if(PAL_TRAIT_BUILD_HOST_TOOLS AND PAL_TRAIT_BUILD_TESTS_SUPPORTED AND AutomatedTesting IN_LIST LY_PROJECTS) + ly_add_pytest( + NAME AtomRenderer::HydraEPBTestsMain + TEST_REQUIRES gpu + TEST_SUITE main + PATH ${CMAKE_CURRENT_LIST_DIR}/atom_python_scripts/test_Atom_MainSuite.py + TEST_SERIAL + TIMEOUT 1200 + RUNTIME_DEPENDENCIES + AssetProcessor + AtomTest.Assets + Editor + ) +endif() diff --git a/AutomatedTesting/Gem/PythonTests/atom_renderer/atom_python_scripts/test_Atom_MainSuite.py b/AutomatedTesting/Gem/PythonTests/atom_renderer/atom_python_scripts/test_Atom_MainSuite.py new file mode 100644 index 0000000000..056c7a4af2 --- /dev/null +++ b/AutomatedTesting/Gem/PythonTests/atom_renderer/atom_python_scripts/test_Atom_MainSuite.py @@ -0,0 +1,91 @@ +""" +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 logging +import os +from pathlib import PurePath +import pytest + +# Bail on the test if ly_test_tools doesn't exist. +pytest.importorskip("ly_test_tools") +import ly_test_tools.environment.file_system as file_system + +from atom_renderer.atom_utils import hydra_test_utils as hydra + +logger = logging.getLogger(__name__) +EDITOR_TIMEOUT = 60 +TEST_DIRECTORY = os.path.dirname(__file__) + +# Go to the project root directory +PROJECT_DIRECTORY = PurePath(TEST_DIRECTORY) +if len(PROJECT_DIRECTORY.parents) > 5: + for _ in range(5): + PROJECT_DIRECTORY = PROJECT_DIRECTORY.parent + + +@pytest.mark.parametrize("project", ["AutomatedTesting"]) +@pytest.mark.parametrize("launcher_platform", ['windows_editor']) +@pytest.mark.parametrize("level", ["tmp_level"]) +class TestAllLevelsOpenClose(object): + @pytest.fixture(autouse=True) + def setup_teardown(self, request, workspace, project, level): + # Cleanup our temp level + file_system.delete( + [os.path.join(workspace.paths.engine_root(), project, "Levels", "AtomLevels", level)], True, True) + + def teardown(): + # Cleanup our temp level + file_system.delete( + [os.path.join(workspace.paths.engine_root(), project, "Levels", "AtomLevels", level)], True, True) + + request.addfinalizer(teardown) + + @pytest.mark.test_case_id( + "C34428159", + "C34428160", + "C34428161", + "C34428162", + "C34428163", + "C34428165", + "C34428166", + "C34428167", + "C34428158", + "C34428172", + "C34428173", + "C34428174", + "C34428175", + ) + + def test_AllLevelsOpenClose(self, request, editor, level, workspace, project, launcher_platform): + + cfg_args = [level] + test_levels = os.path.join(str(PROJECT_DIRECTORY), "Levels", "AtomLevels") + + expected_lines = [] + for level in test_levels: + expected_lines.append(f"Successfully opened {level}") + + unexpected_lines = [ + "failed to open", + "Traceback (most recent call last):", + ] + + hydra.launch_and_validate_results( + request, + TEST_DIRECTORY, + editor, + "AllLevelsOpenClose_test_case.py", + timeout=EDITOR_TIMEOUT, + expected_lines=expected_lines, + unexpected_lines=unexpected_lines, + halt_on_unexpected=True, + cfg_args=cfg_args, + ) diff --git a/AutomatedTesting/Gem/PythonTests/atom_renderer/atom_utils/automated_test_utils.py b/AutomatedTesting/Gem/PythonTests/atom_renderer/atom_utils/automated_test_utils.py new file mode 100644 index 0000000000..6e5b12982a --- /dev/null +++ b/AutomatedTesting/Gem/PythonTests/atom_renderer/atom_utils/automated_test_utils.py @@ -0,0 +1,266 @@ +""" +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 time +import azlmbr.legacy.general as general +import azlmbr.atom + + +class FailFast(BaseException): + """ + Raise to stop proceeding through test steps. + """ + + pass + + +class TestHelper: + @staticmethod + def init_idle(): + general.idle_enable(True) + general.idle_wait_frames(1) + + @staticmethod + def open_level(level): + # type: (str, ) -> None + """ + :param level: the name of the level folder in MestTest\\ + + :return: None + """ + result = general.open_level(level) # TO-DO: Check if success opening level + if result: + Report.info("Open level {}".format(level)) + else: + Report.failure("Assert: failed to open level {}".format(level)) + general.idle_wait_frames(1) + + @staticmethod + def enter_game_mode(msgtuple_success_fail): + # type: (tuple) -> None + """ + :param msgtuple_success_fail: The tuple with the expected/unexpected messages for entering game mode. + + :return: None + """ + Report.info("Entering game mode") + general.enter_game_mode() + general.idle_wait_frames(1) + Report.critical_result(msgtuple_success_fail, general.is_in_game_mode()) + + @staticmethod + def exit_game_mode(msgtuple_success_fail): + # type: (tuple) -> None + """ + :param msgtuple_success_fail: The tuple with the expected/unexpected messages for exiting game mode. + + :return: None + """ + general.exit_game_mode() + general.idle_wait_frames(1) + Report.critical_result(msgtuple_success_fail, not general.is_in_game_mode()) + + @staticmethod + def close_editor(): + general.exit_no_prompt() + + @staticmethod + def fail_fast(message=None): + # type: (str) -> None + """ + A state has been reached where progressing in the test is not viable. + raises FailFast + :return: None + """ + Report.info("Failing fast. Raising an exception and shutting down the editor.") + if message: + Report.info("Fail fast message: {}".format(message)) + TestHelper.close_editor() + raise FailFast() + + @staticmethod + def wait_for_condition(function, timeout_in_seconds=2.0): + # type: (function, float) -> bool + """ + **** Will be replaced by a function of the same name exposed in the Engine***** + a function to run until it returns True or timeout is reached + the function can have no parameters and + waiting idle__wait_* is handled here not in the function + + :param function: a function that returns a boolean indicating a desired condition is achieved + :param timeout_in_seconds: when reached, function execution is abandoned and False is returned + """ + + with Timeout(timeout_in_seconds) as t: + while True: + general.idle_wait(1.0) + if t.timed_out: + return False + + ret = function() + if not isinstance(ret, bool): + raise TypeError("return value for wait_for_condition function must be a bool") + if ret: + return True + + @staticmethod + def find_entities(entity_name): + search_filter = azlmbr.entity.SearchFilter() + search_filter.names = [entity_name] + searched_entities = azlmbr.entity.SearchBus(azlmbr.bus.Broadcast, 'SearchEntities', search_filter) + return searched_entities + + @staticmethod + def attach_component_to_entity(entityId, componentName): + # type: (azlmbr.entity.EntityId, str) -> azlmbr.entity.EntityComponentIdPair + """ + Adds the component if not added already. + If successful, returns the EntityComponentIdPair, otherwise returns None. + """ + typeIdsList = azlmbr.editor.EditorComponentAPIBus(azlmbr.bus.Broadcast, 'FindComponentTypeIdsByEntityType', + [componentName], 0) + general.log("Components found = {}".format(len(typeIdsList))) + if len(typeIdsList) < 1: + general.log(f"ERROR: A component class with name {componentName} doesn't exist") + return None + elif len(typeIdsList) > 1: + general.log(f"ERROR: Found more than one component classes with same name: {componentName}") + return None + # Before adding the component let's check if it is already attached to the entity. + componentOutcome = azlmbr.editor.EditorComponentAPIBus(azlmbr.bus.Broadcast, 'GetComponentOfType', entityId, + typeIdsList[0]) + if componentOutcome.IsSuccess(): + return componentOutcome.GetValue() # In this case the value is not a list. + componentOutcome = azlmbr.editor.EditorComponentAPIBus(azlmbr.bus.Broadcast, 'AddComponentsOfType', entityId, + typeIdsList) + if componentOutcome.IsSuccess(): + general.log(f"{componentName} Component added to entity.") + return componentOutcome.GetValue()[0] + general.log(f"ERROR: Failed to add component [{componentName}] to entity") + return None + + @staticmethod + def get_component_property(component, propertyPath): + return azlmbr.editor.EditorComponentAPIBus( + azlmbr.bus.Broadcast, + 'GetComponentProperty', + component, + propertyPath) + + @staticmethod + def set_component_property(component, propertyPath, value): + azlmbr.editor.EditorComponentAPIBus( + azlmbr.bus.Broadcast, + 'SetComponentProperty', + component, + propertyPath, + value) + + @staticmethod + def get_property_list(Component): + property_list = azlmbr.editor.EditorComponentAPIBus(azlmbr.bus.Broadcast, 'BuildComponentPropertyList', + Component) + return property_list + + @staticmethod + def compare_property_list(Component, PropertyList): + property_list = TestHelper.get_property_list(Component) + if set(property_list) == set(PropertyList): + general.log("Property list of component is correct.") + + @staticmethod + def isclose(a: float, b: float, rel_tol: float = 1e-9, abs_tol: float = 0.0) -> bool: + return abs(a - b) <= max(rel_tol * max(abs(a), abs(b)), abs_tol) + + +class Timeout: + # type: (float) -> None + """ + contextual timeout + :param seconds: float seconds to allow before timed_out is True + """ + + def __init__(self, seconds): + self.seconds = seconds + + def __enter__(self): + self.die_after = time.time() + self.seconds + return self + + def __exit__(self, type, value, traceback): + pass + + @property + def timed_out(self): + return time.time() > self.die_after + + +# NOTE: implementation of reports will be changed to use a better mechanism rather than print + + +class Report: + @staticmethod + def info(msg): + print("Info: {}".format(msg)) + + @staticmethod + def success(msgtuple_success_fail): + print("Success: {}".format(msgtuple_success_fail[0])) + + @staticmethod + def failure(msgtuple_success_fail): + print("Failure: {}".format(msgtuple_success_fail[1])) + + @staticmethod + def result(msgtuple_success_fail, condition): + if not isinstance(condition, bool): + raise TypeError("condition argument must be a bool") + + if condition: + Report.success(msgtuple_success_fail) + else: + Report.failure(msgtuple_success_fail) + return condition + + @staticmethod + def critical_result(msgtuple_success_fail, condition, fast_fail_message=None): + # type: (tuple, bool, str) -> None + """ + if condition is False we will fail fast + + :param msgtuple_success_fail: messages to print based on the condition + :param condition: success (True) or failure (False) + :param fast_fail_message: [optional] message to include on fast fail + """ + if not isinstance(condition, bool): + raise TypeError("condition argument must be a bool") + + if not Report.result(msgtuple_success_fail, condition): + TestHelper.fail_fast(fast_fail_message) + + @staticmethod + def info_vector3(vector3, label="", magnitude=None): + # type: (azlmbr.math.Vector3, str, float) -> None + """ + prints the vector to the Report.info log. If applied, label will print first, + followed by the vector's values (x, y, z,) to 2 decimal places. Lastly if the + magnitude is supplied, it will print on the third line. + + :param vector3: a azlmbr.math.Vector3 object to print + prints in [x: , y: , z: ] format. + :param label: [optional] A string to print before printing the vector3's contents + :param magnitude: [optional] the vector's magnitude to print after the vector's contents + :return: None + """ + if label != "": + Report.info(label) + Report.info(" x: {:.2f}, y: {:.2f}, z: {:.2f}".format(vector3.x, vector3.y, vector3.z)) + if magnitude is not None: + Report.info(" magnitude: {:.2f}".format(magnitude)) diff --git a/AutomatedTesting/Gem/PythonTests/atom_renderer/atom_utils/hydra_test_utils.py b/AutomatedTesting/Gem/PythonTests/atom_renderer/atom_utils/hydra_test_utils.py new file mode 100644 index 0000000000..30aa320ab6 --- /dev/null +++ b/AutomatedTesting/Gem/PythonTests/atom_renderer/atom_utils/hydra_test_utils.py @@ -0,0 +1,166 @@ +""" +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 logging +import os + +import ly_test_tools.log.log_monitor +import ly_test_tools.environment.process_utils as process_utils +import ly_test_tools.environment.waiter as waiter +from ly_remote_console.remote_console_commands import ( + send_command_and_expect_response as send_command_and_expect_response, +) +from automatedtesting_shared.network_utils import check_for_listening_port + +logger = logging.getLogger(__name__) + + +def teardown_editor(editor): + """ + :param editor: Configured editor object + :return: + """ + process_utils.kill_processes_named("AssetProcessor.exe") + logger.debug("Ensuring Editor is stopped") + editor.ensure_stopped() + + +def launch_and_validate_results( + request, + test_directory, + editor, + editor_script, + expected_lines, + unexpected_lines=[], + halt_on_unexpected=False, + log_file_name="Editor.log", + cfg_args=[], + timeout=60, +): + """ + Creates a temporary config file for Hydra execution, runs the Editor with the specified script, and monitors for + expected log lines. + :param request: Special fixture providing information of the requesting test function. + :param test_directory: Path to test directory that editor_script lives in. + :param editor: Configured editor object to run test against. + :param editor_script: Name of script that will execute in the Editor. + :param expected_lines: Expected lines to search log for. + :param unexpected_lines: Unexpected lines to search log for. Defaults to none. + :param halt_on_unexpected: Halts test if unexpected lines are found. Defaults to False. + :param log_file_name: Name of the log file created by the editor. Defaults to 'Editor.log' + :param cfg_args: Additional arguments for CFG, such as LevelName. + :param timeout: Length of time for test to run. Default is 60. + """ + test_case = os.path.join(test_directory, editor_script) + request.addfinalizer(lambda: teardown_editor(editor)) + logger.debug("Running automated test: {}".format(editor_script)) + if editor_script != "": + editor.args.extend( + [ + "--skipWelcomeScreenDialog", + "--autotest_mode", + "--runpython", + test_case, + "--runpythonargs", + ] + ) + editor.args.extend([" ".join(cfg_args)]) + with editor.start(): + editorlog_file = os.path.join(editor.workspace.paths.project_log(), log_file_name) + # Log monitor requires the file to exist. + logger.debug("Waiting until log file <{}> exists...".format(editorlog_file)) + waiter.wait_for( + lambda: os.path.exists(editorlog_file), + timeout=60, + exc=("Log file '{}' was never created by another process.".format(editorlog_file)), + interval=1, + ) + logger.debug("Done! log file <{}> exists.".format(editorlog_file)) + log_monitor = ly_test_tools.log.log_monitor.LogMonitor(launcher=editor, log_file_path=editorlog_file) + log_monitor.monitor_log_for_lines( + expected_lines=expected_lines, + unexpected_lines=unexpected_lines, + halt_on_unexpected=halt_on_unexpected, + timeout=timeout, + ) + + +def launch_and_validate_results_launcher( + launcher, + level, + remote_console_instance, + expected_lines, + unexpected_lines=[], + halt_on_unexpected=False, + port_listener_timeout=120, + log_monitor_timeout=60, + remote_console_port=4600, +): + """ + Runs the launcher with the specified level, and monitors Game.log for expected lines. + :param launcher: Configured launcher object to run test against. + :param level: The level to load in the launcher. + :param remote_console_instance: Configured Remote Console object. + :param expected_lines: Expected lines to search log for. + :param unexpected_lines: Unexpected lines to search log for. Defaults to none. + :param halt_on_unexpected: Halts test if unexpected lines are found. Defaults to False. + :param port_listener_timeout: Timeout for verifying successful connection to Remote Console. + :param log_monitor_timeout: Timeout for monitoring for lines in Game.log + :param remote_console_port: The port used to communicate with the Remote Console. + """ + + with launcher.start(): + gamelog_file = os.path.join(launcher.workspace.paths.project_log(), "Game.log") + + # Ensure Remote Console can be reached + waiter.wait_for( + lambda: check_for_listening_port(remote_console_port), + port_listener_timeout, + exc=AssertionError("Port {} not listening.".format(remote_console_port)), + ) + remote_console_instance.start(timeout=30) + + # Load the specified level in the launcher + send_command_and_expect_response(remote_console_instance, f"map {level}", "LEVEL_LOAD_COMPLETE", timeout=30) + + # Log monitor requires the file to exist + logger.debug("Waiting until log file <{}> exists...".format(gamelog_file)) + waiter.wait_for( + lambda: os.path.exists(gamelog_file), + timeout=60, + exc=("Log file '{}' was never created by another process.".format(gamelog_file)), + interval=1, + ) + logger.debug("Done! log file <{}> exists.".format(gamelog_file)) + log_monitor = ly_test_tools.log.log_monitor.LogMonitor(launcher=launcher, log_file_path=gamelog_file) + # Workaround for LY-110925 - Wait for log file to be opened before checking for expected lines. This is done in + # monitor_log_for_lines as well, but has a low timeout with no way to currently override + logger.debug("Waiting for log file '{}' to be opened by another process.".format(gamelog_file)) + # Check for expected/unexpected lines + log_monitor.monitor_log_for_lines( + expected_lines=expected_lines, + unexpected_lines=unexpected_lines, + halt_on_unexpected=halt_on_unexpected, + timeout=log_monitor_timeout, + ) + + +def remove_files(artifact_path, suffix): + """ + Removes files with the specified suffix from the specified path + :param artifact_path: Path to search for files + :param suffix: File extension to remove + """ + if not os.path.isdir(artifact_path): + return + + for file_name in os.listdir(artifact_path): + if file_name.endswith(suffix): + os.remove(os.path.join(artifact_path, file_name)) diff --git a/AutomatedTesting/Gem/PythonTests/atom_renderer/epb_scripts/epb_AllLevels_OpenClose.py b/AutomatedTesting/Gem/PythonTests/atom_renderer/epb_scripts/epb_AllLevels_OpenClose.py new file mode 100644 index 0000000000..7d6b2744de --- /dev/null +++ b/AutomatedTesting/Gem/PythonTests/atom_renderer/epb_scripts/epb_AllLevels_OpenClose.py @@ -0,0 +1,102 @@ +""" +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 hydra/EPB script opens and closes every possible Atom level. +""" +import os +import sys + +import azlmbr.legacy.general as general +import azlmbr.legacy.settings as settings +import azlmbr.paths + +sys.path.append(os.path.join(azlmbr.paths.devroot, 'AutomatedTesting', 'Gem', 'PythonTests')) + +from atom_renderer.atom_utils.automated_test_utils import TestHelper as helper + +LEVELS = os.listdir(os.path.join(azlmbr.paths.devroot, "AutomatedTesting", "Levels", "AtomLevels")) + + +class TestAllLevelsOpenClose(object): + """Reserved for the test name.""" + pass + + +def run(): + """ + 1. Open & close all valid test levels in the Editor. + 2. Every time a level is opened, verify it loads correctly and the Editor remains stable. + """ + + def after_level_load(): + """Function to call after creating/opening a level to ensure it loads.""" + # Give everything a second to initialize. + general.idle_enable(True) + general.update_viewport() + general.idle_wait(0.5) # half a second is more than enough for updating the viewport. + + # Close out problematic windows, FPS meters, and anti-aliasing. + if general.is_helpers_shown(): # Turn off the helper gizmos if visible + general.toggle_helpers() + if general.is_pane_visible("Error Report"): # Close Error Report windows that block focus. + general.close_pane("Error Report") + if general.is_pane_visible("Error Log"): # Close Error Log windows that block focus. + general.close_pane("Error Log") + general.run_console("r_displayInfo=0") + general.run_console("r_antialiasingmode=0") + + return True + + # Create a new level. + new_level_name = "tmp_level" # Specified in AllLevelsOpenClose_test.py + heightmap_resolution = 512 + heightmap_meters_per_pixel = 1 + terrain_texture_resolution = 412 + use_terrain = False + + # Return codes are ECreateLevelResult defined in CryEdit.h + return_code = general.create_level_no_prompt( + new_level_name, heightmap_resolution, heightmap_meters_per_pixel, terrain_texture_resolution, use_terrain) + if return_code == 1: + general.log(f"{new_level_name} level already exists") + elif return_code == 2: + general.log("Failed to create directory") + elif return_code == 3: + general.log("Directory length is too long") + elif return_code != 0: + general.log("Unknown error, failed to create level") + else: + general.log(f"{new_level_name} level created successfully") + after_level_load() + + # Open all valid test levels. + failed_to_open = [] + LEVELS.append(new_level_name) # Update LEVELS constant for created level. + for level in LEVELS: + if general.is_idle_enabled() and (general.get_current_level_name() == level): + general.log(f"Level {level} already open.") + else: + general.log(f"Opening level {level}") + general.open_level_no_prompt(level) + helper.wait_for_condition(function=lambda: general.get_current_level_name() == level, + timeout_in_seconds=2.0) + result = (general.get_current_level_name() == level) and after_level_load() + if result: + general.log(f"Successfully opened {level}") + else: + general.log(f"{level} failed to open") + failed_to_open.append(level) + + if failed_to_open: + general.log(f"The following levels failed to open: {failed_to_open}") + + +if __name__ == "__main__": + run() From ff69429e1bf035f1394ecfa4d12a4c512c80017f Mon Sep 17 00:00:00 2001 From: jiaweig Date: Wed, 21 Apr 2021 12:31:17 -0700 Subject: [PATCH 03/32] ATOM-15303 [RHI][Android] Descriptor indexing feature not present on Qualcomm --- .../RHI/Vulkan/Code/Source/RHI/Device.cpp | 34 ++++++++++--------- .../Vulkan/Code/Source/RHI/PhysicalDevice.cpp | 15 ++++++-- .../Vulkan/Code/Source/RHI/PhysicalDevice.h | 4 ++- 3 files changed, 34 insertions(+), 19 deletions(-) diff --git a/Gems/Atom/RHI/Vulkan/Code/Source/RHI/Device.cpp b/Gems/Atom/RHI/Vulkan/Code/Source/RHI/Device.cpp index 159f55e9d0..ff7eb7f4c0 100644 --- a/Gems/Atom/RHI/Vulkan/Code/Source/RHI/Device.cpp +++ b/Gems/Atom/RHI/Vulkan/Code/Source/RHI/Device.cpp @@ -163,21 +163,23 @@ namespace AZ uint32_t minorVersion = VK_VERSION_MINOR(physicalProperties.apiVersion); // unbounded array functionality - VkPhysicalDeviceDescriptorIndexingFeatures descriptorIndexingFeatures = {}; + VkPhysicalDeviceDescriptorIndexingFeaturesEXT descriptorIndexingFeatures = {}; descriptorIndexingFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES; - descriptorIndexingFeatures.shaderInputAttachmentArrayDynamicIndexing = VK_TRUE; - descriptorIndexingFeatures.shaderUniformTexelBufferArrayDynamicIndexing = VK_TRUE; - descriptorIndexingFeatures.shaderStorageTexelBufferArrayDynamicIndexing = VK_TRUE; - descriptorIndexingFeatures.shaderUniformBufferArrayNonUniformIndexing = VK_TRUE; - descriptorIndexingFeatures.shaderSampledImageArrayNonUniformIndexing = VK_TRUE; - descriptorIndexingFeatures.shaderStorageBufferArrayNonUniformIndexing = VK_TRUE; - descriptorIndexingFeatures.shaderStorageImageArrayNonUniformIndexing = VK_TRUE; - descriptorIndexingFeatures.shaderInputAttachmentArrayNonUniformIndexing = VK_TRUE; - descriptorIndexingFeatures.shaderUniformTexelBufferArrayNonUniformIndexing = VK_TRUE; - descriptorIndexingFeatures.shaderStorageTexelBufferArrayNonUniformIndexing = VK_TRUE; - descriptorIndexingFeatures.descriptorBindingPartiallyBound = VK_TRUE; - descriptorIndexingFeatures.descriptorBindingVariableDescriptorCount = VK_TRUE; - descriptorIndexingFeatures.runtimeDescriptorArray = VK_TRUE; + const VkPhysicalDeviceDescriptorIndexingFeaturesEXT& physicalDeviceDescriptorIndexingFeatures = + physicalDevice.GetPhysicalDeviceDescriptorIndexingFeatures(); + descriptorIndexingFeatures.shaderInputAttachmentArrayDynamicIndexing = physicalDeviceDescriptorIndexingFeatures.shaderInputAttachmentArrayDynamicIndexing; + descriptorIndexingFeatures.shaderUniformTexelBufferArrayDynamicIndexing = physicalDeviceDescriptorIndexingFeatures.shaderUniformTexelBufferArrayDynamicIndexing; + descriptorIndexingFeatures.shaderStorageTexelBufferArrayDynamicIndexing = physicalDeviceDescriptorIndexingFeatures.shaderStorageTexelBufferArrayDynamicIndexing; + descriptorIndexingFeatures.shaderUniformBufferArrayNonUniformIndexing = physicalDeviceDescriptorIndexingFeatures.shaderUniformBufferArrayNonUniformIndexing; + descriptorIndexingFeatures.shaderSampledImageArrayNonUniformIndexing = physicalDeviceDescriptorIndexingFeatures.shaderSampledImageArrayNonUniformIndexing; + descriptorIndexingFeatures.shaderStorageBufferArrayNonUniformIndexing = physicalDeviceDescriptorIndexingFeatures.shaderStorageBufferArrayNonUniformIndexing; + descriptorIndexingFeatures.shaderStorageImageArrayNonUniformIndexing = physicalDeviceDescriptorIndexingFeatures.shaderStorageImageArrayNonUniformIndexing; + descriptorIndexingFeatures.shaderInputAttachmentArrayNonUniformIndexing = physicalDeviceDescriptorIndexingFeatures.shaderInputAttachmentArrayNonUniformIndexing; + descriptorIndexingFeatures.shaderUniformTexelBufferArrayNonUniformIndexing = physicalDeviceDescriptorIndexingFeatures.shaderUniformTexelBufferArrayNonUniformIndexing; + descriptorIndexingFeatures.shaderStorageTexelBufferArrayNonUniformIndexing = physicalDeviceDescriptorIndexingFeatures.shaderStorageTexelBufferArrayNonUniformIndexing; + descriptorIndexingFeatures.descriptorBindingPartiallyBound = physicalDeviceDescriptorIndexingFeatures.shaderStorageTexelBufferArrayNonUniformIndexing; + descriptorIndexingFeatures.descriptorBindingVariableDescriptorCount = physicalDeviceDescriptorIndexingFeatures.descriptorBindingVariableDescriptorCount; + descriptorIndexingFeatures.runtimeDescriptorArray = physicalDeviceDescriptorIndexingFeatures.runtimeDescriptorArray; VkPhysicalDeviceDepthClipEnableFeaturesEXT depthClipEnabled = {}; depthClipEnabled.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLIP_ENABLE_FEATURES_EXT; @@ -196,7 +198,7 @@ namespace AZ // If we are running Vulkan >= 1.2, then we must use VkPhysicalDeviceVulkan12Features instead // of VkPhysicalDeviceShaderFloat16Int8FeaturesKHR or VkPhysicalDeviceSeparateDepthStencilLayoutsFeaturesKHR. if (majorVersion >= 1 && minorVersion >= 2) - { + { vulkan12Features.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_FEATURES; vulkan12Features.drawIndirectCount = physicalDevice.GetPhysicalDeviceVulkan12Features().drawIndirectCount; vulkan12Features.shaderFloat16 = physicalDevice.GetPhysicalDeviceVulkan12Features().shaderFloat16; @@ -205,7 +207,7 @@ namespace AZ robustness2.pNext = &vulkan12Features; } else - { + { float16Int8.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT16_INT8_FEATURES_KHR; float16Int8.shaderFloat16 = physicalDevice.GetPhysicalDeviceFloat16Int8Features().shaderFloat16; diff --git a/Gems/Atom/RHI/Vulkan/Code/Source/RHI/PhysicalDevice.cpp b/Gems/Atom/RHI/Vulkan/Code/Source/RHI/PhysicalDevice.cpp index 81669ef73d..e3367b078a 100644 --- a/Gems/Atom/RHI/Vulkan/Code/Source/RHI/PhysicalDevice.cpp +++ b/Gems/Atom/RHI/Vulkan/Code/Source/RHI/PhysicalDevice.cpp @@ -133,6 +133,11 @@ namespace AZ return m_float16Int8Features; } + const VkPhysicalDeviceDescriptorIndexingFeaturesEXT& PhysicalDevice::GetPhysicalDeviceDescriptorIndexingFeatures() const + { + return m_descriptorIndexingFeatures; + } + const VkPhysicalDeviceVulkan12Features& PhysicalDevice::GetPhysicalDeviceVulkan12Features() const { return m_vulkan12Features; @@ -233,6 +238,7 @@ namespace AZ m_features.set(static_cast(DeviceFeature::SeparateDepthStencil), (m_separateDepthStencilFeatures.separateDepthStencilLayouts && VK_DEVICE_EXTENSION_SUPPORTED(KHR_separate_depth_stencil_layouts)) || (m_vulkan12Features.separateDepthStencilLayouts)); + m_features.set(static_cast(DeviceFeature::DescriptorIndexing), VK_DEVICE_EXTENSION_SUPPORTED(EXT_descriptor_indexing)); } void PhysicalDevice::CompileMemoryStatistics(RHI::MemoryStatisticsBuilder& builder) const @@ -266,9 +272,14 @@ namespace AZ if (VK_INSTANCE_EXTENSION_SUPPORTED(KHR_get_physical_device_properties2)) { // features + VkPhysicalDeviceDescriptorIndexingFeaturesEXT& descriptorIndexingFeatures = m_descriptorIndexingFeatures; + descriptorIndexingFeatures = {}; + descriptorIndexingFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES_EXT; + VkPhysicalDeviceDepthClipEnableFeaturesEXT& dephClipEnableFeatures = m_dephClipEnableFeatures; dephClipEnableFeatures = {}; dephClipEnableFeatures.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLIP_ENABLE_FEATURES_EXT; + descriptorIndexingFeatures.pNext = &dephClipEnableFeatures; VkPhysicalDeviceRobustness2FeaturesEXT& robustness2Feature = m_robutness2Features; robustness2Feature = {}; @@ -292,7 +303,7 @@ namespace AZ VkPhysicalDeviceFeatures2 deviceFeatures2 = {}; deviceFeatures2.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2; - deviceFeatures2.pNext = &dephClipEnableFeatures; + deviceFeatures2.pNext = &descriptorIndexingFeatures; vkGetPhysicalDeviceFeatures2KHR(vkPhysicalDevice, &deviceFeatures2); m_deviceFeatures = deviceFeatures2.features; @@ -302,7 +313,7 @@ namespace AZ m_conservativeRasterProperties.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CONSERVATIVE_RASTERIZATION_PROPERTIES_EXT; deviceProps2.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2_KHR; deviceProps2.pNext = &m_conservativeRasterProperties; - + m_rayTracingPipelineProperties.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PIPELINE_PROPERTIES_KHR; m_conservativeRasterProperties.pNext = &m_rayTracingPipelineProperties; diff --git a/Gems/Atom/RHI/Vulkan/Code/Source/RHI/PhysicalDevice.h b/Gems/Atom/RHI/Vulkan/Code/Source/RHI/PhysicalDevice.h index bd01a2e884..9667e03d3b 100644 --- a/Gems/Atom/RHI/Vulkan/Code/Source/RHI/PhysicalDevice.h +++ b/Gems/Atom/RHI/Vulkan/Code/Source/RHI/PhysicalDevice.h @@ -34,6 +34,7 @@ namespace AZ DrawIndirectCount, NullDescriptor, SeparateDepthStencil, + DescriptorIndexing, Count // Must be last }; @@ -57,6 +58,7 @@ namespace AZ const VkPhysicalDeviceDepthClipEnableFeaturesEXT& GetPhysicalDeviceDepthClipEnableFeatures() const; const VkPhysicalDeviceRobustness2FeaturesEXT& GetPhysicalDeviceRobutness2Features() const; const VkPhysicalDeviceShaderFloat16Int8FeaturesKHR& GetPhysicalDeviceFloat16Int8Features() const; + const VkPhysicalDeviceDescriptorIndexingFeaturesEXT& GetPhysicalDeviceDescriptorIndexingFeatures() const; const VkPhysicalDeviceVulkan12Features& GetPhysicalDeviceVulkan12Features() const; const VkPhysicalDeviceSeparateDepthStencilLayoutsFeaturesKHR& GetPhysicalDeviceSeparateDepthStencilFeatures() const; const VkPhysicalDeviceAccelerationStructurePropertiesKHR& GetPhysicalDeviceAccelerationStructureProperties() const; @@ -70,7 +72,6 @@ namespace AZ private: PhysicalDevice() = default; - void Init(VkPhysicalDevice vkPhysicalDevice); /////////////////////////////////////////////////////////////////// @@ -88,6 +89,7 @@ namespace AZ VkPhysicalDeviceDepthClipEnableFeaturesEXT m_dephClipEnableFeatures{}; VkPhysicalDeviceRobustness2FeaturesEXT m_robutness2Features{}; VkPhysicalDeviceShaderFloat16Int8FeaturesKHR m_float16Int8Features{}; + VkPhysicalDeviceDescriptorIndexingFeaturesEXT m_descriptorIndexingFeatures{}; VkPhysicalDeviceSeparateDepthStencilLayoutsFeaturesKHR m_separateDepthStencilFeatures{}; VkPhysicalDeviceAccelerationStructurePropertiesKHR m_accelerationStructureProperties{}; VkPhysicalDeviceRayTracingPipelinePropertiesKHR m_rayTracingPipelineProperties{}; From ab7f40e9911e7fb5a44f90e9d9bac70e995286e4 Mon Sep 17 00:00:00 2001 From: jromnoa Date: Wed, 21 Apr 2021 13:11:50 -0700 Subject: [PATCH 04/32] add AtomTest levels, add some updated test configuration options, still need to debug an error with a tool dependency --- .../PythonTests/atom_renderer/CMakeLists.txt | 25 +- .../Gem/PythonTests/atom_renderer/__init__.py | 10 + .../atom_hydra_scripts/__init__.py | 10 + .../hydra_AllLevels_OpenClose.py | 105 + .../atom_utils/automated_test_utils.py | 266 - .../atom_utils/hydra_test_utils.py | 166 - .../epb_scripts/epb_AllLevels_OpenClose.py | 102 - .../test_Atom_MainSuite.py | 10 +- .../ActorTest_100Actors.ly | 3 + .../Layers/BURT_Crouch.layer | 5816 +++++++++++++++++ .../Layers/Layer BURT_CrouchIdle.layer | 5816 +++++++++++++++++ .../Layers/Layer BURT_Idle.layer | 5816 +++++++++++++++++ .../Layers/Layer BURT_Idle_alt_a.layer | 5816 +++++++++++++++++ .../Layers/Layer Burt_jump_up.layer | 5816 +++++++++++++++++ .../LevelData/Environment.xml | 14 + .../LevelData/Heightmap.dat | 3 + .../LevelData/TerrainTexture.xml | 5 + .../LevelData/TimeOfDay.xml | 356 + .../LevelData/VegetationMap.dat | 3 + .../ActorTest_100Actors/filelist.xml | 6 + .../AtomLevels/ActorTest_100Actors/level.pak | 3 + .../AtomLevels/ActorTest_100Actors/tags.txt | 12 + .../ActorTest_MultipleActors.ly | 3 + .../LevelData/Environment.xml | 14 + .../LevelData/Heightmap.dat | 3 + .../ActorTest_MultipleActors/level.pak | 3 + .../ActorTest_SingleActor.ly | 3 + .../LevelData/Environment.xml | 14 + .../LevelData/Heightmap.dat | 3 + .../ActorTest_SingleActor/level.pak | 3 + .../AtomLevels/EmptyLevel/EmptyLevel.ly | 3 + .../EmptyLevel/LevelData/Environment.xml | 14 + .../EmptyLevel/LevelData/Heightmap.dat | 3 + .../EmptyLevel/LevelData/TerrainTexture.xml | 7 + .../EmptyLevel/LevelData/TimeOfDay.xml | 356 + .../EmptyLevel/LevelData/VegetationMap.dat | 3 + .../AtomLevels/EmptyLevel/TerrainTexture.pak | 3 + .../Levels/AtomLevels/EmptyLevel/level.pak | 3 + .../AtomLevels/EmptyLevel/terrain/cover.ctc | 3 + .../AtomLevels/ExampleLevel/ExampleLevel.ly | 3 + .../ExampleLevel/Layers/DefaultLayer.layer | 1177 ++++ .../ExampleLevel/LevelData/Environment.xml | 14 + .../ExampleLevel/LevelData/Heightmap.dat | 3 + .../ExampleLevel/LevelData/TerrainTexture.xml | 7 + .../ExampleLevel/LevelData/TimeOfDay.xml | 356 + .../ExampleLevel/LevelData/VegetationMap.dat | 3 + .../AtomLevels/ExampleLevel/filelist.xml | 6 + .../Levels/AtomLevels/ExampleLevel/level.pak | 3 + .../Levels/AtomLevels/ExampleLevel/tags.txt | 12 + .../ExampleLevel/terraintexture.pak | 3 + .../AtomLevels/Lucy/LevelData/Environment.xml | 14 + .../AtomLevels/Lucy/LevelData/Heightmap.dat | 3 + .../Lucy/LevelData/TerrainTexture.xml | 7 + .../AtomLevels/Lucy/LevelData/TimeOfDay.xml | 356 + .../Lucy/LevelData/VegetationMap.dat | 3 + .../Levels/AtomLevels/Lucy/Lucy.ly | 3 + .../Levels/AtomLevels/Lucy/TerrainTexture.pak | 3 + .../Levels/AtomLevels/Lucy/filelist.xml | 6 + .../Levels/AtomLevels/Lucy/level.pak | 3 + .../Levels/AtomLevels/Lucy/tags.txt | 12 + .../Levels/AtomLevels/Lucy/terrain/cover.ctc | 3 + .../MeshTest/LevelData/Environment.xml | 14 + .../MeshTest/LevelData/Heightmap.dat | 3 + .../MeshTest/LevelData/TerrainTexture.xml | 7 + .../MeshTest/LevelData/TimeOfDay.xml | 356 + .../MeshTest/LevelData/VegetationMap.dat | 3 + .../Levels/AtomLevels/MeshTest/MeshTest.ly | 3 + .../AtomLevels/MeshTest/TerrainTexture.pak | 3 + .../Levels/AtomLevels/MeshTest/filelist.xml | 6 + .../Levels/AtomLevels/MeshTest/level.pak | 3 + .../Levels/AtomLevels/MeshTest/tags.txt | 12 + .../AtomLevels/MeshTest/terrain/cover.ctc | 3 + .../NormalMapping/LevelData/Environment.xml | 14 + .../NormalMapping/LevelData/Heightmap.dat | 3 + .../LevelData/TerrainTexture.xml | 10 + .../NormalMapping/LevelData/TimeOfDay.xml | 356 + .../NormalMapping/LevelData/VegetationMap.dat | 3 + .../AtomLevels/NormalMapping/NormalMapping.ly | 3 + .../NormalMapping/TestNormalMapping.azsl | 101 + .../TestNormalMapping.materialtype | 60 + .../NormalMapping/TestNormalMapping.shader | 26 + .../NormalMapping/am_floor_tile.material | 13 + .../NormalMapping/am_floor_tile_ddn.tif | 3 + .../NormalMapping/am_floor_tile_diff.tif | 3 + .../am_floor_tile_normals.material | 12 + .../Levels/AtomLevels/NormalMapping/level.pak | 3 + .../AtomLevels/NormalMapping/lit_0.material | 11 + .../AtomLevels/NormalMapping/lit_1.material | 11 + .../AtomLevels/NormalMapping/lit_2.material | 11 + .../NormalMapping/normals_0.material | 11 + .../NormalMapping/normals_1.material | 11 + .../NormalMapping/normals_2.material | 11 + .../NormalMapping/raw_normal_map.material | 11 + .../AtomLevels/NormalMapping/test_ddn.tif | 3 + .../PbrMaterialChart/PbrMaterialChart.ly | 3 + .../AtomLevels/PbrMaterialChart/filelist.xml | 6 + .../AtomLevels/PbrMaterialChart/level.pak | 3 + .../leveldata/Environment.xml | 14 + .../PbrMaterialChart/leveldata/Heightmap.dat | 3 + .../leveldata/TerrainTexture.xml | 10 + .../PbrMaterialChart/leveldata/TimeOfDay.xml | 356 + .../leveldata/VegetationMap.dat | 3 + .../PbrMaterialChart/materials/basic.material | 32 + .../materials/basic_m00_r00.material | 13 + .../materials/basic_m00_r01.material | 13 + .../materials/basic_m00_r02.material | 13 + .../materials/basic_m00_r03.material | 13 + .../materials/basic_m00_r04.material | 13 + .../materials/basic_m00_r05.material | 13 + .../materials/basic_m00_r06.material | 13 + .../materials/basic_m00_r07.material | 13 + .../materials/basic_m00_r08.material | 13 + .../materials/basic_m00_r09.material | 13 + .../materials/basic_m00_r10.material | 13 + .../materials/basic_m10_r00.material | 13 + .../materials/basic_m10_r01.material | 13 + .../materials/basic_m10_r02.material | 13 + .../materials/basic_m10_r03.material | 13 + .../materials/basic_m10_r04.material | 13 + .../materials/basic_m10_r05.material | 13 + .../materials/basic_m10_r06.material | 13 + .../materials/basic_m10_r07.material | 13 + .../materials/basic_m10_r08.material | 13 + .../materials/basic_m10_r09.material | 13 + .../materials/basic_m10_r10.material | 13 + .../AtomLevels/PbrMaterialChart/tags.txt | 12 + .../LevelData/Environment.xml | 14 + .../LevelData/Heightmap.dat | 3 + .../LevelData/TerrainTexture.xml | 7 + .../LevelData/TimeOfDay.xml | 356 + .../LevelData/VegetationMap.dat | 3 + .../Peccy_example_dcc_materials.ly | 3 + .../TerrainTexture.pak | 3 + .../Peccy_example_dcc_materials/filelist.xml | 6 + .../Peccy_example_dcc_materials/level.pak | 3 + .../Peccy_example_dcc_materials/tags.txt | 12 + .../LevelData/Environment.xml | 14 + .../LevelData/Heightmap.dat | 3 + .../LevelData/TerrainTexture.xml | 7 + .../LevelData/TimeOfDay.xml | 356 + .../LevelData/VegetationMap.dat | 3 + .../Peccy_example_no_materials.ly | 3 + .../TerrainTexture.pak | 3 + .../Peccy_example_no_materials/filelist.xml | 6 + .../Peccy_example_no_materials/level.pak | 3 + .../Peccy_example_no_materials/tags.txt | 12 + .../ShadowTest/LevelData/Environment.xml | 14 + .../ShadowTest/LevelData/Heightmap.dat | 3 + .../ShadowTest/LevelData/TerrainTexture.xml | 7 + .../ShadowTest/LevelData/TimeOfDay.xml | 356 + .../ShadowTest/LevelData/VegetationMap.dat | 3 + .../AtomLevels/ShadowTest/ShadowTest.ly | 3 + .../AtomLevels/ShadowTest/TerrainTexture.pak | 3 + .../Levels/AtomLevels/ShadowTest/filelist.xml | 6 + .../Levels/AtomLevels/ShadowTest/level.pak | 3 + .../Levels/AtomLevels/ShadowTest/tags.txt | 12 + .../AtomLevels/ShadowTest/terrain/cover.ctc | 3 + .../Sponza/Layers/Geo.Lighting.layer | 913 +++ .../Levels/AtomLevels/Sponza/Layers/Geo.layer | 1389 ++++ .../AtomLevels/Sponza/Layers/Lighting.layer | 770 +++ .../Levels/AtomLevels/Sponza/Sponza.ly | 3 + .../Levels/AtomLevels/Sponza/filelist.xml | 6 + .../Levels/AtomLevels/Sponza/level.pak | 3 + .../Sponza/leveldata/Environment.xml | 14 + .../AtomLevels/Sponza/leveldata/Heightmap.dat | 3 + .../Sponza/leveldata/TerrainTexture.xml | 7 + .../AtomLevels/Sponza/leveldata/TimeOfDay.xml | 356 + .../Sponza/leveldata/VegetationMap.dat | 3 + .../Levels/AtomLevels/Sponza/tags.txt | 12 + .../AtomLevels/Sponza/terrain/cover.ctc | 3 + .../AtomLevels/Sponza/terraintexture.pak | 3 + .../SponzaDiffuseGI/Layers/Geometry.layer | 782 +++ .../SponzaDiffuseGI/Layers/Lights.layer | 1059 +++ .../SponzaDiffuseGI/LevelData/Environment.xml | 14 + .../SponzaDiffuseGI/LevelData/TimeOfDay.xml | 356 + .../SponzaDiffuseGI/SponzaDiffuseGI.ly | 3 + .../AtomLevels/SponzaDiffuseGI/filelist.xml | 6 + .../AtomLevels/SponzaDiffuseGI/level.pak | 3 + .../AtomLevels/SponzaDiffuseGI/tags.txt | 12 + .../AtomLevels/TangentSpace/TangentSpace.ly | 3 + .../TangentSpace/TestTangentSpace.azsl | 49 + .../TestTangentSpace.materialtype | 22 + .../TangentSpace/TestTangentSpace.shader | 26 + .../TangentSpace/TestTangentSpace_B.material | 8 + .../TangentSpace/TestTangentSpace_N.material | 8 + .../TangentSpace/TestTangentSpace_T.material | 8 + .../TangentSpace/cylinder_faceted.fbx | 3 + .../cylinder_faceted_rotated_uvs.fbx | 3 + .../TangentSpace/cylinder_lowres.fbx | 3 + .../AtomLevels/TangentSpace/filelist.xml | 6 + .../Levels/AtomLevels/TangentSpace/level.pak | 3 + .../TangentSpace/leveldata/Environment.xml | 14 + .../TangentSpace/leveldata/Heightmap.dat | 3 + .../TangentSpace/leveldata/TerrainTexture.xml | 10 + .../TangentSpace/leveldata/TimeOfDay.xml | 356 + .../TangentSpace/leveldata/VegetationMap.dat | 3 + .../AtomLevels/TangentSpace/plane_zup.fbx | 3 + .../lucy_high/LevelData/Environment.xml | 14 + .../lucy_high/LevelData/Heightmap.dat | 3 + .../lucy_high/LevelData/TerrainTexture.xml | 7 + .../lucy_high/LevelData/TimeOfDay.xml | 356 + .../lucy_high/LevelData/VegetationMap.dat | 3 + .../Levels/AtomLevels/lucy_high/filelist.xml | 6 + .../Levels/AtomLevels/lucy_high/level.pak | 3 + .../Levels/AtomLevels/lucy_high/lucy_high.ly | 3 + .../Levels/AtomLevels/lucy_high/tags.txt | 12 + .../AtomLevels/lucy_high/terrain/cover.ctc | 3 + .../AtomLevels/lucy_high/terraintexture.pak | 3 + .../LevelData/Environment.xml | 14 + .../LevelData/Heightmap.dat | 3 + .../LevelData/TerrainTexture.xml | 7 + .../LevelData/TimeOfDay.xml | 356 + .../LevelData/VegetationMap.dat | 3 + .../macbeth_shaderballs/TerrainTexture.pak | 3 + .../macbeth_shaderballs/filelist.xml | 6 + .../AtomLevels/macbeth_shaderballs/level.pak | 3 + .../macbeth_shaderballs.ly | 3 + .../AtomLevels/macbeth_shaderballs/tags.txt | 12 + .../macbeth_shaderballs/terrain/cover.ctc | 3 + 219 files changed, 42202 insertions(+), 559 deletions(-) create mode 100644 AutomatedTesting/Gem/PythonTests/atom_renderer/__init__.py create mode 100644 AutomatedTesting/Gem/PythonTests/atom_renderer/atom_hydra_scripts/__init__.py create mode 100644 AutomatedTesting/Gem/PythonTests/atom_renderer/atom_hydra_scripts/hydra_AllLevels_OpenClose.py delete mode 100644 AutomatedTesting/Gem/PythonTests/atom_renderer/atom_utils/automated_test_utils.py delete mode 100644 AutomatedTesting/Gem/PythonTests/atom_renderer/atom_utils/hydra_test_utils.py delete mode 100644 AutomatedTesting/Gem/PythonTests/atom_renderer/epb_scripts/epb_AllLevels_OpenClose.py rename AutomatedTesting/Gem/PythonTests/atom_renderer/{atom_python_scripts => }/test_Atom_MainSuite.py (89%) create mode 100644 AutomatedTesting/Levels/AtomLevels/ActorTest_100Actors/ActorTest_100Actors.ly create mode 100644 AutomatedTesting/Levels/AtomLevels/ActorTest_100Actors/Layers/BURT_Crouch.layer create mode 100644 AutomatedTesting/Levels/AtomLevels/ActorTest_100Actors/Layers/Layer BURT_CrouchIdle.layer create mode 100644 AutomatedTesting/Levels/AtomLevels/ActorTest_100Actors/Layers/Layer BURT_Idle.layer create mode 100644 AutomatedTesting/Levels/AtomLevels/ActorTest_100Actors/Layers/Layer BURT_Idle_alt_a.layer create mode 100644 AutomatedTesting/Levels/AtomLevels/ActorTest_100Actors/Layers/Layer Burt_jump_up.layer create mode 100644 AutomatedTesting/Levels/AtomLevels/ActorTest_100Actors/LevelData/Environment.xml create mode 100644 AutomatedTesting/Levels/AtomLevels/ActorTest_100Actors/LevelData/Heightmap.dat create mode 100644 AutomatedTesting/Levels/AtomLevels/ActorTest_100Actors/LevelData/TerrainTexture.xml create mode 100644 AutomatedTesting/Levels/AtomLevels/ActorTest_100Actors/LevelData/TimeOfDay.xml create mode 100644 AutomatedTesting/Levels/AtomLevels/ActorTest_100Actors/LevelData/VegetationMap.dat create mode 100644 AutomatedTesting/Levels/AtomLevels/ActorTest_100Actors/filelist.xml create mode 100644 AutomatedTesting/Levels/AtomLevels/ActorTest_100Actors/level.pak create mode 100644 AutomatedTesting/Levels/AtomLevels/ActorTest_100Actors/tags.txt create mode 100644 AutomatedTesting/Levels/AtomLevels/ActorTest_MultipleActors/ActorTest_MultipleActors.ly create mode 100644 AutomatedTesting/Levels/AtomLevels/ActorTest_MultipleActors/LevelData/Environment.xml create mode 100644 AutomatedTesting/Levels/AtomLevels/ActorTest_MultipleActors/LevelData/Heightmap.dat create mode 100644 AutomatedTesting/Levels/AtomLevels/ActorTest_MultipleActors/level.pak create mode 100644 AutomatedTesting/Levels/AtomLevels/ActorTest_SingleActor/ActorTest_SingleActor.ly create mode 100644 AutomatedTesting/Levels/AtomLevels/ActorTest_SingleActor/LevelData/Environment.xml create mode 100644 AutomatedTesting/Levels/AtomLevels/ActorTest_SingleActor/LevelData/Heightmap.dat create mode 100644 AutomatedTesting/Levels/AtomLevels/ActorTest_SingleActor/level.pak create mode 100644 AutomatedTesting/Levels/AtomLevels/EmptyLevel/EmptyLevel.ly create mode 100644 AutomatedTesting/Levels/AtomLevels/EmptyLevel/LevelData/Environment.xml create mode 100644 AutomatedTesting/Levels/AtomLevels/EmptyLevel/LevelData/Heightmap.dat create mode 100644 AutomatedTesting/Levels/AtomLevels/EmptyLevel/LevelData/TerrainTexture.xml create mode 100644 AutomatedTesting/Levels/AtomLevels/EmptyLevel/LevelData/TimeOfDay.xml create mode 100644 AutomatedTesting/Levels/AtomLevels/EmptyLevel/LevelData/VegetationMap.dat create mode 100644 AutomatedTesting/Levels/AtomLevels/EmptyLevel/TerrainTexture.pak create mode 100644 AutomatedTesting/Levels/AtomLevels/EmptyLevel/level.pak create mode 100644 AutomatedTesting/Levels/AtomLevels/EmptyLevel/terrain/cover.ctc create mode 100644 AutomatedTesting/Levels/AtomLevels/ExampleLevel/ExampleLevel.ly create mode 100644 AutomatedTesting/Levels/AtomLevels/ExampleLevel/Layers/DefaultLayer.layer create mode 100644 AutomatedTesting/Levels/AtomLevels/ExampleLevel/LevelData/Environment.xml create mode 100644 AutomatedTesting/Levels/AtomLevels/ExampleLevel/LevelData/Heightmap.dat create mode 100644 AutomatedTesting/Levels/AtomLevels/ExampleLevel/LevelData/TerrainTexture.xml create mode 100644 AutomatedTesting/Levels/AtomLevels/ExampleLevel/LevelData/TimeOfDay.xml create mode 100644 AutomatedTesting/Levels/AtomLevels/ExampleLevel/LevelData/VegetationMap.dat create mode 100644 AutomatedTesting/Levels/AtomLevels/ExampleLevel/filelist.xml create mode 100644 AutomatedTesting/Levels/AtomLevels/ExampleLevel/level.pak create mode 100644 AutomatedTesting/Levels/AtomLevels/ExampleLevel/tags.txt create mode 100644 AutomatedTesting/Levels/AtomLevels/ExampleLevel/terraintexture.pak create mode 100644 AutomatedTesting/Levels/AtomLevels/Lucy/LevelData/Environment.xml create mode 100644 AutomatedTesting/Levels/AtomLevels/Lucy/LevelData/Heightmap.dat create mode 100644 AutomatedTesting/Levels/AtomLevels/Lucy/LevelData/TerrainTexture.xml create mode 100644 AutomatedTesting/Levels/AtomLevels/Lucy/LevelData/TimeOfDay.xml create mode 100644 AutomatedTesting/Levels/AtomLevels/Lucy/LevelData/VegetationMap.dat create mode 100644 AutomatedTesting/Levels/AtomLevels/Lucy/Lucy.ly create mode 100644 AutomatedTesting/Levels/AtomLevels/Lucy/TerrainTexture.pak create mode 100644 AutomatedTesting/Levels/AtomLevels/Lucy/filelist.xml create mode 100644 AutomatedTesting/Levels/AtomLevels/Lucy/level.pak create mode 100644 AutomatedTesting/Levels/AtomLevels/Lucy/tags.txt create mode 100644 AutomatedTesting/Levels/AtomLevels/Lucy/terrain/cover.ctc create mode 100644 AutomatedTesting/Levels/AtomLevels/MeshTest/LevelData/Environment.xml create mode 100644 AutomatedTesting/Levels/AtomLevels/MeshTest/LevelData/Heightmap.dat create mode 100644 AutomatedTesting/Levels/AtomLevels/MeshTest/LevelData/TerrainTexture.xml create mode 100644 AutomatedTesting/Levels/AtomLevels/MeshTest/LevelData/TimeOfDay.xml create mode 100644 AutomatedTesting/Levels/AtomLevels/MeshTest/LevelData/VegetationMap.dat create mode 100644 AutomatedTesting/Levels/AtomLevels/MeshTest/MeshTest.ly create mode 100644 AutomatedTesting/Levels/AtomLevels/MeshTest/TerrainTexture.pak create mode 100644 AutomatedTesting/Levels/AtomLevels/MeshTest/filelist.xml create mode 100644 AutomatedTesting/Levels/AtomLevels/MeshTest/level.pak create mode 100644 AutomatedTesting/Levels/AtomLevels/MeshTest/tags.txt create mode 100644 AutomatedTesting/Levels/AtomLevels/MeshTest/terrain/cover.ctc create mode 100644 AutomatedTesting/Levels/AtomLevels/NormalMapping/LevelData/Environment.xml create mode 100644 AutomatedTesting/Levels/AtomLevels/NormalMapping/LevelData/Heightmap.dat create mode 100644 AutomatedTesting/Levels/AtomLevels/NormalMapping/LevelData/TerrainTexture.xml create mode 100644 AutomatedTesting/Levels/AtomLevels/NormalMapping/LevelData/TimeOfDay.xml create mode 100644 AutomatedTesting/Levels/AtomLevels/NormalMapping/LevelData/VegetationMap.dat create mode 100644 AutomatedTesting/Levels/AtomLevels/NormalMapping/NormalMapping.ly create mode 100644 AutomatedTesting/Levels/AtomLevels/NormalMapping/TestNormalMapping.azsl create mode 100644 AutomatedTesting/Levels/AtomLevels/NormalMapping/TestNormalMapping.materialtype create mode 100644 AutomatedTesting/Levels/AtomLevels/NormalMapping/TestNormalMapping.shader create mode 100644 AutomatedTesting/Levels/AtomLevels/NormalMapping/am_floor_tile.material create mode 100644 AutomatedTesting/Levels/AtomLevels/NormalMapping/am_floor_tile_ddn.tif create mode 100644 AutomatedTesting/Levels/AtomLevels/NormalMapping/am_floor_tile_diff.tif create mode 100644 AutomatedTesting/Levels/AtomLevels/NormalMapping/am_floor_tile_normals.material create mode 100644 AutomatedTesting/Levels/AtomLevels/NormalMapping/level.pak create mode 100644 AutomatedTesting/Levels/AtomLevels/NormalMapping/lit_0.material create mode 100644 AutomatedTesting/Levels/AtomLevels/NormalMapping/lit_1.material create mode 100644 AutomatedTesting/Levels/AtomLevels/NormalMapping/lit_2.material create mode 100644 AutomatedTesting/Levels/AtomLevels/NormalMapping/normals_0.material create mode 100644 AutomatedTesting/Levels/AtomLevels/NormalMapping/normals_1.material create mode 100644 AutomatedTesting/Levels/AtomLevels/NormalMapping/normals_2.material create mode 100644 AutomatedTesting/Levels/AtomLevels/NormalMapping/raw_normal_map.material create mode 100644 AutomatedTesting/Levels/AtomLevels/NormalMapping/test_ddn.tif create mode 100644 AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/PbrMaterialChart.ly create mode 100644 AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/filelist.xml create mode 100644 AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/level.pak create mode 100644 AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/leveldata/Environment.xml create mode 100644 AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/leveldata/Heightmap.dat create mode 100644 AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/leveldata/TerrainTexture.xml create mode 100644 AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/leveldata/TimeOfDay.xml create mode 100644 AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/leveldata/VegetationMap.dat create mode 100644 AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic.material create mode 100644 AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic_m00_r00.material create mode 100644 AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic_m00_r01.material create mode 100644 AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic_m00_r02.material create mode 100644 AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic_m00_r03.material create mode 100644 AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic_m00_r04.material create mode 100644 AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic_m00_r05.material create mode 100644 AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic_m00_r06.material create mode 100644 AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic_m00_r07.material create mode 100644 AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic_m00_r08.material create mode 100644 AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic_m00_r09.material create mode 100644 AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic_m00_r10.material create mode 100644 AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic_m10_r00.material create mode 100644 AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic_m10_r01.material create mode 100644 AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic_m10_r02.material create mode 100644 AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic_m10_r03.material create mode 100644 AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic_m10_r04.material create mode 100644 AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic_m10_r05.material create mode 100644 AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic_m10_r06.material create mode 100644 AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic_m10_r07.material create mode 100644 AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic_m10_r08.material create mode 100644 AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic_m10_r09.material create mode 100644 AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic_m10_r10.material create mode 100644 AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/tags.txt create mode 100644 AutomatedTesting/Levels/AtomLevels/Peccy_example_dcc_materials/LevelData/Environment.xml create mode 100644 AutomatedTesting/Levels/AtomLevels/Peccy_example_dcc_materials/LevelData/Heightmap.dat create mode 100644 AutomatedTesting/Levels/AtomLevels/Peccy_example_dcc_materials/LevelData/TerrainTexture.xml create mode 100644 AutomatedTesting/Levels/AtomLevels/Peccy_example_dcc_materials/LevelData/TimeOfDay.xml create mode 100644 AutomatedTesting/Levels/AtomLevels/Peccy_example_dcc_materials/LevelData/VegetationMap.dat create mode 100644 AutomatedTesting/Levels/AtomLevels/Peccy_example_dcc_materials/Peccy_example_dcc_materials.ly create mode 100644 AutomatedTesting/Levels/AtomLevels/Peccy_example_dcc_materials/TerrainTexture.pak create mode 100644 AutomatedTesting/Levels/AtomLevels/Peccy_example_dcc_materials/filelist.xml create mode 100644 AutomatedTesting/Levels/AtomLevels/Peccy_example_dcc_materials/level.pak create mode 100644 AutomatedTesting/Levels/AtomLevels/Peccy_example_dcc_materials/tags.txt create mode 100644 AutomatedTesting/Levels/AtomLevels/Peccy_example_no_materials/LevelData/Environment.xml create mode 100644 AutomatedTesting/Levels/AtomLevels/Peccy_example_no_materials/LevelData/Heightmap.dat create mode 100644 AutomatedTesting/Levels/AtomLevels/Peccy_example_no_materials/LevelData/TerrainTexture.xml create mode 100644 AutomatedTesting/Levels/AtomLevels/Peccy_example_no_materials/LevelData/TimeOfDay.xml create mode 100644 AutomatedTesting/Levels/AtomLevels/Peccy_example_no_materials/LevelData/VegetationMap.dat create mode 100644 AutomatedTesting/Levels/AtomLevels/Peccy_example_no_materials/Peccy_example_no_materials.ly create mode 100644 AutomatedTesting/Levels/AtomLevels/Peccy_example_no_materials/TerrainTexture.pak create mode 100644 AutomatedTesting/Levels/AtomLevels/Peccy_example_no_materials/filelist.xml create mode 100644 AutomatedTesting/Levels/AtomLevels/Peccy_example_no_materials/level.pak create mode 100644 AutomatedTesting/Levels/AtomLevels/Peccy_example_no_materials/tags.txt create mode 100644 AutomatedTesting/Levels/AtomLevels/ShadowTest/LevelData/Environment.xml create mode 100644 AutomatedTesting/Levels/AtomLevels/ShadowTest/LevelData/Heightmap.dat create mode 100644 AutomatedTesting/Levels/AtomLevels/ShadowTest/LevelData/TerrainTexture.xml create mode 100644 AutomatedTesting/Levels/AtomLevels/ShadowTest/LevelData/TimeOfDay.xml create mode 100644 AutomatedTesting/Levels/AtomLevels/ShadowTest/LevelData/VegetationMap.dat create mode 100644 AutomatedTesting/Levels/AtomLevels/ShadowTest/ShadowTest.ly create mode 100644 AutomatedTesting/Levels/AtomLevels/ShadowTest/TerrainTexture.pak create mode 100644 AutomatedTesting/Levels/AtomLevels/ShadowTest/filelist.xml create mode 100644 AutomatedTesting/Levels/AtomLevels/ShadowTest/level.pak create mode 100644 AutomatedTesting/Levels/AtomLevels/ShadowTest/tags.txt create mode 100644 AutomatedTesting/Levels/AtomLevels/ShadowTest/terrain/cover.ctc create mode 100644 AutomatedTesting/Levels/AtomLevels/Sponza/Layers/Geo.Lighting.layer create mode 100644 AutomatedTesting/Levels/AtomLevels/Sponza/Layers/Geo.layer create mode 100644 AutomatedTesting/Levels/AtomLevels/Sponza/Layers/Lighting.layer create mode 100644 AutomatedTesting/Levels/AtomLevels/Sponza/Sponza.ly create mode 100644 AutomatedTesting/Levels/AtomLevels/Sponza/filelist.xml create mode 100644 AutomatedTesting/Levels/AtomLevels/Sponza/level.pak create mode 100644 AutomatedTesting/Levels/AtomLevels/Sponza/leveldata/Environment.xml create mode 100644 AutomatedTesting/Levels/AtomLevels/Sponza/leveldata/Heightmap.dat create mode 100644 AutomatedTesting/Levels/AtomLevels/Sponza/leveldata/TerrainTexture.xml create mode 100644 AutomatedTesting/Levels/AtomLevels/Sponza/leveldata/TimeOfDay.xml create mode 100644 AutomatedTesting/Levels/AtomLevels/Sponza/leveldata/VegetationMap.dat create mode 100644 AutomatedTesting/Levels/AtomLevels/Sponza/tags.txt create mode 100644 AutomatedTesting/Levels/AtomLevels/Sponza/terrain/cover.ctc create mode 100644 AutomatedTesting/Levels/AtomLevels/Sponza/terraintexture.pak create mode 100644 AutomatedTesting/Levels/AtomLevels/SponzaDiffuseGI/Layers/Geometry.layer create mode 100644 AutomatedTesting/Levels/AtomLevels/SponzaDiffuseGI/Layers/Lights.layer create mode 100644 AutomatedTesting/Levels/AtomLevels/SponzaDiffuseGI/LevelData/Environment.xml create mode 100644 AutomatedTesting/Levels/AtomLevels/SponzaDiffuseGI/LevelData/TimeOfDay.xml create mode 100644 AutomatedTesting/Levels/AtomLevels/SponzaDiffuseGI/SponzaDiffuseGI.ly create mode 100644 AutomatedTesting/Levels/AtomLevels/SponzaDiffuseGI/filelist.xml create mode 100644 AutomatedTesting/Levels/AtomLevels/SponzaDiffuseGI/level.pak create mode 100644 AutomatedTesting/Levels/AtomLevels/SponzaDiffuseGI/tags.txt create mode 100644 AutomatedTesting/Levels/AtomLevels/TangentSpace/TangentSpace.ly create mode 100644 AutomatedTesting/Levels/AtomLevels/TangentSpace/TestTangentSpace.azsl create mode 100644 AutomatedTesting/Levels/AtomLevels/TangentSpace/TestTangentSpace.materialtype create mode 100644 AutomatedTesting/Levels/AtomLevels/TangentSpace/TestTangentSpace.shader create mode 100644 AutomatedTesting/Levels/AtomLevels/TangentSpace/TestTangentSpace_B.material create mode 100644 AutomatedTesting/Levels/AtomLevels/TangentSpace/TestTangentSpace_N.material create mode 100644 AutomatedTesting/Levels/AtomLevels/TangentSpace/TestTangentSpace_T.material create mode 100644 AutomatedTesting/Levels/AtomLevels/TangentSpace/cylinder_faceted.fbx create mode 100644 AutomatedTesting/Levels/AtomLevels/TangentSpace/cylinder_faceted_rotated_uvs.fbx create mode 100644 AutomatedTesting/Levels/AtomLevels/TangentSpace/cylinder_lowres.fbx create mode 100644 AutomatedTesting/Levels/AtomLevels/TangentSpace/filelist.xml create mode 100644 AutomatedTesting/Levels/AtomLevels/TangentSpace/level.pak create mode 100644 AutomatedTesting/Levels/AtomLevels/TangentSpace/leveldata/Environment.xml create mode 100644 AutomatedTesting/Levels/AtomLevels/TangentSpace/leveldata/Heightmap.dat create mode 100644 AutomatedTesting/Levels/AtomLevels/TangentSpace/leveldata/TerrainTexture.xml create mode 100644 AutomatedTesting/Levels/AtomLevels/TangentSpace/leveldata/TimeOfDay.xml create mode 100644 AutomatedTesting/Levels/AtomLevels/TangentSpace/leveldata/VegetationMap.dat create mode 100644 AutomatedTesting/Levels/AtomLevels/TangentSpace/plane_zup.fbx create mode 100644 AutomatedTesting/Levels/AtomLevels/lucy_high/LevelData/Environment.xml create mode 100644 AutomatedTesting/Levels/AtomLevels/lucy_high/LevelData/Heightmap.dat create mode 100644 AutomatedTesting/Levels/AtomLevels/lucy_high/LevelData/TerrainTexture.xml create mode 100644 AutomatedTesting/Levels/AtomLevels/lucy_high/LevelData/TimeOfDay.xml create mode 100644 AutomatedTesting/Levels/AtomLevels/lucy_high/LevelData/VegetationMap.dat create mode 100644 AutomatedTesting/Levels/AtomLevels/lucy_high/filelist.xml create mode 100644 AutomatedTesting/Levels/AtomLevels/lucy_high/level.pak create mode 100644 AutomatedTesting/Levels/AtomLevels/lucy_high/lucy_high.ly create mode 100644 AutomatedTesting/Levels/AtomLevels/lucy_high/tags.txt create mode 100644 AutomatedTesting/Levels/AtomLevels/lucy_high/terrain/cover.ctc create mode 100644 AutomatedTesting/Levels/AtomLevels/lucy_high/terraintexture.pak create mode 100644 AutomatedTesting/Levels/AtomLevels/macbeth_shaderballs/LevelData/Environment.xml create mode 100644 AutomatedTesting/Levels/AtomLevels/macbeth_shaderballs/LevelData/Heightmap.dat create mode 100644 AutomatedTesting/Levels/AtomLevels/macbeth_shaderballs/LevelData/TerrainTexture.xml create mode 100644 AutomatedTesting/Levels/AtomLevels/macbeth_shaderballs/LevelData/TimeOfDay.xml create mode 100644 AutomatedTesting/Levels/AtomLevels/macbeth_shaderballs/LevelData/VegetationMap.dat create mode 100644 AutomatedTesting/Levels/AtomLevels/macbeth_shaderballs/TerrainTexture.pak create mode 100644 AutomatedTesting/Levels/AtomLevels/macbeth_shaderballs/filelist.xml create mode 100644 AutomatedTesting/Levels/AtomLevels/macbeth_shaderballs/level.pak create mode 100644 AutomatedTesting/Levels/AtomLevels/macbeth_shaderballs/macbeth_shaderballs.ly create mode 100644 AutomatedTesting/Levels/AtomLevels/macbeth_shaderballs/tags.txt create mode 100644 AutomatedTesting/Levels/AtomLevels/macbeth_shaderballs/terrain/cover.ctc diff --git a/AutomatedTesting/Gem/PythonTests/atom_renderer/CMakeLists.txt b/AutomatedTesting/Gem/PythonTests/atom_renderer/CMakeLists.txt index 729da64e57..3510048109 100644 --- a/AutomatedTesting/Gem/PythonTests/atom_renderer/CMakeLists.txt +++ b/AutomatedTesting/Gem/PythonTests/atom_renderer/CMakeLists.txt @@ -9,33 +9,18 @@ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # -# -# 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. -# - ################################################################################ -# Atom Renderer Automated Tests -# Runs EditorPythonBindings scripts inside the Editor to verify test results. +# Atom Renderer: Automated Tests +# Runs EditorPythonBindings (hydra) scripts inside the Editor to verify test results for the Atom renderer. +# Utilizes a combination of screenshot comparisons and log files to verify test results. ################################################################################ -add_subdirectory(atom_python_scripts) -add_subdirectory(atom_utils) -add_subdirectory(epb_utils) -add_subdirectory(epb_scripts) - if(PAL_TRAIT_BUILD_HOST_TOOLS AND PAL_TRAIT_BUILD_TESTS_SUPPORTED AND AutomatedTesting IN_LIST LY_PROJECTS) ly_add_pytest( - NAME AtomRenderer::HydraEPBTestsMain + NAME AtomRenderer::HydraTestsMain TEST_REQUIRES gpu TEST_SUITE main - PATH ${CMAKE_CURRENT_LIST_DIR}/atom_python_scripts/test_Atom_MainSuite.py + PATH ${CMAKE_CURRENT_LIST_DIR}/test_Atom_MainSuite.py TEST_SERIAL TIMEOUT 1200 RUNTIME_DEPENDENCIES diff --git a/AutomatedTesting/Gem/PythonTests/atom_renderer/__init__.py b/AutomatedTesting/Gem/PythonTests/atom_renderer/__init__.py new file mode 100644 index 0000000000..79f8fa4422 --- /dev/null +++ b/AutomatedTesting/Gem/PythonTests/atom_renderer/__init__.py @@ -0,0 +1,10 @@ +""" +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/AutomatedTesting/Gem/PythonTests/atom_renderer/atom_hydra_scripts/__init__.py b/AutomatedTesting/Gem/PythonTests/atom_renderer/atom_hydra_scripts/__init__.py new file mode 100644 index 0000000000..79f8fa4422 --- /dev/null +++ b/AutomatedTesting/Gem/PythonTests/atom_renderer/atom_hydra_scripts/__init__.py @@ -0,0 +1,10 @@ +""" +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/AutomatedTesting/Gem/PythonTests/atom_renderer/atom_hydra_scripts/hydra_AllLevels_OpenClose.py b/AutomatedTesting/Gem/PythonTests/atom_renderer/atom_hydra_scripts/hydra_AllLevels_OpenClose.py new file mode 100644 index 0000000000..2b7fcd6cc6 --- /dev/null +++ b/AutomatedTesting/Gem/PythonTests/atom_renderer/atom_hydra_scripts/hydra_AllLevels_OpenClose.py @@ -0,0 +1,105 @@ +""" +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 hydra/EPB script opens and closes every possible Atom level. +""" +import os +import sys + +import azlmbr.legacy.general as general +import azlmbr.paths + +sys.path.append(os.path.join(azlmbr.paths.devroot, 'AutomatedTesting', 'Gem', 'PythonTests')) + +from automatedtesting_shared.editor_test_helper import EditorTestHelper + +LEVELS = os.listdir(os.path.join(azlmbr.paths.devroot, "AutomatedTesting", "Levels", "AtomLevels")) + + +class TestAllLevelsOpenClose(EditorTestHelper): + """Tests that all expected Atom levels can be opened and load successfully.""" + def __init__(self): + EditorTestHelper.__init__(self, log_prefix="Atom_TestAllLevelsOpenClose", args=["level"]) + + def run(self): + """ + 1. Open & close all valid test levels in the Editor. + 2. Every time a level is opened, verify it loads correctly and the Editor remains stable. + """ + + def after_level_load(): + """Function to call after creating/opening a level to ensure it loads.""" + # Give everything a second to initialize. + general.idle_enable(True) + general.update_viewport() + general.idle_wait(0.5) # half a second is more than enough for updating the viewport. + + # Close out problematic windows, FPS meters, and anti-aliasing. + if general.is_helpers_shown(): # Turn off the helper gizmos if visible + general.toggle_helpers() + if general.is_pane_visible("Error Report"): # Close Error Report windows that block focus. + general.close_pane("Error Report") + if general.is_pane_visible("Error Log"): # Close Error Log windows that block focus. + general.close_pane("Error Log") + general.run_console("r_displayInfo=0") + general.run_console("r_antialiasingmode=0") + + return True + + # Create a new level. + heightmap_resolution = 512 + heightmap_meters_per_pixel = 1 + terrain_texture_resolution = 412 + use_terrain = False + + # Return codes are ECreateLevelResult defined in CryEdit.h + return_code = general.create_level_no_prompt( + self.args['level'], + heightmap_resolution, + heightmap_meters_per_pixel, + terrain_texture_resolution, + use_terrain + ) + if return_code == 1: + general.log(f"{self.args['level']} level already exists") + elif return_code == 2: + general.log("Failed to create directory") + elif return_code == 3: + general.log("Directory length is too long") + elif return_code != 0: + general.log("Unknown error, failed to create level") + else: + general.log(f"{self.args['level']} level created successfully") + after_level_load() + + # Open all valid test levels. + failed_to_open = [] + LEVELS.append(self.args['level']) # Update LEVELS constant for created level. + for level in LEVELS: + if general.is_idle_enabled() and (general.get_current_level_name() == level): + general.log(f"Level {level} already open.") + else: + general.log(f"Opening level {level}") + general.open_level_no_prompt(level) + self.wait_for_condition(function=lambda: general.get_current_level_name() == level, + timeout_in_seconds=2.0) + result = (general.get_current_level_name() == level) and after_level_load() + if result: + general.log(f"Successfully opened {level}") + else: + general.log(f"{level} failed to open") + failed_to_open.append(level) + + if failed_to_open: + general.log(f"The following levels failed to open: {failed_to_open}") + + +test = TestAllLevelsOpenClose() +test.run() diff --git a/AutomatedTesting/Gem/PythonTests/atom_renderer/atom_utils/automated_test_utils.py b/AutomatedTesting/Gem/PythonTests/atom_renderer/atom_utils/automated_test_utils.py deleted file mode 100644 index 6e5b12982a..0000000000 --- a/AutomatedTesting/Gem/PythonTests/atom_renderer/atom_utils/automated_test_utils.py +++ /dev/null @@ -1,266 +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. -""" -import time -import azlmbr.legacy.general as general -import azlmbr.atom - - -class FailFast(BaseException): - """ - Raise to stop proceeding through test steps. - """ - - pass - - -class TestHelper: - @staticmethod - def init_idle(): - general.idle_enable(True) - general.idle_wait_frames(1) - - @staticmethod - def open_level(level): - # type: (str, ) -> None - """ - :param level: the name of the level folder in MestTest\\ - - :return: None - """ - result = general.open_level(level) # TO-DO: Check if success opening level - if result: - Report.info("Open level {}".format(level)) - else: - Report.failure("Assert: failed to open level {}".format(level)) - general.idle_wait_frames(1) - - @staticmethod - def enter_game_mode(msgtuple_success_fail): - # type: (tuple) -> None - """ - :param msgtuple_success_fail: The tuple with the expected/unexpected messages for entering game mode. - - :return: None - """ - Report.info("Entering game mode") - general.enter_game_mode() - general.idle_wait_frames(1) - Report.critical_result(msgtuple_success_fail, general.is_in_game_mode()) - - @staticmethod - def exit_game_mode(msgtuple_success_fail): - # type: (tuple) -> None - """ - :param msgtuple_success_fail: The tuple with the expected/unexpected messages for exiting game mode. - - :return: None - """ - general.exit_game_mode() - general.idle_wait_frames(1) - Report.critical_result(msgtuple_success_fail, not general.is_in_game_mode()) - - @staticmethod - def close_editor(): - general.exit_no_prompt() - - @staticmethod - def fail_fast(message=None): - # type: (str) -> None - """ - A state has been reached where progressing in the test is not viable. - raises FailFast - :return: None - """ - Report.info("Failing fast. Raising an exception and shutting down the editor.") - if message: - Report.info("Fail fast message: {}".format(message)) - TestHelper.close_editor() - raise FailFast() - - @staticmethod - def wait_for_condition(function, timeout_in_seconds=2.0): - # type: (function, float) -> bool - """ - **** Will be replaced by a function of the same name exposed in the Engine***** - a function to run until it returns True or timeout is reached - the function can have no parameters and - waiting idle__wait_* is handled here not in the function - - :param function: a function that returns a boolean indicating a desired condition is achieved - :param timeout_in_seconds: when reached, function execution is abandoned and False is returned - """ - - with Timeout(timeout_in_seconds) as t: - while True: - general.idle_wait(1.0) - if t.timed_out: - return False - - ret = function() - if not isinstance(ret, bool): - raise TypeError("return value for wait_for_condition function must be a bool") - if ret: - return True - - @staticmethod - def find_entities(entity_name): - search_filter = azlmbr.entity.SearchFilter() - search_filter.names = [entity_name] - searched_entities = azlmbr.entity.SearchBus(azlmbr.bus.Broadcast, 'SearchEntities', search_filter) - return searched_entities - - @staticmethod - def attach_component_to_entity(entityId, componentName): - # type: (azlmbr.entity.EntityId, str) -> azlmbr.entity.EntityComponentIdPair - """ - Adds the component if not added already. - If successful, returns the EntityComponentIdPair, otherwise returns None. - """ - typeIdsList = azlmbr.editor.EditorComponentAPIBus(azlmbr.bus.Broadcast, 'FindComponentTypeIdsByEntityType', - [componentName], 0) - general.log("Components found = {}".format(len(typeIdsList))) - if len(typeIdsList) < 1: - general.log(f"ERROR: A component class with name {componentName} doesn't exist") - return None - elif len(typeIdsList) > 1: - general.log(f"ERROR: Found more than one component classes with same name: {componentName}") - return None - # Before adding the component let's check if it is already attached to the entity. - componentOutcome = azlmbr.editor.EditorComponentAPIBus(azlmbr.bus.Broadcast, 'GetComponentOfType', entityId, - typeIdsList[0]) - if componentOutcome.IsSuccess(): - return componentOutcome.GetValue() # In this case the value is not a list. - componentOutcome = azlmbr.editor.EditorComponentAPIBus(azlmbr.bus.Broadcast, 'AddComponentsOfType', entityId, - typeIdsList) - if componentOutcome.IsSuccess(): - general.log(f"{componentName} Component added to entity.") - return componentOutcome.GetValue()[0] - general.log(f"ERROR: Failed to add component [{componentName}] to entity") - return None - - @staticmethod - def get_component_property(component, propertyPath): - return azlmbr.editor.EditorComponentAPIBus( - azlmbr.bus.Broadcast, - 'GetComponentProperty', - component, - propertyPath) - - @staticmethod - def set_component_property(component, propertyPath, value): - azlmbr.editor.EditorComponentAPIBus( - azlmbr.bus.Broadcast, - 'SetComponentProperty', - component, - propertyPath, - value) - - @staticmethod - def get_property_list(Component): - property_list = azlmbr.editor.EditorComponentAPIBus(azlmbr.bus.Broadcast, 'BuildComponentPropertyList', - Component) - return property_list - - @staticmethod - def compare_property_list(Component, PropertyList): - property_list = TestHelper.get_property_list(Component) - if set(property_list) == set(PropertyList): - general.log("Property list of component is correct.") - - @staticmethod - def isclose(a: float, b: float, rel_tol: float = 1e-9, abs_tol: float = 0.0) -> bool: - return abs(a - b) <= max(rel_tol * max(abs(a), abs(b)), abs_tol) - - -class Timeout: - # type: (float) -> None - """ - contextual timeout - :param seconds: float seconds to allow before timed_out is True - """ - - def __init__(self, seconds): - self.seconds = seconds - - def __enter__(self): - self.die_after = time.time() + self.seconds - return self - - def __exit__(self, type, value, traceback): - pass - - @property - def timed_out(self): - return time.time() > self.die_after - - -# NOTE: implementation of reports will be changed to use a better mechanism rather than print - - -class Report: - @staticmethod - def info(msg): - print("Info: {}".format(msg)) - - @staticmethod - def success(msgtuple_success_fail): - print("Success: {}".format(msgtuple_success_fail[0])) - - @staticmethod - def failure(msgtuple_success_fail): - print("Failure: {}".format(msgtuple_success_fail[1])) - - @staticmethod - def result(msgtuple_success_fail, condition): - if not isinstance(condition, bool): - raise TypeError("condition argument must be a bool") - - if condition: - Report.success(msgtuple_success_fail) - else: - Report.failure(msgtuple_success_fail) - return condition - - @staticmethod - def critical_result(msgtuple_success_fail, condition, fast_fail_message=None): - # type: (tuple, bool, str) -> None - """ - if condition is False we will fail fast - - :param msgtuple_success_fail: messages to print based on the condition - :param condition: success (True) or failure (False) - :param fast_fail_message: [optional] message to include on fast fail - """ - if not isinstance(condition, bool): - raise TypeError("condition argument must be a bool") - - if not Report.result(msgtuple_success_fail, condition): - TestHelper.fail_fast(fast_fail_message) - - @staticmethod - def info_vector3(vector3, label="", magnitude=None): - # type: (azlmbr.math.Vector3, str, float) -> None - """ - prints the vector to the Report.info log. If applied, label will print first, - followed by the vector's values (x, y, z,) to 2 decimal places. Lastly if the - magnitude is supplied, it will print on the third line. - - :param vector3: a azlmbr.math.Vector3 object to print - prints in [x: , y: , z: ] format. - :param label: [optional] A string to print before printing the vector3's contents - :param magnitude: [optional] the vector's magnitude to print after the vector's contents - :return: None - """ - if label != "": - Report.info(label) - Report.info(" x: {:.2f}, y: {:.2f}, z: {:.2f}".format(vector3.x, vector3.y, vector3.z)) - if magnitude is not None: - Report.info(" magnitude: {:.2f}".format(magnitude)) diff --git a/AutomatedTesting/Gem/PythonTests/atom_renderer/atom_utils/hydra_test_utils.py b/AutomatedTesting/Gem/PythonTests/atom_renderer/atom_utils/hydra_test_utils.py deleted file mode 100644 index 30aa320ab6..0000000000 --- a/AutomatedTesting/Gem/PythonTests/atom_renderer/atom_utils/hydra_test_utils.py +++ /dev/null @@ -1,166 +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. -""" -import logging -import os - -import ly_test_tools.log.log_monitor -import ly_test_tools.environment.process_utils as process_utils -import ly_test_tools.environment.waiter as waiter -from ly_remote_console.remote_console_commands import ( - send_command_and_expect_response as send_command_and_expect_response, -) -from automatedtesting_shared.network_utils import check_for_listening_port - -logger = logging.getLogger(__name__) - - -def teardown_editor(editor): - """ - :param editor: Configured editor object - :return: - """ - process_utils.kill_processes_named("AssetProcessor.exe") - logger.debug("Ensuring Editor is stopped") - editor.ensure_stopped() - - -def launch_and_validate_results( - request, - test_directory, - editor, - editor_script, - expected_lines, - unexpected_lines=[], - halt_on_unexpected=False, - log_file_name="Editor.log", - cfg_args=[], - timeout=60, -): - """ - Creates a temporary config file for Hydra execution, runs the Editor with the specified script, and monitors for - expected log lines. - :param request: Special fixture providing information of the requesting test function. - :param test_directory: Path to test directory that editor_script lives in. - :param editor: Configured editor object to run test against. - :param editor_script: Name of script that will execute in the Editor. - :param expected_lines: Expected lines to search log for. - :param unexpected_lines: Unexpected lines to search log for. Defaults to none. - :param halt_on_unexpected: Halts test if unexpected lines are found. Defaults to False. - :param log_file_name: Name of the log file created by the editor. Defaults to 'Editor.log' - :param cfg_args: Additional arguments for CFG, such as LevelName. - :param timeout: Length of time for test to run. Default is 60. - """ - test_case = os.path.join(test_directory, editor_script) - request.addfinalizer(lambda: teardown_editor(editor)) - logger.debug("Running automated test: {}".format(editor_script)) - if editor_script != "": - editor.args.extend( - [ - "--skipWelcomeScreenDialog", - "--autotest_mode", - "--runpython", - test_case, - "--runpythonargs", - ] - ) - editor.args.extend([" ".join(cfg_args)]) - with editor.start(): - editorlog_file = os.path.join(editor.workspace.paths.project_log(), log_file_name) - # Log monitor requires the file to exist. - logger.debug("Waiting until log file <{}> exists...".format(editorlog_file)) - waiter.wait_for( - lambda: os.path.exists(editorlog_file), - timeout=60, - exc=("Log file '{}' was never created by another process.".format(editorlog_file)), - interval=1, - ) - logger.debug("Done! log file <{}> exists.".format(editorlog_file)) - log_monitor = ly_test_tools.log.log_monitor.LogMonitor(launcher=editor, log_file_path=editorlog_file) - log_monitor.monitor_log_for_lines( - expected_lines=expected_lines, - unexpected_lines=unexpected_lines, - halt_on_unexpected=halt_on_unexpected, - timeout=timeout, - ) - - -def launch_and_validate_results_launcher( - launcher, - level, - remote_console_instance, - expected_lines, - unexpected_lines=[], - halt_on_unexpected=False, - port_listener_timeout=120, - log_monitor_timeout=60, - remote_console_port=4600, -): - """ - Runs the launcher with the specified level, and monitors Game.log for expected lines. - :param launcher: Configured launcher object to run test against. - :param level: The level to load in the launcher. - :param remote_console_instance: Configured Remote Console object. - :param expected_lines: Expected lines to search log for. - :param unexpected_lines: Unexpected lines to search log for. Defaults to none. - :param halt_on_unexpected: Halts test if unexpected lines are found. Defaults to False. - :param port_listener_timeout: Timeout for verifying successful connection to Remote Console. - :param log_monitor_timeout: Timeout for monitoring for lines in Game.log - :param remote_console_port: The port used to communicate with the Remote Console. - """ - - with launcher.start(): - gamelog_file = os.path.join(launcher.workspace.paths.project_log(), "Game.log") - - # Ensure Remote Console can be reached - waiter.wait_for( - lambda: check_for_listening_port(remote_console_port), - port_listener_timeout, - exc=AssertionError("Port {} not listening.".format(remote_console_port)), - ) - remote_console_instance.start(timeout=30) - - # Load the specified level in the launcher - send_command_and_expect_response(remote_console_instance, f"map {level}", "LEVEL_LOAD_COMPLETE", timeout=30) - - # Log monitor requires the file to exist - logger.debug("Waiting until log file <{}> exists...".format(gamelog_file)) - waiter.wait_for( - lambda: os.path.exists(gamelog_file), - timeout=60, - exc=("Log file '{}' was never created by another process.".format(gamelog_file)), - interval=1, - ) - logger.debug("Done! log file <{}> exists.".format(gamelog_file)) - log_monitor = ly_test_tools.log.log_monitor.LogMonitor(launcher=launcher, log_file_path=gamelog_file) - # Workaround for LY-110925 - Wait for log file to be opened before checking for expected lines. This is done in - # monitor_log_for_lines as well, but has a low timeout with no way to currently override - logger.debug("Waiting for log file '{}' to be opened by another process.".format(gamelog_file)) - # Check for expected/unexpected lines - log_monitor.monitor_log_for_lines( - expected_lines=expected_lines, - unexpected_lines=unexpected_lines, - halt_on_unexpected=halt_on_unexpected, - timeout=log_monitor_timeout, - ) - - -def remove_files(artifact_path, suffix): - """ - Removes files with the specified suffix from the specified path - :param artifact_path: Path to search for files - :param suffix: File extension to remove - """ - if not os.path.isdir(artifact_path): - return - - for file_name in os.listdir(artifact_path): - if file_name.endswith(suffix): - os.remove(os.path.join(artifact_path, file_name)) diff --git a/AutomatedTesting/Gem/PythonTests/atom_renderer/epb_scripts/epb_AllLevels_OpenClose.py b/AutomatedTesting/Gem/PythonTests/atom_renderer/epb_scripts/epb_AllLevels_OpenClose.py deleted file mode 100644 index 7d6b2744de..0000000000 --- a/AutomatedTesting/Gem/PythonTests/atom_renderer/epb_scripts/epb_AllLevels_OpenClose.py +++ /dev/null @@ -1,102 +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. - -This hydra/EPB script opens and closes every possible Atom level. -""" -import os -import sys - -import azlmbr.legacy.general as general -import azlmbr.legacy.settings as settings -import azlmbr.paths - -sys.path.append(os.path.join(azlmbr.paths.devroot, 'AutomatedTesting', 'Gem', 'PythonTests')) - -from atom_renderer.atom_utils.automated_test_utils import TestHelper as helper - -LEVELS = os.listdir(os.path.join(azlmbr.paths.devroot, "AutomatedTesting", "Levels", "AtomLevels")) - - -class TestAllLevelsOpenClose(object): - """Reserved for the test name.""" - pass - - -def run(): - """ - 1. Open & close all valid test levels in the Editor. - 2. Every time a level is opened, verify it loads correctly and the Editor remains stable. - """ - - def after_level_load(): - """Function to call after creating/opening a level to ensure it loads.""" - # Give everything a second to initialize. - general.idle_enable(True) - general.update_viewport() - general.idle_wait(0.5) # half a second is more than enough for updating the viewport. - - # Close out problematic windows, FPS meters, and anti-aliasing. - if general.is_helpers_shown(): # Turn off the helper gizmos if visible - general.toggle_helpers() - if general.is_pane_visible("Error Report"): # Close Error Report windows that block focus. - general.close_pane("Error Report") - if general.is_pane_visible("Error Log"): # Close Error Log windows that block focus. - general.close_pane("Error Log") - general.run_console("r_displayInfo=0") - general.run_console("r_antialiasingmode=0") - - return True - - # Create a new level. - new_level_name = "tmp_level" # Specified in AllLevelsOpenClose_test.py - heightmap_resolution = 512 - heightmap_meters_per_pixel = 1 - terrain_texture_resolution = 412 - use_terrain = False - - # Return codes are ECreateLevelResult defined in CryEdit.h - return_code = general.create_level_no_prompt( - new_level_name, heightmap_resolution, heightmap_meters_per_pixel, terrain_texture_resolution, use_terrain) - if return_code == 1: - general.log(f"{new_level_name} level already exists") - elif return_code == 2: - general.log("Failed to create directory") - elif return_code == 3: - general.log("Directory length is too long") - elif return_code != 0: - general.log("Unknown error, failed to create level") - else: - general.log(f"{new_level_name} level created successfully") - after_level_load() - - # Open all valid test levels. - failed_to_open = [] - LEVELS.append(new_level_name) # Update LEVELS constant for created level. - for level in LEVELS: - if general.is_idle_enabled() and (general.get_current_level_name() == level): - general.log(f"Level {level} already open.") - else: - general.log(f"Opening level {level}") - general.open_level_no_prompt(level) - helper.wait_for_condition(function=lambda: general.get_current_level_name() == level, - timeout_in_seconds=2.0) - result = (general.get_current_level_name() == level) and after_level_load() - if result: - general.log(f"Successfully opened {level}") - else: - general.log(f"{level} failed to open") - failed_to_open.append(level) - - if failed_to_open: - general.log(f"The following levels failed to open: {failed_to_open}") - - -if __name__ == "__main__": - run() diff --git a/AutomatedTesting/Gem/PythonTests/atom_renderer/atom_python_scripts/test_Atom_MainSuite.py b/AutomatedTesting/Gem/PythonTests/atom_renderer/test_Atom_MainSuite.py similarity index 89% rename from AutomatedTesting/Gem/PythonTests/atom_renderer/atom_python_scripts/test_Atom_MainSuite.py rename to AutomatedTesting/Gem/PythonTests/atom_renderer/test_Atom_MainSuite.py index 056c7a4af2..6a9f86d151 100644 --- a/AutomatedTesting/Gem/PythonTests/atom_renderer/atom_python_scripts/test_Atom_MainSuite.py +++ b/AutomatedTesting/Gem/PythonTests/atom_renderer/test_Atom_MainSuite.py @@ -18,11 +18,11 @@ import pytest pytest.importorskip("ly_test_tools") import ly_test_tools.environment.file_system as file_system -from atom_renderer.atom_utils import hydra_test_utils as hydra +import automatedtesting_shared.hydra_test_utils as hydra logger = logging.getLogger(__name__) EDITOR_TIMEOUT = 60 -TEST_DIRECTORY = os.path.dirname(__file__) +TEST_DIRECTORY = os.path.join(os.path.dirname(__file__), "atom_hydra_scripts") # Go to the project root directory PROJECT_DIRECTORY = PurePath(TEST_DIRECTORY) @@ -34,7 +34,7 @@ if len(PROJECT_DIRECTORY.parents) > 5: @pytest.mark.parametrize("project", ["AutomatedTesting"]) @pytest.mark.parametrize("launcher_platform", ['windows_editor']) @pytest.mark.parametrize("level", ["tmp_level"]) -class TestAllLevelsOpenClose(object): +class TestAtomLevels(object): @pytest.fixture(autouse=True) def setup_teardown(self, request, workspace, project, level): # Cleanup our temp level @@ -64,7 +64,7 @@ class TestAllLevelsOpenClose(object): "C34428175", ) - def test_AllLevelsOpenClose(self, request, editor, level, workspace, project, launcher_platform): + def test_AllLevels_OpenClose(self, request, editor, level, workspace, project, launcher_platform): cfg_args = [level] test_levels = os.path.join(str(PROJECT_DIRECTORY), "Levels", "AtomLevels") @@ -82,7 +82,7 @@ class TestAllLevelsOpenClose(object): request, TEST_DIRECTORY, editor, - "AllLevelsOpenClose_test_case.py", + "hydra_AllLevels_OpenClose.py", timeout=EDITOR_TIMEOUT, expected_lines=expected_lines, unexpected_lines=unexpected_lines, diff --git a/AutomatedTesting/Levels/AtomLevels/ActorTest_100Actors/ActorTest_100Actors.ly b/AutomatedTesting/Levels/AtomLevels/ActorTest_100Actors/ActorTest_100Actors.ly new file mode 100644 index 0000000000..abd015a380 --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/ActorTest_100Actors/ActorTest_100Actors.ly @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:830ce7490fea796988129908e5e18fa0ab9fb9a9e7213ae21d300cfbca8ea9d2 +size 9450 diff --git a/AutomatedTesting/Levels/AtomLevels/ActorTest_100Actors/Layers/BURT_Crouch.layer b/AutomatedTesting/Levels/AtomLevels/ActorTest_100Actors/Layers/BURT_Crouch.layer new file mode 100644 index 0000000000..bc658afa99 --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/ActorTest_100Actors/Layers/BURT_Crouch.layer @@ -0,0 +1,5816 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/AutomatedTesting/Levels/AtomLevels/ActorTest_100Actors/Layers/Layer BURT_CrouchIdle.layer b/AutomatedTesting/Levels/AtomLevels/ActorTest_100Actors/Layers/Layer BURT_CrouchIdle.layer new file mode 100644 index 0000000000..8a55a57a61 --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/ActorTest_100Actors/Layers/Layer BURT_CrouchIdle.layer @@ -0,0 +1,5816 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/AutomatedTesting/Levels/AtomLevels/ActorTest_100Actors/Layers/Layer BURT_Idle.layer b/AutomatedTesting/Levels/AtomLevels/ActorTest_100Actors/Layers/Layer BURT_Idle.layer new file mode 100644 index 0000000000..b664b4ce93 --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/ActorTest_100Actors/Layers/Layer BURT_Idle.layer @@ -0,0 +1,5816 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/AutomatedTesting/Levels/AtomLevels/ActorTest_100Actors/Layers/Layer BURT_Idle_alt_a.layer b/AutomatedTesting/Levels/AtomLevels/ActorTest_100Actors/Layers/Layer BURT_Idle_alt_a.layer new file mode 100644 index 0000000000..b1e80b9acf --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/ActorTest_100Actors/Layers/Layer BURT_Idle_alt_a.layer @@ -0,0 +1,5816 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/AutomatedTesting/Levels/AtomLevels/ActorTest_100Actors/Layers/Layer Burt_jump_up.layer b/AutomatedTesting/Levels/AtomLevels/ActorTest_100Actors/Layers/Layer Burt_jump_up.layer new file mode 100644 index 0000000000..54b3f67c02 --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/ActorTest_100Actors/Layers/Layer Burt_jump_up.layer @@ -0,0 +1,5816 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/AutomatedTesting/Levels/AtomLevels/ActorTest_100Actors/LevelData/Environment.xml b/AutomatedTesting/Levels/AtomLevels/ActorTest_100Actors/LevelData/Environment.xml new file mode 100644 index 0000000000..c8398b6257 --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/ActorTest_100Actors/LevelData/Environment.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/AutomatedTesting/Levels/AtomLevels/ActorTest_100Actors/LevelData/Heightmap.dat b/AutomatedTesting/Levels/AtomLevels/ActorTest_100Actors/LevelData/Heightmap.dat new file mode 100644 index 0000000000..84d6900a7b --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/ActorTest_100Actors/LevelData/Heightmap.dat @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:437c47cd8b398769cd88043f01102d44b9e853e5539391f67f74f40634058915 +size 8389548 diff --git a/AutomatedTesting/Levels/AtomLevels/ActorTest_100Actors/LevelData/TerrainTexture.xml b/AutomatedTesting/Levels/AtomLevels/ActorTest_100Actors/LevelData/TerrainTexture.xml new file mode 100644 index 0000000000..e3136a7454 --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/ActorTest_100Actors/LevelData/TerrainTexture.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/AutomatedTesting/Levels/AtomLevels/ActorTest_100Actors/LevelData/TimeOfDay.xml b/AutomatedTesting/Levels/AtomLevels/ActorTest_100Actors/LevelData/TimeOfDay.xml new file mode 100644 index 0000000000..1579a06732 --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/ActorTest_100Actors/LevelData/TimeOfDay.xml @@ -0,0 +1,356 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/AutomatedTesting/Levels/AtomLevels/ActorTest_100Actors/LevelData/VegetationMap.dat b/AutomatedTesting/Levels/AtomLevels/ActorTest_100Actors/LevelData/VegetationMap.dat new file mode 100644 index 0000000000..dce5631cd0 --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/ActorTest_100Actors/LevelData/VegetationMap.dat @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0e6a5435c928079b27796f6b202bbc2623e7e454244ddc099a3cadf33b7cb9e9 +size 63 diff --git a/AutomatedTesting/Levels/AtomLevels/ActorTest_100Actors/filelist.xml b/AutomatedTesting/Levels/AtomLevels/ActorTest_100Actors/filelist.xml new file mode 100644 index 0000000000..93fcffd48a --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/ActorTest_100Actors/filelist.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/AutomatedTesting/Levels/AtomLevels/ActorTest_100Actors/level.pak b/AutomatedTesting/Levels/AtomLevels/ActorTest_100Actors/level.pak new file mode 100644 index 0000000000..02d7ea78fa --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/ActorTest_100Actors/level.pak @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5cb431dae976d6f7082ed7b391ef990a57357c255573d6911a581f6655af2e08 +size 11638 diff --git a/AutomatedTesting/Levels/AtomLevels/ActorTest_100Actors/tags.txt b/AutomatedTesting/Levels/AtomLevels/ActorTest_100Actors/tags.txt new file mode 100644 index 0000000000..0d6c1880e7 --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/ActorTest_100Actors/tags.txt @@ -0,0 +1,12 @@ +0,0,0,0,0,0 +0,0,0,0,0,0 +0,0,0,0,0,0 +0,0,0,0,0,0 +0,0,0,0,0,0 +0,0,0,0,0,0 +0,0,0,0,0,0 +0,0,0,0,0,0 +0,0,0,0,0,0 +0,0,0,0,0,0 +0,0,0,0,0,0 +0,0,0,0,0,0 diff --git a/AutomatedTesting/Levels/AtomLevels/ActorTest_MultipleActors/ActorTest_MultipleActors.ly b/AutomatedTesting/Levels/AtomLevels/ActorTest_MultipleActors/ActorTest_MultipleActors.ly new file mode 100644 index 0000000000..4747cad548 --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/ActorTest_MultipleActors/ActorTest_MultipleActors.ly @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e02279c2ddbd6f009311a4f20a9aebc5c8a6c4420cda3457d1a5482deb9497df +size 12789 diff --git a/AutomatedTesting/Levels/AtomLevels/ActorTest_MultipleActors/LevelData/Environment.xml b/AutomatedTesting/Levels/AtomLevels/ActorTest_MultipleActors/LevelData/Environment.xml new file mode 100644 index 0000000000..c8398b6257 --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/ActorTest_MultipleActors/LevelData/Environment.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/AutomatedTesting/Levels/AtomLevels/ActorTest_MultipleActors/LevelData/Heightmap.dat b/AutomatedTesting/Levels/AtomLevels/ActorTest_MultipleActors/LevelData/Heightmap.dat new file mode 100644 index 0000000000..f132a4b870 --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/ActorTest_MultipleActors/LevelData/Heightmap.dat @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f700877e64f96a3025f2decf15b095d9f0da5c8aafaaf1b0b89a2a78ebd884ea +size 8389548 diff --git a/AutomatedTesting/Levels/AtomLevels/ActorTest_MultipleActors/level.pak b/AutomatedTesting/Levels/AtomLevels/ActorTest_MultipleActors/level.pak new file mode 100644 index 0000000000..dcd9b813ba --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/ActorTest_MultipleActors/level.pak @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:59f3f0704e2f6655372348e7d590fcd61f4f1112cbcd2f08c803fc52440bb6b0 +size 9519 diff --git a/AutomatedTesting/Levels/AtomLevels/ActorTest_SingleActor/ActorTest_SingleActor.ly b/AutomatedTesting/Levels/AtomLevels/ActorTest_SingleActor/ActorTest_SingleActor.ly new file mode 100644 index 0000000000..41e8357adb --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/ActorTest_SingleActor/ActorTest_SingleActor.ly @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2a9e6d1c66c32cf0708e3fa5e1ff9d545cfa38635271f037fb4bd117100276ed +size 6586 diff --git a/AutomatedTesting/Levels/AtomLevels/ActorTest_SingleActor/LevelData/Environment.xml b/AutomatedTesting/Levels/AtomLevels/ActorTest_SingleActor/LevelData/Environment.xml new file mode 100644 index 0000000000..c8398b6257 --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/ActorTest_SingleActor/LevelData/Environment.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/AutomatedTesting/Levels/AtomLevels/ActorTest_SingleActor/LevelData/Heightmap.dat b/AutomatedTesting/Levels/AtomLevels/ActorTest_SingleActor/LevelData/Heightmap.dat new file mode 100644 index 0000000000..84d6900a7b --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/ActorTest_SingleActor/LevelData/Heightmap.dat @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:437c47cd8b398769cd88043f01102d44b9e853e5539391f67f74f40634058915 +size 8389548 diff --git a/AutomatedTesting/Levels/AtomLevels/ActorTest_SingleActor/level.pak b/AutomatedTesting/Levels/AtomLevels/ActorTest_SingleActor/level.pak new file mode 100644 index 0000000000..0cc067735e --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/ActorTest_SingleActor/level.pak @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:901d4d8b2592230c42e8fc8a01c88b8552681adc8772f0873a48afcb383bc334 +size 8538 diff --git a/AutomatedTesting/Levels/AtomLevels/EmptyLevel/EmptyLevel.ly b/AutomatedTesting/Levels/AtomLevels/EmptyLevel/EmptyLevel.ly new file mode 100644 index 0000000000..6491668b58 --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/EmptyLevel/EmptyLevel.ly @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:04455a1a8b21f5320a72a931e878f0d28797cbfe85b740a5251689582e8e2eaa +size 4729 diff --git a/AutomatedTesting/Levels/AtomLevels/EmptyLevel/LevelData/Environment.xml b/AutomatedTesting/Levels/AtomLevels/EmptyLevel/LevelData/Environment.xml new file mode 100644 index 0000000000..c8398b6257 --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/EmptyLevel/LevelData/Environment.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/AutomatedTesting/Levels/AtomLevels/EmptyLevel/LevelData/Heightmap.dat b/AutomatedTesting/Levels/AtomLevels/EmptyLevel/LevelData/Heightmap.dat new file mode 100644 index 0000000000..c73de54f1d --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/EmptyLevel/LevelData/Heightmap.dat @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e4169cb1fc0d81d9c6b5b7e25c21dd76462dcaa3c6188a30ca46dbb0335833ec +size 8389396 diff --git a/AutomatedTesting/Levels/AtomLevels/EmptyLevel/LevelData/TerrainTexture.xml b/AutomatedTesting/Levels/AtomLevels/EmptyLevel/LevelData/TerrainTexture.xml new file mode 100644 index 0000000000..f43df05b22 --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/EmptyLevel/LevelData/TerrainTexture.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/AutomatedTesting/Levels/AtomLevels/EmptyLevel/LevelData/TimeOfDay.xml b/AutomatedTesting/Levels/AtomLevels/EmptyLevel/LevelData/TimeOfDay.xml new file mode 100644 index 0000000000..6ea168cc6b --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/EmptyLevel/LevelData/TimeOfDay.xml @@ -0,0 +1,356 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/AutomatedTesting/Levels/AtomLevels/EmptyLevel/LevelData/VegetationMap.dat b/AutomatedTesting/Levels/AtomLevels/EmptyLevel/LevelData/VegetationMap.dat new file mode 100644 index 0000000000..dce5631cd0 --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/EmptyLevel/LevelData/VegetationMap.dat @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0e6a5435c928079b27796f6b202bbc2623e7e454244ddc099a3cadf33b7cb9e9 +size 63 diff --git a/AutomatedTesting/Levels/AtomLevels/EmptyLevel/TerrainTexture.pak b/AutomatedTesting/Levels/AtomLevels/EmptyLevel/TerrainTexture.pak new file mode 100644 index 0000000000..fe3604a050 --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/EmptyLevel/TerrainTexture.pak @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8739c76e681f900923b900c9df0ef75cf421d39cabb54650c4b9ad19b6a76d85 +size 22 diff --git a/AutomatedTesting/Levels/AtomLevels/EmptyLevel/level.pak b/AutomatedTesting/Levels/AtomLevels/EmptyLevel/level.pak new file mode 100644 index 0000000000..9b8a377173 --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/EmptyLevel/level.pak @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d817f8d9a901f36b52561939cbc63d41e1c84249c6f5abd81c11ee074cad04b3 +size 5198 diff --git a/AutomatedTesting/Levels/AtomLevels/EmptyLevel/terrain/cover.ctc b/AutomatedTesting/Levels/AtomLevels/EmptyLevel/terrain/cover.ctc new file mode 100644 index 0000000000..98dd90ae5e --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/EmptyLevel/terrain/cover.ctc @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ce6bf6129174493d7fe8b19518085b8f740843fd4c401686e858860833c69d00 +size 1310792 diff --git a/AutomatedTesting/Levels/AtomLevels/ExampleLevel/ExampleLevel.ly b/AutomatedTesting/Levels/AtomLevels/ExampleLevel/ExampleLevel.ly new file mode 100644 index 0000000000..5324f1964f --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/ExampleLevel/ExampleLevel.ly @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d713a0d4fc697eacc9f9bf7faf89eb22f081b62e8780fd062c47aa011ab2a5cb +size 5102 diff --git a/AutomatedTesting/Levels/AtomLevels/ExampleLevel/Layers/DefaultLayer.layer b/AutomatedTesting/Levels/AtomLevels/ExampleLevel/Layers/DefaultLayer.layer new file mode 100644 index 0000000000..59dcd0d5a3 --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/ExampleLevel/Layers/DefaultLayer.layer @@ -0,0 +1,1177 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/AutomatedTesting/Levels/AtomLevels/ExampleLevel/LevelData/Environment.xml b/AutomatedTesting/Levels/AtomLevels/ExampleLevel/LevelData/Environment.xml new file mode 100644 index 0000000000..c8398b6257 --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/ExampleLevel/LevelData/Environment.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/AutomatedTesting/Levels/AtomLevels/ExampleLevel/LevelData/Heightmap.dat b/AutomatedTesting/Levels/AtomLevels/ExampleLevel/LevelData/Heightmap.dat new file mode 100644 index 0000000000..64b6645976 --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/ExampleLevel/LevelData/Heightmap.dat @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:246f823c6e73b68828888ac2c969d876fad5c978f9d6b573e4d1d70dd5b4ea67 +size 8389396 diff --git a/AutomatedTesting/Levels/AtomLevels/ExampleLevel/LevelData/TerrainTexture.xml b/AutomatedTesting/Levels/AtomLevels/ExampleLevel/LevelData/TerrainTexture.xml new file mode 100644 index 0000000000..f43df05b22 --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/ExampleLevel/LevelData/TerrainTexture.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/AutomatedTesting/Levels/AtomLevels/ExampleLevel/LevelData/TimeOfDay.xml b/AutomatedTesting/Levels/AtomLevels/ExampleLevel/LevelData/TimeOfDay.xml new file mode 100644 index 0000000000..6ea168cc6b --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/ExampleLevel/LevelData/TimeOfDay.xml @@ -0,0 +1,356 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/AutomatedTesting/Levels/AtomLevels/ExampleLevel/LevelData/VegetationMap.dat b/AutomatedTesting/Levels/AtomLevels/ExampleLevel/LevelData/VegetationMap.dat new file mode 100644 index 0000000000..dce5631cd0 --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/ExampleLevel/LevelData/VegetationMap.dat @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0e6a5435c928079b27796f6b202bbc2623e7e454244ddc099a3cadf33b7cb9e9 +size 63 diff --git a/AutomatedTesting/Levels/AtomLevels/ExampleLevel/filelist.xml b/AutomatedTesting/Levels/AtomLevels/ExampleLevel/filelist.xml new file mode 100644 index 0000000000..70fd515ab9 --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/ExampleLevel/filelist.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/AutomatedTesting/Levels/AtomLevels/ExampleLevel/level.pak b/AutomatedTesting/Levels/AtomLevels/ExampleLevel/level.pak new file mode 100644 index 0000000000..4fd1632337 --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/ExampleLevel/level.pak @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0581f9a8a68d02d2663a40a936d9596ba4b87174fcf856fa45ed8e79acf4e872 +size 6112 diff --git a/AutomatedTesting/Levels/AtomLevels/ExampleLevel/tags.txt b/AutomatedTesting/Levels/AtomLevels/ExampleLevel/tags.txt new file mode 100644 index 0000000000..0d6c1880e7 --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/ExampleLevel/tags.txt @@ -0,0 +1,12 @@ +0,0,0,0,0,0 +0,0,0,0,0,0 +0,0,0,0,0,0 +0,0,0,0,0,0 +0,0,0,0,0,0 +0,0,0,0,0,0 +0,0,0,0,0,0 +0,0,0,0,0,0 +0,0,0,0,0,0 +0,0,0,0,0,0 +0,0,0,0,0,0 +0,0,0,0,0,0 diff --git a/AutomatedTesting/Levels/AtomLevels/ExampleLevel/terraintexture.pak b/AutomatedTesting/Levels/AtomLevels/ExampleLevel/terraintexture.pak new file mode 100644 index 0000000000..fe3604a050 --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/ExampleLevel/terraintexture.pak @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8739c76e681f900923b900c9df0ef75cf421d39cabb54650c4b9ad19b6a76d85 +size 22 diff --git a/AutomatedTesting/Levels/AtomLevels/Lucy/LevelData/Environment.xml b/AutomatedTesting/Levels/AtomLevels/Lucy/LevelData/Environment.xml new file mode 100644 index 0000000000..c8398b6257 --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/Lucy/LevelData/Environment.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/AutomatedTesting/Levels/AtomLevels/Lucy/LevelData/Heightmap.dat b/AutomatedTesting/Levels/AtomLevels/Lucy/LevelData/Heightmap.dat new file mode 100644 index 0000000000..5961d17499 --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/Lucy/LevelData/Heightmap.dat @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1cdaf4d31756be0f8c52cc2e448507385b54bed6df34f62c886625c30d372568 +size 8389548 diff --git a/AutomatedTesting/Levels/AtomLevels/Lucy/LevelData/TerrainTexture.xml b/AutomatedTesting/Levels/AtomLevels/Lucy/LevelData/TerrainTexture.xml new file mode 100644 index 0000000000..f43df05b22 --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/Lucy/LevelData/TerrainTexture.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/AutomatedTesting/Levels/AtomLevels/Lucy/LevelData/TimeOfDay.xml b/AutomatedTesting/Levels/AtomLevels/Lucy/LevelData/TimeOfDay.xml new file mode 100644 index 0000000000..456d609b8a --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/Lucy/LevelData/TimeOfDay.xml @@ -0,0 +1,356 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/AutomatedTesting/Levels/AtomLevels/Lucy/LevelData/VegetationMap.dat b/AutomatedTesting/Levels/AtomLevels/Lucy/LevelData/VegetationMap.dat new file mode 100644 index 0000000000..dce5631cd0 --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/Lucy/LevelData/VegetationMap.dat @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0e6a5435c928079b27796f6b202bbc2623e7e454244ddc099a3cadf33b7cb9e9 +size 63 diff --git a/AutomatedTesting/Levels/AtomLevels/Lucy/Lucy.ly b/AutomatedTesting/Levels/AtomLevels/Lucy/Lucy.ly new file mode 100644 index 0000000000..b92b18b59b --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/Lucy/Lucy.ly @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d527ff81e054276cbe3b4bd25f757d5a6f28ca02ec8a618d330e180a99c590ae +size 8187 diff --git a/AutomatedTesting/Levels/AtomLevels/Lucy/TerrainTexture.pak b/AutomatedTesting/Levels/AtomLevels/Lucy/TerrainTexture.pak new file mode 100644 index 0000000000..fe3604a050 --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/Lucy/TerrainTexture.pak @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8739c76e681f900923b900c9df0ef75cf421d39cabb54650c4b9ad19b6a76d85 +size 22 diff --git a/AutomatedTesting/Levels/AtomLevels/Lucy/filelist.xml b/AutomatedTesting/Levels/AtomLevels/Lucy/filelist.xml new file mode 100644 index 0000000000..603bdab1ef --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/Lucy/filelist.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/AutomatedTesting/Levels/AtomLevels/Lucy/level.pak b/AutomatedTesting/Levels/AtomLevels/Lucy/level.pak new file mode 100644 index 0000000000..aaa5e794fb --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/Lucy/level.pak @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4a89c9baf1f802bb09b5f871667ca2143127774dd1bb7c430c45423f8f73e528 +size 7739 diff --git a/AutomatedTesting/Levels/AtomLevels/Lucy/tags.txt b/AutomatedTesting/Levels/AtomLevels/Lucy/tags.txt new file mode 100644 index 0000000000..0d6c1880e7 --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/Lucy/tags.txt @@ -0,0 +1,12 @@ +0,0,0,0,0,0 +0,0,0,0,0,0 +0,0,0,0,0,0 +0,0,0,0,0,0 +0,0,0,0,0,0 +0,0,0,0,0,0 +0,0,0,0,0,0 +0,0,0,0,0,0 +0,0,0,0,0,0 +0,0,0,0,0,0 +0,0,0,0,0,0 +0,0,0,0,0,0 diff --git a/AutomatedTesting/Levels/AtomLevels/Lucy/terrain/cover.ctc b/AutomatedTesting/Levels/AtomLevels/Lucy/terrain/cover.ctc new file mode 100644 index 0000000000..5c869c6533 --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/Lucy/terrain/cover.ctc @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fdab340ad6c6dc6c1167e31afa061684be083360fc4108fa9f1fa4b15fe95d8c +size 1310792 diff --git a/AutomatedTesting/Levels/AtomLevels/MeshTest/LevelData/Environment.xml b/AutomatedTesting/Levels/AtomLevels/MeshTest/LevelData/Environment.xml new file mode 100644 index 0000000000..5fa3664cd4 --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/MeshTest/LevelData/Environment.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/AutomatedTesting/Levels/AtomLevels/MeshTest/LevelData/Heightmap.dat b/AutomatedTesting/Levels/AtomLevels/MeshTest/LevelData/Heightmap.dat new file mode 100644 index 0000000000..aaba406daa --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/MeshTest/LevelData/Heightmap.dat @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:18aa31d4a12de43c410045baeb21d3c9911dbb8f2c99b752acd585355cf2d3bc +size 272907 diff --git a/AutomatedTesting/Levels/AtomLevels/MeshTest/LevelData/TerrainTexture.xml b/AutomatedTesting/Levels/AtomLevels/MeshTest/LevelData/TerrainTexture.xml new file mode 100644 index 0000000000..426ca0f541 --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/MeshTest/LevelData/TerrainTexture.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/AutomatedTesting/Levels/AtomLevels/MeshTest/LevelData/TimeOfDay.xml b/AutomatedTesting/Levels/AtomLevels/MeshTest/LevelData/TimeOfDay.xml new file mode 100644 index 0000000000..c5b404318e --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/MeshTest/LevelData/TimeOfDay.xml @@ -0,0 +1,356 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/AutomatedTesting/Levels/AtomLevels/MeshTest/LevelData/VegetationMap.dat b/AutomatedTesting/Levels/AtomLevels/MeshTest/LevelData/VegetationMap.dat new file mode 100644 index 0000000000..dce5631cd0 --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/MeshTest/LevelData/VegetationMap.dat @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0e6a5435c928079b27796f6b202bbc2623e7e454244ddc099a3cadf33b7cb9e9 +size 63 diff --git a/AutomatedTesting/Levels/AtomLevels/MeshTest/MeshTest.ly b/AutomatedTesting/Levels/AtomLevels/MeshTest/MeshTest.ly new file mode 100644 index 0000000000..1fa206d9ee --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/MeshTest/MeshTest.ly @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:287a6d35cf5edb1690f1757e7234506f1d6dabb4c48e69d085674f749365e490 +size 9299 diff --git a/AutomatedTesting/Levels/AtomLevels/MeshTest/TerrainTexture.pak b/AutomatedTesting/Levels/AtomLevels/MeshTest/TerrainTexture.pak new file mode 100644 index 0000000000..fe3604a050 --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/MeshTest/TerrainTexture.pak @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8739c76e681f900923b900c9df0ef75cf421d39cabb54650c4b9ad19b6a76d85 +size 22 diff --git a/AutomatedTesting/Levels/AtomLevels/MeshTest/filelist.xml b/AutomatedTesting/Levels/AtomLevels/MeshTest/filelist.xml new file mode 100644 index 0000000000..35b601e678 --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/MeshTest/filelist.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/AutomatedTesting/Levels/AtomLevels/MeshTest/level.pak b/AutomatedTesting/Levels/AtomLevels/MeshTest/level.pak new file mode 100644 index 0000000000..b6b5acc760 --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/MeshTest/level.pak @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d6c21e9714220b4fd8b51c3bd6dc584e2a87e96bb9ffc77ac547b7d0bf982ef4 +size 24708 diff --git a/AutomatedTesting/Levels/AtomLevels/MeshTest/tags.txt b/AutomatedTesting/Levels/AtomLevels/MeshTest/tags.txt new file mode 100644 index 0000000000..0d6c1880e7 --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/MeshTest/tags.txt @@ -0,0 +1,12 @@ +0,0,0,0,0,0 +0,0,0,0,0,0 +0,0,0,0,0,0 +0,0,0,0,0,0 +0,0,0,0,0,0 +0,0,0,0,0,0 +0,0,0,0,0,0 +0,0,0,0,0,0 +0,0,0,0,0,0 +0,0,0,0,0,0 +0,0,0,0,0,0 +0,0,0,0,0,0 diff --git a/AutomatedTesting/Levels/AtomLevels/MeshTest/terrain/cover.ctc b/AutomatedTesting/Levels/AtomLevels/MeshTest/terrain/cover.ctc new file mode 100644 index 0000000000..78c2ab6ed5 --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/MeshTest/terrain/cover.ctc @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d4bb4e2ab7876994431f3e6e78a004ea5718e057077b37db14ea8a52637338be +size 262184 diff --git a/AutomatedTesting/Levels/AtomLevels/NormalMapping/LevelData/Environment.xml b/AutomatedTesting/Levels/AtomLevels/NormalMapping/LevelData/Environment.xml new file mode 100644 index 0000000000..c8398b6257 --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/NormalMapping/LevelData/Environment.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/AutomatedTesting/Levels/AtomLevels/NormalMapping/LevelData/Heightmap.dat b/AutomatedTesting/Levels/AtomLevels/NormalMapping/LevelData/Heightmap.dat new file mode 100644 index 0000000000..19331ecb69 --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/NormalMapping/LevelData/Heightmap.dat @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:55bcf3590d0a7f206e66f8ff53e8dd39ca03ccb37eec3e1e8ae4c3228fc564ee +size 17407562 diff --git a/AutomatedTesting/Levels/AtomLevels/NormalMapping/LevelData/TerrainTexture.xml b/AutomatedTesting/Levels/AtomLevels/NormalMapping/LevelData/TerrainTexture.xml new file mode 100644 index 0000000000..0fa8b16c50 --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/NormalMapping/LevelData/TerrainTexture.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/AutomatedTesting/Levels/AtomLevels/NormalMapping/LevelData/TimeOfDay.xml b/AutomatedTesting/Levels/AtomLevels/NormalMapping/LevelData/TimeOfDay.xml new file mode 100644 index 0000000000..c5b404318e --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/NormalMapping/LevelData/TimeOfDay.xml @@ -0,0 +1,356 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/AutomatedTesting/Levels/AtomLevels/NormalMapping/LevelData/VegetationMap.dat b/AutomatedTesting/Levels/AtomLevels/NormalMapping/LevelData/VegetationMap.dat new file mode 100644 index 0000000000..dce5631cd0 --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/NormalMapping/LevelData/VegetationMap.dat @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0e6a5435c928079b27796f6b202bbc2623e7e454244ddc099a3cadf33b7cb9e9 +size 63 diff --git a/AutomatedTesting/Levels/AtomLevels/NormalMapping/NormalMapping.ly b/AutomatedTesting/Levels/AtomLevels/NormalMapping/NormalMapping.ly new file mode 100644 index 0000000000..7b4ef00f1c --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/NormalMapping/NormalMapping.ly @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9e332f75c1bd177d6505a4732aa82f05b14c79977af333d986756619af3189ad +size 21083 diff --git a/AutomatedTesting/Levels/AtomLevels/NormalMapping/TestNormalMapping.azsl b/AutomatedTesting/Levels/AtomLevels/NormalMapping/TestNormalMapping.azsl new file mode 100644 index 0000000000..0ae2ea97ef --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/NormalMapping/TestNormalMapping.azsl @@ -0,0 +1,101 @@ + +/* +* 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 "../../Shaders/CommonVS.azsli" +#include + +ShaderResourceGroup MaterialSrg : SRG_PerMaterial +{ + Texture2D m_diffuseMap; + + Texture2D m_normalMap; + float m_normalFactor; + + float3 m_defaultLightDir; + + Sampler m_sampler + { + MaxAnisotropy = 16; + AddressU = Wrap; + AddressV = Wrap; + AddressW = Wrap; + }; +} + +enum class Mode +{ + Raw, + Normal, + Lit +}; + +option Mode o_mode; + +struct PixelOutput +{ + float4 m_color : SV_Target0; +}; + +VertexOutput MainVS(VertexInput input) +{ + VertexOutput output = CommonVS(input); + + // We don't have a utility function for scaling normals because the process is so simple. Still, the "NormalMapping" test level does test the + // use of this common pattern. Other materials can do the same thing to scale normal maps: just multiply the final tangent and bitangent in the vertex shader. + // Note, this assumes that we are using a tangent space algorithm that does not normalize the TBN basis vectors in the pixel shader (e.g. MikkT). + output.m_tangent *= MaterialSrg::m_normalFactor; + output.m_bitangent *= MaterialSrg::m_normalFactor; + + output.m_bitangent *= -1; // The test normal map was baked opposite of what Atom expects + + return output; +} + + +PixelOutput MainPS(VertexOutput input) +{ + PixelOutput output; + + float4 normalMapSample = MaterialSrg::m_normalMap.Sample(MaterialSrg::m_sampler, input.m_uv); + + if (o_mode == Mode::Raw) + { + output.m_color = float4(normalMapSample.xyz * 0.5 + 0.5, 1); + return output; + } + + float3 normal = GetWorldSpaceNormal(normalMapSample, input.m_normal, input.m_tangent, input.m_bitangent); + + if (o_mode == Mode::Normal) + { + output.m_color = float4(normal.xyz * 0.5 + 0.5, 1); + return output; + } + + float3 lightDir = -SceneSrg::m_directionalLights[0].m_direction; + if (length(lightDir) == 0) + { + lightDir = normalize(MaterialSrg::m_defaultLightDir); + } + + float NdotL = max(0.0, dot(normal, lightDir)); + + float4 baseColor = MaterialSrg::m_diffuseMap.Sample(MaterialSrg::m_sampler, input.m_uv); + float3 diffuse = (0.1 + saturate(NdotL)) * baseColor.xyz; + + output.m_color = float4(diffuse, 1); + + return output; +} \ No newline at end of file diff --git a/AutomatedTesting/Levels/AtomLevels/NormalMapping/TestNormalMapping.materialtype b/AutomatedTesting/Levels/AtomLevels/NormalMapping/TestNormalMapping.materialtype new file mode 100644 index 0000000000..570643ad4e --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/NormalMapping/TestNormalMapping.materialtype @@ -0,0 +1,60 @@ +{ + "description": "Specialized material for testing normal map calculation utility functions.", + "propertyLayout": { + "version": 1, + "properties": { + "general": [ + { + "id": "m_diffuseMap", + "type": "image", + "defaultValue": "EngineAssets/Textures/grey.dds", + "connection": { + "type": "shaderInput", + "id": "m_diffuseMap" + } + }, + { + "id": "m_normalMap", + "type": "image", + "defaultValue": "Levels/NormalMapping/test_ddn.tif", + "connection": { + "type": "shaderInput", + "id": "m_normalMap" + } + }, + { + "id": "m_normalFactor", + "type": "float", + "defaultValue": 1.0, + "connection": { + "type": "shaderInput", + "id": "m_normalFactor" + } + }, + { + "id": "m_defaultLightDir", + "type": "vector3", + "defaultValue": [ 0.0, 0.0, 1.0 ], + "connection": { + "type": "shaderInput", + "id": "m_defaultLightDir" + } + }, + { + "id": "o_mode", + "type": "int", + "defaultValue": 2, + "connection": { + "type": "shaderOption", + "id": "o_mode" + } + } + ] + } + }, + "shaders": [ + { + "file": "TestNormalMapping.shader" + } + ] +} diff --git a/AutomatedTesting/Levels/AtomLevels/NormalMapping/TestNormalMapping.shader b/AutomatedTesting/Levels/AtomLevels/NormalMapping/TestNormalMapping.shader new file mode 100644 index 0000000000..ac2b94824f --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/NormalMapping/TestNormalMapping.shader @@ -0,0 +1,26 @@ +{ + "Source": "TestNormalMapping", + + "DepthStencilState": { + "Depth": { + "Enable": true, + "CompareFunc": "GreaterEqual" + } + }, + + // Using auxgeom draw list to avoid tonemapping + "DrawList": "auxgeom", + + "ProgramSettings": { + "EntryPoints": [ + { + "name": "MainVS", + "type": "Vertex" + }, + { + "name": "MainPS", + "type": "Fragment" + } + ] + } +} diff --git a/AutomatedTesting/Levels/AtomLevels/NormalMapping/am_floor_tile.material b/AutomatedTesting/Levels/AtomLevels/NormalMapping/am_floor_tile.material new file mode 100644 index 0000000000..9b4c9c7865 --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/NormalMapping/am_floor_tile.material @@ -0,0 +1,13 @@ +{ + "description": "Draws a realistic diffuse/normal pair. We use a non-1 m_normalFactor to regression-test the normal scaling feature.", + "materialType": "TestNormalMapping.materialtype", + "propertyLayoutVersion": 1, + "properties": { + "general": { + "m_diffuseMap": "Levels/NormalMapping/am_floor_tile_diff.tif", + "m_normalMap": "Levels/NormalMapping/am_floor_tile_ddn.tif", + "o_mode": 2, + "m_normalFactor": 2.0 + } + } +} diff --git a/AutomatedTesting/Levels/AtomLevels/NormalMapping/am_floor_tile_ddn.tif b/AutomatedTesting/Levels/AtomLevels/NormalMapping/am_floor_tile_ddn.tif new file mode 100644 index 0000000000..97726e35fa --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/NormalMapping/am_floor_tile_ddn.tif @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bd322f4b4618bae92407956b53031f841f4c1c6195365a534e7f0dbb912ee8a2 +size 50367786 diff --git a/AutomatedTesting/Levels/AtomLevels/NormalMapping/am_floor_tile_diff.tif b/AutomatedTesting/Levels/AtomLevels/NormalMapping/am_floor_tile_diff.tif new file mode 100644 index 0000000000..b4c00d3d7c --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/NormalMapping/am_floor_tile_diff.tif @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:30e53cdb999bafaa6c4cf8e2626e476a8a4ce8a1f498ed436de9349bc066d6f9 +size 50367786 diff --git a/AutomatedTesting/Levels/AtomLevels/NormalMapping/am_floor_tile_normals.material b/AutomatedTesting/Levels/AtomLevels/NormalMapping/am_floor_tile_normals.material new file mode 100644 index 0000000000..3ad98512db --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/NormalMapping/am_floor_tile_normals.material @@ -0,0 +1,12 @@ +{ + "description": "Draws the normals for a realistic normal map. We use a non-1 m_normalFactor to regression-test the normal scaling feature.", + "materialType": "TestNormalMapping.materialtype", + "propertyLayoutVersion": 1, + "properties": { + "general": { + "m_normalMap": "Levels/NormalMapping/am_floor_tile_ddn.tif", + "o_mode": 1, + "m_normalFactor": 2.0 + } + } +} diff --git a/AutomatedTesting/Levels/AtomLevels/NormalMapping/level.pak b/AutomatedTesting/Levels/AtomLevels/NormalMapping/level.pak new file mode 100644 index 0000000000..cd414e8074 --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/NormalMapping/level.pak @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6a1726064c26ebe6116fc1afe338dd0b03f248ced6fe4ecefc0b5047a29d188e +size 43048 diff --git a/AutomatedTesting/Levels/AtomLevels/NormalMapping/lit_0.material b/AutomatedTesting/Levels/AtomLevels/NormalMapping/lit_0.material new file mode 100644 index 0000000000..ff593e80d2 --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/NormalMapping/lit_0.material @@ -0,0 +1,11 @@ +{ + "description": "Uses normals to light the object, with low normal factor.", + "materialType": "TestNormalMapping.materialtype", + "propertyLayoutVersion": 1, + "properties": { + "general": { + "o_mode": 2, + "m_normalFactor": 0.0 + } + } +} diff --git a/AutomatedTesting/Levels/AtomLevels/NormalMapping/lit_1.material b/AutomatedTesting/Levels/AtomLevels/NormalMapping/lit_1.material new file mode 100644 index 0000000000..6bb8a2c1d4 --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/NormalMapping/lit_1.material @@ -0,0 +1,11 @@ +{ + "description": "Uses normals to light the object, with medium normal factor.", + "materialType": "TestNormalMapping.materialtype", + "propertyLayoutVersion": 1, + "properties": { + "general": { + "o_mode": 2, + "m_normalFactor": 0.5 + } + } +} diff --git a/AutomatedTesting/Levels/AtomLevels/NormalMapping/lit_2.material b/AutomatedTesting/Levels/AtomLevels/NormalMapping/lit_2.material new file mode 100644 index 0000000000..c1df1bfb4a --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/NormalMapping/lit_2.material @@ -0,0 +1,11 @@ +{ + "description": "Uses normals to light the object, with high normal factor.", + "materialType": "TestNormalMapping.materialtype", + "propertyLayoutVersion": 1, + "properties": { + "general": { + "o_mode": 2, + "m_normalFactor": 1.0 + } + } +} diff --git a/AutomatedTesting/Levels/AtomLevels/NormalMapping/normals_0.material b/AutomatedTesting/Levels/AtomLevels/NormalMapping/normals_0.material new file mode 100644 index 0000000000..63296f9326 --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/NormalMapping/normals_0.material @@ -0,0 +1,11 @@ +{ + "description": "Draws normals with low normal factor.", + "materialType": "TestNormalMapping.materialtype", + "propertyLayoutVersion": 1, + "properties": { + "general": { + "o_mode": 1, + "m_normalFactor": 0.0 + } + } +} diff --git a/AutomatedTesting/Levels/AtomLevels/NormalMapping/normals_1.material b/AutomatedTesting/Levels/AtomLevels/NormalMapping/normals_1.material new file mode 100644 index 0000000000..050138fb73 --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/NormalMapping/normals_1.material @@ -0,0 +1,11 @@ +{ + "description": "Draws normals with medium normal factor.", + "materialType": "TestNormalMapping.materialtype", + "propertyLayoutVersion": 1, + "properties": { + "general": { + "o_mode": 1, + "m_normalFactor": 0.5 + } + } +} diff --git a/AutomatedTesting/Levels/AtomLevels/NormalMapping/normals_2.material b/AutomatedTesting/Levels/AtomLevels/NormalMapping/normals_2.material new file mode 100644 index 0000000000..355a37690b --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/NormalMapping/normals_2.material @@ -0,0 +1,11 @@ +{ + "description": "Draws normals with high normal factor.", + "materialType": "TestNormalMapping.materialtype", + "propertyLayoutVersion": 1, + "properties": { + "general": { + "o_mode": 1, + "m_normalFactor": 1.0 + } + } +} diff --git a/AutomatedTesting/Levels/AtomLevels/NormalMapping/raw_normal_map.material b/AutomatedTesting/Levels/AtomLevels/NormalMapping/raw_normal_map.material new file mode 100644 index 0000000000..369e7139f0 --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/NormalMapping/raw_normal_map.material @@ -0,0 +1,11 @@ +{ + "description": "Draws the raw sampled normal map.", + "materialType": "TestNormalMapping.materialtype", + "propertyLayoutVersion": 1, + "properties": { + "general": { + "o_mode": 0, + "m_normalFactor": 0.0 + } + } +} diff --git a/AutomatedTesting/Levels/AtomLevels/NormalMapping/test_ddn.tif b/AutomatedTesting/Levels/AtomLevels/NormalMapping/test_ddn.tif new file mode 100644 index 0000000000..2510ad7966 --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/NormalMapping/test_ddn.tif @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d66439e57f4088d37bc85672a3ece5a2149a9f7b3541ee53fd0736f6e59206ef +size 210308 diff --git a/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/PbrMaterialChart.ly b/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/PbrMaterialChart.ly new file mode 100644 index 0000000000..7c8318951b --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/PbrMaterialChart.ly @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:813ab68b68e2662b0b2bd333770678ee3bd290e4f55754c32cb8554c13a79cf8 +size 32876 diff --git a/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/filelist.xml b/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/filelist.xml new file mode 100644 index 0000000000..2057c46e8c --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/filelist.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/level.pak b/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/level.pak new file mode 100644 index 0000000000..9969827618 --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/level.pak @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:948b10a3c2f75a68f307cbc4f510ddd77337cd33f680f6fef07568280c44edb7 +size 11311 diff --git a/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/leveldata/Environment.xml b/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/leveldata/Environment.xml new file mode 100644 index 0000000000..c8398b6257 --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/leveldata/Environment.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/leveldata/Heightmap.dat b/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/leveldata/Heightmap.dat new file mode 100644 index 0000000000..f773bbb4bf --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/leveldata/Heightmap.dat @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5fb99fe93d16ff959e3265d157ec0e6030bd0d44e9f00b6749ca6104c51e5536 +size 8389602 diff --git a/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/leveldata/TerrainTexture.xml b/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/leveldata/TerrainTexture.xml new file mode 100644 index 0000000000..0fa8b16c50 --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/leveldata/TerrainTexture.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/leveldata/TimeOfDay.xml b/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/leveldata/TimeOfDay.xml new file mode 100644 index 0000000000..456d609b8a --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/leveldata/TimeOfDay.xml @@ -0,0 +1,356 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/leveldata/VegetationMap.dat b/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/leveldata/VegetationMap.dat new file mode 100644 index 0000000000..dce5631cd0 --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/leveldata/VegetationMap.dat @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0e6a5435c928079b27796f6b202bbc2623e7e454244ddc099a3cadf33b7cb9e9 +size 63 diff --git a/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic.material b/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic.material new file mode 100644 index 0000000000..32ac8dfd10 --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic.material @@ -0,0 +1,32 @@ +{ + "materialType": "Materials/Types/StandardPBR.materialtype", + "propertyLayoutVersion": 1, + "properties": { + "baseColor": { + "color": [ 1.0, 1.0, 1.0 ], + "factor": 0.75, + "useTexture": false, + "textureMap": "" + }, + "metallic": { + "factor": 0.0, + "useTexture": false, + "textureMap": "" + }, + "roughness": { + "factor": 0.0, + "useTexture": false, + "textureMap": "" + }, + "specularF0": { + "factor": 0.5, + "useTexture": false, + "textureMap": "" + }, + "normal": { + "factor": 1.0, + "useTexture": false, + "textureMap": "" + } + } +} diff --git a/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic_m00_r00.material b/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic_m00_r00.material new file mode 100644 index 0000000000..dcadcb9bfe --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic_m00_r00.material @@ -0,0 +1,13 @@ +{ + "parentMaterial": "./basic.material", + "materialType": "materials/Types/StandardPBR.materialtype", + "propertyLayoutVersion": 1, + "properties": { + "metallic": { + "factor": 0.0 + }, + "roughness": { + "factor": 0.0 + } + } +} diff --git a/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic_m00_r01.material b/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic_m00_r01.material new file mode 100644 index 0000000000..0c2b3e62b3 --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic_m00_r01.material @@ -0,0 +1,13 @@ +{ + "parentMaterial": "./basic.material", + "materialType": "materials/Types/StandardPBR.materialtype", + "propertyLayoutVersion": 1, + "properties": { + "metallic": { + "factor": 0.0 + }, + "roughness": { + "factor": 0.1 + } + } +} diff --git a/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic_m00_r02.material b/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic_m00_r02.material new file mode 100644 index 0000000000..8d29890384 --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic_m00_r02.material @@ -0,0 +1,13 @@ +{ + "parentMaterial": "./basic.material", + "materialType": "materials/Types/StandardPBR.materialtype", + "propertyLayoutVersion": 1, + "properties": { + "metallic": { + "factor": 0.0 + }, + "roughness": { + "factor": 0.2 + } + } +} diff --git a/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic_m00_r03.material b/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic_m00_r03.material new file mode 100644 index 0000000000..bb9557241b --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic_m00_r03.material @@ -0,0 +1,13 @@ +{ + "parentMaterial": "./basic.material", + "materialType": "materials/Types/StandardPBR.materialtype", + "propertyLayoutVersion": 1, + "properties": { + "metallic": { + "factor": 0.0 + }, + "roughness": { + "factor": 0.3 + } + } +} diff --git a/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic_m00_r04.material b/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic_m00_r04.material new file mode 100644 index 0000000000..e14e2899fa --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic_m00_r04.material @@ -0,0 +1,13 @@ +{ + "parentMaterial": "./basic.material", + "materialType": "materials/Types/StandardPBR.materialtype", + "propertyLayoutVersion": 1, + "properties": { + "metallic": { + "factor": 0.0 + }, + "roughness": { + "factor": 0.4 + } + } +} diff --git a/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic_m00_r05.material b/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic_m00_r05.material new file mode 100644 index 0000000000..344ce084e5 --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic_m00_r05.material @@ -0,0 +1,13 @@ +{ + "parentMaterial": "./basic.material", + "materialType": "materials/Types/StandardPBR.materialtype", + "propertyLayoutVersion": 1, + "properties": { + "metallic": { + "factor": 0.0 + }, + "roughness": { + "factor": 0.5 + } + } +} diff --git a/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic_m00_r06.material b/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic_m00_r06.material new file mode 100644 index 0000000000..0f8195653f --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic_m00_r06.material @@ -0,0 +1,13 @@ +{ + "parentMaterial": "./basic.material", + "materialType": "materials/Types/StandardPBR.materialtype", + "propertyLayoutVersion": 1, + "properties": { + "metallic": { + "factor": 0.0 + }, + "roughness": { + "factor": 0.6 + } + } +} diff --git a/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic_m00_r07.material b/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic_m00_r07.material new file mode 100644 index 0000000000..d5d95ff285 --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic_m00_r07.material @@ -0,0 +1,13 @@ +{ + "parentMaterial": "./basic.material", + "materialType": "materials/Types/StandardPBR.materialtype", + "propertyLayoutVersion": 1, + "properties": { + "metallic": { + "factor": 0.0 + }, + "roughness": { + "factor": 0.7 + } + } +} diff --git a/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic_m00_r08.material b/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic_m00_r08.material new file mode 100644 index 0000000000..801b138831 --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic_m00_r08.material @@ -0,0 +1,13 @@ +{ + "parentMaterial": "./basic.material", + "materialType": "materials/Types/StandardPBR.materialtype", + "propertyLayoutVersion": 1, + "properties": { + "metallic": { + "factor": 0.0 + }, + "roughness": { + "factor": 0.8 + } + } +} diff --git a/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic_m00_r09.material b/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic_m00_r09.material new file mode 100644 index 0000000000..0710a320cb --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic_m00_r09.material @@ -0,0 +1,13 @@ +{ + "parentMaterial": "./basic.material", + "materialType": "materials/Types/StandardPBR.materialtype", + "propertyLayoutVersion": 1, + "properties": { + "metallic": { + "factor": 0.0 + }, + "roughness": { + "factor": 0.9 + } + } +} diff --git a/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic_m00_r10.material b/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic_m00_r10.material new file mode 100644 index 0000000000..d1cc781c61 --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic_m00_r10.material @@ -0,0 +1,13 @@ +{ + "parentMaterial": "./basic.material", + "materialType": "materials/Types/StandardPBR.materialtype", + "propertyLayoutVersion": 1, + "properties": { + "metallic": { + "factor": 0.0 + }, + "roughness": { + "factor": 1.0 + } + } +} diff --git a/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic_m10_r00.material b/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic_m10_r00.material new file mode 100644 index 0000000000..945cd1e9eb --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic_m10_r00.material @@ -0,0 +1,13 @@ +{ + "parentMaterial": "./basic.material", + "materialType": "materials/Types/StandardPBR.materialtype", + "propertyLayoutVersion": 1, + "properties": { + "metallic": { + "factor": 1.0 + }, + "roughness": { + "factor": 0.0 + } + } +} diff --git a/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic_m10_r01.material b/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic_m10_r01.material new file mode 100644 index 0000000000..85f6008782 --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic_m10_r01.material @@ -0,0 +1,13 @@ +{ + "parentMaterial": "./basic.material", + "materialType": "materials/Types/StandardPBR.materialtype", + "propertyLayoutVersion": 1, + "properties": { + "metallic": { + "factor": 1.0 + }, + "roughness": { + "factor": 0.1 + } + } +} diff --git a/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic_m10_r02.material b/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic_m10_r02.material new file mode 100644 index 0000000000..5abedc34e2 --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic_m10_r02.material @@ -0,0 +1,13 @@ +{ + "parentMaterial": "./basic.material", + "materialType": "materials/Types/StandardPBR.materialtype", + "propertyLayoutVersion": 1, + "properties": { + "metallic": { + "factor": 1.0 + }, + "roughness": { + "factor": 0.2 + } + } +} diff --git a/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic_m10_r03.material b/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic_m10_r03.material new file mode 100644 index 0000000000..50b37a647d --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic_m10_r03.material @@ -0,0 +1,13 @@ +{ + "parentMaterial": "./basic.material", + "materialType": "materials/Types/StandardPBR.materialtype", + "propertyLayoutVersion": 1, + "properties": { + "metallic": { + "factor": 1.0 + }, + "roughness": { + "factor": 0.3 + } + } +} diff --git a/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic_m10_r04.material b/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic_m10_r04.material new file mode 100644 index 0000000000..ad74ddf08b --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic_m10_r04.material @@ -0,0 +1,13 @@ +{ + "parentMaterial": "./basic.material", + "materialType": "materials/Types/StandardPBR.materialtype", + "propertyLayoutVersion": 1, + "properties": { + "metallic": { + "factor": 1.0 + }, + "roughness": { + "factor": 0.4 + } + } +} diff --git a/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic_m10_r05.material b/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic_m10_r05.material new file mode 100644 index 0000000000..f7f3260b97 --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic_m10_r05.material @@ -0,0 +1,13 @@ +{ + "parentMaterial": "./basic.material", + "materialType": "materials/Types/StandardPBR.materialtype", + "propertyLayoutVersion": 1, + "properties": { + "metallic": { + "factor": 1.0 + }, + "roughness": { + "factor": 0.5 + } + } +} diff --git a/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic_m10_r06.material b/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic_m10_r06.material new file mode 100644 index 0000000000..fc982f9c22 --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic_m10_r06.material @@ -0,0 +1,13 @@ +{ + "parentMaterial": "./basic.material", + "materialType": "materials/Types/StandardPBR.materialtype", + "propertyLayoutVersion": 1, + "properties": { + "metallic": { + "factor": 1.0 + }, + "roughness": { + "factor": 0.6 + } + } +} diff --git a/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic_m10_r07.material b/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic_m10_r07.material new file mode 100644 index 0000000000..c4526dfd2c --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic_m10_r07.material @@ -0,0 +1,13 @@ +{ + "parentMaterial": "./basic.material", + "materialType": "materials/Types/StandardPBR.materialtype", + "propertyLayoutVersion": 1, + "properties": { + "metallic": { + "factor": 1.0 + }, + "roughness": { + "factor": 0.7 + } + } +} diff --git a/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic_m10_r08.material b/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic_m10_r08.material new file mode 100644 index 0000000000..f756a36ded --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic_m10_r08.material @@ -0,0 +1,13 @@ +{ + "parentMaterial": "./basic.material", + "materialType": "materials/Types/StandardPBR.materialtype", + "propertyLayoutVersion": 1, + "properties": { + "metallic": { + "factor": 1.0 + }, + "roughness": { + "factor": 0.8 + } + } +} diff --git a/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic_m10_r09.material b/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic_m10_r09.material new file mode 100644 index 0000000000..a853979d6d --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic_m10_r09.material @@ -0,0 +1,13 @@ +{ + "parentMaterial": "./basic.material", + "materialType": "materials/Types/StandardPBR.materialtype", + "propertyLayoutVersion": 1, + "properties": { + "metallic": { + "factor": 1.0 + }, + "roughness": { + "factor": 0.9 + } + } +} diff --git a/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic_m10_r10.material b/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic_m10_r10.material new file mode 100644 index 0000000000..e4528d45fd --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic_m10_r10.material @@ -0,0 +1,13 @@ +{ + "parentMaterial": "./basic.material", + "materialType": "materials/Types/StandardPBR.materialtype", + "propertyLayoutVersion": 1, + "properties": { + "metallic": { + "factor": 1.0 + }, + "roughness": { + "factor": 1.0 + } + } +} diff --git a/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/tags.txt b/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/tags.txt new file mode 100644 index 0000000000..0d6c1880e7 --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/tags.txt @@ -0,0 +1,12 @@ +0,0,0,0,0,0 +0,0,0,0,0,0 +0,0,0,0,0,0 +0,0,0,0,0,0 +0,0,0,0,0,0 +0,0,0,0,0,0 +0,0,0,0,0,0 +0,0,0,0,0,0 +0,0,0,0,0,0 +0,0,0,0,0,0 +0,0,0,0,0,0 +0,0,0,0,0,0 diff --git a/AutomatedTesting/Levels/AtomLevels/Peccy_example_dcc_materials/LevelData/Environment.xml b/AutomatedTesting/Levels/AtomLevels/Peccy_example_dcc_materials/LevelData/Environment.xml new file mode 100644 index 0000000000..c8398b6257 --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/Peccy_example_dcc_materials/LevelData/Environment.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/AutomatedTesting/Levels/AtomLevels/Peccy_example_dcc_materials/LevelData/Heightmap.dat b/AutomatedTesting/Levels/AtomLevels/Peccy_example_dcc_materials/LevelData/Heightmap.dat new file mode 100644 index 0000000000..64818fea5e --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/Peccy_example_dcc_materials/LevelData/Heightmap.dat @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1d465a67ec0ab266090626014cc06552e7db57236e637b4c43451e1eea790b2f +size 8389396 diff --git a/AutomatedTesting/Levels/AtomLevels/Peccy_example_dcc_materials/LevelData/TerrainTexture.xml b/AutomatedTesting/Levels/AtomLevels/Peccy_example_dcc_materials/LevelData/TerrainTexture.xml new file mode 100644 index 0000000000..f43df05b22 --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/Peccy_example_dcc_materials/LevelData/TerrainTexture.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/AutomatedTesting/Levels/AtomLevels/Peccy_example_dcc_materials/LevelData/TimeOfDay.xml b/AutomatedTesting/Levels/AtomLevels/Peccy_example_dcc_materials/LevelData/TimeOfDay.xml new file mode 100644 index 0000000000..3a083a6882 --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/Peccy_example_dcc_materials/LevelData/TimeOfDay.xml @@ -0,0 +1,356 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/AutomatedTesting/Levels/AtomLevels/Peccy_example_dcc_materials/LevelData/VegetationMap.dat b/AutomatedTesting/Levels/AtomLevels/Peccy_example_dcc_materials/LevelData/VegetationMap.dat new file mode 100644 index 0000000000..dce5631cd0 --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/Peccy_example_dcc_materials/LevelData/VegetationMap.dat @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0e6a5435c928079b27796f6b202bbc2623e7e454244ddc099a3cadf33b7cb9e9 +size 63 diff --git a/AutomatedTesting/Levels/AtomLevels/Peccy_example_dcc_materials/Peccy_example_dcc_materials.ly b/AutomatedTesting/Levels/AtomLevels/Peccy_example_dcc_materials/Peccy_example_dcc_materials.ly new file mode 100644 index 0000000000..d5cd02b05c --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/Peccy_example_dcc_materials/Peccy_example_dcc_materials.ly @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:33bee47eaeae1de709a39048581b8217797f6bd1b4f2b0b1db78aeb42cc12944 +size 11088 diff --git a/AutomatedTesting/Levels/AtomLevels/Peccy_example_dcc_materials/TerrainTexture.pak b/AutomatedTesting/Levels/AtomLevels/Peccy_example_dcc_materials/TerrainTexture.pak new file mode 100644 index 0000000000..fe3604a050 --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/Peccy_example_dcc_materials/TerrainTexture.pak @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8739c76e681f900923b900c9df0ef75cf421d39cabb54650c4b9ad19b6a76d85 +size 22 diff --git a/AutomatedTesting/Levels/AtomLevels/Peccy_example_dcc_materials/filelist.xml b/AutomatedTesting/Levels/AtomLevels/Peccy_example_dcc_materials/filelist.xml new file mode 100644 index 0000000000..fccdd73af5 --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/Peccy_example_dcc_materials/filelist.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/AutomatedTesting/Levels/AtomLevels/Peccy_example_dcc_materials/level.pak b/AutomatedTesting/Levels/AtomLevels/Peccy_example_dcc_materials/level.pak new file mode 100644 index 0000000000..9355e4df99 --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/Peccy_example_dcc_materials/level.pak @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b68e869cd3819cb72d9a9d45556b88b18631a282ca7c5908d2a9ae4265226e79 +size 6118 diff --git a/AutomatedTesting/Levels/AtomLevels/Peccy_example_dcc_materials/tags.txt b/AutomatedTesting/Levels/AtomLevels/Peccy_example_dcc_materials/tags.txt new file mode 100644 index 0000000000..0d6c1880e7 --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/Peccy_example_dcc_materials/tags.txt @@ -0,0 +1,12 @@ +0,0,0,0,0,0 +0,0,0,0,0,0 +0,0,0,0,0,0 +0,0,0,0,0,0 +0,0,0,0,0,0 +0,0,0,0,0,0 +0,0,0,0,0,0 +0,0,0,0,0,0 +0,0,0,0,0,0 +0,0,0,0,0,0 +0,0,0,0,0,0 +0,0,0,0,0,0 diff --git a/AutomatedTesting/Levels/AtomLevels/Peccy_example_no_materials/LevelData/Environment.xml b/AutomatedTesting/Levels/AtomLevels/Peccy_example_no_materials/LevelData/Environment.xml new file mode 100644 index 0000000000..c8398b6257 --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/Peccy_example_no_materials/LevelData/Environment.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/AutomatedTesting/Levels/AtomLevels/Peccy_example_no_materials/LevelData/Heightmap.dat b/AutomatedTesting/Levels/AtomLevels/Peccy_example_no_materials/LevelData/Heightmap.dat new file mode 100644 index 0000000000..64818fea5e --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/Peccy_example_no_materials/LevelData/Heightmap.dat @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1d465a67ec0ab266090626014cc06552e7db57236e637b4c43451e1eea790b2f +size 8389396 diff --git a/AutomatedTesting/Levels/AtomLevels/Peccy_example_no_materials/LevelData/TerrainTexture.xml b/AutomatedTesting/Levels/AtomLevels/Peccy_example_no_materials/LevelData/TerrainTexture.xml new file mode 100644 index 0000000000..f43df05b22 --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/Peccy_example_no_materials/LevelData/TerrainTexture.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/AutomatedTesting/Levels/AtomLevels/Peccy_example_no_materials/LevelData/TimeOfDay.xml b/AutomatedTesting/Levels/AtomLevels/Peccy_example_no_materials/LevelData/TimeOfDay.xml new file mode 100644 index 0000000000..e4106ce437 --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/Peccy_example_no_materials/LevelData/TimeOfDay.xml @@ -0,0 +1,356 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/AutomatedTesting/Levels/AtomLevels/Peccy_example_no_materials/LevelData/VegetationMap.dat b/AutomatedTesting/Levels/AtomLevels/Peccy_example_no_materials/LevelData/VegetationMap.dat new file mode 100644 index 0000000000..dce5631cd0 --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/Peccy_example_no_materials/LevelData/VegetationMap.dat @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0e6a5435c928079b27796f6b202bbc2623e7e454244ddc099a3cadf33b7cb9e9 +size 63 diff --git a/AutomatedTesting/Levels/AtomLevels/Peccy_example_no_materials/Peccy_example_no_materials.ly b/AutomatedTesting/Levels/AtomLevels/Peccy_example_no_materials/Peccy_example_no_materials.ly new file mode 100644 index 0000000000..a5d8235a30 --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/Peccy_example_no_materials/Peccy_example_no_materials.ly @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3559a804d8781d891807de2add711545f5e1866ef5cc48ff6a19e319a57c282d +size 10517 diff --git a/AutomatedTesting/Levels/AtomLevels/Peccy_example_no_materials/TerrainTexture.pak b/AutomatedTesting/Levels/AtomLevels/Peccy_example_no_materials/TerrainTexture.pak new file mode 100644 index 0000000000..fe3604a050 --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/Peccy_example_no_materials/TerrainTexture.pak @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8739c76e681f900923b900c9df0ef75cf421d39cabb54650c4b9ad19b6a76d85 +size 22 diff --git a/AutomatedTesting/Levels/AtomLevels/Peccy_example_no_materials/filelist.xml b/AutomatedTesting/Levels/AtomLevels/Peccy_example_no_materials/filelist.xml new file mode 100644 index 0000000000..fccdd73af5 --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/Peccy_example_no_materials/filelist.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/AutomatedTesting/Levels/AtomLevels/Peccy_example_no_materials/level.pak b/AutomatedTesting/Levels/AtomLevels/Peccy_example_no_materials/level.pak new file mode 100644 index 0000000000..9355e4df99 --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/Peccy_example_no_materials/level.pak @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b68e869cd3819cb72d9a9d45556b88b18631a282ca7c5908d2a9ae4265226e79 +size 6118 diff --git a/AutomatedTesting/Levels/AtomLevels/Peccy_example_no_materials/tags.txt b/AutomatedTesting/Levels/AtomLevels/Peccy_example_no_materials/tags.txt new file mode 100644 index 0000000000..0d6c1880e7 --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/Peccy_example_no_materials/tags.txt @@ -0,0 +1,12 @@ +0,0,0,0,0,0 +0,0,0,0,0,0 +0,0,0,0,0,0 +0,0,0,0,0,0 +0,0,0,0,0,0 +0,0,0,0,0,0 +0,0,0,0,0,0 +0,0,0,0,0,0 +0,0,0,0,0,0 +0,0,0,0,0,0 +0,0,0,0,0,0 +0,0,0,0,0,0 diff --git a/AutomatedTesting/Levels/AtomLevels/ShadowTest/LevelData/Environment.xml b/AutomatedTesting/Levels/AtomLevels/ShadowTest/LevelData/Environment.xml new file mode 100644 index 0000000000..c8398b6257 --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/ShadowTest/LevelData/Environment.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/AutomatedTesting/Levels/AtomLevels/ShadowTest/LevelData/Heightmap.dat b/AutomatedTesting/Levels/AtomLevels/ShadowTest/LevelData/Heightmap.dat new file mode 100644 index 0000000000..2bb3c003f3 --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/ShadowTest/LevelData/Heightmap.dat @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a8859eeafde418ffe71a29da14f5419439f9cdd598517b0de51bf1049770de44 +size 8389396 diff --git a/AutomatedTesting/Levels/AtomLevels/ShadowTest/LevelData/TerrainTexture.xml b/AutomatedTesting/Levels/AtomLevels/ShadowTest/LevelData/TerrainTexture.xml new file mode 100644 index 0000000000..f43df05b22 --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/ShadowTest/LevelData/TerrainTexture.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/AutomatedTesting/Levels/AtomLevels/ShadowTest/LevelData/TimeOfDay.xml b/AutomatedTesting/Levels/AtomLevels/ShadowTest/LevelData/TimeOfDay.xml new file mode 100644 index 0000000000..e4106ce437 --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/ShadowTest/LevelData/TimeOfDay.xml @@ -0,0 +1,356 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/AutomatedTesting/Levels/AtomLevels/ShadowTest/LevelData/VegetationMap.dat b/AutomatedTesting/Levels/AtomLevels/ShadowTest/LevelData/VegetationMap.dat new file mode 100644 index 0000000000..dce5631cd0 --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/ShadowTest/LevelData/VegetationMap.dat @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0e6a5435c928079b27796f6b202bbc2623e7e454244ddc099a3cadf33b7cb9e9 +size 63 diff --git a/AutomatedTesting/Levels/AtomLevels/ShadowTest/ShadowTest.ly b/AutomatedTesting/Levels/AtomLevels/ShadowTest/ShadowTest.ly new file mode 100644 index 0000000000..beff8c20be --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/ShadowTest/ShadowTest.ly @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:725691047a558edf3d3f443a86d401d0bfa388053f72c2c794813a22096e249f +size 8628 diff --git a/AutomatedTesting/Levels/AtomLevels/ShadowTest/TerrainTexture.pak b/AutomatedTesting/Levels/AtomLevels/ShadowTest/TerrainTexture.pak new file mode 100644 index 0000000000..fe3604a050 --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/ShadowTest/TerrainTexture.pak @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8739c76e681f900923b900c9df0ef75cf421d39cabb54650c4b9ad19b6a76d85 +size 22 diff --git a/AutomatedTesting/Levels/AtomLevels/ShadowTest/filelist.xml b/AutomatedTesting/Levels/AtomLevels/ShadowTest/filelist.xml new file mode 100644 index 0000000000..502f2b5af5 --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/ShadowTest/filelist.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/AutomatedTesting/Levels/AtomLevels/ShadowTest/level.pak b/AutomatedTesting/Levels/AtomLevels/ShadowTest/level.pak new file mode 100644 index 0000000000..34ec3a3cb3 --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/ShadowTest/level.pak @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3fc101d03df12328e2a1ddf817628963c60d3999dfd08aceb843c5e2bd0c16f7 +size 41574 diff --git a/AutomatedTesting/Levels/AtomLevels/ShadowTest/tags.txt b/AutomatedTesting/Levels/AtomLevels/ShadowTest/tags.txt new file mode 100644 index 0000000000..0d6c1880e7 --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/ShadowTest/tags.txt @@ -0,0 +1,12 @@ +0,0,0,0,0,0 +0,0,0,0,0,0 +0,0,0,0,0,0 +0,0,0,0,0,0 +0,0,0,0,0,0 +0,0,0,0,0,0 +0,0,0,0,0,0 +0,0,0,0,0,0 +0,0,0,0,0,0 +0,0,0,0,0,0 +0,0,0,0,0,0 +0,0,0,0,0,0 diff --git a/AutomatedTesting/Levels/AtomLevels/ShadowTest/terrain/cover.ctc b/AutomatedTesting/Levels/AtomLevels/ShadowTest/terrain/cover.ctc new file mode 100644 index 0000000000..5c869c6533 --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/ShadowTest/terrain/cover.ctc @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fdab340ad6c6dc6c1167e31afa061684be083360fc4108fa9f1fa4b15fe95d8c +size 1310792 diff --git a/AutomatedTesting/Levels/AtomLevels/Sponza/Layers/Geo.Lighting.layer b/AutomatedTesting/Levels/AtomLevels/Sponza/Layers/Geo.Lighting.layer new file mode 100644 index 0000000000..c987b392c5 --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/Sponza/Layers/Geo.Lighting.layer @@ -0,0 +1,913 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/AutomatedTesting/Levels/AtomLevels/Sponza/Layers/Geo.layer b/AutomatedTesting/Levels/AtomLevels/Sponza/Layers/Geo.layer new file mode 100644 index 0000000000..d690387d66 --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/Sponza/Layers/Geo.layer @@ -0,0 +1,1389 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/AutomatedTesting/Levels/AtomLevels/Sponza/Layers/Lighting.layer b/AutomatedTesting/Levels/AtomLevels/Sponza/Layers/Lighting.layer new file mode 100644 index 0000000000..a3e61a2143 --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/Sponza/Layers/Lighting.layer @@ -0,0 +1,770 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/AutomatedTesting/Levels/AtomLevels/Sponza/Sponza.ly b/AutomatedTesting/Levels/AtomLevels/Sponza/Sponza.ly new file mode 100644 index 0000000000..5ef743c1b7 --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/Sponza/Sponza.ly @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f4629bdef3a7407912f1aab55048e5d2f9ab114171eae77c3d4a0135a74eeb53 +size 5517 diff --git a/AutomatedTesting/Levels/AtomLevels/Sponza/filelist.xml b/AutomatedTesting/Levels/AtomLevels/Sponza/filelist.xml new file mode 100644 index 0000000000..1d3a50b8e5 --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/Sponza/filelist.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/AutomatedTesting/Levels/AtomLevels/Sponza/level.pak b/AutomatedTesting/Levels/AtomLevels/Sponza/level.pak new file mode 100644 index 0000000000..2b38c0658f --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/Sponza/level.pak @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:159409b567476761e785d464505847a761dfee3749fb636fa55a0f366dbcf287 +size 6109 diff --git a/AutomatedTesting/Levels/AtomLevels/Sponza/leveldata/Environment.xml b/AutomatedTesting/Levels/AtomLevels/Sponza/leveldata/Environment.xml new file mode 100644 index 0000000000..c8398b6257 --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/Sponza/leveldata/Environment.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/AutomatedTesting/Levels/AtomLevels/Sponza/leveldata/Heightmap.dat b/AutomatedTesting/Levels/AtomLevels/Sponza/leveldata/Heightmap.dat new file mode 100644 index 0000000000..ab03edd5bf --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/Sponza/leveldata/Heightmap.dat @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0951676ccfe5654b114572e39c5b15d9000f43719c47a6eefcf194209c548338 +size 8389396 diff --git a/AutomatedTesting/Levels/AtomLevels/Sponza/leveldata/TerrainTexture.xml b/AutomatedTesting/Levels/AtomLevels/Sponza/leveldata/TerrainTexture.xml new file mode 100644 index 0000000000..f43df05b22 --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/Sponza/leveldata/TerrainTexture.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/AutomatedTesting/Levels/AtomLevels/Sponza/leveldata/TimeOfDay.xml b/AutomatedTesting/Levels/AtomLevels/Sponza/leveldata/TimeOfDay.xml new file mode 100644 index 0000000000..6ea168cc6b --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/Sponza/leveldata/TimeOfDay.xml @@ -0,0 +1,356 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/AutomatedTesting/Levels/AtomLevels/Sponza/leveldata/VegetationMap.dat b/AutomatedTesting/Levels/AtomLevels/Sponza/leveldata/VegetationMap.dat new file mode 100644 index 0000000000..dce5631cd0 --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/Sponza/leveldata/VegetationMap.dat @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0e6a5435c928079b27796f6b202bbc2623e7e454244ddc099a3cadf33b7cb9e9 +size 63 diff --git a/AutomatedTesting/Levels/AtomLevels/Sponza/tags.txt b/AutomatedTesting/Levels/AtomLevels/Sponza/tags.txt new file mode 100644 index 0000000000..0d6c1880e7 --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/Sponza/tags.txt @@ -0,0 +1,12 @@ +0,0,0,0,0,0 +0,0,0,0,0,0 +0,0,0,0,0,0 +0,0,0,0,0,0 +0,0,0,0,0,0 +0,0,0,0,0,0 +0,0,0,0,0,0 +0,0,0,0,0,0 +0,0,0,0,0,0 +0,0,0,0,0,0 +0,0,0,0,0,0 +0,0,0,0,0,0 diff --git a/AutomatedTesting/Levels/AtomLevels/Sponza/terrain/cover.ctc b/AutomatedTesting/Levels/AtomLevels/Sponza/terrain/cover.ctc new file mode 100644 index 0000000000..5c869c6533 --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/Sponza/terrain/cover.ctc @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fdab340ad6c6dc6c1167e31afa061684be083360fc4108fa9f1fa4b15fe95d8c +size 1310792 diff --git a/AutomatedTesting/Levels/AtomLevels/Sponza/terraintexture.pak b/AutomatedTesting/Levels/AtomLevels/Sponza/terraintexture.pak new file mode 100644 index 0000000000..fe3604a050 --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/Sponza/terraintexture.pak @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8739c76e681f900923b900c9df0ef75cf421d39cabb54650c4b9ad19b6a76d85 +size 22 diff --git a/AutomatedTesting/Levels/AtomLevels/SponzaDiffuseGI/Layers/Geometry.layer b/AutomatedTesting/Levels/AtomLevels/SponzaDiffuseGI/Layers/Geometry.layer new file mode 100644 index 0000000000..3d73f166e1 --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/SponzaDiffuseGI/Layers/Geometry.layer @@ -0,0 +1,782 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/AutomatedTesting/Levels/AtomLevels/SponzaDiffuseGI/Layers/Lights.layer b/AutomatedTesting/Levels/AtomLevels/SponzaDiffuseGI/Layers/Lights.layer new file mode 100644 index 0000000000..2b4eaf2a32 --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/SponzaDiffuseGI/Layers/Lights.layer @@ -0,0 +1,1059 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/AutomatedTesting/Levels/AtomLevels/SponzaDiffuseGI/LevelData/Environment.xml b/AutomatedTesting/Levels/AtomLevels/SponzaDiffuseGI/LevelData/Environment.xml new file mode 100644 index 0000000000..4ba36f66ae --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/SponzaDiffuseGI/LevelData/Environment.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/AutomatedTesting/Levels/AtomLevels/SponzaDiffuseGI/LevelData/TimeOfDay.xml b/AutomatedTesting/Levels/AtomLevels/SponzaDiffuseGI/LevelData/TimeOfDay.xml new file mode 100644 index 0000000000..6ea168cc6b --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/SponzaDiffuseGI/LevelData/TimeOfDay.xml @@ -0,0 +1,356 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/AutomatedTesting/Levels/AtomLevels/SponzaDiffuseGI/SponzaDiffuseGI.ly b/AutomatedTesting/Levels/AtomLevels/SponzaDiffuseGI/SponzaDiffuseGI.ly new file mode 100644 index 0000000000..3faeb4babd --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/SponzaDiffuseGI/SponzaDiffuseGI.ly @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:08eec76c840629dedd9134b8c65e7d70d8e72f8d71903464fb8750b92a39bbe3 +size 6478 diff --git a/AutomatedTesting/Levels/AtomLevels/SponzaDiffuseGI/filelist.xml b/AutomatedTesting/Levels/AtomLevels/SponzaDiffuseGI/filelist.xml new file mode 100644 index 0000000000..da3a2ede43 --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/SponzaDiffuseGI/filelist.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/AutomatedTesting/Levels/AtomLevels/SponzaDiffuseGI/level.pak b/AutomatedTesting/Levels/AtomLevels/SponzaDiffuseGI/level.pak new file mode 100644 index 0000000000..bf28249944 --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/SponzaDiffuseGI/level.pak @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ae607dcf477bc0d8585ea7117722264df9782fd6fe58878f0b4266ccfaef88d9 +size 3977 diff --git a/AutomatedTesting/Levels/AtomLevels/SponzaDiffuseGI/tags.txt b/AutomatedTesting/Levels/AtomLevels/SponzaDiffuseGI/tags.txt new file mode 100644 index 0000000000..0d6c1880e7 --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/SponzaDiffuseGI/tags.txt @@ -0,0 +1,12 @@ +0,0,0,0,0,0 +0,0,0,0,0,0 +0,0,0,0,0,0 +0,0,0,0,0,0 +0,0,0,0,0,0 +0,0,0,0,0,0 +0,0,0,0,0,0 +0,0,0,0,0,0 +0,0,0,0,0,0 +0,0,0,0,0,0 +0,0,0,0,0,0 +0,0,0,0,0,0 diff --git a/AutomatedTesting/Levels/AtomLevels/TangentSpace/TangentSpace.ly b/AutomatedTesting/Levels/AtomLevels/TangentSpace/TangentSpace.ly new file mode 100644 index 0000000000..7a405de6b9 --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/TangentSpace/TangentSpace.ly @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:98825e8c69f5dec5b5f71a5dde0d64d5bdf8017f7898cac9e7b2bd00e5c5db97 +size 38475 diff --git a/AutomatedTesting/Levels/AtomLevels/TangentSpace/TestTangentSpace.azsl b/AutomatedTesting/Levels/AtomLevels/TangentSpace/TestTangentSpace.azsl new file mode 100644 index 0000000000..00bfdccb04 --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/TangentSpace/TestTangentSpace.azsl @@ -0,0 +1,49 @@ + +/* +* 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 "../../Shaders/CommonVS.azsli" +#include + +enum class Axis +{ + Tangent, + Bitangent, + Normal +}; + +option Axis o_axis; + +struct PixelOutput +{ + float4 m_color : SV_Target0; +}; + +PixelOutput MainPS(VertexOutput input) +{ + PixelOutput output; + + if (o_axis == Axis::Tangent) + { + output.m_color = float4(input.m_tangent * 0.5 + 0.5, 1); + } + else if (o_axis == Axis::Bitangent) + { + output.m_color = float4(input.m_bitangent * 0.5 + 0.5, 1); + } + else + { + output.m_color = float4(input.m_normal * 0.5 + 0.5, 1); + } + + return output; +} \ No newline at end of file diff --git a/AutomatedTesting/Levels/AtomLevels/TangentSpace/TestTangentSpace.materialtype b/AutomatedTesting/Levels/AtomLevels/TangentSpace/TestTangentSpace.materialtype new file mode 100644 index 0000000000..f68f7c6b32 --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/TangentSpace/TestTangentSpace.materialtype @@ -0,0 +1,22 @@ +{ + "propertyLayout": { + "version": 1, + "properties": { + "general": [ + { + "id": "o_axis", + "type": "int", + "connection": { + "type": "shaderOption", + "id": "o_axis" + } + } + ] + } + }, + "shaders": [ + { + "file": "TestTangentSpace.shader" + } + ] +} diff --git a/AutomatedTesting/Levels/AtomLevels/TangentSpace/TestTangentSpace.shader b/AutomatedTesting/Levels/AtomLevels/TangentSpace/TestTangentSpace.shader new file mode 100644 index 0000000000..5ac7eff206 --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/TangentSpace/TestTangentSpace.shader @@ -0,0 +1,26 @@ +{ + "Source": "TestTangentSpace.azsl", + + "DepthStencilState": { + "Depth": { + "Enable": true, + "CompareFunc": "GreaterEqual" + } + }, + + // Using auxgeom draw list to avoid tonemapping + "DrawList": "auxgeom", + + "ProgramSettings": { + "EntryPoints": [ + { + "name": "CommonVS", + "type": "Vertex" + }, + { + "name": "MainPS", + "type": "Fragment" + } + ] + } +} diff --git a/AutomatedTesting/Levels/AtomLevels/TangentSpace/TestTangentSpace_B.material b/AutomatedTesting/Levels/AtomLevels/TangentSpace/TestTangentSpace_B.material new file mode 100644 index 0000000000..414175fd40 --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/TangentSpace/TestTangentSpace_B.material @@ -0,0 +1,8 @@ +{ + "materialType": "TestTangentSpace.materialtype", + "properties": { + "general": { + "o_axis": 1 + } + } +} diff --git a/AutomatedTesting/Levels/AtomLevels/TangentSpace/TestTangentSpace_N.material b/AutomatedTesting/Levels/AtomLevels/TangentSpace/TestTangentSpace_N.material new file mode 100644 index 0000000000..bda8aa489b --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/TangentSpace/TestTangentSpace_N.material @@ -0,0 +1,8 @@ +{ + "materialType": "TestTangentSpace.materialtype", + "properties": { + "general": { + "o_axis": 2 + } + } +} diff --git a/AutomatedTesting/Levels/AtomLevels/TangentSpace/TestTangentSpace_T.material b/AutomatedTesting/Levels/AtomLevels/TangentSpace/TestTangentSpace_T.material new file mode 100644 index 0000000000..7980476181 --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/TangentSpace/TestTangentSpace_T.material @@ -0,0 +1,8 @@ +{ + "materialType": "TestTangentSpace.materialtype", + "properties": { + "general": { + "o_axis": 0 + } + } +} diff --git a/AutomatedTesting/Levels/AtomLevels/TangentSpace/cylinder_faceted.fbx b/AutomatedTesting/Levels/AtomLevels/TangentSpace/cylinder_faceted.fbx new file mode 100644 index 0000000000..989f4240e9 --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/TangentSpace/cylinder_faceted.fbx @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8f22d389a7a7187103306e31fdd8ee451b4100a98a92c2321fb259c2aa9ac9b7 +size 14680 diff --git a/AutomatedTesting/Levels/AtomLevels/TangentSpace/cylinder_faceted_rotated_uvs.fbx b/AutomatedTesting/Levels/AtomLevels/TangentSpace/cylinder_faceted_rotated_uvs.fbx new file mode 100644 index 0000000000..616b39c6ec --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/TangentSpace/cylinder_faceted_rotated_uvs.fbx @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:41b4cd04c1931c90b4dc732fb627602d39e064096f6370d81eacc037c5a87008 +size 14671 diff --git a/AutomatedTesting/Levels/AtomLevels/TangentSpace/cylinder_lowres.fbx b/AutomatedTesting/Levels/AtomLevels/TangentSpace/cylinder_lowres.fbx new file mode 100644 index 0000000000..528cc81f33 --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/TangentSpace/cylinder_lowres.fbx @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:49cd54041f03da6ece73eec49862625df1afa7aaba7beefecdfe66af5cd3ba11 +size 13910 diff --git a/AutomatedTesting/Levels/AtomLevels/TangentSpace/filelist.xml b/AutomatedTesting/Levels/AtomLevels/TangentSpace/filelist.xml new file mode 100644 index 0000000000..52b3bd08cf --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/TangentSpace/filelist.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/AutomatedTesting/Levels/AtomLevels/TangentSpace/level.pak b/AutomatedTesting/Levels/AtomLevels/TangentSpace/level.pak new file mode 100644 index 0000000000..0e713c0bf7 --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/TangentSpace/level.pak @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:438e6f0ab1675ab65a4aea6e170f0aeb9ac7cccb9b13683d2764cd5b9a1838cc +size 45292 diff --git a/AutomatedTesting/Levels/AtomLevels/TangentSpace/leveldata/Environment.xml b/AutomatedTesting/Levels/AtomLevels/TangentSpace/leveldata/Environment.xml new file mode 100644 index 0000000000..c8398b6257 --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/TangentSpace/leveldata/Environment.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/AutomatedTesting/Levels/AtomLevels/TangentSpace/leveldata/Heightmap.dat b/AutomatedTesting/Levels/AtomLevels/TangentSpace/leveldata/Heightmap.dat new file mode 100644 index 0000000000..9f482e6fad --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/TangentSpace/leveldata/Heightmap.dat @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e263e20aa06bac2dd0008db8a68790b882716fc87cd48d818c2cc244f54a1ce1 +size 17407562 diff --git a/AutomatedTesting/Levels/AtomLevels/TangentSpace/leveldata/TerrainTexture.xml b/AutomatedTesting/Levels/AtomLevels/TangentSpace/leveldata/TerrainTexture.xml new file mode 100644 index 0000000000..0fa8b16c50 --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/TangentSpace/leveldata/TerrainTexture.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/AutomatedTesting/Levels/AtomLevels/TangentSpace/leveldata/TimeOfDay.xml b/AutomatedTesting/Levels/AtomLevels/TangentSpace/leveldata/TimeOfDay.xml new file mode 100644 index 0000000000..c5b404318e --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/TangentSpace/leveldata/TimeOfDay.xml @@ -0,0 +1,356 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/AutomatedTesting/Levels/AtomLevels/TangentSpace/leveldata/VegetationMap.dat b/AutomatedTesting/Levels/AtomLevels/TangentSpace/leveldata/VegetationMap.dat new file mode 100644 index 0000000000..dce5631cd0 --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/TangentSpace/leveldata/VegetationMap.dat @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0e6a5435c928079b27796f6b202bbc2623e7e454244ddc099a3cadf33b7cb9e9 +size 63 diff --git a/AutomatedTesting/Levels/AtomLevels/TangentSpace/plane_zup.fbx b/AutomatedTesting/Levels/AtomLevels/TangentSpace/plane_zup.fbx new file mode 100644 index 0000000000..1337082a83 --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/TangentSpace/plane_zup.fbx @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5d9bd1a1a2d87c061fa45b6089fc57dea182d3c4b65765882bbb30aa0f633fe9 +size 15196 diff --git a/AutomatedTesting/Levels/AtomLevels/lucy_high/LevelData/Environment.xml b/AutomatedTesting/Levels/AtomLevels/lucy_high/LevelData/Environment.xml new file mode 100644 index 0000000000..c8398b6257 --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/lucy_high/LevelData/Environment.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/AutomatedTesting/Levels/AtomLevels/lucy_high/LevelData/Heightmap.dat b/AutomatedTesting/Levels/AtomLevels/lucy_high/LevelData/Heightmap.dat new file mode 100644 index 0000000000..5f09eef86c --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/lucy_high/LevelData/Heightmap.dat @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9996f86f94d15b8a2a59353653bc8f0e24a326dc63bd3480980c45aec6ec5596 +size 8389548 diff --git a/AutomatedTesting/Levels/AtomLevels/lucy_high/LevelData/TerrainTexture.xml b/AutomatedTesting/Levels/AtomLevels/lucy_high/LevelData/TerrainTexture.xml new file mode 100644 index 0000000000..f43df05b22 --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/lucy_high/LevelData/TerrainTexture.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/AutomatedTesting/Levels/AtomLevels/lucy_high/LevelData/TimeOfDay.xml b/AutomatedTesting/Levels/AtomLevels/lucy_high/LevelData/TimeOfDay.xml new file mode 100644 index 0000000000..456d609b8a --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/lucy_high/LevelData/TimeOfDay.xml @@ -0,0 +1,356 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/AutomatedTesting/Levels/AtomLevels/lucy_high/LevelData/VegetationMap.dat b/AutomatedTesting/Levels/AtomLevels/lucy_high/LevelData/VegetationMap.dat new file mode 100644 index 0000000000..dce5631cd0 --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/lucy_high/LevelData/VegetationMap.dat @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0e6a5435c928079b27796f6b202bbc2623e7e454244ddc099a3cadf33b7cb9e9 +size 63 diff --git a/AutomatedTesting/Levels/AtomLevels/lucy_high/filelist.xml b/AutomatedTesting/Levels/AtomLevels/lucy_high/filelist.xml new file mode 100644 index 0000000000..603bdab1ef --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/lucy_high/filelist.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/AutomatedTesting/Levels/AtomLevels/lucy_high/level.pak b/AutomatedTesting/Levels/AtomLevels/lucy_high/level.pak new file mode 100644 index 0000000000..aaa5e794fb --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/lucy_high/level.pak @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4a89c9baf1f802bb09b5f871667ca2143127774dd1bb7c430c45423f8f73e528 +size 7739 diff --git a/AutomatedTesting/Levels/AtomLevels/lucy_high/lucy_high.ly b/AutomatedTesting/Levels/AtomLevels/lucy_high/lucy_high.ly new file mode 100644 index 0000000000..320f9cc313 --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/lucy_high/lucy_high.ly @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:552809b2d95a43f5aa2386550a94e8e3b3bc6bfe2e4e8b118416445fe9ab271e +size 9435 diff --git a/AutomatedTesting/Levels/AtomLevels/lucy_high/tags.txt b/AutomatedTesting/Levels/AtomLevels/lucy_high/tags.txt new file mode 100644 index 0000000000..0d6c1880e7 --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/lucy_high/tags.txt @@ -0,0 +1,12 @@ +0,0,0,0,0,0 +0,0,0,0,0,0 +0,0,0,0,0,0 +0,0,0,0,0,0 +0,0,0,0,0,0 +0,0,0,0,0,0 +0,0,0,0,0,0 +0,0,0,0,0,0 +0,0,0,0,0,0 +0,0,0,0,0,0 +0,0,0,0,0,0 +0,0,0,0,0,0 diff --git a/AutomatedTesting/Levels/AtomLevels/lucy_high/terrain/cover.ctc b/AutomatedTesting/Levels/AtomLevels/lucy_high/terrain/cover.ctc new file mode 100644 index 0000000000..5c869c6533 --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/lucy_high/terrain/cover.ctc @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fdab340ad6c6dc6c1167e31afa061684be083360fc4108fa9f1fa4b15fe95d8c +size 1310792 diff --git a/AutomatedTesting/Levels/AtomLevels/lucy_high/terraintexture.pak b/AutomatedTesting/Levels/AtomLevels/lucy_high/terraintexture.pak new file mode 100644 index 0000000000..fe3604a050 --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/lucy_high/terraintexture.pak @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8739c76e681f900923b900c9df0ef75cf421d39cabb54650c4b9ad19b6a76d85 +size 22 diff --git a/AutomatedTesting/Levels/AtomLevels/macbeth_shaderballs/LevelData/Environment.xml b/AutomatedTesting/Levels/AtomLevels/macbeth_shaderballs/LevelData/Environment.xml new file mode 100644 index 0000000000..c8398b6257 --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/macbeth_shaderballs/LevelData/Environment.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/AutomatedTesting/Levels/AtomLevels/macbeth_shaderballs/LevelData/Heightmap.dat b/AutomatedTesting/Levels/AtomLevels/macbeth_shaderballs/LevelData/Heightmap.dat new file mode 100644 index 0000000000..e5a126f793 --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/macbeth_shaderballs/LevelData/Heightmap.dat @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:32b3c3b6a44f979f0dddec02fa52a0f643a03e9ac587d73d1843d914edab7cfa +size 8389548 diff --git a/AutomatedTesting/Levels/AtomLevels/macbeth_shaderballs/LevelData/TerrainTexture.xml b/AutomatedTesting/Levels/AtomLevels/macbeth_shaderballs/LevelData/TerrainTexture.xml new file mode 100644 index 0000000000..f43df05b22 --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/macbeth_shaderballs/LevelData/TerrainTexture.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/AutomatedTesting/Levels/AtomLevels/macbeth_shaderballs/LevelData/TimeOfDay.xml b/AutomatedTesting/Levels/AtomLevels/macbeth_shaderballs/LevelData/TimeOfDay.xml new file mode 100644 index 0000000000..3a083a6882 --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/macbeth_shaderballs/LevelData/TimeOfDay.xml @@ -0,0 +1,356 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/AutomatedTesting/Levels/AtomLevels/macbeth_shaderballs/LevelData/VegetationMap.dat b/AutomatedTesting/Levels/AtomLevels/macbeth_shaderballs/LevelData/VegetationMap.dat new file mode 100644 index 0000000000..dce5631cd0 --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/macbeth_shaderballs/LevelData/VegetationMap.dat @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0e6a5435c928079b27796f6b202bbc2623e7e454244ddc099a3cadf33b7cb9e9 +size 63 diff --git a/AutomatedTesting/Levels/AtomLevels/macbeth_shaderballs/TerrainTexture.pak b/AutomatedTesting/Levels/AtomLevels/macbeth_shaderballs/TerrainTexture.pak new file mode 100644 index 0000000000..fe3604a050 --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/macbeth_shaderballs/TerrainTexture.pak @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8739c76e681f900923b900c9df0ef75cf421d39cabb54650c4b9ad19b6a76d85 +size 22 diff --git a/AutomatedTesting/Levels/AtomLevels/macbeth_shaderballs/filelist.xml b/AutomatedTesting/Levels/AtomLevels/macbeth_shaderballs/filelist.xml new file mode 100644 index 0000000000..8ebd8dd6fd --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/macbeth_shaderballs/filelist.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/AutomatedTesting/Levels/AtomLevels/macbeth_shaderballs/level.pak b/AutomatedTesting/Levels/AtomLevels/macbeth_shaderballs/level.pak new file mode 100644 index 0000000000..acff6441d0 --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/macbeth_shaderballs/level.pak @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:febe6437673cab6732d7eee3df6155e670043ec10047f2c20dbf417f2e499a76 +size 7710 diff --git a/AutomatedTesting/Levels/AtomLevels/macbeth_shaderballs/macbeth_shaderballs.ly b/AutomatedTesting/Levels/AtomLevels/macbeth_shaderballs/macbeth_shaderballs.ly new file mode 100644 index 0000000000..59009f27c1 --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/macbeth_shaderballs/macbeth_shaderballs.ly @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:772448438ccb225129ea21024117b204f6f4ccf8b470a6a4d668ea7cc7ebabfe +size 19600 diff --git a/AutomatedTesting/Levels/AtomLevels/macbeth_shaderballs/tags.txt b/AutomatedTesting/Levels/AtomLevels/macbeth_shaderballs/tags.txt new file mode 100644 index 0000000000..0d6c1880e7 --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/macbeth_shaderballs/tags.txt @@ -0,0 +1,12 @@ +0,0,0,0,0,0 +0,0,0,0,0,0 +0,0,0,0,0,0 +0,0,0,0,0,0 +0,0,0,0,0,0 +0,0,0,0,0,0 +0,0,0,0,0,0 +0,0,0,0,0,0 +0,0,0,0,0,0 +0,0,0,0,0,0 +0,0,0,0,0,0 +0,0,0,0,0,0 diff --git a/AutomatedTesting/Levels/AtomLevels/macbeth_shaderballs/terrain/cover.ctc b/AutomatedTesting/Levels/AtomLevels/macbeth_shaderballs/terrain/cover.ctc new file mode 100644 index 0000000000..5c869c6533 --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/macbeth_shaderballs/terrain/cover.ctc @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fdab340ad6c6dc6c1167e31afa061684be083360fc4108fa9f1fa4b15fe95d8c +size 1310792 From ed68792eb84f5940bc15bed984f7d60556413f83 Mon Sep 17 00:00:00 2001 From: jromnoa Date: Wed, 21 Apr 2021 14:15:08 -0700 Subject: [PATCH 05/32] remove all of the AtomTest levels, going to add 1 level instead to conserve storage space --- .../ActorTest_100Actors.ly | 3 - .../Layers/BURT_Crouch.layer | 5816 ----------------- .../Layers/Layer BURT_CrouchIdle.layer | 5816 ----------------- .../Layers/Layer BURT_Idle.layer | 5816 ----------------- .../Layers/Layer BURT_Idle_alt_a.layer | 5816 ----------------- .../Layers/Layer Burt_jump_up.layer | 5816 ----------------- .../LevelData/Environment.xml | 14 - .../LevelData/Heightmap.dat | 3 - .../LevelData/TerrainTexture.xml | 5 - .../LevelData/TimeOfDay.xml | 356 - .../LevelData/VegetationMap.dat | 3 - .../ActorTest_100Actors/filelist.xml | 6 - .../AtomLevels/ActorTest_100Actors/level.pak | 3 - .../AtomLevels/ActorTest_100Actors/tags.txt | 12 - .../ActorTest_MultipleActors.ly | 3 - .../LevelData/Environment.xml | 14 - .../LevelData/Heightmap.dat | 3 - .../ActorTest_MultipleActors/level.pak | 3 - .../ActorTest_SingleActor.ly | 3 - .../LevelData/Environment.xml | 14 - .../LevelData/Heightmap.dat | 3 - .../ActorTest_SingleActor/level.pak | 3 - .../AtomLevels/EmptyLevel/EmptyLevel.ly | 3 - .../EmptyLevel/LevelData/Environment.xml | 14 - .../EmptyLevel/LevelData/Heightmap.dat | 3 - .../EmptyLevel/LevelData/TerrainTexture.xml | 7 - .../EmptyLevel/LevelData/TimeOfDay.xml | 356 - .../EmptyLevel/LevelData/VegetationMap.dat | 3 - .../AtomLevels/EmptyLevel/TerrainTexture.pak | 3 - .../Levels/AtomLevels/EmptyLevel/level.pak | 3 - .../AtomLevels/EmptyLevel/terrain/cover.ctc | 3 - .../AtomLevels/ExampleLevel/ExampleLevel.ly | 3 - .../ExampleLevel/Layers/DefaultLayer.layer | 1177 ---- .../ExampleLevel/LevelData/Environment.xml | 14 - .../ExampleLevel/LevelData/Heightmap.dat | 3 - .../ExampleLevel/LevelData/TerrainTexture.xml | 7 - .../ExampleLevel/LevelData/TimeOfDay.xml | 356 - .../ExampleLevel/LevelData/VegetationMap.dat | 3 - .../AtomLevels/ExampleLevel/filelist.xml | 6 - .../Levels/AtomLevels/ExampleLevel/level.pak | 3 - .../Levels/AtomLevels/ExampleLevel/tags.txt | 12 - .../ExampleLevel/terraintexture.pak | 3 - .../AtomLevels/Lucy/LevelData/Environment.xml | 14 - .../AtomLevels/Lucy/LevelData/Heightmap.dat | 3 - .../Lucy/LevelData/TerrainTexture.xml | 7 - .../AtomLevels/Lucy/LevelData/TimeOfDay.xml | 356 - .../Lucy/LevelData/VegetationMap.dat | 3 - .../Levels/AtomLevels/Lucy/Lucy.ly | 3 - .../Levels/AtomLevels/Lucy/TerrainTexture.pak | 3 - .../Levels/AtomLevels/Lucy/filelist.xml | 6 - .../Levels/AtomLevels/Lucy/level.pak | 3 - .../Levels/AtomLevels/Lucy/tags.txt | 12 - .../Levels/AtomLevels/Lucy/terrain/cover.ctc | 3 - .../MeshTest/LevelData/Environment.xml | 14 - .../MeshTest/LevelData/Heightmap.dat | 3 - .../MeshTest/LevelData/TerrainTexture.xml | 7 - .../MeshTest/LevelData/TimeOfDay.xml | 356 - .../MeshTest/LevelData/VegetationMap.dat | 3 - .../Levels/AtomLevels/MeshTest/MeshTest.ly | 3 - .../AtomLevels/MeshTest/TerrainTexture.pak | 3 - .../Levels/AtomLevels/MeshTest/filelist.xml | 6 - .../Levels/AtomLevels/MeshTest/level.pak | 3 - .../Levels/AtomLevels/MeshTest/tags.txt | 12 - .../AtomLevels/MeshTest/terrain/cover.ctc | 3 - .../NormalMapping/LevelData/Environment.xml | 14 - .../NormalMapping/LevelData/Heightmap.dat | 3 - .../LevelData/TerrainTexture.xml | 10 - .../NormalMapping/LevelData/TimeOfDay.xml | 356 - .../NormalMapping/LevelData/VegetationMap.dat | 3 - .../AtomLevels/NormalMapping/NormalMapping.ly | 3 - .../NormalMapping/TestNormalMapping.azsl | 101 - .../TestNormalMapping.materialtype | 60 - .../NormalMapping/TestNormalMapping.shader | 26 - .../NormalMapping/am_floor_tile.material | 13 - .../NormalMapping/am_floor_tile_ddn.tif | 3 - .../NormalMapping/am_floor_tile_diff.tif | 3 - .../am_floor_tile_normals.material | 12 - .../Levels/AtomLevels/NormalMapping/level.pak | 3 - .../AtomLevels/NormalMapping/lit_0.material | 11 - .../AtomLevels/NormalMapping/lit_1.material | 11 - .../AtomLevels/NormalMapping/lit_2.material | 11 - .../NormalMapping/normals_0.material | 11 - .../NormalMapping/normals_1.material | 11 - .../NormalMapping/normals_2.material | 11 - .../NormalMapping/raw_normal_map.material | 11 - .../AtomLevels/NormalMapping/test_ddn.tif | 3 - .../PbrMaterialChart/PbrMaterialChart.ly | 3 - .../AtomLevels/PbrMaterialChart/filelist.xml | 6 - .../AtomLevels/PbrMaterialChart/level.pak | 3 - .../leveldata/Environment.xml | 14 - .../PbrMaterialChart/leveldata/Heightmap.dat | 3 - .../leveldata/TerrainTexture.xml | 10 - .../PbrMaterialChart/leveldata/TimeOfDay.xml | 356 - .../leveldata/VegetationMap.dat | 3 - .../PbrMaterialChart/materials/basic.material | 32 - .../materials/basic_m00_r00.material | 13 - .../materials/basic_m00_r01.material | 13 - .../materials/basic_m00_r02.material | 13 - .../materials/basic_m00_r03.material | 13 - .../materials/basic_m00_r04.material | 13 - .../materials/basic_m00_r05.material | 13 - .../materials/basic_m00_r06.material | 13 - .../materials/basic_m00_r07.material | 13 - .../materials/basic_m00_r08.material | 13 - .../materials/basic_m00_r09.material | 13 - .../materials/basic_m00_r10.material | 13 - .../materials/basic_m10_r00.material | 13 - .../materials/basic_m10_r01.material | 13 - .../materials/basic_m10_r02.material | 13 - .../materials/basic_m10_r03.material | 13 - .../materials/basic_m10_r04.material | 13 - .../materials/basic_m10_r05.material | 13 - .../materials/basic_m10_r06.material | 13 - .../materials/basic_m10_r07.material | 13 - .../materials/basic_m10_r08.material | 13 - .../materials/basic_m10_r09.material | 13 - .../materials/basic_m10_r10.material | 13 - .../AtomLevels/PbrMaterialChart/tags.txt | 12 - .../LevelData/Environment.xml | 14 - .../LevelData/Heightmap.dat | 3 - .../LevelData/TerrainTexture.xml | 7 - .../LevelData/TimeOfDay.xml | 356 - .../LevelData/VegetationMap.dat | 3 - .../Peccy_example_dcc_materials.ly | 3 - .../TerrainTexture.pak | 3 - .../Peccy_example_dcc_materials/filelist.xml | 6 - .../Peccy_example_dcc_materials/level.pak | 3 - .../Peccy_example_dcc_materials/tags.txt | 12 - .../LevelData/Environment.xml | 14 - .../LevelData/Heightmap.dat | 3 - .../LevelData/TerrainTexture.xml | 7 - .../LevelData/TimeOfDay.xml | 356 - .../LevelData/VegetationMap.dat | 3 - .../Peccy_example_no_materials.ly | 3 - .../TerrainTexture.pak | 3 - .../Peccy_example_no_materials/filelist.xml | 6 - .../Peccy_example_no_materials/level.pak | 3 - .../Peccy_example_no_materials/tags.txt | 12 - .../ShadowTest/LevelData/Environment.xml | 14 - .../ShadowTest/LevelData/Heightmap.dat | 3 - .../ShadowTest/LevelData/TerrainTexture.xml | 7 - .../ShadowTest/LevelData/TimeOfDay.xml | 356 - .../ShadowTest/LevelData/VegetationMap.dat | 3 - .../AtomLevels/ShadowTest/ShadowTest.ly | 3 - .../AtomLevels/ShadowTest/TerrainTexture.pak | 3 - .../Levels/AtomLevels/ShadowTest/filelist.xml | 6 - .../Levels/AtomLevels/ShadowTest/level.pak | 3 - .../Levels/AtomLevels/ShadowTest/tags.txt | 12 - .../AtomLevels/ShadowTest/terrain/cover.ctc | 3 - .../Sponza/Layers/Geo.Lighting.layer | 913 --- .../Levels/AtomLevels/Sponza/Layers/Geo.layer | 1389 ---- .../AtomLevels/Sponza/Layers/Lighting.layer | 770 --- .../Levels/AtomLevels/Sponza/Sponza.ly | 3 - .../Levels/AtomLevels/Sponza/filelist.xml | 6 - .../Levels/AtomLevels/Sponza/level.pak | 3 - .../Sponza/leveldata/Environment.xml | 14 - .../AtomLevels/Sponza/leveldata/Heightmap.dat | 3 - .../Sponza/leveldata/TerrainTexture.xml | 7 - .../AtomLevels/Sponza/leveldata/TimeOfDay.xml | 356 - .../Sponza/leveldata/VegetationMap.dat | 3 - .../Levels/AtomLevels/Sponza/tags.txt | 12 - .../AtomLevels/Sponza/terrain/cover.ctc | 3 - .../AtomLevels/Sponza/terraintexture.pak | 3 - .../SponzaDiffuseGI/Layers/Geometry.layer | 782 --- .../SponzaDiffuseGI/Layers/Lights.layer | 1059 --- .../SponzaDiffuseGI/LevelData/Environment.xml | 14 - .../SponzaDiffuseGI/LevelData/TimeOfDay.xml | 356 - .../SponzaDiffuseGI/SponzaDiffuseGI.ly | 3 - .../AtomLevels/SponzaDiffuseGI/filelist.xml | 6 - .../AtomLevels/SponzaDiffuseGI/level.pak | 3 - .../AtomLevels/SponzaDiffuseGI/tags.txt | 12 - .../AtomLevels/TangentSpace/TangentSpace.ly | 3 - .../TangentSpace/TestTangentSpace.azsl | 49 - .../TestTangentSpace.materialtype | 22 - .../TangentSpace/TestTangentSpace.shader | 26 - .../TangentSpace/TestTangentSpace_B.material | 8 - .../TangentSpace/TestTangentSpace_N.material | 8 - .../TangentSpace/TestTangentSpace_T.material | 8 - .../TangentSpace/cylinder_faceted.fbx | 3 - .../cylinder_faceted_rotated_uvs.fbx | 3 - .../TangentSpace/cylinder_lowres.fbx | 3 - .../AtomLevels/TangentSpace/filelist.xml | 6 - .../Levels/AtomLevels/TangentSpace/level.pak | 3 - .../TangentSpace/leveldata/Environment.xml | 14 - .../TangentSpace/leveldata/Heightmap.dat | 3 - .../TangentSpace/leveldata/TerrainTexture.xml | 10 - .../TangentSpace/leveldata/TimeOfDay.xml | 356 - .../TangentSpace/leveldata/VegetationMap.dat | 3 - .../AtomLevels/TangentSpace/plane_zup.fbx | 3 - .../lucy_high/LevelData/Environment.xml | 14 - .../lucy_high/LevelData/Heightmap.dat | 3 - .../lucy_high/LevelData/TerrainTexture.xml | 7 - .../lucy_high/LevelData/TimeOfDay.xml | 356 - .../lucy_high/LevelData/VegetationMap.dat | 3 - .../Levels/AtomLevels/lucy_high/filelist.xml | 6 - .../Levels/AtomLevels/lucy_high/level.pak | 3 - .../Levels/AtomLevels/lucy_high/lucy_high.ly | 3 - .../Levels/AtomLevels/lucy_high/tags.txt | 12 - .../AtomLevels/lucy_high/terrain/cover.ctc | 3 - .../AtomLevels/lucy_high/terraintexture.pak | 3 - .../LevelData/Environment.xml | 14 - .../LevelData/Heightmap.dat | 3 - .../LevelData/TerrainTexture.xml | 7 - .../LevelData/TimeOfDay.xml | 356 - .../LevelData/VegetationMap.dat | 3 - .../macbeth_shaderballs/TerrainTexture.pak | 3 - .../macbeth_shaderballs/filelist.xml | 6 - .../AtomLevels/macbeth_shaderballs/level.pak | 3 - .../macbeth_shaderballs.ly | 3 - .../AtomLevels/macbeth_shaderballs/tags.txt | 12 - .../macbeth_shaderballs/terrain/cover.ctc | 3 - 211 files changed, 42067 deletions(-) delete mode 100644 AutomatedTesting/Levels/AtomLevels/ActorTest_100Actors/ActorTest_100Actors.ly delete mode 100644 AutomatedTesting/Levels/AtomLevels/ActorTest_100Actors/Layers/BURT_Crouch.layer delete mode 100644 AutomatedTesting/Levels/AtomLevels/ActorTest_100Actors/Layers/Layer BURT_CrouchIdle.layer delete mode 100644 AutomatedTesting/Levels/AtomLevels/ActorTest_100Actors/Layers/Layer BURT_Idle.layer delete mode 100644 AutomatedTesting/Levels/AtomLevels/ActorTest_100Actors/Layers/Layer BURT_Idle_alt_a.layer delete mode 100644 AutomatedTesting/Levels/AtomLevels/ActorTest_100Actors/Layers/Layer Burt_jump_up.layer delete mode 100644 AutomatedTesting/Levels/AtomLevels/ActorTest_100Actors/LevelData/Environment.xml delete mode 100644 AutomatedTesting/Levels/AtomLevels/ActorTest_100Actors/LevelData/Heightmap.dat delete mode 100644 AutomatedTesting/Levels/AtomLevels/ActorTest_100Actors/LevelData/TerrainTexture.xml delete mode 100644 AutomatedTesting/Levels/AtomLevels/ActorTest_100Actors/LevelData/TimeOfDay.xml delete mode 100644 AutomatedTesting/Levels/AtomLevels/ActorTest_100Actors/LevelData/VegetationMap.dat delete mode 100644 AutomatedTesting/Levels/AtomLevels/ActorTest_100Actors/filelist.xml delete mode 100644 AutomatedTesting/Levels/AtomLevels/ActorTest_100Actors/level.pak delete mode 100644 AutomatedTesting/Levels/AtomLevels/ActorTest_100Actors/tags.txt delete mode 100644 AutomatedTesting/Levels/AtomLevels/ActorTest_MultipleActors/ActorTest_MultipleActors.ly delete mode 100644 AutomatedTesting/Levels/AtomLevels/ActorTest_MultipleActors/LevelData/Environment.xml delete mode 100644 AutomatedTesting/Levels/AtomLevels/ActorTest_MultipleActors/LevelData/Heightmap.dat delete mode 100644 AutomatedTesting/Levels/AtomLevels/ActorTest_MultipleActors/level.pak delete mode 100644 AutomatedTesting/Levels/AtomLevels/ActorTest_SingleActor/ActorTest_SingleActor.ly delete mode 100644 AutomatedTesting/Levels/AtomLevels/ActorTest_SingleActor/LevelData/Environment.xml delete mode 100644 AutomatedTesting/Levels/AtomLevels/ActorTest_SingleActor/LevelData/Heightmap.dat delete mode 100644 AutomatedTesting/Levels/AtomLevels/ActorTest_SingleActor/level.pak delete mode 100644 AutomatedTesting/Levels/AtomLevels/EmptyLevel/EmptyLevel.ly delete mode 100644 AutomatedTesting/Levels/AtomLevels/EmptyLevel/LevelData/Environment.xml delete mode 100644 AutomatedTesting/Levels/AtomLevels/EmptyLevel/LevelData/Heightmap.dat delete mode 100644 AutomatedTesting/Levels/AtomLevels/EmptyLevel/LevelData/TerrainTexture.xml delete mode 100644 AutomatedTesting/Levels/AtomLevels/EmptyLevel/LevelData/TimeOfDay.xml delete mode 100644 AutomatedTesting/Levels/AtomLevels/EmptyLevel/LevelData/VegetationMap.dat delete mode 100644 AutomatedTesting/Levels/AtomLevels/EmptyLevel/TerrainTexture.pak delete mode 100644 AutomatedTesting/Levels/AtomLevels/EmptyLevel/level.pak delete mode 100644 AutomatedTesting/Levels/AtomLevels/EmptyLevel/terrain/cover.ctc delete mode 100644 AutomatedTesting/Levels/AtomLevels/ExampleLevel/ExampleLevel.ly delete mode 100644 AutomatedTesting/Levels/AtomLevels/ExampleLevel/Layers/DefaultLayer.layer delete mode 100644 AutomatedTesting/Levels/AtomLevels/ExampleLevel/LevelData/Environment.xml delete mode 100644 AutomatedTesting/Levels/AtomLevels/ExampleLevel/LevelData/Heightmap.dat delete mode 100644 AutomatedTesting/Levels/AtomLevels/ExampleLevel/LevelData/TerrainTexture.xml delete mode 100644 AutomatedTesting/Levels/AtomLevels/ExampleLevel/LevelData/TimeOfDay.xml delete mode 100644 AutomatedTesting/Levels/AtomLevels/ExampleLevel/LevelData/VegetationMap.dat delete mode 100644 AutomatedTesting/Levels/AtomLevels/ExampleLevel/filelist.xml delete mode 100644 AutomatedTesting/Levels/AtomLevels/ExampleLevel/level.pak delete mode 100644 AutomatedTesting/Levels/AtomLevels/ExampleLevel/tags.txt delete mode 100644 AutomatedTesting/Levels/AtomLevels/ExampleLevel/terraintexture.pak delete mode 100644 AutomatedTesting/Levels/AtomLevels/Lucy/LevelData/Environment.xml delete mode 100644 AutomatedTesting/Levels/AtomLevels/Lucy/LevelData/Heightmap.dat delete mode 100644 AutomatedTesting/Levels/AtomLevels/Lucy/LevelData/TerrainTexture.xml delete mode 100644 AutomatedTesting/Levels/AtomLevels/Lucy/LevelData/TimeOfDay.xml delete mode 100644 AutomatedTesting/Levels/AtomLevels/Lucy/LevelData/VegetationMap.dat delete mode 100644 AutomatedTesting/Levels/AtomLevels/Lucy/Lucy.ly delete mode 100644 AutomatedTesting/Levels/AtomLevels/Lucy/TerrainTexture.pak delete mode 100644 AutomatedTesting/Levels/AtomLevels/Lucy/filelist.xml delete mode 100644 AutomatedTesting/Levels/AtomLevels/Lucy/level.pak delete mode 100644 AutomatedTesting/Levels/AtomLevels/Lucy/tags.txt delete mode 100644 AutomatedTesting/Levels/AtomLevels/Lucy/terrain/cover.ctc delete mode 100644 AutomatedTesting/Levels/AtomLevels/MeshTest/LevelData/Environment.xml delete mode 100644 AutomatedTesting/Levels/AtomLevels/MeshTest/LevelData/Heightmap.dat delete mode 100644 AutomatedTesting/Levels/AtomLevels/MeshTest/LevelData/TerrainTexture.xml delete mode 100644 AutomatedTesting/Levels/AtomLevels/MeshTest/LevelData/TimeOfDay.xml delete mode 100644 AutomatedTesting/Levels/AtomLevels/MeshTest/LevelData/VegetationMap.dat delete mode 100644 AutomatedTesting/Levels/AtomLevels/MeshTest/MeshTest.ly delete mode 100644 AutomatedTesting/Levels/AtomLevels/MeshTest/TerrainTexture.pak delete mode 100644 AutomatedTesting/Levels/AtomLevels/MeshTest/filelist.xml delete mode 100644 AutomatedTesting/Levels/AtomLevels/MeshTest/level.pak delete mode 100644 AutomatedTesting/Levels/AtomLevels/MeshTest/tags.txt delete mode 100644 AutomatedTesting/Levels/AtomLevels/MeshTest/terrain/cover.ctc delete mode 100644 AutomatedTesting/Levels/AtomLevels/NormalMapping/LevelData/Environment.xml delete mode 100644 AutomatedTesting/Levels/AtomLevels/NormalMapping/LevelData/Heightmap.dat delete mode 100644 AutomatedTesting/Levels/AtomLevels/NormalMapping/LevelData/TerrainTexture.xml delete mode 100644 AutomatedTesting/Levels/AtomLevels/NormalMapping/LevelData/TimeOfDay.xml delete mode 100644 AutomatedTesting/Levels/AtomLevels/NormalMapping/LevelData/VegetationMap.dat delete mode 100644 AutomatedTesting/Levels/AtomLevels/NormalMapping/NormalMapping.ly delete mode 100644 AutomatedTesting/Levels/AtomLevels/NormalMapping/TestNormalMapping.azsl delete mode 100644 AutomatedTesting/Levels/AtomLevels/NormalMapping/TestNormalMapping.materialtype delete mode 100644 AutomatedTesting/Levels/AtomLevels/NormalMapping/TestNormalMapping.shader delete mode 100644 AutomatedTesting/Levels/AtomLevels/NormalMapping/am_floor_tile.material delete mode 100644 AutomatedTesting/Levels/AtomLevels/NormalMapping/am_floor_tile_ddn.tif delete mode 100644 AutomatedTesting/Levels/AtomLevels/NormalMapping/am_floor_tile_diff.tif delete mode 100644 AutomatedTesting/Levels/AtomLevels/NormalMapping/am_floor_tile_normals.material delete mode 100644 AutomatedTesting/Levels/AtomLevels/NormalMapping/level.pak delete mode 100644 AutomatedTesting/Levels/AtomLevels/NormalMapping/lit_0.material delete mode 100644 AutomatedTesting/Levels/AtomLevels/NormalMapping/lit_1.material delete mode 100644 AutomatedTesting/Levels/AtomLevels/NormalMapping/lit_2.material delete mode 100644 AutomatedTesting/Levels/AtomLevels/NormalMapping/normals_0.material delete mode 100644 AutomatedTesting/Levels/AtomLevels/NormalMapping/normals_1.material delete mode 100644 AutomatedTesting/Levels/AtomLevels/NormalMapping/normals_2.material delete mode 100644 AutomatedTesting/Levels/AtomLevels/NormalMapping/raw_normal_map.material delete mode 100644 AutomatedTesting/Levels/AtomLevels/NormalMapping/test_ddn.tif delete mode 100644 AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/PbrMaterialChart.ly delete mode 100644 AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/filelist.xml delete mode 100644 AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/level.pak delete mode 100644 AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/leveldata/Environment.xml delete mode 100644 AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/leveldata/Heightmap.dat delete mode 100644 AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/leveldata/TerrainTexture.xml delete mode 100644 AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/leveldata/TimeOfDay.xml delete mode 100644 AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/leveldata/VegetationMap.dat delete mode 100644 AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic.material delete mode 100644 AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic_m00_r00.material delete mode 100644 AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic_m00_r01.material delete mode 100644 AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic_m00_r02.material delete mode 100644 AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic_m00_r03.material delete mode 100644 AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic_m00_r04.material delete mode 100644 AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic_m00_r05.material delete mode 100644 AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic_m00_r06.material delete mode 100644 AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic_m00_r07.material delete mode 100644 AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic_m00_r08.material delete mode 100644 AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic_m00_r09.material delete mode 100644 AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic_m00_r10.material delete mode 100644 AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic_m10_r00.material delete mode 100644 AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic_m10_r01.material delete mode 100644 AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic_m10_r02.material delete mode 100644 AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic_m10_r03.material delete mode 100644 AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic_m10_r04.material delete mode 100644 AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic_m10_r05.material delete mode 100644 AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic_m10_r06.material delete mode 100644 AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic_m10_r07.material delete mode 100644 AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic_m10_r08.material delete mode 100644 AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic_m10_r09.material delete mode 100644 AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic_m10_r10.material delete mode 100644 AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/tags.txt delete mode 100644 AutomatedTesting/Levels/AtomLevels/Peccy_example_dcc_materials/LevelData/Environment.xml delete mode 100644 AutomatedTesting/Levels/AtomLevels/Peccy_example_dcc_materials/LevelData/Heightmap.dat delete mode 100644 AutomatedTesting/Levels/AtomLevels/Peccy_example_dcc_materials/LevelData/TerrainTexture.xml delete mode 100644 AutomatedTesting/Levels/AtomLevels/Peccy_example_dcc_materials/LevelData/TimeOfDay.xml delete mode 100644 AutomatedTesting/Levels/AtomLevels/Peccy_example_dcc_materials/LevelData/VegetationMap.dat delete mode 100644 AutomatedTesting/Levels/AtomLevels/Peccy_example_dcc_materials/Peccy_example_dcc_materials.ly delete mode 100644 AutomatedTesting/Levels/AtomLevels/Peccy_example_dcc_materials/TerrainTexture.pak delete mode 100644 AutomatedTesting/Levels/AtomLevels/Peccy_example_dcc_materials/filelist.xml delete mode 100644 AutomatedTesting/Levels/AtomLevels/Peccy_example_dcc_materials/level.pak delete mode 100644 AutomatedTesting/Levels/AtomLevels/Peccy_example_dcc_materials/tags.txt delete mode 100644 AutomatedTesting/Levels/AtomLevels/Peccy_example_no_materials/LevelData/Environment.xml delete mode 100644 AutomatedTesting/Levels/AtomLevels/Peccy_example_no_materials/LevelData/Heightmap.dat delete mode 100644 AutomatedTesting/Levels/AtomLevels/Peccy_example_no_materials/LevelData/TerrainTexture.xml delete mode 100644 AutomatedTesting/Levels/AtomLevels/Peccy_example_no_materials/LevelData/TimeOfDay.xml delete mode 100644 AutomatedTesting/Levels/AtomLevels/Peccy_example_no_materials/LevelData/VegetationMap.dat delete mode 100644 AutomatedTesting/Levels/AtomLevels/Peccy_example_no_materials/Peccy_example_no_materials.ly delete mode 100644 AutomatedTesting/Levels/AtomLevels/Peccy_example_no_materials/TerrainTexture.pak delete mode 100644 AutomatedTesting/Levels/AtomLevels/Peccy_example_no_materials/filelist.xml delete mode 100644 AutomatedTesting/Levels/AtomLevels/Peccy_example_no_materials/level.pak delete mode 100644 AutomatedTesting/Levels/AtomLevels/Peccy_example_no_materials/tags.txt delete mode 100644 AutomatedTesting/Levels/AtomLevels/ShadowTest/LevelData/Environment.xml delete mode 100644 AutomatedTesting/Levels/AtomLevels/ShadowTest/LevelData/Heightmap.dat delete mode 100644 AutomatedTesting/Levels/AtomLevels/ShadowTest/LevelData/TerrainTexture.xml delete mode 100644 AutomatedTesting/Levels/AtomLevels/ShadowTest/LevelData/TimeOfDay.xml delete mode 100644 AutomatedTesting/Levels/AtomLevels/ShadowTest/LevelData/VegetationMap.dat delete mode 100644 AutomatedTesting/Levels/AtomLevels/ShadowTest/ShadowTest.ly delete mode 100644 AutomatedTesting/Levels/AtomLevels/ShadowTest/TerrainTexture.pak delete mode 100644 AutomatedTesting/Levels/AtomLevels/ShadowTest/filelist.xml delete mode 100644 AutomatedTesting/Levels/AtomLevels/ShadowTest/level.pak delete mode 100644 AutomatedTesting/Levels/AtomLevels/ShadowTest/tags.txt delete mode 100644 AutomatedTesting/Levels/AtomLevels/ShadowTest/terrain/cover.ctc delete mode 100644 AutomatedTesting/Levels/AtomLevels/Sponza/Layers/Geo.Lighting.layer delete mode 100644 AutomatedTesting/Levels/AtomLevels/Sponza/Layers/Geo.layer delete mode 100644 AutomatedTesting/Levels/AtomLevels/Sponza/Layers/Lighting.layer delete mode 100644 AutomatedTesting/Levels/AtomLevels/Sponza/Sponza.ly delete mode 100644 AutomatedTesting/Levels/AtomLevels/Sponza/filelist.xml delete mode 100644 AutomatedTesting/Levels/AtomLevels/Sponza/level.pak delete mode 100644 AutomatedTesting/Levels/AtomLevels/Sponza/leveldata/Environment.xml delete mode 100644 AutomatedTesting/Levels/AtomLevels/Sponza/leveldata/Heightmap.dat delete mode 100644 AutomatedTesting/Levels/AtomLevels/Sponza/leveldata/TerrainTexture.xml delete mode 100644 AutomatedTesting/Levels/AtomLevels/Sponza/leveldata/TimeOfDay.xml delete mode 100644 AutomatedTesting/Levels/AtomLevels/Sponza/leveldata/VegetationMap.dat delete mode 100644 AutomatedTesting/Levels/AtomLevels/Sponza/tags.txt delete mode 100644 AutomatedTesting/Levels/AtomLevels/Sponza/terrain/cover.ctc delete mode 100644 AutomatedTesting/Levels/AtomLevels/Sponza/terraintexture.pak delete mode 100644 AutomatedTesting/Levels/AtomLevels/SponzaDiffuseGI/Layers/Geometry.layer delete mode 100644 AutomatedTesting/Levels/AtomLevels/SponzaDiffuseGI/Layers/Lights.layer delete mode 100644 AutomatedTesting/Levels/AtomLevels/SponzaDiffuseGI/LevelData/Environment.xml delete mode 100644 AutomatedTesting/Levels/AtomLevels/SponzaDiffuseGI/LevelData/TimeOfDay.xml delete mode 100644 AutomatedTesting/Levels/AtomLevels/SponzaDiffuseGI/SponzaDiffuseGI.ly delete mode 100644 AutomatedTesting/Levels/AtomLevels/SponzaDiffuseGI/filelist.xml delete mode 100644 AutomatedTesting/Levels/AtomLevels/SponzaDiffuseGI/level.pak delete mode 100644 AutomatedTesting/Levels/AtomLevels/SponzaDiffuseGI/tags.txt delete mode 100644 AutomatedTesting/Levels/AtomLevels/TangentSpace/TangentSpace.ly delete mode 100644 AutomatedTesting/Levels/AtomLevels/TangentSpace/TestTangentSpace.azsl delete mode 100644 AutomatedTesting/Levels/AtomLevels/TangentSpace/TestTangentSpace.materialtype delete mode 100644 AutomatedTesting/Levels/AtomLevels/TangentSpace/TestTangentSpace.shader delete mode 100644 AutomatedTesting/Levels/AtomLevels/TangentSpace/TestTangentSpace_B.material delete mode 100644 AutomatedTesting/Levels/AtomLevels/TangentSpace/TestTangentSpace_N.material delete mode 100644 AutomatedTesting/Levels/AtomLevels/TangentSpace/TestTangentSpace_T.material delete mode 100644 AutomatedTesting/Levels/AtomLevels/TangentSpace/cylinder_faceted.fbx delete mode 100644 AutomatedTesting/Levels/AtomLevels/TangentSpace/cylinder_faceted_rotated_uvs.fbx delete mode 100644 AutomatedTesting/Levels/AtomLevels/TangentSpace/cylinder_lowres.fbx delete mode 100644 AutomatedTesting/Levels/AtomLevels/TangentSpace/filelist.xml delete mode 100644 AutomatedTesting/Levels/AtomLevels/TangentSpace/level.pak delete mode 100644 AutomatedTesting/Levels/AtomLevels/TangentSpace/leveldata/Environment.xml delete mode 100644 AutomatedTesting/Levels/AtomLevels/TangentSpace/leveldata/Heightmap.dat delete mode 100644 AutomatedTesting/Levels/AtomLevels/TangentSpace/leveldata/TerrainTexture.xml delete mode 100644 AutomatedTesting/Levels/AtomLevels/TangentSpace/leveldata/TimeOfDay.xml delete mode 100644 AutomatedTesting/Levels/AtomLevels/TangentSpace/leveldata/VegetationMap.dat delete mode 100644 AutomatedTesting/Levels/AtomLevels/TangentSpace/plane_zup.fbx delete mode 100644 AutomatedTesting/Levels/AtomLevels/lucy_high/LevelData/Environment.xml delete mode 100644 AutomatedTesting/Levels/AtomLevels/lucy_high/LevelData/Heightmap.dat delete mode 100644 AutomatedTesting/Levels/AtomLevels/lucy_high/LevelData/TerrainTexture.xml delete mode 100644 AutomatedTesting/Levels/AtomLevels/lucy_high/LevelData/TimeOfDay.xml delete mode 100644 AutomatedTesting/Levels/AtomLevels/lucy_high/LevelData/VegetationMap.dat delete mode 100644 AutomatedTesting/Levels/AtomLevels/lucy_high/filelist.xml delete mode 100644 AutomatedTesting/Levels/AtomLevels/lucy_high/level.pak delete mode 100644 AutomatedTesting/Levels/AtomLevels/lucy_high/lucy_high.ly delete mode 100644 AutomatedTesting/Levels/AtomLevels/lucy_high/tags.txt delete mode 100644 AutomatedTesting/Levels/AtomLevels/lucy_high/terrain/cover.ctc delete mode 100644 AutomatedTesting/Levels/AtomLevels/lucy_high/terraintexture.pak delete mode 100644 AutomatedTesting/Levels/AtomLevels/macbeth_shaderballs/LevelData/Environment.xml delete mode 100644 AutomatedTesting/Levels/AtomLevels/macbeth_shaderballs/LevelData/Heightmap.dat delete mode 100644 AutomatedTesting/Levels/AtomLevels/macbeth_shaderballs/LevelData/TerrainTexture.xml delete mode 100644 AutomatedTesting/Levels/AtomLevels/macbeth_shaderballs/LevelData/TimeOfDay.xml delete mode 100644 AutomatedTesting/Levels/AtomLevels/macbeth_shaderballs/LevelData/VegetationMap.dat delete mode 100644 AutomatedTesting/Levels/AtomLevels/macbeth_shaderballs/TerrainTexture.pak delete mode 100644 AutomatedTesting/Levels/AtomLevels/macbeth_shaderballs/filelist.xml delete mode 100644 AutomatedTesting/Levels/AtomLevels/macbeth_shaderballs/level.pak delete mode 100644 AutomatedTesting/Levels/AtomLevels/macbeth_shaderballs/macbeth_shaderballs.ly delete mode 100644 AutomatedTesting/Levels/AtomLevels/macbeth_shaderballs/tags.txt delete mode 100644 AutomatedTesting/Levels/AtomLevels/macbeth_shaderballs/terrain/cover.ctc diff --git a/AutomatedTesting/Levels/AtomLevels/ActorTest_100Actors/ActorTest_100Actors.ly b/AutomatedTesting/Levels/AtomLevels/ActorTest_100Actors/ActorTest_100Actors.ly deleted file mode 100644 index abd015a380..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/ActorTest_100Actors/ActorTest_100Actors.ly +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:830ce7490fea796988129908e5e18fa0ab9fb9a9e7213ae21d300cfbca8ea9d2 -size 9450 diff --git a/AutomatedTesting/Levels/AtomLevels/ActorTest_100Actors/Layers/BURT_Crouch.layer b/AutomatedTesting/Levels/AtomLevels/ActorTest_100Actors/Layers/BURT_Crouch.layer deleted file mode 100644 index bc658afa99..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/ActorTest_100Actors/Layers/BURT_Crouch.layer +++ /dev/null @@ -1,5816 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/AutomatedTesting/Levels/AtomLevels/ActorTest_100Actors/Layers/Layer BURT_CrouchIdle.layer b/AutomatedTesting/Levels/AtomLevels/ActorTest_100Actors/Layers/Layer BURT_CrouchIdle.layer deleted file mode 100644 index 8a55a57a61..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/ActorTest_100Actors/Layers/Layer BURT_CrouchIdle.layer +++ /dev/null @@ -1,5816 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/AutomatedTesting/Levels/AtomLevels/ActorTest_100Actors/Layers/Layer BURT_Idle.layer b/AutomatedTesting/Levels/AtomLevels/ActorTest_100Actors/Layers/Layer BURT_Idle.layer deleted file mode 100644 index b664b4ce93..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/ActorTest_100Actors/Layers/Layer BURT_Idle.layer +++ /dev/null @@ -1,5816 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/AutomatedTesting/Levels/AtomLevels/ActorTest_100Actors/Layers/Layer BURT_Idle_alt_a.layer b/AutomatedTesting/Levels/AtomLevels/ActorTest_100Actors/Layers/Layer BURT_Idle_alt_a.layer deleted file mode 100644 index b1e80b9acf..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/ActorTest_100Actors/Layers/Layer BURT_Idle_alt_a.layer +++ /dev/null @@ -1,5816 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/AutomatedTesting/Levels/AtomLevels/ActorTest_100Actors/Layers/Layer Burt_jump_up.layer b/AutomatedTesting/Levels/AtomLevels/ActorTest_100Actors/Layers/Layer Burt_jump_up.layer deleted file mode 100644 index 54b3f67c02..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/ActorTest_100Actors/Layers/Layer Burt_jump_up.layer +++ /dev/null @@ -1,5816 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/AutomatedTesting/Levels/AtomLevels/ActorTest_100Actors/LevelData/Environment.xml b/AutomatedTesting/Levels/AtomLevels/ActorTest_100Actors/LevelData/Environment.xml deleted file mode 100644 index c8398b6257..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/ActorTest_100Actors/LevelData/Environment.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - - - - diff --git a/AutomatedTesting/Levels/AtomLevels/ActorTest_100Actors/LevelData/Heightmap.dat b/AutomatedTesting/Levels/AtomLevels/ActorTest_100Actors/LevelData/Heightmap.dat deleted file mode 100644 index 84d6900a7b..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/ActorTest_100Actors/LevelData/Heightmap.dat +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:437c47cd8b398769cd88043f01102d44b9e853e5539391f67f74f40634058915 -size 8389548 diff --git a/AutomatedTesting/Levels/AtomLevels/ActorTest_100Actors/LevelData/TerrainTexture.xml b/AutomatedTesting/Levels/AtomLevels/ActorTest_100Actors/LevelData/TerrainTexture.xml deleted file mode 100644 index e3136a7454..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/ActorTest_100Actors/LevelData/TerrainTexture.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/AutomatedTesting/Levels/AtomLevels/ActorTest_100Actors/LevelData/TimeOfDay.xml b/AutomatedTesting/Levels/AtomLevels/ActorTest_100Actors/LevelData/TimeOfDay.xml deleted file mode 100644 index 1579a06732..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/ActorTest_100Actors/LevelData/TimeOfDay.xml +++ /dev/null @@ -1,356 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/AutomatedTesting/Levels/AtomLevels/ActorTest_100Actors/LevelData/VegetationMap.dat b/AutomatedTesting/Levels/AtomLevels/ActorTest_100Actors/LevelData/VegetationMap.dat deleted file mode 100644 index dce5631cd0..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/ActorTest_100Actors/LevelData/VegetationMap.dat +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:0e6a5435c928079b27796f6b202bbc2623e7e454244ddc099a3cadf33b7cb9e9 -size 63 diff --git a/AutomatedTesting/Levels/AtomLevels/ActorTest_100Actors/filelist.xml b/AutomatedTesting/Levels/AtomLevels/ActorTest_100Actors/filelist.xml deleted file mode 100644 index 93fcffd48a..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/ActorTest_100Actors/filelist.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/AutomatedTesting/Levels/AtomLevels/ActorTest_100Actors/level.pak b/AutomatedTesting/Levels/AtomLevels/ActorTest_100Actors/level.pak deleted file mode 100644 index 02d7ea78fa..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/ActorTest_100Actors/level.pak +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:5cb431dae976d6f7082ed7b391ef990a57357c255573d6911a581f6655af2e08 -size 11638 diff --git a/AutomatedTesting/Levels/AtomLevels/ActorTest_100Actors/tags.txt b/AutomatedTesting/Levels/AtomLevels/ActorTest_100Actors/tags.txt deleted file mode 100644 index 0d6c1880e7..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/ActorTest_100Actors/tags.txt +++ /dev/null @@ -1,12 +0,0 @@ -0,0,0,0,0,0 -0,0,0,0,0,0 -0,0,0,0,0,0 -0,0,0,0,0,0 -0,0,0,0,0,0 -0,0,0,0,0,0 -0,0,0,0,0,0 -0,0,0,0,0,0 -0,0,0,0,0,0 -0,0,0,0,0,0 -0,0,0,0,0,0 -0,0,0,0,0,0 diff --git a/AutomatedTesting/Levels/AtomLevels/ActorTest_MultipleActors/ActorTest_MultipleActors.ly b/AutomatedTesting/Levels/AtomLevels/ActorTest_MultipleActors/ActorTest_MultipleActors.ly deleted file mode 100644 index 4747cad548..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/ActorTest_MultipleActors/ActorTest_MultipleActors.ly +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:e02279c2ddbd6f009311a4f20a9aebc5c8a6c4420cda3457d1a5482deb9497df -size 12789 diff --git a/AutomatedTesting/Levels/AtomLevels/ActorTest_MultipleActors/LevelData/Environment.xml b/AutomatedTesting/Levels/AtomLevels/ActorTest_MultipleActors/LevelData/Environment.xml deleted file mode 100644 index c8398b6257..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/ActorTest_MultipleActors/LevelData/Environment.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - - - - diff --git a/AutomatedTesting/Levels/AtomLevels/ActorTest_MultipleActors/LevelData/Heightmap.dat b/AutomatedTesting/Levels/AtomLevels/ActorTest_MultipleActors/LevelData/Heightmap.dat deleted file mode 100644 index f132a4b870..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/ActorTest_MultipleActors/LevelData/Heightmap.dat +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:f700877e64f96a3025f2decf15b095d9f0da5c8aafaaf1b0b89a2a78ebd884ea -size 8389548 diff --git a/AutomatedTesting/Levels/AtomLevels/ActorTest_MultipleActors/level.pak b/AutomatedTesting/Levels/AtomLevels/ActorTest_MultipleActors/level.pak deleted file mode 100644 index dcd9b813ba..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/ActorTest_MultipleActors/level.pak +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:59f3f0704e2f6655372348e7d590fcd61f4f1112cbcd2f08c803fc52440bb6b0 -size 9519 diff --git a/AutomatedTesting/Levels/AtomLevels/ActorTest_SingleActor/ActorTest_SingleActor.ly b/AutomatedTesting/Levels/AtomLevels/ActorTest_SingleActor/ActorTest_SingleActor.ly deleted file mode 100644 index 41e8357adb..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/ActorTest_SingleActor/ActorTest_SingleActor.ly +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:2a9e6d1c66c32cf0708e3fa5e1ff9d545cfa38635271f037fb4bd117100276ed -size 6586 diff --git a/AutomatedTesting/Levels/AtomLevels/ActorTest_SingleActor/LevelData/Environment.xml b/AutomatedTesting/Levels/AtomLevels/ActorTest_SingleActor/LevelData/Environment.xml deleted file mode 100644 index c8398b6257..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/ActorTest_SingleActor/LevelData/Environment.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - - - - diff --git a/AutomatedTesting/Levels/AtomLevels/ActorTest_SingleActor/LevelData/Heightmap.dat b/AutomatedTesting/Levels/AtomLevels/ActorTest_SingleActor/LevelData/Heightmap.dat deleted file mode 100644 index 84d6900a7b..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/ActorTest_SingleActor/LevelData/Heightmap.dat +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:437c47cd8b398769cd88043f01102d44b9e853e5539391f67f74f40634058915 -size 8389548 diff --git a/AutomatedTesting/Levels/AtomLevels/ActorTest_SingleActor/level.pak b/AutomatedTesting/Levels/AtomLevels/ActorTest_SingleActor/level.pak deleted file mode 100644 index 0cc067735e..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/ActorTest_SingleActor/level.pak +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:901d4d8b2592230c42e8fc8a01c88b8552681adc8772f0873a48afcb383bc334 -size 8538 diff --git a/AutomatedTesting/Levels/AtomLevels/EmptyLevel/EmptyLevel.ly b/AutomatedTesting/Levels/AtomLevels/EmptyLevel/EmptyLevel.ly deleted file mode 100644 index 6491668b58..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/EmptyLevel/EmptyLevel.ly +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:04455a1a8b21f5320a72a931e878f0d28797cbfe85b740a5251689582e8e2eaa -size 4729 diff --git a/AutomatedTesting/Levels/AtomLevels/EmptyLevel/LevelData/Environment.xml b/AutomatedTesting/Levels/AtomLevels/EmptyLevel/LevelData/Environment.xml deleted file mode 100644 index c8398b6257..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/EmptyLevel/LevelData/Environment.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - - - - diff --git a/AutomatedTesting/Levels/AtomLevels/EmptyLevel/LevelData/Heightmap.dat b/AutomatedTesting/Levels/AtomLevels/EmptyLevel/LevelData/Heightmap.dat deleted file mode 100644 index c73de54f1d..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/EmptyLevel/LevelData/Heightmap.dat +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:e4169cb1fc0d81d9c6b5b7e25c21dd76462dcaa3c6188a30ca46dbb0335833ec -size 8389396 diff --git a/AutomatedTesting/Levels/AtomLevels/EmptyLevel/LevelData/TerrainTexture.xml b/AutomatedTesting/Levels/AtomLevels/EmptyLevel/LevelData/TerrainTexture.xml deleted file mode 100644 index f43df05b22..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/EmptyLevel/LevelData/TerrainTexture.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/AutomatedTesting/Levels/AtomLevels/EmptyLevel/LevelData/TimeOfDay.xml b/AutomatedTesting/Levels/AtomLevels/EmptyLevel/LevelData/TimeOfDay.xml deleted file mode 100644 index 6ea168cc6b..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/EmptyLevel/LevelData/TimeOfDay.xml +++ /dev/null @@ -1,356 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/AutomatedTesting/Levels/AtomLevels/EmptyLevel/LevelData/VegetationMap.dat b/AutomatedTesting/Levels/AtomLevels/EmptyLevel/LevelData/VegetationMap.dat deleted file mode 100644 index dce5631cd0..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/EmptyLevel/LevelData/VegetationMap.dat +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:0e6a5435c928079b27796f6b202bbc2623e7e454244ddc099a3cadf33b7cb9e9 -size 63 diff --git a/AutomatedTesting/Levels/AtomLevels/EmptyLevel/TerrainTexture.pak b/AutomatedTesting/Levels/AtomLevels/EmptyLevel/TerrainTexture.pak deleted file mode 100644 index fe3604a050..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/EmptyLevel/TerrainTexture.pak +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:8739c76e681f900923b900c9df0ef75cf421d39cabb54650c4b9ad19b6a76d85 -size 22 diff --git a/AutomatedTesting/Levels/AtomLevels/EmptyLevel/level.pak b/AutomatedTesting/Levels/AtomLevels/EmptyLevel/level.pak deleted file mode 100644 index 9b8a377173..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/EmptyLevel/level.pak +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:d817f8d9a901f36b52561939cbc63d41e1c84249c6f5abd81c11ee074cad04b3 -size 5198 diff --git a/AutomatedTesting/Levels/AtomLevels/EmptyLevel/terrain/cover.ctc b/AutomatedTesting/Levels/AtomLevels/EmptyLevel/terrain/cover.ctc deleted file mode 100644 index 98dd90ae5e..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/EmptyLevel/terrain/cover.ctc +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:ce6bf6129174493d7fe8b19518085b8f740843fd4c401686e858860833c69d00 -size 1310792 diff --git a/AutomatedTesting/Levels/AtomLevels/ExampleLevel/ExampleLevel.ly b/AutomatedTesting/Levels/AtomLevels/ExampleLevel/ExampleLevel.ly deleted file mode 100644 index 5324f1964f..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/ExampleLevel/ExampleLevel.ly +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:d713a0d4fc697eacc9f9bf7faf89eb22f081b62e8780fd062c47aa011ab2a5cb -size 5102 diff --git a/AutomatedTesting/Levels/AtomLevels/ExampleLevel/Layers/DefaultLayer.layer b/AutomatedTesting/Levels/AtomLevels/ExampleLevel/Layers/DefaultLayer.layer deleted file mode 100644 index 59dcd0d5a3..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/ExampleLevel/Layers/DefaultLayer.layer +++ /dev/null @@ -1,1177 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/AutomatedTesting/Levels/AtomLevels/ExampleLevel/LevelData/Environment.xml b/AutomatedTesting/Levels/AtomLevels/ExampleLevel/LevelData/Environment.xml deleted file mode 100644 index c8398b6257..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/ExampleLevel/LevelData/Environment.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - - - - diff --git a/AutomatedTesting/Levels/AtomLevels/ExampleLevel/LevelData/Heightmap.dat b/AutomatedTesting/Levels/AtomLevels/ExampleLevel/LevelData/Heightmap.dat deleted file mode 100644 index 64b6645976..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/ExampleLevel/LevelData/Heightmap.dat +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:246f823c6e73b68828888ac2c969d876fad5c978f9d6b573e4d1d70dd5b4ea67 -size 8389396 diff --git a/AutomatedTesting/Levels/AtomLevels/ExampleLevel/LevelData/TerrainTexture.xml b/AutomatedTesting/Levels/AtomLevels/ExampleLevel/LevelData/TerrainTexture.xml deleted file mode 100644 index f43df05b22..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/ExampleLevel/LevelData/TerrainTexture.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/AutomatedTesting/Levels/AtomLevels/ExampleLevel/LevelData/TimeOfDay.xml b/AutomatedTesting/Levels/AtomLevels/ExampleLevel/LevelData/TimeOfDay.xml deleted file mode 100644 index 6ea168cc6b..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/ExampleLevel/LevelData/TimeOfDay.xml +++ /dev/null @@ -1,356 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/AutomatedTesting/Levels/AtomLevels/ExampleLevel/LevelData/VegetationMap.dat b/AutomatedTesting/Levels/AtomLevels/ExampleLevel/LevelData/VegetationMap.dat deleted file mode 100644 index dce5631cd0..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/ExampleLevel/LevelData/VegetationMap.dat +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:0e6a5435c928079b27796f6b202bbc2623e7e454244ddc099a3cadf33b7cb9e9 -size 63 diff --git a/AutomatedTesting/Levels/AtomLevels/ExampleLevel/filelist.xml b/AutomatedTesting/Levels/AtomLevels/ExampleLevel/filelist.xml deleted file mode 100644 index 70fd515ab9..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/ExampleLevel/filelist.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/AutomatedTesting/Levels/AtomLevels/ExampleLevel/level.pak b/AutomatedTesting/Levels/AtomLevels/ExampleLevel/level.pak deleted file mode 100644 index 4fd1632337..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/ExampleLevel/level.pak +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:0581f9a8a68d02d2663a40a936d9596ba4b87174fcf856fa45ed8e79acf4e872 -size 6112 diff --git a/AutomatedTesting/Levels/AtomLevels/ExampleLevel/tags.txt b/AutomatedTesting/Levels/AtomLevels/ExampleLevel/tags.txt deleted file mode 100644 index 0d6c1880e7..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/ExampleLevel/tags.txt +++ /dev/null @@ -1,12 +0,0 @@ -0,0,0,0,0,0 -0,0,0,0,0,0 -0,0,0,0,0,0 -0,0,0,0,0,0 -0,0,0,0,0,0 -0,0,0,0,0,0 -0,0,0,0,0,0 -0,0,0,0,0,0 -0,0,0,0,0,0 -0,0,0,0,0,0 -0,0,0,0,0,0 -0,0,0,0,0,0 diff --git a/AutomatedTesting/Levels/AtomLevels/ExampleLevel/terraintexture.pak b/AutomatedTesting/Levels/AtomLevels/ExampleLevel/terraintexture.pak deleted file mode 100644 index fe3604a050..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/ExampleLevel/terraintexture.pak +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:8739c76e681f900923b900c9df0ef75cf421d39cabb54650c4b9ad19b6a76d85 -size 22 diff --git a/AutomatedTesting/Levels/AtomLevels/Lucy/LevelData/Environment.xml b/AutomatedTesting/Levels/AtomLevels/Lucy/LevelData/Environment.xml deleted file mode 100644 index c8398b6257..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/Lucy/LevelData/Environment.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - - - - diff --git a/AutomatedTesting/Levels/AtomLevels/Lucy/LevelData/Heightmap.dat b/AutomatedTesting/Levels/AtomLevels/Lucy/LevelData/Heightmap.dat deleted file mode 100644 index 5961d17499..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/Lucy/LevelData/Heightmap.dat +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:1cdaf4d31756be0f8c52cc2e448507385b54bed6df34f62c886625c30d372568 -size 8389548 diff --git a/AutomatedTesting/Levels/AtomLevels/Lucy/LevelData/TerrainTexture.xml b/AutomatedTesting/Levels/AtomLevels/Lucy/LevelData/TerrainTexture.xml deleted file mode 100644 index f43df05b22..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/Lucy/LevelData/TerrainTexture.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/AutomatedTesting/Levels/AtomLevels/Lucy/LevelData/TimeOfDay.xml b/AutomatedTesting/Levels/AtomLevels/Lucy/LevelData/TimeOfDay.xml deleted file mode 100644 index 456d609b8a..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/Lucy/LevelData/TimeOfDay.xml +++ /dev/null @@ -1,356 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/AutomatedTesting/Levels/AtomLevels/Lucy/LevelData/VegetationMap.dat b/AutomatedTesting/Levels/AtomLevels/Lucy/LevelData/VegetationMap.dat deleted file mode 100644 index dce5631cd0..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/Lucy/LevelData/VegetationMap.dat +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:0e6a5435c928079b27796f6b202bbc2623e7e454244ddc099a3cadf33b7cb9e9 -size 63 diff --git a/AutomatedTesting/Levels/AtomLevels/Lucy/Lucy.ly b/AutomatedTesting/Levels/AtomLevels/Lucy/Lucy.ly deleted file mode 100644 index b92b18b59b..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/Lucy/Lucy.ly +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:d527ff81e054276cbe3b4bd25f757d5a6f28ca02ec8a618d330e180a99c590ae -size 8187 diff --git a/AutomatedTesting/Levels/AtomLevels/Lucy/TerrainTexture.pak b/AutomatedTesting/Levels/AtomLevels/Lucy/TerrainTexture.pak deleted file mode 100644 index fe3604a050..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/Lucy/TerrainTexture.pak +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:8739c76e681f900923b900c9df0ef75cf421d39cabb54650c4b9ad19b6a76d85 -size 22 diff --git a/AutomatedTesting/Levels/AtomLevels/Lucy/filelist.xml b/AutomatedTesting/Levels/AtomLevels/Lucy/filelist.xml deleted file mode 100644 index 603bdab1ef..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/Lucy/filelist.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/AutomatedTesting/Levels/AtomLevels/Lucy/level.pak b/AutomatedTesting/Levels/AtomLevels/Lucy/level.pak deleted file mode 100644 index aaa5e794fb..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/Lucy/level.pak +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:4a89c9baf1f802bb09b5f871667ca2143127774dd1bb7c430c45423f8f73e528 -size 7739 diff --git a/AutomatedTesting/Levels/AtomLevels/Lucy/tags.txt b/AutomatedTesting/Levels/AtomLevels/Lucy/tags.txt deleted file mode 100644 index 0d6c1880e7..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/Lucy/tags.txt +++ /dev/null @@ -1,12 +0,0 @@ -0,0,0,0,0,0 -0,0,0,0,0,0 -0,0,0,0,0,0 -0,0,0,0,0,0 -0,0,0,0,0,0 -0,0,0,0,0,0 -0,0,0,0,0,0 -0,0,0,0,0,0 -0,0,0,0,0,0 -0,0,0,0,0,0 -0,0,0,0,0,0 -0,0,0,0,0,0 diff --git a/AutomatedTesting/Levels/AtomLevels/Lucy/terrain/cover.ctc b/AutomatedTesting/Levels/AtomLevels/Lucy/terrain/cover.ctc deleted file mode 100644 index 5c869c6533..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/Lucy/terrain/cover.ctc +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:fdab340ad6c6dc6c1167e31afa061684be083360fc4108fa9f1fa4b15fe95d8c -size 1310792 diff --git a/AutomatedTesting/Levels/AtomLevels/MeshTest/LevelData/Environment.xml b/AutomatedTesting/Levels/AtomLevels/MeshTest/LevelData/Environment.xml deleted file mode 100644 index 5fa3664cd4..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/MeshTest/LevelData/Environment.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - - - - diff --git a/AutomatedTesting/Levels/AtomLevels/MeshTest/LevelData/Heightmap.dat b/AutomatedTesting/Levels/AtomLevels/MeshTest/LevelData/Heightmap.dat deleted file mode 100644 index aaba406daa..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/MeshTest/LevelData/Heightmap.dat +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:18aa31d4a12de43c410045baeb21d3c9911dbb8f2c99b752acd585355cf2d3bc -size 272907 diff --git a/AutomatedTesting/Levels/AtomLevels/MeshTest/LevelData/TerrainTexture.xml b/AutomatedTesting/Levels/AtomLevels/MeshTest/LevelData/TerrainTexture.xml deleted file mode 100644 index 426ca0f541..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/MeshTest/LevelData/TerrainTexture.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/AutomatedTesting/Levels/AtomLevels/MeshTest/LevelData/TimeOfDay.xml b/AutomatedTesting/Levels/AtomLevels/MeshTest/LevelData/TimeOfDay.xml deleted file mode 100644 index c5b404318e..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/MeshTest/LevelData/TimeOfDay.xml +++ /dev/null @@ -1,356 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/AutomatedTesting/Levels/AtomLevels/MeshTest/LevelData/VegetationMap.dat b/AutomatedTesting/Levels/AtomLevels/MeshTest/LevelData/VegetationMap.dat deleted file mode 100644 index dce5631cd0..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/MeshTest/LevelData/VegetationMap.dat +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:0e6a5435c928079b27796f6b202bbc2623e7e454244ddc099a3cadf33b7cb9e9 -size 63 diff --git a/AutomatedTesting/Levels/AtomLevels/MeshTest/MeshTest.ly b/AutomatedTesting/Levels/AtomLevels/MeshTest/MeshTest.ly deleted file mode 100644 index 1fa206d9ee..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/MeshTest/MeshTest.ly +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:287a6d35cf5edb1690f1757e7234506f1d6dabb4c48e69d085674f749365e490 -size 9299 diff --git a/AutomatedTesting/Levels/AtomLevels/MeshTest/TerrainTexture.pak b/AutomatedTesting/Levels/AtomLevels/MeshTest/TerrainTexture.pak deleted file mode 100644 index fe3604a050..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/MeshTest/TerrainTexture.pak +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:8739c76e681f900923b900c9df0ef75cf421d39cabb54650c4b9ad19b6a76d85 -size 22 diff --git a/AutomatedTesting/Levels/AtomLevels/MeshTest/filelist.xml b/AutomatedTesting/Levels/AtomLevels/MeshTest/filelist.xml deleted file mode 100644 index 35b601e678..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/MeshTest/filelist.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/AutomatedTesting/Levels/AtomLevels/MeshTest/level.pak b/AutomatedTesting/Levels/AtomLevels/MeshTest/level.pak deleted file mode 100644 index b6b5acc760..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/MeshTest/level.pak +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:d6c21e9714220b4fd8b51c3bd6dc584e2a87e96bb9ffc77ac547b7d0bf982ef4 -size 24708 diff --git a/AutomatedTesting/Levels/AtomLevels/MeshTest/tags.txt b/AutomatedTesting/Levels/AtomLevels/MeshTest/tags.txt deleted file mode 100644 index 0d6c1880e7..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/MeshTest/tags.txt +++ /dev/null @@ -1,12 +0,0 @@ -0,0,0,0,0,0 -0,0,0,0,0,0 -0,0,0,0,0,0 -0,0,0,0,0,0 -0,0,0,0,0,0 -0,0,0,0,0,0 -0,0,0,0,0,0 -0,0,0,0,0,0 -0,0,0,0,0,0 -0,0,0,0,0,0 -0,0,0,0,0,0 -0,0,0,0,0,0 diff --git a/AutomatedTesting/Levels/AtomLevels/MeshTest/terrain/cover.ctc b/AutomatedTesting/Levels/AtomLevels/MeshTest/terrain/cover.ctc deleted file mode 100644 index 78c2ab6ed5..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/MeshTest/terrain/cover.ctc +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:d4bb4e2ab7876994431f3e6e78a004ea5718e057077b37db14ea8a52637338be -size 262184 diff --git a/AutomatedTesting/Levels/AtomLevels/NormalMapping/LevelData/Environment.xml b/AutomatedTesting/Levels/AtomLevels/NormalMapping/LevelData/Environment.xml deleted file mode 100644 index c8398b6257..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/NormalMapping/LevelData/Environment.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - - - - diff --git a/AutomatedTesting/Levels/AtomLevels/NormalMapping/LevelData/Heightmap.dat b/AutomatedTesting/Levels/AtomLevels/NormalMapping/LevelData/Heightmap.dat deleted file mode 100644 index 19331ecb69..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/NormalMapping/LevelData/Heightmap.dat +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:55bcf3590d0a7f206e66f8ff53e8dd39ca03ccb37eec3e1e8ae4c3228fc564ee -size 17407562 diff --git a/AutomatedTesting/Levels/AtomLevels/NormalMapping/LevelData/TerrainTexture.xml b/AutomatedTesting/Levels/AtomLevels/NormalMapping/LevelData/TerrainTexture.xml deleted file mode 100644 index 0fa8b16c50..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/NormalMapping/LevelData/TerrainTexture.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - diff --git a/AutomatedTesting/Levels/AtomLevels/NormalMapping/LevelData/TimeOfDay.xml b/AutomatedTesting/Levels/AtomLevels/NormalMapping/LevelData/TimeOfDay.xml deleted file mode 100644 index c5b404318e..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/NormalMapping/LevelData/TimeOfDay.xml +++ /dev/null @@ -1,356 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/AutomatedTesting/Levels/AtomLevels/NormalMapping/LevelData/VegetationMap.dat b/AutomatedTesting/Levels/AtomLevels/NormalMapping/LevelData/VegetationMap.dat deleted file mode 100644 index dce5631cd0..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/NormalMapping/LevelData/VegetationMap.dat +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:0e6a5435c928079b27796f6b202bbc2623e7e454244ddc099a3cadf33b7cb9e9 -size 63 diff --git a/AutomatedTesting/Levels/AtomLevels/NormalMapping/NormalMapping.ly b/AutomatedTesting/Levels/AtomLevels/NormalMapping/NormalMapping.ly deleted file mode 100644 index 7b4ef00f1c..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/NormalMapping/NormalMapping.ly +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:9e332f75c1bd177d6505a4732aa82f05b14c79977af333d986756619af3189ad -size 21083 diff --git a/AutomatedTesting/Levels/AtomLevels/NormalMapping/TestNormalMapping.azsl b/AutomatedTesting/Levels/AtomLevels/NormalMapping/TestNormalMapping.azsl deleted file mode 100644 index 0ae2ea97ef..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/NormalMapping/TestNormalMapping.azsl +++ /dev/null @@ -1,101 +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 "../../Shaders/CommonVS.azsli" -#include - -ShaderResourceGroup MaterialSrg : SRG_PerMaterial -{ - Texture2D m_diffuseMap; - - Texture2D m_normalMap; - float m_normalFactor; - - float3 m_defaultLightDir; - - Sampler m_sampler - { - MaxAnisotropy = 16; - AddressU = Wrap; - AddressV = Wrap; - AddressW = Wrap; - }; -} - -enum class Mode -{ - Raw, - Normal, - Lit -}; - -option Mode o_mode; - -struct PixelOutput -{ - float4 m_color : SV_Target0; -}; - -VertexOutput MainVS(VertexInput input) -{ - VertexOutput output = CommonVS(input); - - // We don't have a utility function for scaling normals because the process is so simple. Still, the "NormalMapping" test level does test the - // use of this common pattern. Other materials can do the same thing to scale normal maps: just multiply the final tangent and bitangent in the vertex shader. - // Note, this assumes that we are using a tangent space algorithm that does not normalize the TBN basis vectors in the pixel shader (e.g. MikkT). - output.m_tangent *= MaterialSrg::m_normalFactor; - output.m_bitangent *= MaterialSrg::m_normalFactor; - - output.m_bitangent *= -1; // The test normal map was baked opposite of what Atom expects - - return output; -} - - -PixelOutput MainPS(VertexOutput input) -{ - PixelOutput output; - - float4 normalMapSample = MaterialSrg::m_normalMap.Sample(MaterialSrg::m_sampler, input.m_uv); - - if (o_mode == Mode::Raw) - { - output.m_color = float4(normalMapSample.xyz * 0.5 + 0.5, 1); - return output; - } - - float3 normal = GetWorldSpaceNormal(normalMapSample, input.m_normal, input.m_tangent, input.m_bitangent); - - if (o_mode == Mode::Normal) - { - output.m_color = float4(normal.xyz * 0.5 + 0.5, 1); - return output; - } - - float3 lightDir = -SceneSrg::m_directionalLights[0].m_direction; - if (length(lightDir) == 0) - { - lightDir = normalize(MaterialSrg::m_defaultLightDir); - } - - float NdotL = max(0.0, dot(normal, lightDir)); - - float4 baseColor = MaterialSrg::m_diffuseMap.Sample(MaterialSrg::m_sampler, input.m_uv); - float3 diffuse = (0.1 + saturate(NdotL)) * baseColor.xyz; - - output.m_color = float4(diffuse, 1); - - return output; -} \ No newline at end of file diff --git a/AutomatedTesting/Levels/AtomLevels/NormalMapping/TestNormalMapping.materialtype b/AutomatedTesting/Levels/AtomLevels/NormalMapping/TestNormalMapping.materialtype deleted file mode 100644 index 570643ad4e..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/NormalMapping/TestNormalMapping.materialtype +++ /dev/null @@ -1,60 +0,0 @@ -{ - "description": "Specialized material for testing normal map calculation utility functions.", - "propertyLayout": { - "version": 1, - "properties": { - "general": [ - { - "id": "m_diffuseMap", - "type": "image", - "defaultValue": "EngineAssets/Textures/grey.dds", - "connection": { - "type": "shaderInput", - "id": "m_diffuseMap" - } - }, - { - "id": "m_normalMap", - "type": "image", - "defaultValue": "Levels/NormalMapping/test_ddn.tif", - "connection": { - "type": "shaderInput", - "id": "m_normalMap" - } - }, - { - "id": "m_normalFactor", - "type": "float", - "defaultValue": 1.0, - "connection": { - "type": "shaderInput", - "id": "m_normalFactor" - } - }, - { - "id": "m_defaultLightDir", - "type": "vector3", - "defaultValue": [ 0.0, 0.0, 1.0 ], - "connection": { - "type": "shaderInput", - "id": "m_defaultLightDir" - } - }, - { - "id": "o_mode", - "type": "int", - "defaultValue": 2, - "connection": { - "type": "shaderOption", - "id": "o_mode" - } - } - ] - } - }, - "shaders": [ - { - "file": "TestNormalMapping.shader" - } - ] -} diff --git a/AutomatedTesting/Levels/AtomLevels/NormalMapping/TestNormalMapping.shader b/AutomatedTesting/Levels/AtomLevels/NormalMapping/TestNormalMapping.shader deleted file mode 100644 index ac2b94824f..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/NormalMapping/TestNormalMapping.shader +++ /dev/null @@ -1,26 +0,0 @@ -{ - "Source": "TestNormalMapping", - - "DepthStencilState": { - "Depth": { - "Enable": true, - "CompareFunc": "GreaterEqual" - } - }, - - // Using auxgeom draw list to avoid tonemapping - "DrawList": "auxgeom", - - "ProgramSettings": { - "EntryPoints": [ - { - "name": "MainVS", - "type": "Vertex" - }, - { - "name": "MainPS", - "type": "Fragment" - } - ] - } -} diff --git a/AutomatedTesting/Levels/AtomLevels/NormalMapping/am_floor_tile.material b/AutomatedTesting/Levels/AtomLevels/NormalMapping/am_floor_tile.material deleted file mode 100644 index 9b4c9c7865..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/NormalMapping/am_floor_tile.material +++ /dev/null @@ -1,13 +0,0 @@ -{ - "description": "Draws a realistic diffuse/normal pair. We use a non-1 m_normalFactor to regression-test the normal scaling feature.", - "materialType": "TestNormalMapping.materialtype", - "propertyLayoutVersion": 1, - "properties": { - "general": { - "m_diffuseMap": "Levels/NormalMapping/am_floor_tile_diff.tif", - "m_normalMap": "Levels/NormalMapping/am_floor_tile_ddn.tif", - "o_mode": 2, - "m_normalFactor": 2.0 - } - } -} diff --git a/AutomatedTesting/Levels/AtomLevels/NormalMapping/am_floor_tile_ddn.tif b/AutomatedTesting/Levels/AtomLevels/NormalMapping/am_floor_tile_ddn.tif deleted file mode 100644 index 97726e35fa..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/NormalMapping/am_floor_tile_ddn.tif +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:bd322f4b4618bae92407956b53031f841f4c1c6195365a534e7f0dbb912ee8a2 -size 50367786 diff --git a/AutomatedTesting/Levels/AtomLevels/NormalMapping/am_floor_tile_diff.tif b/AutomatedTesting/Levels/AtomLevels/NormalMapping/am_floor_tile_diff.tif deleted file mode 100644 index b4c00d3d7c..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/NormalMapping/am_floor_tile_diff.tif +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:30e53cdb999bafaa6c4cf8e2626e476a8a4ce8a1f498ed436de9349bc066d6f9 -size 50367786 diff --git a/AutomatedTesting/Levels/AtomLevels/NormalMapping/am_floor_tile_normals.material b/AutomatedTesting/Levels/AtomLevels/NormalMapping/am_floor_tile_normals.material deleted file mode 100644 index 3ad98512db..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/NormalMapping/am_floor_tile_normals.material +++ /dev/null @@ -1,12 +0,0 @@ -{ - "description": "Draws the normals for a realistic normal map. We use a non-1 m_normalFactor to regression-test the normal scaling feature.", - "materialType": "TestNormalMapping.materialtype", - "propertyLayoutVersion": 1, - "properties": { - "general": { - "m_normalMap": "Levels/NormalMapping/am_floor_tile_ddn.tif", - "o_mode": 1, - "m_normalFactor": 2.0 - } - } -} diff --git a/AutomatedTesting/Levels/AtomLevels/NormalMapping/level.pak b/AutomatedTesting/Levels/AtomLevels/NormalMapping/level.pak deleted file mode 100644 index cd414e8074..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/NormalMapping/level.pak +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:6a1726064c26ebe6116fc1afe338dd0b03f248ced6fe4ecefc0b5047a29d188e -size 43048 diff --git a/AutomatedTesting/Levels/AtomLevels/NormalMapping/lit_0.material b/AutomatedTesting/Levels/AtomLevels/NormalMapping/lit_0.material deleted file mode 100644 index ff593e80d2..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/NormalMapping/lit_0.material +++ /dev/null @@ -1,11 +0,0 @@ -{ - "description": "Uses normals to light the object, with low normal factor.", - "materialType": "TestNormalMapping.materialtype", - "propertyLayoutVersion": 1, - "properties": { - "general": { - "o_mode": 2, - "m_normalFactor": 0.0 - } - } -} diff --git a/AutomatedTesting/Levels/AtomLevels/NormalMapping/lit_1.material b/AutomatedTesting/Levels/AtomLevels/NormalMapping/lit_1.material deleted file mode 100644 index 6bb8a2c1d4..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/NormalMapping/lit_1.material +++ /dev/null @@ -1,11 +0,0 @@ -{ - "description": "Uses normals to light the object, with medium normal factor.", - "materialType": "TestNormalMapping.materialtype", - "propertyLayoutVersion": 1, - "properties": { - "general": { - "o_mode": 2, - "m_normalFactor": 0.5 - } - } -} diff --git a/AutomatedTesting/Levels/AtomLevels/NormalMapping/lit_2.material b/AutomatedTesting/Levels/AtomLevels/NormalMapping/lit_2.material deleted file mode 100644 index c1df1bfb4a..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/NormalMapping/lit_2.material +++ /dev/null @@ -1,11 +0,0 @@ -{ - "description": "Uses normals to light the object, with high normal factor.", - "materialType": "TestNormalMapping.materialtype", - "propertyLayoutVersion": 1, - "properties": { - "general": { - "o_mode": 2, - "m_normalFactor": 1.0 - } - } -} diff --git a/AutomatedTesting/Levels/AtomLevels/NormalMapping/normals_0.material b/AutomatedTesting/Levels/AtomLevels/NormalMapping/normals_0.material deleted file mode 100644 index 63296f9326..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/NormalMapping/normals_0.material +++ /dev/null @@ -1,11 +0,0 @@ -{ - "description": "Draws normals with low normal factor.", - "materialType": "TestNormalMapping.materialtype", - "propertyLayoutVersion": 1, - "properties": { - "general": { - "o_mode": 1, - "m_normalFactor": 0.0 - } - } -} diff --git a/AutomatedTesting/Levels/AtomLevels/NormalMapping/normals_1.material b/AutomatedTesting/Levels/AtomLevels/NormalMapping/normals_1.material deleted file mode 100644 index 050138fb73..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/NormalMapping/normals_1.material +++ /dev/null @@ -1,11 +0,0 @@ -{ - "description": "Draws normals with medium normal factor.", - "materialType": "TestNormalMapping.materialtype", - "propertyLayoutVersion": 1, - "properties": { - "general": { - "o_mode": 1, - "m_normalFactor": 0.5 - } - } -} diff --git a/AutomatedTesting/Levels/AtomLevels/NormalMapping/normals_2.material b/AutomatedTesting/Levels/AtomLevels/NormalMapping/normals_2.material deleted file mode 100644 index 355a37690b..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/NormalMapping/normals_2.material +++ /dev/null @@ -1,11 +0,0 @@ -{ - "description": "Draws normals with high normal factor.", - "materialType": "TestNormalMapping.materialtype", - "propertyLayoutVersion": 1, - "properties": { - "general": { - "o_mode": 1, - "m_normalFactor": 1.0 - } - } -} diff --git a/AutomatedTesting/Levels/AtomLevels/NormalMapping/raw_normal_map.material b/AutomatedTesting/Levels/AtomLevels/NormalMapping/raw_normal_map.material deleted file mode 100644 index 369e7139f0..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/NormalMapping/raw_normal_map.material +++ /dev/null @@ -1,11 +0,0 @@ -{ - "description": "Draws the raw sampled normal map.", - "materialType": "TestNormalMapping.materialtype", - "propertyLayoutVersion": 1, - "properties": { - "general": { - "o_mode": 0, - "m_normalFactor": 0.0 - } - } -} diff --git a/AutomatedTesting/Levels/AtomLevels/NormalMapping/test_ddn.tif b/AutomatedTesting/Levels/AtomLevels/NormalMapping/test_ddn.tif deleted file mode 100644 index 2510ad7966..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/NormalMapping/test_ddn.tif +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:d66439e57f4088d37bc85672a3ece5a2149a9f7b3541ee53fd0736f6e59206ef -size 210308 diff --git a/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/PbrMaterialChart.ly b/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/PbrMaterialChart.ly deleted file mode 100644 index 7c8318951b..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/PbrMaterialChart.ly +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:813ab68b68e2662b0b2bd333770678ee3bd290e4f55754c32cb8554c13a79cf8 -size 32876 diff --git a/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/filelist.xml b/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/filelist.xml deleted file mode 100644 index 2057c46e8c..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/filelist.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/level.pak b/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/level.pak deleted file mode 100644 index 9969827618..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/level.pak +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:948b10a3c2f75a68f307cbc4f510ddd77337cd33f680f6fef07568280c44edb7 -size 11311 diff --git a/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/leveldata/Environment.xml b/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/leveldata/Environment.xml deleted file mode 100644 index c8398b6257..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/leveldata/Environment.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - - - - diff --git a/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/leveldata/Heightmap.dat b/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/leveldata/Heightmap.dat deleted file mode 100644 index f773bbb4bf..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/leveldata/Heightmap.dat +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:5fb99fe93d16ff959e3265d157ec0e6030bd0d44e9f00b6749ca6104c51e5536 -size 8389602 diff --git a/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/leveldata/TerrainTexture.xml b/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/leveldata/TerrainTexture.xml deleted file mode 100644 index 0fa8b16c50..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/leveldata/TerrainTexture.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - diff --git a/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/leveldata/TimeOfDay.xml b/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/leveldata/TimeOfDay.xml deleted file mode 100644 index 456d609b8a..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/leveldata/TimeOfDay.xml +++ /dev/null @@ -1,356 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/leveldata/VegetationMap.dat b/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/leveldata/VegetationMap.dat deleted file mode 100644 index dce5631cd0..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/leveldata/VegetationMap.dat +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:0e6a5435c928079b27796f6b202bbc2623e7e454244ddc099a3cadf33b7cb9e9 -size 63 diff --git a/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic.material b/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic.material deleted file mode 100644 index 32ac8dfd10..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic.material +++ /dev/null @@ -1,32 +0,0 @@ -{ - "materialType": "Materials/Types/StandardPBR.materialtype", - "propertyLayoutVersion": 1, - "properties": { - "baseColor": { - "color": [ 1.0, 1.0, 1.0 ], - "factor": 0.75, - "useTexture": false, - "textureMap": "" - }, - "metallic": { - "factor": 0.0, - "useTexture": false, - "textureMap": "" - }, - "roughness": { - "factor": 0.0, - "useTexture": false, - "textureMap": "" - }, - "specularF0": { - "factor": 0.5, - "useTexture": false, - "textureMap": "" - }, - "normal": { - "factor": 1.0, - "useTexture": false, - "textureMap": "" - } - } -} diff --git a/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic_m00_r00.material b/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic_m00_r00.material deleted file mode 100644 index dcadcb9bfe..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic_m00_r00.material +++ /dev/null @@ -1,13 +0,0 @@ -{ - "parentMaterial": "./basic.material", - "materialType": "materials/Types/StandardPBR.materialtype", - "propertyLayoutVersion": 1, - "properties": { - "metallic": { - "factor": 0.0 - }, - "roughness": { - "factor": 0.0 - } - } -} diff --git a/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic_m00_r01.material b/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic_m00_r01.material deleted file mode 100644 index 0c2b3e62b3..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic_m00_r01.material +++ /dev/null @@ -1,13 +0,0 @@ -{ - "parentMaterial": "./basic.material", - "materialType": "materials/Types/StandardPBR.materialtype", - "propertyLayoutVersion": 1, - "properties": { - "metallic": { - "factor": 0.0 - }, - "roughness": { - "factor": 0.1 - } - } -} diff --git a/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic_m00_r02.material b/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic_m00_r02.material deleted file mode 100644 index 8d29890384..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic_m00_r02.material +++ /dev/null @@ -1,13 +0,0 @@ -{ - "parentMaterial": "./basic.material", - "materialType": "materials/Types/StandardPBR.materialtype", - "propertyLayoutVersion": 1, - "properties": { - "metallic": { - "factor": 0.0 - }, - "roughness": { - "factor": 0.2 - } - } -} diff --git a/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic_m00_r03.material b/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic_m00_r03.material deleted file mode 100644 index bb9557241b..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic_m00_r03.material +++ /dev/null @@ -1,13 +0,0 @@ -{ - "parentMaterial": "./basic.material", - "materialType": "materials/Types/StandardPBR.materialtype", - "propertyLayoutVersion": 1, - "properties": { - "metallic": { - "factor": 0.0 - }, - "roughness": { - "factor": 0.3 - } - } -} diff --git a/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic_m00_r04.material b/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic_m00_r04.material deleted file mode 100644 index e14e2899fa..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic_m00_r04.material +++ /dev/null @@ -1,13 +0,0 @@ -{ - "parentMaterial": "./basic.material", - "materialType": "materials/Types/StandardPBR.materialtype", - "propertyLayoutVersion": 1, - "properties": { - "metallic": { - "factor": 0.0 - }, - "roughness": { - "factor": 0.4 - } - } -} diff --git a/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic_m00_r05.material b/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic_m00_r05.material deleted file mode 100644 index 344ce084e5..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic_m00_r05.material +++ /dev/null @@ -1,13 +0,0 @@ -{ - "parentMaterial": "./basic.material", - "materialType": "materials/Types/StandardPBR.materialtype", - "propertyLayoutVersion": 1, - "properties": { - "metallic": { - "factor": 0.0 - }, - "roughness": { - "factor": 0.5 - } - } -} diff --git a/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic_m00_r06.material b/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic_m00_r06.material deleted file mode 100644 index 0f8195653f..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic_m00_r06.material +++ /dev/null @@ -1,13 +0,0 @@ -{ - "parentMaterial": "./basic.material", - "materialType": "materials/Types/StandardPBR.materialtype", - "propertyLayoutVersion": 1, - "properties": { - "metallic": { - "factor": 0.0 - }, - "roughness": { - "factor": 0.6 - } - } -} diff --git a/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic_m00_r07.material b/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic_m00_r07.material deleted file mode 100644 index d5d95ff285..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic_m00_r07.material +++ /dev/null @@ -1,13 +0,0 @@ -{ - "parentMaterial": "./basic.material", - "materialType": "materials/Types/StandardPBR.materialtype", - "propertyLayoutVersion": 1, - "properties": { - "metallic": { - "factor": 0.0 - }, - "roughness": { - "factor": 0.7 - } - } -} diff --git a/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic_m00_r08.material b/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic_m00_r08.material deleted file mode 100644 index 801b138831..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic_m00_r08.material +++ /dev/null @@ -1,13 +0,0 @@ -{ - "parentMaterial": "./basic.material", - "materialType": "materials/Types/StandardPBR.materialtype", - "propertyLayoutVersion": 1, - "properties": { - "metallic": { - "factor": 0.0 - }, - "roughness": { - "factor": 0.8 - } - } -} diff --git a/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic_m00_r09.material b/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic_m00_r09.material deleted file mode 100644 index 0710a320cb..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic_m00_r09.material +++ /dev/null @@ -1,13 +0,0 @@ -{ - "parentMaterial": "./basic.material", - "materialType": "materials/Types/StandardPBR.materialtype", - "propertyLayoutVersion": 1, - "properties": { - "metallic": { - "factor": 0.0 - }, - "roughness": { - "factor": 0.9 - } - } -} diff --git a/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic_m00_r10.material b/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic_m00_r10.material deleted file mode 100644 index d1cc781c61..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic_m00_r10.material +++ /dev/null @@ -1,13 +0,0 @@ -{ - "parentMaterial": "./basic.material", - "materialType": "materials/Types/StandardPBR.materialtype", - "propertyLayoutVersion": 1, - "properties": { - "metallic": { - "factor": 0.0 - }, - "roughness": { - "factor": 1.0 - } - } -} diff --git a/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic_m10_r00.material b/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic_m10_r00.material deleted file mode 100644 index 945cd1e9eb..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic_m10_r00.material +++ /dev/null @@ -1,13 +0,0 @@ -{ - "parentMaterial": "./basic.material", - "materialType": "materials/Types/StandardPBR.materialtype", - "propertyLayoutVersion": 1, - "properties": { - "metallic": { - "factor": 1.0 - }, - "roughness": { - "factor": 0.0 - } - } -} diff --git a/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic_m10_r01.material b/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic_m10_r01.material deleted file mode 100644 index 85f6008782..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic_m10_r01.material +++ /dev/null @@ -1,13 +0,0 @@ -{ - "parentMaterial": "./basic.material", - "materialType": "materials/Types/StandardPBR.materialtype", - "propertyLayoutVersion": 1, - "properties": { - "metallic": { - "factor": 1.0 - }, - "roughness": { - "factor": 0.1 - } - } -} diff --git a/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic_m10_r02.material b/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic_m10_r02.material deleted file mode 100644 index 5abedc34e2..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic_m10_r02.material +++ /dev/null @@ -1,13 +0,0 @@ -{ - "parentMaterial": "./basic.material", - "materialType": "materials/Types/StandardPBR.materialtype", - "propertyLayoutVersion": 1, - "properties": { - "metallic": { - "factor": 1.0 - }, - "roughness": { - "factor": 0.2 - } - } -} diff --git a/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic_m10_r03.material b/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic_m10_r03.material deleted file mode 100644 index 50b37a647d..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic_m10_r03.material +++ /dev/null @@ -1,13 +0,0 @@ -{ - "parentMaterial": "./basic.material", - "materialType": "materials/Types/StandardPBR.materialtype", - "propertyLayoutVersion": 1, - "properties": { - "metallic": { - "factor": 1.0 - }, - "roughness": { - "factor": 0.3 - } - } -} diff --git a/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic_m10_r04.material b/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic_m10_r04.material deleted file mode 100644 index ad74ddf08b..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic_m10_r04.material +++ /dev/null @@ -1,13 +0,0 @@ -{ - "parentMaterial": "./basic.material", - "materialType": "materials/Types/StandardPBR.materialtype", - "propertyLayoutVersion": 1, - "properties": { - "metallic": { - "factor": 1.0 - }, - "roughness": { - "factor": 0.4 - } - } -} diff --git a/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic_m10_r05.material b/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic_m10_r05.material deleted file mode 100644 index f7f3260b97..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic_m10_r05.material +++ /dev/null @@ -1,13 +0,0 @@ -{ - "parentMaterial": "./basic.material", - "materialType": "materials/Types/StandardPBR.materialtype", - "propertyLayoutVersion": 1, - "properties": { - "metallic": { - "factor": 1.0 - }, - "roughness": { - "factor": 0.5 - } - } -} diff --git a/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic_m10_r06.material b/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic_m10_r06.material deleted file mode 100644 index fc982f9c22..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic_m10_r06.material +++ /dev/null @@ -1,13 +0,0 @@ -{ - "parentMaterial": "./basic.material", - "materialType": "materials/Types/StandardPBR.materialtype", - "propertyLayoutVersion": 1, - "properties": { - "metallic": { - "factor": 1.0 - }, - "roughness": { - "factor": 0.6 - } - } -} diff --git a/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic_m10_r07.material b/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic_m10_r07.material deleted file mode 100644 index c4526dfd2c..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic_m10_r07.material +++ /dev/null @@ -1,13 +0,0 @@ -{ - "parentMaterial": "./basic.material", - "materialType": "materials/Types/StandardPBR.materialtype", - "propertyLayoutVersion": 1, - "properties": { - "metallic": { - "factor": 1.0 - }, - "roughness": { - "factor": 0.7 - } - } -} diff --git a/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic_m10_r08.material b/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic_m10_r08.material deleted file mode 100644 index f756a36ded..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic_m10_r08.material +++ /dev/null @@ -1,13 +0,0 @@ -{ - "parentMaterial": "./basic.material", - "materialType": "materials/Types/StandardPBR.materialtype", - "propertyLayoutVersion": 1, - "properties": { - "metallic": { - "factor": 1.0 - }, - "roughness": { - "factor": 0.8 - } - } -} diff --git a/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic_m10_r09.material b/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic_m10_r09.material deleted file mode 100644 index a853979d6d..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic_m10_r09.material +++ /dev/null @@ -1,13 +0,0 @@ -{ - "parentMaterial": "./basic.material", - "materialType": "materials/Types/StandardPBR.materialtype", - "propertyLayoutVersion": 1, - "properties": { - "metallic": { - "factor": 1.0 - }, - "roughness": { - "factor": 0.9 - } - } -} diff --git a/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic_m10_r10.material b/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic_m10_r10.material deleted file mode 100644 index e4528d45fd..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/materials/basic_m10_r10.material +++ /dev/null @@ -1,13 +0,0 @@ -{ - "parentMaterial": "./basic.material", - "materialType": "materials/Types/StandardPBR.materialtype", - "propertyLayoutVersion": 1, - "properties": { - "metallic": { - "factor": 1.0 - }, - "roughness": { - "factor": 1.0 - } - } -} diff --git a/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/tags.txt b/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/tags.txt deleted file mode 100644 index 0d6c1880e7..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/PbrMaterialChart/tags.txt +++ /dev/null @@ -1,12 +0,0 @@ -0,0,0,0,0,0 -0,0,0,0,0,0 -0,0,0,0,0,0 -0,0,0,0,0,0 -0,0,0,0,0,0 -0,0,0,0,0,0 -0,0,0,0,0,0 -0,0,0,0,0,0 -0,0,0,0,0,0 -0,0,0,0,0,0 -0,0,0,0,0,0 -0,0,0,0,0,0 diff --git a/AutomatedTesting/Levels/AtomLevels/Peccy_example_dcc_materials/LevelData/Environment.xml b/AutomatedTesting/Levels/AtomLevels/Peccy_example_dcc_materials/LevelData/Environment.xml deleted file mode 100644 index c8398b6257..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/Peccy_example_dcc_materials/LevelData/Environment.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - - - - diff --git a/AutomatedTesting/Levels/AtomLevels/Peccy_example_dcc_materials/LevelData/Heightmap.dat b/AutomatedTesting/Levels/AtomLevels/Peccy_example_dcc_materials/LevelData/Heightmap.dat deleted file mode 100644 index 64818fea5e..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/Peccy_example_dcc_materials/LevelData/Heightmap.dat +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:1d465a67ec0ab266090626014cc06552e7db57236e637b4c43451e1eea790b2f -size 8389396 diff --git a/AutomatedTesting/Levels/AtomLevels/Peccy_example_dcc_materials/LevelData/TerrainTexture.xml b/AutomatedTesting/Levels/AtomLevels/Peccy_example_dcc_materials/LevelData/TerrainTexture.xml deleted file mode 100644 index f43df05b22..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/Peccy_example_dcc_materials/LevelData/TerrainTexture.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/AutomatedTesting/Levels/AtomLevels/Peccy_example_dcc_materials/LevelData/TimeOfDay.xml b/AutomatedTesting/Levels/AtomLevels/Peccy_example_dcc_materials/LevelData/TimeOfDay.xml deleted file mode 100644 index 3a083a6882..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/Peccy_example_dcc_materials/LevelData/TimeOfDay.xml +++ /dev/null @@ -1,356 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/AutomatedTesting/Levels/AtomLevels/Peccy_example_dcc_materials/LevelData/VegetationMap.dat b/AutomatedTesting/Levels/AtomLevels/Peccy_example_dcc_materials/LevelData/VegetationMap.dat deleted file mode 100644 index dce5631cd0..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/Peccy_example_dcc_materials/LevelData/VegetationMap.dat +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:0e6a5435c928079b27796f6b202bbc2623e7e454244ddc099a3cadf33b7cb9e9 -size 63 diff --git a/AutomatedTesting/Levels/AtomLevels/Peccy_example_dcc_materials/Peccy_example_dcc_materials.ly b/AutomatedTesting/Levels/AtomLevels/Peccy_example_dcc_materials/Peccy_example_dcc_materials.ly deleted file mode 100644 index d5cd02b05c..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/Peccy_example_dcc_materials/Peccy_example_dcc_materials.ly +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:33bee47eaeae1de709a39048581b8217797f6bd1b4f2b0b1db78aeb42cc12944 -size 11088 diff --git a/AutomatedTesting/Levels/AtomLevels/Peccy_example_dcc_materials/TerrainTexture.pak b/AutomatedTesting/Levels/AtomLevels/Peccy_example_dcc_materials/TerrainTexture.pak deleted file mode 100644 index fe3604a050..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/Peccy_example_dcc_materials/TerrainTexture.pak +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:8739c76e681f900923b900c9df0ef75cf421d39cabb54650c4b9ad19b6a76d85 -size 22 diff --git a/AutomatedTesting/Levels/AtomLevels/Peccy_example_dcc_materials/filelist.xml b/AutomatedTesting/Levels/AtomLevels/Peccy_example_dcc_materials/filelist.xml deleted file mode 100644 index fccdd73af5..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/Peccy_example_dcc_materials/filelist.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/AutomatedTesting/Levels/AtomLevels/Peccy_example_dcc_materials/level.pak b/AutomatedTesting/Levels/AtomLevels/Peccy_example_dcc_materials/level.pak deleted file mode 100644 index 9355e4df99..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/Peccy_example_dcc_materials/level.pak +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:b68e869cd3819cb72d9a9d45556b88b18631a282ca7c5908d2a9ae4265226e79 -size 6118 diff --git a/AutomatedTesting/Levels/AtomLevels/Peccy_example_dcc_materials/tags.txt b/AutomatedTesting/Levels/AtomLevels/Peccy_example_dcc_materials/tags.txt deleted file mode 100644 index 0d6c1880e7..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/Peccy_example_dcc_materials/tags.txt +++ /dev/null @@ -1,12 +0,0 @@ -0,0,0,0,0,0 -0,0,0,0,0,0 -0,0,0,0,0,0 -0,0,0,0,0,0 -0,0,0,0,0,0 -0,0,0,0,0,0 -0,0,0,0,0,0 -0,0,0,0,0,0 -0,0,0,0,0,0 -0,0,0,0,0,0 -0,0,0,0,0,0 -0,0,0,0,0,0 diff --git a/AutomatedTesting/Levels/AtomLevels/Peccy_example_no_materials/LevelData/Environment.xml b/AutomatedTesting/Levels/AtomLevels/Peccy_example_no_materials/LevelData/Environment.xml deleted file mode 100644 index c8398b6257..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/Peccy_example_no_materials/LevelData/Environment.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - - - - diff --git a/AutomatedTesting/Levels/AtomLevels/Peccy_example_no_materials/LevelData/Heightmap.dat b/AutomatedTesting/Levels/AtomLevels/Peccy_example_no_materials/LevelData/Heightmap.dat deleted file mode 100644 index 64818fea5e..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/Peccy_example_no_materials/LevelData/Heightmap.dat +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:1d465a67ec0ab266090626014cc06552e7db57236e637b4c43451e1eea790b2f -size 8389396 diff --git a/AutomatedTesting/Levels/AtomLevels/Peccy_example_no_materials/LevelData/TerrainTexture.xml b/AutomatedTesting/Levels/AtomLevels/Peccy_example_no_materials/LevelData/TerrainTexture.xml deleted file mode 100644 index f43df05b22..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/Peccy_example_no_materials/LevelData/TerrainTexture.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/AutomatedTesting/Levels/AtomLevels/Peccy_example_no_materials/LevelData/TimeOfDay.xml b/AutomatedTesting/Levels/AtomLevels/Peccy_example_no_materials/LevelData/TimeOfDay.xml deleted file mode 100644 index e4106ce437..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/Peccy_example_no_materials/LevelData/TimeOfDay.xml +++ /dev/null @@ -1,356 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/AutomatedTesting/Levels/AtomLevels/Peccy_example_no_materials/LevelData/VegetationMap.dat b/AutomatedTesting/Levels/AtomLevels/Peccy_example_no_materials/LevelData/VegetationMap.dat deleted file mode 100644 index dce5631cd0..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/Peccy_example_no_materials/LevelData/VegetationMap.dat +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:0e6a5435c928079b27796f6b202bbc2623e7e454244ddc099a3cadf33b7cb9e9 -size 63 diff --git a/AutomatedTesting/Levels/AtomLevels/Peccy_example_no_materials/Peccy_example_no_materials.ly b/AutomatedTesting/Levels/AtomLevels/Peccy_example_no_materials/Peccy_example_no_materials.ly deleted file mode 100644 index a5d8235a30..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/Peccy_example_no_materials/Peccy_example_no_materials.ly +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:3559a804d8781d891807de2add711545f5e1866ef5cc48ff6a19e319a57c282d -size 10517 diff --git a/AutomatedTesting/Levels/AtomLevels/Peccy_example_no_materials/TerrainTexture.pak b/AutomatedTesting/Levels/AtomLevels/Peccy_example_no_materials/TerrainTexture.pak deleted file mode 100644 index fe3604a050..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/Peccy_example_no_materials/TerrainTexture.pak +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:8739c76e681f900923b900c9df0ef75cf421d39cabb54650c4b9ad19b6a76d85 -size 22 diff --git a/AutomatedTesting/Levels/AtomLevels/Peccy_example_no_materials/filelist.xml b/AutomatedTesting/Levels/AtomLevels/Peccy_example_no_materials/filelist.xml deleted file mode 100644 index fccdd73af5..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/Peccy_example_no_materials/filelist.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/AutomatedTesting/Levels/AtomLevels/Peccy_example_no_materials/level.pak b/AutomatedTesting/Levels/AtomLevels/Peccy_example_no_materials/level.pak deleted file mode 100644 index 9355e4df99..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/Peccy_example_no_materials/level.pak +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:b68e869cd3819cb72d9a9d45556b88b18631a282ca7c5908d2a9ae4265226e79 -size 6118 diff --git a/AutomatedTesting/Levels/AtomLevels/Peccy_example_no_materials/tags.txt b/AutomatedTesting/Levels/AtomLevels/Peccy_example_no_materials/tags.txt deleted file mode 100644 index 0d6c1880e7..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/Peccy_example_no_materials/tags.txt +++ /dev/null @@ -1,12 +0,0 @@ -0,0,0,0,0,0 -0,0,0,0,0,0 -0,0,0,0,0,0 -0,0,0,0,0,0 -0,0,0,0,0,0 -0,0,0,0,0,0 -0,0,0,0,0,0 -0,0,0,0,0,0 -0,0,0,0,0,0 -0,0,0,0,0,0 -0,0,0,0,0,0 -0,0,0,0,0,0 diff --git a/AutomatedTesting/Levels/AtomLevels/ShadowTest/LevelData/Environment.xml b/AutomatedTesting/Levels/AtomLevels/ShadowTest/LevelData/Environment.xml deleted file mode 100644 index c8398b6257..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/ShadowTest/LevelData/Environment.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - - - - diff --git a/AutomatedTesting/Levels/AtomLevels/ShadowTest/LevelData/Heightmap.dat b/AutomatedTesting/Levels/AtomLevels/ShadowTest/LevelData/Heightmap.dat deleted file mode 100644 index 2bb3c003f3..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/ShadowTest/LevelData/Heightmap.dat +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:a8859eeafde418ffe71a29da14f5419439f9cdd598517b0de51bf1049770de44 -size 8389396 diff --git a/AutomatedTesting/Levels/AtomLevels/ShadowTest/LevelData/TerrainTexture.xml b/AutomatedTesting/Levels/AtomLevels/ShadowTest/LevelData/TerrainTexture.xml deleted file mode 100644 index f43df05b22..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/ShadowTest/LevelData/TerrainTexture.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/AutomatedTesting/Levels/AtomLevels/ShadowTest/LevelData/TimeOfDay.xml b/AutomatedTesting/Levels/AtomLevels/ShadowTest/LevelData/TimeOfDay.xml deleted file mode 100644 index e4106ce437..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/ShadowTest/LevelData/TimeOfDay.xml +++ /dev/null @@ -1,356 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/AutomatedTesting/Levels/AtomLevels/ShadowTest/LevelData/VegetationMap.dat b/AutomatedTesting/Levels/AtomLevels/ShadowTest/LevelData/VegetationMap.dat deleted file mode 100644 index dce5631cd0..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/ShadowTest/LevelData/VegetationMap.dat +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:0e6a5435c928079b27796f6b202bbc2623e7e454244ddc099a3cadf33b7cb9e9 -size 63 diff --git a/AutomatedTesting/Levels/AtomLevels/ShadowTest/ShadowTest.ly b/AutomatedTesting/Levels/AtomLevels/ShadowTest/ShadowTest.ly deleted file mode 100644 index beff8c20be..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/ShadowTest/ShadowTest.ly +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:725691047a558edf3d3f443a86d401d0bfa388053f72c2c794813a22096e249f -size 8628 diff --git a/AutomatedTesting/Levels/AtomLevels/ShadowTest/TerrainTexture.pak b/AutomatedTesting/Levels/AtomLevels/ShadowTest/TerrainTexture.pak deleted file mode 100644 index fe3604a050..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/ShadowTest/TerrainTexture.pak +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:8739c76e681f900923b900c9df0ef75cf421d39cabb54650c4b9ad19b6a76d85 -size 22 diff --git a/AutomatedTesting/Levels/AtomLevels/ShadowTest/filelist.xml b/AutomatedTesting/Levels/AtomLevels/ShadowTest/filelist.xml deleted file mode 100644 index 502f2b5af5..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/ShadowTest/filelist.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/AutomatedTesting/Levels/AtomLevels/ShadowTest/level.pak b/AutomatedTesting/Levels/AtomLevels/ShadowTest/level.pak deleted file mode 100644 index 34ec3a3cb3..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/ShadowTest/level.pak +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:3fc101d03df12328e2a1ddf817628963c60d3999dfd08aceb843c5e2bd0c16f7 -size 41574 diff --git a/AutomatedTesting/Levels/AtomLevels/ShadowTest/tags.txt b/AutomatedTesting/Levels/AtomLevels/ShadowTest/tags.txt deleted file mode 100644 index 0d6c1880e7..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/ShadowTest/tags.txt +++ /dev/null @@ -1,12 +0,0 @@ -0,0,0,0,0,0 -0,0,0,0,0,0 -0,0,0,0,0,0 -0,0,0,0,0,0 -0,0,0,0,0,0 -0,0,0,0,0,0 -0,0,0,0,0,0 -0,0,0,0,0,0 -0,0,0,0,0,0 -0,0,0,0,0,0 -0,0,0,0,0,0 -0,0,0,0,0,0 diff --git a/AutomatedTesting/Levels/AtomLevels/ShadowTest/terrain/cover.ctc b/AutomatedTesting/Levels/AtomLevels/ShadowTest/terrain/cover.ctc deleted file mode 100644 index 5c869c6533..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/ShadowTest/terrain/cover.ctc +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:fdab340ad6c6dc6c1167e31afa061684be083360fc4108fa9f1fa4b15fe95d8c -size 1310792 diff --git a/AutomatedTesting/Levels/AtomLevels/Sponza/Layers/Geo.Lighting.layer b/AutomatedTesting/Levels/AtomLevels/Sponza/Layers/Geo.Lighting.layer deleted file mode 100644 index c987b392c5..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/Sponza/Layers/Geo.Lighting.layer +++ /dev/null @@ -1,913 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/AutomatedTesting/Levels/AtomLevels/Sponza/Layers/Geo.layer b/AutomatedTesting/Levels/AtomLevels/Sponza/Layers/Geo.layer deleted file mode 100644 index d690387d66..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/Sponza/Layers/Geo.layer +++ /dev/null @@ -1,1389 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/AutomatedTesting/Levels/AtomLevels/Sponza/Layers/Lighting.layer b/AutomatedTesting/Levels/AtomLevels/Sponza/Layers/Lighting.layer deleted file mode 100644 index a3e61a2143..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/Sponza/Layers/Lighting.layer +++ /dev/null @@ -1,770 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/AutomatedTesting/Levels/AtomLevels/Sponza/Sponza.ly b/AutomatedTesting/Levels/AtomLevels/Sponza/Sponza.ly deleted file mode 100644 index 5ef743c1b7..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/Sponza/Sponza.ly +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:f4629bdef3a7407912f1aab55048e5d2f9ab114171eae77c3d4a0135a74eeb53 -size 5517 diff --git a/AutomatedTesting/Levels/AtomLevels/Sponza/filelist.xml b/AutomatedTesting/Levels/AtomLevels/Sponza/filelist.xml deleted file mode 100644 index 1d3a50b8e5..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/Sponza/filelist.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/AutomatedTesting/Levels/AtomLevels/Sponza/level.pak b/AutomatedTesting/Levels/AtomLevels/Sponza/level.pak deleted file mode 100644 index 2b38c0658f..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/Sponza/level.pak +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:159409b567476761e785d464505847a761dfee3749fb636fa55a0f366dbcf287 -size 6109 diff --git a/AutomatedTesting/Levels/AtomLevels/Sponza/leveldata/Environment.xml b/AutomatedTesting/Levels/AtomLevels/Sponza/leveldata/Environment.xml deleted file mode 100644 index c8398b6257..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/Sponza/leveldata/Environment.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - - - - diff --git a/AutomatedTesting/Levels/AtomLevels/Sponza/leveldata/Heightmap.dat b/AutomatedTesting/Levels/AtomLevels/Sponza/leveldata/Heightmap.dat deleted file mode 100644 index ab03edd5bf..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/Sponza/leveldata/Heightmap.dat +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:0951676ccfe5654b114572e39c5b15d9000f43719c47a6eefcf194209c548338 -size 8389396 diff --git a/AutomatedTesting/Levels/AtomLevels/Sponza/leveldata/TerrainTexture.xml b/AutomatedTesting/Levels/AtomLevels/Sponza/leveldata/TerrainTexture.xml deleted file mode 100644 index f43df05b22..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/Sponza/leveldata/TerrainTexture.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/AutomatedTesting/Levels/AtomLevels/Sponza/leveldata/TimeOfDay.xml b/AutomatedTesting/Levels/AtomLevels/Sponza/leveldata/TimeOfDay.xml deleted file mode 100644 index 6ea168cc6b..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/Sponza/leveldata/TimeOfDay.xml +++ /dev/null @@ -1,356 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/AutomatedTesting/Levels/AtomLevels/Sponza/leveldata/VegetationMap.dat b/AutomatedTesting/Levels/AtomLevels/Sponza/leveldata/VegetationMap.dat deleted file mode 100644 index dce5631cd0..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/Sponza/leveldata/VegetationMap.dat +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:0e6a5435c928079b27796f6b202bbc2623e7e454244ddc099a3cadf33b7cb9e9 -size 63 diff --git a/AutomatedTesting/Levels/AtomLevels/Sponza/tags.txt b/AutomatedTesting/Levels/AtomLevels/Sponza/tags.txt deleted file mode 100644 index 0d6c1880e7..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/Sponza/tags.txt +++ /dev/null @@ -1,12 +0,0 @@ -0,0,0,0,0,0 -0,0,0,0,0,0 -0,0,0,0,0,0 -0,0,0,0,0,0 -0,0,0,0,0,0 -0,0,0,0,0,0 -0,0,0,0,0,0 -0,0,0,0,0,0 -0,0,0,0,0,0 -0,0,0,0,0,0 -0,0,0,0,0,0 -0,0,0,0,0,0 diff --git a/AutomatedTesting/Levels/AtomLevels/Sponza/terrain/cover.ctc b/AutomatedTesting/Levels/AtomLevels/Sponza/terrain/cover.ctc deleted file mode 100644 index 5c869c6533..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/Sponza/terrain/cover.ctc +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:fdab340ad6c6dc6c1167e31afa061684be083360fc4108fa9f1fa4b15fe95d8c -size 1310792 diff --git a/AutomatedTesting/Levels/AtomLevels/Sponza/terraintexture.pak b/AutomatedTesting/Levels/AtomLevels/Sponza/terraintexture.pak deleted file mode 100644 index fe3604a050..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/Sponza/terraintexture.pak +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:8739c76e681f900923b900c9df0ef75cf421d39cabb54650c4b9ad19b6a76d85 -size 22 diff --git a/AutomatedTesting/Levels/AtomLevels/SponzaDiffuseGI/Layers/Geometry.layer b/AutomatedTesting/Levels/AtomLevels/SponzaDiffuseGI/Layers/Geometry.layer deleted file mode 100644 index 3d73f166e1..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/SponzaDiffuseGI/Layers/Geometry.layer +++ /dev/null @@ -1,782 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/AutomatedTesting/Levels/AtomLevels/SponzaDiffuseGI/Layers/Lights.layer b/AutomatedTesting/Levels/AtomLevels/SponzaDiffuseGI/Layers/Lights.layer deleted file mode 100644 index 2b4eaf2a32..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/SponzaDiffuseGI/Layers/Lights.layer +++ /dev/null @@ -1,1059 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/AutomatedTesting/Levels/AtomLevels/SponzaDiffuseGI/LevelData/Environment.xml b/AutomatedTesting/Levels/AtomLevels/SponzaDiffuseGI/LevelData/Environment.xml deleted file mode 100644 index 4ba36f66ae..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/SponzaDiffuseGI/LevelData/Environment.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - - - - diff --git a/AutomatedTesting/Levels/AtomLevels/SponzaDiffuseGI/LevelData/TimeOfDay.xml b/AutomatedTesting/Levels/AtomLevels/SponzaDiffuseGI/LevelData/TimeOfDay.xml deleted file mode 100644 index 6ea168cc6b..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/SponzaDiffuseGI/LevelData/TimeOfDay.xml +++ /dev/null @@ -1,356 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/AutomatedTesting/Levels/AtomLevels/SponzaDiffuseGI/SponzaDiffuseGI.ly b/AutomatedTesting/Levels/AtomLevels/SponzaDiffuseGI/SponzaDiffuseGI.ly deleted file mode 100644 index 3faeb4babd..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/SponzaDiffuseGI/SponzaDiffuseGI.ly +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:08eec76c840629dedd9134b8c65e7d70d8e72f8d71903464fb8750b92a39bbe3 -size 6478 diff --git a/AutomatedTesting/Levels/AtomLevels/SponzaDiffuseGI/filelist.xml b/AutomatedTesting/Levels/AtomLevels/SponzaDiffuseGI/filelist.xml deleted file mode 100644 index da3a2ede43..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/SponzaDiffuseGI/filelist.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/AutomatedTesting/Levels/AtomLevels/SponzaDiffuseGI/level.pak b/AutomatedTesting/Levels/AtomLevels/SponzaDiffuseGI/level.pak deleted file mode 100644 index bf28249944..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/SponzaDiffuseGI/level.pak +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:ae607dcf477bc0d8585ea7117722264df9782fd6fe58878f0b4266ccfaef88d9 -size 3977 diff --git a/AutomatedTesting/Levels/AtomLevels/SponzaDiffuseGI/tags.txt b/AutomatedTesting/Levels/AtomLevels/SponzaDiffuseGI/tags.txt deleted file mode 100644 index 0d6c1880e7..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/SponzaDiffuseGI/tags.txt +++ /dev/null @@ -1,12 +0,0 @@ -0,0,0,0,0,0 -0,0,0,0,0,0 -0,0,0,0,0,0 -0,0,0,0,0,0 -0,0,0,0,0,0 -0,0,0,0,0,0 -0,0,0,0,0,0 -0,0,0,0,0,0 -0,0,0,0,0,0 -0,0,0,0,0,0 -0,0,0,0,0,0 -0,0,0,0,0,0 diff --git a/AutomatedTesting/Levels/AtomLevels/TangentSpace/TangentSpace.ly b/AutomatedTesting/Levels/AtomLevels/TangentSpace/TangentSpace.ly deleted file mode 100644 index 7a405de6b9..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/TangentSpace/TangentSpace.ly +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:98825e8c69f5dec5b5f71a5dde0d64d5bdf8017f7898cac9e7b2bd00e5c5db97 -size 38475 diff --git a/AutomatedTesting/Levels/AtomLevels/TangentSpace/TestTangentSpace.azsl b/AutomatedTesting/Levels/AtomLevels/TangentSpace/TestTangentSpace.azsl deleted file mode 100644 index 00bfdccb04..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/TangentSpace/TestTangentSpace.azsl +++ /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. -* -*/ - -#include "../../Shaders/CommonVS.azsli" -#include - -enum class Axis -{ - Tangent, - Bitangent, - Normal -}; - -option Axis o_axis; - -struct PixelOutput -{ - float4 m_color : SV_Target0; -}; - -PixelOutput MainPS(VertexOutput input) -{ - PixelOutput output; - - if (o_axis == Axis::Tangent) - { - output.m_color = float4(input.m_tangent * 0.5 + 0.5, 1); - } - else if (o_axis == Axis::Bitangent) - { - output.m_color = float4(input.m_bitangent * 0.5 + 0.5, 1); - } - else - { - output.m_color = float4(input.m_normal * 0.5 + 0.5, 1); - } - - return output; -} \ No newline at end of file diff --git a/AutomatedTesting/Levels/AtomLevels/TangentSpace/TestTangentSpace.materialtype b/AutomatedTesting/Levels/AtomLevels/TangentSpace/TestTangentSpace.materialtype deleted file mode 100644 index f68f7c6b32..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/TangentSpace/TestTangentSpace.materialtype +++ /dev/null @@ -1,22 +0,0 @@ -{ - "propertyLayout": { - "version": 1, - "properties": { - "general": [ - { - "id": "o_axis", - "type": "int", - "connection": { - "type": "shaderOption", - "id": "o_axis" - } - } - ] - } - }, - "shaders": [ - { - "file": "TestTangentSpace.shader" - } - ] -} diff --git a/AutomatedTesting/Levels/AtomLevels/TangentSpace/TestTangentSpace.shader b/AutomatedTesting/Levels/AtomLevels/TangentSpace/TestTangentSpace.shader deleted file mode 100644 index 5ac7eff206..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/TangentSpace/TestTangentSpace.shader +++ /dev/null @@ -1,26 +0,0 @@ -{ - "Source": "TestTangentSpace.azsl", - - "DepthStencilState": { - "Depth": { - "Enable": true, - "CompareFunc": "GreaterEqual" - } - }, - - // Using auxgeom draw list to avoid tonemapping - "DrawList": "auxgeom", - - "ProgramSettings": { - "EntryPoints": [ - { - "name": "CommonVS", - "type": "Vertex" - }, - { - "name": "MainPS", - "type": "Fragment" - } - ] - } -} diff --git a/AutomatedTesting/Levels/AtomLevels/TangentSpace/TestTangentSpace_B.material b/AutomatedTesting/Levels/AtomLevels/TangentSpace/TestTangentSpace_B.material deleted file mode 100644 index 414175fd40..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/TangentSpace/TestTangentSpace_B.material +++ /dev/null @@ -1,8 +0,0 @@ -{ - "materialType": "TestTangentSpace.materialtype", - "properties": { - "general": { - "o_axis": 1 - } - } -} diff --git a/AutomatedTesting/Levels/AtomLevels/TangentSpace/TestTangentSpace_N.material b/AutomatedTesting/Levels/AtomLevels/TangentSpace/TestTangentSpace_N.material deleted file mode 100644 index bda8aa489b..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/TangentSpace/TestTangentSpace_N.material +++ /dev/null @@ -1,8 +0,0 @@ -{ - "materialType": "TestTangentSpace.materialtype", - "properties": { - "general": { - "o_axis": 2 - } - } -} diff --git a/AutomatedTesting/Levels/AtomLevels/TangentSpace/TestTangentSpace_T.material b/AutomatedTesting/Levels/AtomLevels/TangentSpace/TestTangentSpace_T.material deleted file mode 100644 index 7980476181..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/TangentSpace/TestTangentSpace_T.material +++ /dev/null @@ -1,8 +0,0 @@ -{ - "materialType": "TestTangentSpace.materialtype", - "properties": { - "general": { - "o_axis": 0 - } - } -} diff --git a/AutomatedTesting/Levels/AtomLevels/TangentSpace/cylinder_faceted.fbx b/AutomatedTesting/Levels/AtomLevels/TangentSpace/cylinder_faceted.fbx deleted file mode 100644 index 989f4240e9..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/TangentSpace/cylinder_faceted.fbx +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:8f22d389a7a7187103306e31fdd8ee451b4100a98a92c2321fb259c2aa9ac9b7 -size 14680 diff --git a/AutomatedTesting/Levels/AtomLevels/TangentSpace/cylinder_faceted_rotated_uvs.fbx b/AutomatedTesting/Levels/AtomLevels/TangentSpace/cylinder_faceted_rotated_uvs.fbx deleted file mode 100644 index 616b39c6ec..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/TangentSpace/cylinder_faceted_rotated_uvs.fbx +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:41b4cd04c1931c90b4dc732fb627602d39e064096f6370d81eacc037c5a87008 -size 14671 diff --git a/AutomatedTesting/Levels/AtomLevels/TangentSpace/cylinder_lowres.fbx b/AutomatedTesting/Levels/AtomLevels/TangentSpace/cylinder_lowres.fbx deleted file mode 100644 index 528cc81f33..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/TangentSpace/cylinder_lowres.fbx +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:49cd54041f03da6ece73eec49862625df1afa7aaba7beefecdfe66af5cd3ba11 -size 13910 diff --git a/AutomatedTesting/Levels/AtomLevels/TangentSpace/filelist.xml b/AutomatedTesting/Levels/AtomLevels/TangentSpace/filelist.xml deleted file mode 100644 index 52b3bd08cf..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/TangentSpace/filelist.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/AutomatedTesting/Levels/AtomLevels/TangentSpace/level.pak b/AutomatedTesting/Levels/AtomLevels/TangentSpace/level.pak deleted file mode 100644 index 0e713c0bf7..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/TangentSpace/level.pak +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:438e6f0ab1675ab65a4aea6e170f0aeb9ac7cccb9b13683d2764cd5b9a1838cc -size 45292 diff --git a/AutomatedTesting/Levels/AtomLevels/TangentSpace/leveldata/Environment.xml b/AutomatedTesting/Levels/AtomLevels/TangentSpace/leveldata/Environment.xml deleted file mode 100644 index c8398b6257..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/TangentSpace/leveldata/Environment.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - - - - diff --git a/AutomatedTesting/Levels/AtomLevels/TangentSpace/leveldata/Heightmap.dat b/AutomatedTesting/Levels/AtomLevels/TangentSpace/leveldata/Heightmap.dat deleted file mode 100644 index 9f482e6fad..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/TangentSpace/leveldata/Heightmap.dat +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:e263e20aa06bac2dd0008db8a68790b882716fc87cd48d818c2cc244f54a1ce1 -size 17407562 diff --git a/AutomatedTesting/Levels/AtomLevels/TangentSpace/leveldata/TerrainTexture.xml b/AutomatedTesting/Levels/AtomLevels/TangentSpace/leveldata/TerrainTexture.xml deleted file mode 100644 index 0fa8b16c50..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/TangentSpace/leveldata/TerrainTexture.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - diff --git a/AutomatedTesting/Levels/AtomLevels/TangentSpace/leveldata/TimeOfDay.xml b/AutomatedTesting/Levels/AtomLevels/TangentSpace/leveldata/TimeOfDay.xml deleted file mode 100644 index c5b404318e..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/TangentSpace/leveldata/TimeOfDay.xml +++ /dev/null @@ -1,356 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/AutomatedTesting/Levels/AtomLevels/TangentSpace/leveldata/VegetationMap.dat b/AutomatedTesting/Levels/AtomLevels/TangentSpace/leveldata/VegetationMap.dat deleted file mode 100644 index dce5631cd0..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/TangentSpace/leveldata/VegetationMap.dat +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:0e6a5435c928079b27796f6b202bbc2623e7e454244ddc099a3cadf33b7cb9e9 -size 63 diff --git a/AutomatedTesting/Levels/AtomLevels/TangentSpace/plane_zup.fbx b/AutomatedTesting/Levels/AtomLevels/TangentSpace/plane_zup.fbx deleted file mode 100644 index 1337082a83..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/TangentSpace/plane_zup.fbx +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:5d9bd1a1a2d87c061fa45b6089fc57dea182d3c4b65765882bbb30aa0f633fe9 -size 15196 diff --git a/AutomatedTesting/Levels/AtomLevels/lucy_high/LevelData/Environment.xml b/AutomatedTesting/Levels/AtomLevels/lucy_high/LevelData/Environment.xml deleted file mode 100644 index c8398b6257..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/lucy_high/LevelData/Environment.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - - - - diff --git a/AutomatedTesting/Levels/AtomLevels/lucy_high/LevelData/Heightmap.dat b/AutomatedTesting/Levels/AtomLevels/lucy_high/LevelData/Heightmap.dat deleted file mode 100644 index 5f09eef86c..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/lucy_high/LevelData/Heightmap.dat +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:9996f86f94d15b8a2a59353653bc8f0e24a326dc63bd3480980c45aec6ec5596 -size 8389548 diff --git a/AutomatedTesting/Levels/AtomLevels/lucy_high/LevelData/TerrainTexture.xml b/AutomatedTesting/Levels/AtomLevels/lucy_high/LevelData/TerrainTexture.xml deleted file mode 100644 index f43df05b22..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/lucy_high/LevelData/TerrainTexture.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/AutomatedTesting/Levels/AtomLevels/lucy_high/LevelData/TimeOfDay.xml b/AutomatedTesting/Levels/AtomLevels/lucy_high/LevelData/TimeOfDay.xml deleted file mode 100644 index 456d609b8a..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/lucy_high/LevelData/TimeOfDay.xml +++ /dev/null @@ -1,356 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/AutomatedTesting/Levels/AtomLevels/lucy_high/LevelData/VegetationMap.dat b/AutomatedTesting/Levels/AtomLevels/lucy_high/LevelData/VegetationMap.dat deleted file mode 100644 index dce5631cd0..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/lucy_high/LevelData/VegetationMap.dat +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:0e6a5435c928079b27796f6b202bbc2623e7e454244ddc099a3cadf33b7cb9e9 -size 63 diff --git a/AutomatedTesting/Levels/AtomLevels/lucy_high/filelist.xml b/AutomatedTesting/Levels/AtomLevels/lucy_high/filelist.xml deleted file mode 100644 index 603bdab1ef..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/lucy_high/filelist.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/AutomatedTesting/Levels/AtomLevels/lucy_high/level.pak b/AutomatedTesting/Levels/AtomLevels/lucy_high/level.pak deleted file mode 100644 index aaa5e794fb..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/lucy_high/level.pak +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:4a89c9baf1f802bb09b5f871667ca2143127774dd1bb7c430c45423f8f73e528 -size 7739 diff --git a/AutomatedTesting/Levels/AtomLevels/lucy_high/lucy_high.ly b/AutomatedTesting/Levels/AtomLevels/lucy_high/lucy_high.ly deleted file mode 100644 index 320f9cc313..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/lucy_high/lucy_high.ly +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:552809b2d95a43f5aa2386550a94e8e3b3bc6bfe2e4e8b118416445fe9ab271e -size 9435 diff --git a/AutomatedTesting/Levels/AtomLevels/lucy_high/tags.txt b/AutomatedTesting/Levels/AtomLevels/lucy_high/tags.txt deleted file mode 100644 index 0d6c1880e7..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/lucy_high/tags.txt +++ /dev/null @@ -1,12 +0,0 @@ -0,0,0,0,0,0 -0,0,0,0,0,0 -0,0,0,0,0,0 -0,0,0,0,0,0 -0,0,0,0,0,0 -0,0,0,0,0,0 -0,0,0,0,0,0 -0,0,0,0,0,0 -0,0,0,0,0,0 -0,0,0,0,0,0 -0,0,0,0,0,0 -0,0,0,0,0,0 diff --git a/AutomatedTesting/Levels/AtomLevels/lucy_high/terrain/cover.ctc b/AutomatedTesting/Levels/AtomLevels/lucy_high/terrain/cover.ctc deleted file mode 100644 index 5c869c6533..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/lucy_high/terrain/cover.ctc +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:fdab340ad6c6dc6c1167e31afa061684be083360fc4108fa9f1fa4b15fe95d8c -size 1310792 diff --git a/AutomatedTesting/Levels/AtomLevels/lucy_high/terraintexture.pak b/AutomatedTesting/Levels/AtomLevels/lucy_high/terraintexture.pak deleted file mode 100644 index fe3604a050..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/lucy_high/terraintexture.pak +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:8739c76e681f900923b900c9df0ef75cf421d39cabb54650c4b9ad19b6a76d85 -size 22 diff --git a/AutomatedTesting/Levels/AtomLevels/macbeth_shaderballs/LevelData/Environment.xml b/AutomatedTesting/Levels/AtomLevels/macbeth_shaderballs/LevelData/Environment.xml deleted file mode 100644 index c8398b6257..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/macbeth_shaderballs/LevelData/Environment.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - - - - diff --git a/AutomatedTesting/Levels/AtomLevels/macbeth_shaderballs/LevelData/Heightmap.dat b/AutomatedTesting/Levels/AtomLevels/macbeth_shaderballs/LevelData/Heightmap.dat deleted file mode 100644 index e5a126f793..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/macbeth_shaderballs/LevelData/Heightmap.dat +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:32b3c3b6a44f979f0dddec02fa52a0f643a03e9ac587d73d1843d914edab7cfa -size 8389548 diff --git a/AutomatedTesting/Levels/AtomLevels/macbeth_shaderballs/LevelData/TerrainTexture.xml b/AutomatedTesting/Levels/AtomLevels/macbeth_shaderballs/LevelData/TerrainTexture.xml deleted file mode 100644 index f43df05b22..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/macbeth_shaderballs/LevelData/TerrainTexture.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/AutomatedTesting/Levels/AtomLevels/macbeth_shaderballs/LevelData/TimeOfDay.xml b/AutomatedTesting/Levels/AtomLevels/macbeth_shaderballs/LevelData/TimeOfDay.xml deleted file mode 100644 index 3a083a6882..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/macbeth_shaderballs/LevelData/TimeOfDay.xml +++ /dev/null @@ -1,356 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/AutomatedTesting/Levels/AtomLevels/macbeth_shaderballs/LevelData/VegetationMap.dat b/AutomatedTesting/Levels/AtomLevels/macbeth_shaderballs/LevelData/VegetationMap.dat deleted file mode 100644 index dce5631cd0..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/macbeth_shaderballs/LevelData/VegetationMap.dat +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:0e6a5435c928079b27796f6b202bbc2623e7e454244ddc099a3cadf33b7cb9e9 -size 63 diff --git a/AutomatedTesting/Levels/AtomLevels/macbeth_shaderballs/TerrainTexture.pak b/AutomatedTesting/Levels/AtomLevels/macbeth_shaderballs/TerrainTexture.pak deleted file mode 100644 index fe3604a050..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/macbeth_shaderballs/TerrainTexture.pak +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:8739c76e681f900923b900c9df0ef75cf421d39cabb54650c4b9ad19b6a76d85 -size 22 diff --git a/AutomatedTesting/Levels/AtomLevels/macbeth_shaderballs/filelist.xml b/AutomatedTesting/Levels/AtomLevels/macbeth_shaderballs/filelist.xml deleted file mode 100644 index 8ebd8dd6fd..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/macbeth_shaderballs/filelist.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/AutomatedTesting/Levels/AtomLevels/macbeth_shaderballs/level.pak b/AutomatedTesting/Levels/AtomLevels/macbeth_shaderballs/level.pak deleted file mode 100644 index acff6441d0..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/macbeth_shaderballs/level.pak +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:febe6437673cab6732d7eee3df6155e670043ec10047f2c20dbf417f2e499a76 -size 7710 diff --git a/AutomatedTesting/Levels/AtomLevels/macbeth_shaderballs/macbeth_shaderballs.ly b/AutomatedTesting/Levels/AtomLevels/macbeth_shaderballs/macbeth_shaderballs.ly deleted file mode 100644 index 59009f27c1..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/macbeth_shaderballs/macbeth_shaderballs.ly +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:772448438ccb225129ea21024117b204f6f4ccf8b470a6a4d668ea7cc7ebabfe -size 19600 diff --git a/AutomatedTesting/Levels/AtomLevels/macbeth_shaderballs/tags.txt b/AutomatedTesting/Levels/AtomLevels/macbeth_shaderballs/tags.txt deleted file mode 100644 index 0d6c1880e7..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/macbeth_shaderballs/tags.txt +++ /dev/null @@ -1,12 +0,0 @@ -0,0,0,0,0,0 -0,0,0,0,0,0 -0,0,0,0,0,0 -0,0,0,0,0,0 -0,0,0,0,0,0 -0,0,0,0,0,0 -0,0,0,0,0,0 -0,0,0,0,0,0 -0,0,0,0,0,0 -0,0,0,0,0,0 -0,0,0,0,0,0 -0,0,0,0,0,0 diff --git a/AutomatedTesting/Levels/AtomLevels/macbeth_shaderballs/terrain/cover.ctc b/AutomatedTesting/Levels/AtomLevels/macbeth_shaderballs/terrain/cover.ctc deleted file mode 100644 index 5c869c6533..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/macbeth_shaderballs/terrain/cover.ctc +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:fdab340ad6c6dc6c1167e31afa061684be083360fc4108fa9f1fa4b15fe95d8c -size 1310792 From 7623d2899510266cc0d7f7100740e5f534527359 Mon Sep 17 00:00:00 2001 From: jromnoa Date: Wed, 21 Apr 2021 14:53:02 -0700 Subject: [PATCH 06/32] update tool_dependencies.cmake, CMakeLists.txt, hydra script --- .../Gem/Code/tool_dependencies.cmake | 2 -- .../PythonTests/atom_renderer/CMakeLists.txt | 2 +- .../hydra_AllLevels_OpenClose.py | 4 ++-- .../atom_renderer/test_Atom_MainSuite.py | 17 +---------------- 4 files changed, 4 insertions(+), 21 deletions(-) diff --git a/AutomatedTesting/Gem/Code/tool_dependencies.cmake b/AutomatedTesting/Gem/Code/tool_dependencies.cmake index a7804cd660..8c5da63f42 100644 --- a/AutomatedTesting/Gem/Code/tool_dependencies.cmake +++ b/AutomatedTesting/Gem/Code/tool_dependencies.cmake @@ -69,6 +69,4 @@ set(GEM_DEPENDENCIES Gem::AtomFont Gem::AtomToolsFramework.Editor Gem::Blast.Editor - Gem::DccScriptingInterface.Editor - Gem::QtForPython.Editor ) diff --git a/AutomatedTesting/Gem/PythonTests/atom_renderer/CMakeLists.txt b/AutomatedTesting/Gem/PythonTests/atom_renderer/CMakeLists.txt index 3510048109..7a1f59105e 100644 --- a/AutomatedTesting/Gem/PythonTests/atom_renderer/CMakeLists.txt +++ b/AutomatedTesting/Gem/PythonTests/atom_renderer/CMakeLists.txt @@ -25,7 +25,7 @@ if(PAL_TRAIT_BUILD_HOST_TOOLS AND PAL_TRAIT_BUILD_TESTS_SUPPORTED AND AutomatedT TIMEOUT 1200 RUNTIME_DEPENDENCIES AssetProcessor - AtomTest.Assets + AutomatedTesting.Assets Editor ) endif() diff --git a/AutomatedTesting/Gem/PythonTests/atom_renderer/atom_hydra_scripts/hydra_AllLevels_OpenClose.py b/AutomatedTesting/Gem/PythonTests/atom_renderer/atom_hydra_scripts/hydra_AllLevels_OpenClose.py index 2b7fcd6cc6..100fd2311b 100644 --- a/AutomatedTesting/Gem/PythonTests/atom_renderer/atom_hydra_scripts/hydra_AllLevels_OpenClose.py +++ b/AutomatedTesting/Gem/PythonTests/atom_renderer/atom_hydra_scripts/hydra_AllLevels_OpenClose.py @@ -23,7 +23,7 @@ from automatedtesting_shared.editor_test_helper import EditorTestHelper LEVELS = os.listdir(os.path.join(azlmbr.paths.devroot, "AutomatedTesting", "Levels", "AtomLevels")) -class TestAllLevelsOpenClose(EditorTestHelper): +class HydraAtomLevels(EditorTestHelper): """Tests that all expected Atom levels can be opened and load successfully.""" def __init__(self): EditorTestHelper.__init__(self, log_prefix="Atom_TestAllLevelsOpenClose", args=["level"]) @@ -101,5 +101,5 @@ class TestAllLevelsOpenClose(EditorTestHelper): general.log(f"The following levels failed to open: {failed_to_open}") -test = TestAllLevelsOpenClose() +test = HydraAtomLevels() test.run() diff --git a/AutomatedTesting/Gem/PythonTests/atom_renderer/test_Atom_MainSuite.py b/AutomatedTesting/Gem/PythonTests/atom_renderer/test_Atom_MainSuite.py index 6a9f86d151..7f33d06623 100644 --- a/AutomatedTesting/Gem/PythonTests/atom_renderer/test_Atom_MainSuite.py +++ b/AutomatedTesting/Gem/PythonTests/atom_renderer/test_Atom_MainSuite.py @@ -48,22 +48,7 @@ class TestAtomLevels(object): request.addfinalizer(teardown) - @pytest.mark.test_case_id( - "C34428159", - "C34428160", - "C34428161", - "C34428162", - "C34428163", - "C34428165", - "C34428166", - "C34428167", - "C34428158", - "C34428172", - "C34428173", - "C34428174", - "C34428175", - ) - + @pytest.mark.test_case_id("C34428159") # Level: ActorTest_100Actors def test_AllLevels_OpenClose(self, request, editor, level, workspace, project, launcher_platform): cfg_args = [level] From 22e9abf6a0d31517b14df98a119928a727329a23 Mon Sep 17 00:00:00 2001 From: jromnoa Date: Wed, 21 Apr 2021 18:09:08 -0700 Subject: [PATCH 07/32] add ShadowTest map with its assets and update the hydra test + test scripts with correct paths --- .../hydra_AllLevels_OpenClose.py | 146 ++++--- .../atom_renderer/test_Atom_MainSuite.py | 5 +- .../ShadowTest/LevelData/Environment.xml | 14 + .../ShadowTest/LevelData/Heightmap.dat | 3 + .../ShadowTest/LevelData/TerrainTexture.xml | 7 + .../ShadowTest/LevelData/TimeOfDay.xml | 356 ++++++++++++++++++ .../ShadowTest/LevelData/VegetationMap.dat | 3 + .../AtomLevels/ShadowTest/ShadowTest.ly | 3 + .../AtomLevels/ShadowTest/TerrainTexture.pak | 3 + .../Levels/AtomLevels/ShadowTest/filelist.xml | 6 + .../Levels/AtomLevels/ShadowTest/level.pak | 3 + .../Levels/AtomLevels/ShadowTest/tags.txt | 12 + .../AtomLevels/ShadowTest/terrain/cover.ctc | 3 + AutomatedTesting/Objects/bunny.fbx | 3 + AutomatedTesting/Objects/cube.fbx | 3 + AutomatedTesting/Objects/plane.fbx | 3 + 16 files changed, 497 insertions(+), 76 deletions(-) create mode 100644 AutomatedTesting/Levels/AtomLevels/ShadowTest/LevelData/Environment.xml create mode 100644 AutomatedTesting/Levels/AtomLevels/ShadowTest/LevelData/Heightmap.dat create mode 100644 AutomatedTesting/Levels/AtomLevels/ShadowTest/LevelData/TerrainTexture.xml create mode 100644 AutomatedTesting/Levels/AtomLevels/ShadowTest/LevelData/TimeOfDay.xml create mode 100644 AutomatedTesting/Levels/AtomLevels/ShadowTest/LevelData/VegetationMap.dat create mode 100644 AutomatedTesting/Levels/AtomLevels/ShadowTest/ShadowTest.ly create mode 100644 AutomatedTesting/Levels/AtomLevels/ShadowTest/TerrainTexture.pak create mode 100644 AutomatedTesting/Levels/AtomLevels/ShadowTest/filelist.xml create mode 100644 AutomatedTesting/Levels/AtomLevels/ShadowTest/level.pak create mode 100644 AutomatedTesting/Levels/AtomLevels/ShadowTest/tags.txt create mode 100644 AutomatedTesting/Levels/AtomLevels/ShadowTest/terrain/cover.ctc create mode 100644 AutomatedTesting/Objects/bunny.fbx create mode 100644 AutomatedTesting/Objects/cube.fbx create mode 100644 AutomatedTesting/Objects/plane.fbx diff --git a/AutomatedTesting/Gem/PythonTests/atom_renderer/atom_hydra_scripts/hydra_AllLevels_OpenClose.py b/AutomatedTesting/Gem/PythonTests/atom_renderer/atom_hydra_scripts/hydra_AllLevels_OpenClose.py index 100fd2311b..81075657f4 100644 --- a/AutomatedTesting/Gem/PythonTests/atom_renderer/atom_hydra_scripts/hydra_AllLevels_OpenClose.py +++ b/AutomatedTesting/Gem/PythonTests/atom_renderer/atom_hydra_scripts/hydra_AllLevels_OpenClose.py @@ -20,86 +20,84 @@ sys.path.append(os.path.join(azlmbr.paths.devroot, 'AutomatedTesting', 'Gem', 'P from automatedtesting_shared.editor_test_helper import EditorTestHelper -LEVELS = os.listdir(os.path.join(azlmbr.paths.devroot, "AutomatedTesting", "Levels", "AtomLevels")) +levels = os.listdir(os.path.join(azlmbr.paths.devroot, "AutomatedTesting", "Levels", "AtomLevels")) +helper = EditorTestHelper(log_prefix="HydraAtomLevels") -class HydraAtomLevels(EditorTestHelper): - """Tests that all expected Atom levels can be opened and load successfully.""" - def __init__(self): - EditorTestHelper.__init__(self, log_prefix="Atom_TestAllLevelsOpenClose", args=["level"]) +def run(): + """ + 1. Open & close all valid test levels in the Editor. + 2. Every time a level is opened, verify it loads correctly and the Editor remains stable. + """ - def run(self): - """ - 1. Open & close all valid test levels in the Editor. - 2. Every time a level is opened, verify it loads correctly and the Editor remains stable. - """ + # Create a new level. + level_name = "tmp_level" # Defined in test_Atom_MainSuite.py + heightmap_resolution = 512 + heightmap_meters_per_pixel = 1 + terrain_texture_resolution = 412 + use_terrain = False - def after_level_load(): - """Function to call after creating/opening a level to ensure it loads.""" - # Give everything a second to initialize. - general.idle_enable(True) - general.update_viewport() - general.idle_wait(0.5) # half a second is more than enough for updating the viewport. + # Return codes are ECreateLevelResult defined in CryEdit.h + return_code = general.create_level_no_prompt( + f"AtomLevels/{level_name}", + heightmap_resolution, + heightmap_meters_per_pixel, + terrain_texture_resolution, + use_terrain + ) + if return_code == 1: + general.log(f"AtomLevels/{level_name} level already exists") + elif return_code == 2: + general.log("Failed to create directory") + elif return_code == 3: + general.log("Directory length is too long") + elif return_code != 0: + general.log("Unknown error, failed to create level") + else: + general.log(f"AtomLevels/{level_name} level created successfully") + after_level_load() - # Close out problematic windows, FPS meters, and anti-aliasing. - if general.is_helpers_shown(): # Turn off the helper gizmos if visible - general.toggle_helpers() - if general.is_pane_visible("Error Report"): # Close Error Report windows that block focus. - general.close_pane("Error Report") - if general.is_pane_visible("Error Log"): # Close Error Log windows that block focus. - general.close_pane("Error Log") - general.run_console("r_displayInfo=0") - general.run_console("r_antialiasingmode=0") - - return True - - # Create a new level. - heightmap_resolution = 512 - heightmap_meters_per_pixel = 1 - terrain_texture_resolution = 412 - use_terrain = False - - # Return codes are ECreateLevelResult defined in CryEdit.h - return_code = general.create_level_no_prompt( - self.args['level'], - heightmap_resolution, - heightmap_meters_per_pixel, - terrain_texture_resolution, - use_terrain - ) - if return_code == 1: - general.log(f"{self.args['level']} level already exists") - elif return_code == 2: - general.log("Failed to create directory") - elif return_code == 3: - general.log("Directory length is too long") - elif return_code != 0: - general.log("Unknown error, failed to create level") + # Open all valid AtomLevels. + failed_to_open = [] + levels.append(level_name) + for level in levels: + if general.is_idle_enabled() and (general.get_current_level_name() == level): + general.log(f"Level {level} already open.") else: - general.log(f"{self.args['level']} level created successfully") - after_level_load() + general.log(f"Opening level {level}") + general.open_level_no_prompt(f"AtomLevels/{level}") + helper.wait_for_condition(function=lambda: general.get_current_level_name() == level, + timeout_in_seconds=4.0) + result = (general.get_current_level_name() == level) and after_level_load() + if result: + general.log(f"Successfully opened {level}") + else: + general.log(f"{level} failed to open") + failed_to_open.append(level) - # Open all valid test levels. - failed_to_open = [] - LEVELS.append(self.args['level']) # Update LEVELS constant for created level. - for level in LEVELS: - if general.is_idle_enabled() and (general.get_current_level_name() == level): - general.log(f"Level {level} already open.") - else: - general.log(f"Opening level {level}") - general.open_level_no_prompt(level) - self.wait_for_condition(function=lambda: general.get_current_level_name() == level, - timeout_in_seconds=2.0) - result = (general.get_current_level_name() == level) and after_level_load() - if result: - general.log(f"Successfully opened {level}") - else: - general.log(f"{level} failed to open") - failed_to_open.append(level) - - if failed_to_open: - general.log(f"The following levels failed to open: {failed_to_open}") + if failed_to_open: + general.log(f"The following levels failed to open: {failed_to_open}") -test = HydraAtomLevels() -test.run() +def after_level_load(): + """Function to call after creating/opening a level to ensure it loads.""" + # Give everything a second to initialize. + general.idle_enable(True) + general.update_viewport() + general.idle_wait(0.5) # half a second is more than enough for updating the viewport. + + # Close out problematic windows, FPS meters, and anti-aliasing. + if general.is_helpers_shown(): # Turn off the helper gizmos if visible + general.toggle_helpers() + if general.is_pane_visible("Error Report"): # Close Error Report windows that block focus. + general.close_pane("Error Report") + if general.is_pane_visible("Error Log"): # Close Error Log windows that block focus. + general.close_pane("Error Log") + general.run_console("r_displayInfo=0") + general.run_console("r_antialiasingmode=0") + + return True + + +if __name__ == "__main__": + run() diff --git a/AutomatedTesting/Gem/PythonTests/atom_renderer/test_Atom_MainSuite.py b/AutomatedTesting/Gem/PythonTests/atom_renderer/test_Atom_MainSuite.py index 7f33d06623..fe23f108bd 100644 --- a/AutomatedTesting/Gem/PythonTests/atom_renderer/test_Atom_MainSuite.py +++ b/AutomatedTesting/Gem/PythonTests/atom_renderer/test_Atom_MainSuite.py @@ -48,11 +48,12 @@ class TestAtomLevels(object): request.addfinalizer(teardown) - @pytest.mark.test_case_id("C34428159") # Level: ActorTest_100Actors + @pytest.mark.test_case_id("C34428174") # Level: ShadowTest def test_AllLevels_OpenClose(self, request, editor, level, workspace, project, launcher_platform): cfg_args = [level] - test_levels = os.path.join(str(PROJECT_DIRECTORY), "Levels", "AtomLevels") + test_levels = os.listdir(os.path.join(str(PROJECT_DIRECTORY), project, "Levels", "AtomLevels")) + test_levels.append(level) expected_lines = [] for level in test_levels: diff --git a/AutomatedTesting/Levels/AtomLevels/ShadowTest/LevelData/Environment.xml b/AutomatedTesting/Levels/AtomLevels/ShadowTest/LevelData/Environment.xml new file mode 100644 index 0000000000..c8398b6257 --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/ShadowTest/LevelData/Environment.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/AutomatedTesting/Levels/AtomLevels/ShadowTest/LevelData/Heightmap.dat b/AutomatedTesting/Levels/AtomLevels/ShadowTest/LevelData/Heightmap.dat new file mode 100644 index 0000000000..2bb3c003f3 --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/ShadowTest/LevelData/Heightmap.dat @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a8859eeafde418ffe71a29da14f5419439f9cdd598517b0de51bf1049770de44 +size 8389396 diff --git a/AutomatedTesting/Levels/AtomLevels/ShadowTest/LevelData/TerrainTexture.xml b/AutomatedTesting/Levels/AtomLevels/ShadowTest/LevelData/TerrainTexture.xml new file mode 100644 index 0000000000..f43df05b22 --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/ShadowTest/LevelData/TerrainTexture.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/AutomatedTesting/Levels/AtomLevels/ShadowTest/LevelData/TimeOfDay.xml b/AutomatedTesting/Levels/AtomLevels/ShadowTest/LevelData/TimeOfDay.xml new file mode 100644 index 0000000000..e4106ce437 --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/ShadowTest/LevelData/TimeOfDay.xml @@ -0,0 +1,356 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/AutomatedTesting/Levels/AtomLevels/ShadowTest/LevelData/VegetationMap.dat b/AutomatedTesting/Levels/AtomLevels/ShadowTest/LevelData/VegetationMap.dat new file mode 100644 index 0000000000..dce5631cd0 --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/ShadowTest/LevelData/VegetationMap.dat @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0e6a5435c928079b27796f6b202bbc2623e7e454244ddc099a3cadf33b7cb9e9 +size 63 diff --git a/AutomatedTesting/Levels/AtomLevels/ShadowTest/ShadowTest.ly b/AutomatedTesting/Levels/AtomLevels/ShadowTest/ShadowTest.ly new file mode 100644 index 0000000000..34d7254d5e --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/ShadowTest/ShadowTest.ly @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c19dc62e3349a435a6760fd532b28c9a86c626e800687bb585038adf48a16397 +size 9146 diff --git a/AutomatedTesting/Levels/AtomLevels/ShadowTest/TerrainTexture.pak b/AutomatedTesting/Levels/AtomLevels/ShadowTest/TerrainTexture.pak new file mode 100644 index 0000000000..fe3604a050 --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/ShadowTest/TerrainTexture.pak @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8739c76e681f900923b900c9df0ef75cf421d39cabb54650c4b9ad19b6a76d85 +size 22 diff --git a/AutomatedTesting/Levels/AtomLevels/ShadowTest/filelist.xml b/AutomatedTesting/Levels/AtomLevels/ShadowTest/filelist.xml new file mode 100644 index 0000000000..502f2b5af5 --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/ShadowTest/filelist.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/AutomatedTesting/Levels/AtomLevels/ShadowTest/level.pak b/AutomatedTesting/Levels/AtomLevels/ShadowTest/level.pak new file mode 100644 index 0000000000..34ec3a3cb3 --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/ShadowTest/level.pak @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3fc101d03df12328e2a1ddf817628963c60d3999dfd08aceb843c5e2bd0c16f7 +size 41574 diff --git a/AutomatedTesting/Levels/AtomLevels/ShadowTest/tags.txt b/AutomatedTesting/Levels/AtomLevels/ShadowTest/tags.txt new file mode 100644 index 0000000000..0d6c1880e7 --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/ShadowTest/tags.txt @@ -0,0 +1,12 @@ +0,0,0,0,0,0 +0,0,0,0,0,0 +0,0,0,0,0,0 +0,0,0,0,0,0 +0,0,0,0,0,0 +0,0,0,0,0,0 +0,0,0,0,0,0 +0,0,0,0,0,0 +0,0,0,0,0,0 +0,0,0,0,0,0 +0,0,0,0,0,0 +0,0,0,0,0,0 diff --git a/AutomatedTesting/Levels/AtomLevels/ShadowTest/terrain/cover.ctc b/AutomatedTesting/Levels/AtomLevels/ShadowTest/terrain/cover.ctc new file mode 100644 index 0000000000..5c869c6533 --- /dev/null +++ b/AutomatedTesting/Levels/AtomLevels/ShadowTest/terrain/cover.ctc @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fdab340ad6c6dc6c1167e31afa061684be083360fc4108fa9f1fa4b15fe95d8c +size 1310792 diff --git a/AutomatedTesting/Objects/bunny.fbx b/AutomatedTesting/Objects/bunny.fbx new file mode 100644 index 0000000000..586062ebba --- /dev/null +++ b/AutomatedTesting/Objects/bunny.fbx @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ee81db4d3aa5c76316cb51c700d6b35f500bc599d91b9f62d057df16ed9be929 +size 3266108 diff --git a/AutomatedTesting/Objects/cube.fbx b/AutomatedTesting/Objects/cube.fbx new file mode 100644 index 0000000000..616c7b4ff3 --- /dev/null +++ b/AutomatedTesting/Objects/cube.fbx @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e32877eab35459499c73ff093df898f93bf3e7379de25eef6875d693be9bec81 +size 18015 diff --git a/AutomatedTesting/Objects/plane.fbx b/AutomatedTesting/Objects/plane.fbx new file mode 100644 index 0000000000..b274bfa282 --- /dev/null +++ b/AutomatedTesting/Objects/plane.fbx @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0a1f8d75dcd85e8b4aa57f6c0c81af0300ff96915ba3c2b591095c215d5e1d8c +size 12072 From 96bbfb3ff0bf52fbf261815f625d05a212f80714 Mon Sep 17 00:00:00 2001 From: rgba16f <82187279+rgba16f@users.noreply.github.com> Date: Wed, 21 Apr 2021 20:34:38 -0500 Subject: [PATCH 08/32] Revert disable CryRenderer changes and leave CryRendererNull running. Also delete CryRenderAtomShim --- Code/CryEngine/CrySystem/SystemInit.cpp | 2 +- .../Common/Textures/TextureManager.cpp | 82 +- Code/Sandbox/Editor/EditorViewportWidget.cpp | 4 - .../Editor/EditorViewportWidget.cpp.orig | 2880 +++++++++++++++++ .../Editor/Material/MaterialManager.cpp | 1 - .../AtomShim_CRELensOptics.cpp | 29 - .../CryRenderAtomShim/AtomShim_DevBuffer.cpp | 192 -- .../AtomShim_PostProcess.cpp | 258 -- .../CryRenderAtomShim/AtomShim_RERender.cpp | 164 - .../AtomShim_RendPipeline.cpp | 192 -- .../AtomShim_RenderAuxGeom.cpp | 688 ---- .../AtomShim_RenderAuxGeom.h | 105 - .../CryRenderAtomShim/AtomShim_Renderer.cpp | 1678 ---------- .../CryRenderAtomShim/AtomShim_Renderer.h | 617 ---- .../CryRenderAtomShim/AtomShim_Shaders.cpp | 162 - .../CryRenderAtomShim/AtomShim_Shadows.cpp | 36 - .../CryRenderAtomShim/AtomShim_System.cpp | 190 -- .../CryRenderAtomShim/AtomShim_Textures.cpp | 363 --- .../AtomShim_TexturesStreaming.cpp | 98 - .../CryRenderAtomShim/CMakeLists.txt | 45 - .../CryRenderAtomShim/CryRenderAtomShim.rc | 111 - .../PCH/CryRenderOther_precompiled.h | 49 - .../Platform/Android/PAL_android.cmake | 12 - .../Platform/Android/platform_android.cmake | 11 - .../Android/platform_android_files.cmake | 14 - .../AtomShim_Renderer_Unimplemented.cpp | 22 - .../Platform/Linux/PAL_linux.cmake | 12 - .../Platform/Linux/platform_linux.cmake | 11 - .../Platform/Linux/platform_linux_files.cmake | 14 - .../Platform/Mac/AtomShim_Renderer_Mac.cpp | 31 - .../Platform/Mac/PAL_mac.cmake | 12 - .../Platform/Mac/platform_mac.cmake | 15 - .../Platform/Mac/platform_mac_files.cmake | 15 - .../Windows/AtomShim_Renderer_Windows.cpp | 23 - .../Platform/Windows/PAL_windows.cmake | 12 - .../Platform/Windows/platform_windows.cmake | 14 - .../Windows/platform_windows_files.cmake | 14 - .../Platform/iOS/AtomShim_Renderer_iOS.cpp | 85 - .../Platform/iOS/PAL_ios.cmake | 12 - .../Platform/iOS/platform_ios.cmake | 15 - .../Platform/iOS/platform_ios_files.cmake | 15 - .../atom_shim_renderer_files.cmake | 29 - .../CryRenderAtomShim/resource.h | 25 - 43 files changed, 2892 insertions(+), 5467 deletions(-) create mode 100644 Code/Sandbox/Editor/EditorViewportWidget.cpp.orig delete mode 100644 Gems/AtomLyIntegration/CryRenderAtomShim/AtomShim_CRELensOptics.cpp delete mode 100644 Gems/AtomLyIntegration/CryRenderAtomShim/AtomShim_DevBuffer.cpp delete mode 100644 Gems/AtomLyIntegration/CryRenderAtomShim/AtomShim_PostProcess.cpp delete mode 100644 Gems/AtomLyIntegration/CryRenderAtomShim/AtomShim_RERender.cpp delete mode 100644 Gems/AtomLyIntegration/CryRenderAtomShim/AtomShim_RendPipeline.cpp delete mode 100644 Gems/AtomLyIntegration/CryRenderAtomShim/AtomShim_RenderAuxGeom.cpp delete mode 100644 Gems/AtomLyIntegration/CryRenderAtomShim/AtomShim_RenderAuxGeom.h delete mode 100644 Gems/AtomLyIntegration/CryRenderAtomShim/AtomShim_Renderer.cpp delete mode 100644 Gems/AtomLyIntegration/CryRenderAtomShim/AtomShim_Renderer.h delete mode 100644 Gems/AtomLyIntegration/CryRenderAtomShim/AtomShim_Shaders.cpp delete mode 100644 Gems/AtomLyIntegration/CryRenderAtomShim/AtomShim_Shadows.cpp delete mode 100644 Gems/AtomLyIntegration/CryRenderAtomShim/AtomShim_System.cpp delete mode 100644 Gems/AtomLyIntegration/CryRenderAtomShim/AtomShim_Textures.cpp delete mode 100644 Gems/AtomLyIntegration/CryRenderAtomShim/AtomShim_TexturesStreaming.cpp delete mode 100644 Gems/AtomLyIntegration/CryRenderAtomShim/CMakeLists.txt delete mode 100644 Gems/AtomLyIntegration/CryRenderAtomShim/CryRenderAtomShim.rc delete mode 100644 Gems/AtomLyIntegration/CryRenderAtomShim/PCH/CryRenderOther_precompiled.h delete mode 100644 Gems/AtomLyIntegration/CryRenderAtomShim/Platform/Android/PAL_android.cmake delete mode 100644 Gems/AtomLyIntegration/CryRenderAtomShim/Platform/Android/platform_android.cmake delete mode 100644 Gems/AtomLyIntegration/CryRenderAtomShim/Platform/Android/platform_android_files.cmake delete mode 100644 Gems/AtomLyIntegration/CryRenderAtomShim/Platform/Common/Unimplemented/AtomShim_Renderer_Unimplemented.cpp delete mode 100644 Gems/AtomLyIntegration/CryRenderAtomShim/Platform/Linux/PAL_linux.cmake delete mode 100644 Gems/AtomLyIntegration/CryRenderAtomShim/Platform/Linux/platform_linux.cmake delete mode 100644 Gems/AtomLyIntegration/CryRenderAtomShim/Platform/Linux/platform_linux_files.cmake delete mode 100644 Gems/AtomLyIntegration/CryRenderAtomShim/Platform/Mac/AtomShim_Renderer_Mac.cpp delete mode 100644 Gems/AtomLyIntegration/CryRenderAtomShim/Platform/Mac/PAL_mac.cmake delete mode 100644 Gems/AtomLyIntegration/CryRenderAtomShim/Platform/Mac/platform_mac.cmake delete mode 100644 Gems/AtomLyIntegration/CryRenderAtomShim/Platform/Mac/platform_mac_files.cmake delete mode 100644 Gems/AtomLyIntegration/CryRenderAtomShim/Platform/Windows/AtomShim_Renderer_Windows.cpp delete mode 100644 Gems/AtomLyIntegration/CryRenderAtomShim/Platform/Windows/PAL_windows.cmake delete mode 100644 Gems/AtomLyIntegration/CryRenderAtomShim/Platform/Windows/platform_windows.cmake delete mode 100644 Gems/AtomLyIntegration/CryRenderAtomShim/Platform/Windows/platform_windows_files.cmake delete mode 100644 Gems/AtomLyIntegration/CryRenderAtomShim/Platform/iOS/AtomShim_Renderer_iOS.cpp delete mode 100644 Gems/AtomLyIntegration/CryRenderAtomShim/Platform/iOS/PAL_ios.cmake delete mode 100644 Gems/AtomLyIntegration/CryRenderAtomShim/Platform/iOS/platform_ios.cmake delete mode 100644 Gems/AtomLyIntegration/CryRenderAtomShim/Platform/iOS/platform_ios_files.cmake delete mode 100644 Gems/AtomLyIntegration/CryRenderAtomShim/atom_shim_renderer_files.cmake delete mode 100644 Gems/AtomLyIntegration/CryRenderAtomShim/resource.h diff --git a/Code/CryEngine/CrySystem/SystemInit.cpp b/Code/CryEngine/CrySystem/SystemInit.cpp index 8347e3f1f0..cecde6046e 100644 --- a/Code/CryEngine/CrySystem/SystemInit.cpp +++ b/Code/CryEngine/CrySystem/SystemInit.cpp @@ -247,7 +247,7 @@ CUNIXConsole* pUnixConsole; #define LOCALIZATION_TRANSLATIONS_LIST_FILE_NAME "Libs/Localization/localization.xml" -#define LOAD_LEGACY_RENDERER_FOR_EDITOR false // If you set this to false you must for now also set 'ed_useAtomNativeViewport' to true (see /Code/Sandbox/Editor/ViewManager.cpp) +#define LOAD_LEGACY_RENDERER_FOR_EDITOR true // If you set this to false you must for now also set 'ed_useAtomNativeViewport' to true (see /Code/Sandbox/Editor/ViewManager.cpp) #define LOAD_LEGACY_RENDERER_FOR_LAUNCHER false ////////////////////////////////////////////////////////////////////////// diff --git a/Code/CryEngine/RenderDll/Common/Textures/TextureManager.cpp b/Code/CryEngine/RenderDll/Common/Textures/TextureManager.cpp index e8c0c085a9..8af1faade7 100644 --- a/Code/CryEngine/RenderDll/Common/Textures/TextureManager.cpp +++ b/Code/CryEngine/RenderDll/Common/Textures/TextureManager.cpp @@ -131,80 +131,20 @@ void CTextureManager::LoadDefaultTextures() #endif }; - // Reduced list of default textures to load. - const TextureEntry texturesFromFileReduced[] = + for (const TextureEntry& entry : texturesFromFile) { - {"NoTextureCM", "EngineAssets/TextureMsg/ReplaceMeCM.tif", FT_DONT_RELEASE | FT_DONT_STREAM }, - {"White", "EngineAssets/Textures/White.tif", FT_DONT_RELEASE | FT_DONT_STREAM }, - {"Gray", "EngineAssets/Textures/Grey.dds", FT_DONT_RELEASE | FT_DONT_STREAM }, - {"Black", "EngineAssets/Textures/Black.tif", FT_DONT_RELEASE | FT_DONT_STREAM }, - {"BlackAlpha", "EngineAssets/Textures/BlackAlpha.tif", FT_DONT_RELEASE | FT_DONT_STREAM }, - {"BlackCM", "EngineAssets/Textures/BlackCM.tif", FT_DONT_RELEASE | FT_DONT_STREAM }, - {"FlatBump", "EngineAssets/Textures/White_ddn.tif", FT_DONT_RELEASE | FT_DONT_STREAM | FT_TEX_NORMAL_MAP }, - {"AverageMemoryUsage", "EngineAssets/Icons/AverageMemoryUsage.tif", FT_DONT_RELEASE | FT_DONT_STREAM }, - {"LowMemoryUsage", "EngineAssets/Icons/LowMemoryUsage.tif", FT_DONT_RELEASE | FT_DONT_STREAM }, - {"HighMemoryUsage", "EngineAssets/Icons/HighMemoryUsage.tif", FT_DONT_RELEASE | FT_DONT_STREAM }, - {"LivePreview", "EngineAssets/Icons/LivePreview.tif", FT_DONT_RELEASE | FT_DONT_STREAM }, -#if !defined(_RELEASE) - {"NoTexture", "EngineAssets/TextureMsg/ReplaceMe.tif", FT_DONT_RELEASE | FT_DONT_STREAM }, - {"IconTextureCompiling", "EngineAssets/TextureMsg/TextureCompiling.tif", FT_DONT_RELEASE | FT_DONT_STREAM }, - {"IconTextureCompiling_a", "EngineAssets/TextureMsg/TextureCompiling_a.tif", FT_DONT_RELEASE | FT_DONT_STREAM }, - {"IconTextureCompiling_cm", "EngineAssets/TextureMsg/TextureCompiling_cm.tif", FT_DONT_RELEASE | FT_DONT_STREAM }, - {"IconTextureCompiling_ddn", "EngineAssets/TextureMsg/TextureCompiling_ddn.tif", FT_DONT_RELEASE | FT_DONT_STREAM }, - {"IconTextureCompiling_ddna", "EngineAssets/TextureMsg/TextureCompiling_ddna.tif", FT_DONT_RELEASE | FT_DONT_STREAM }, - {"DefaultMergedDetail", "EngineAssets/Textures/GreyAlpha.tif", FT_DONT_RELEASE | FT_DONT_STREAM }, - {"MipMapDebug", "EngineAssets/TextureMsg/MipMapDebug.tif", FT_DONT_RELEASE | FT_DONT_STREAM }, - {"ColorBlue", "EngineAssets/TextureMsg/color_Blue.tif", FT_DONT_RELEASE | FT_DONT_STREAM }, - {"ColorCyan", "EngineAssets/TextureMsg/color_Cyan.tif", FT_DONT_RELEASE | FT_DONT_STREAM }, - {"ColorGreen", "EngineAssets/TextureMsg/color_Green.tif", FT_DONT_RELEASE | FT_DONT_STREAM }, - {"ColorPurple", "EngineAssets/TextureMsg/color_Purple.tif", FT_DONT_RELEASE | FT_DONT_STREAM }, - {"ColorRed", "EngineAssets/TextureMsg/color_Red.tif", FT_DONT_RELEASE | FT_DONT_STREAM }, - {"ColorWhite", "EngineAssets/TextureMsg/color_White.tif", FT_DONT_RELEASE | FT_DONT_STREAM }, - {"ColorYellow", "EngineAssets/TextureMsg/color_Yellow.tif", FT_DONT_RELEASE | FT_DONT_STREAM }, - {"ColorOrange", "EngineAssets/TextureMsg/color_Orange.tif", FT_DONT_RELEASE | FT_DONT_STREAM }, - {"ColorMagenta", "EngineAssets/TextureMsg/color_Magenta.tif", FT_DONT_RELEASE | FT_DONT_STREAM }, -#else - {"NoTexture", "EngineAssets/TextureMsg/ReplaceMeRelease.tif", FT_DONT_RELEASE | FT_DONT_STREAM }, -#endif - }; - - // Loop over the appropriate texture list and load the textures, storing them in a map keyed by texture name. - // Use reduced subset of textures for Other. - //if (AZ::Interface::Get()) - //{ - // for (const TextureEntry& entry : texturesFromFileReduced) - // { - // // Use EF_LoadTexture rather than CTexture::ForName - // CTexture* pNewTexture = static_cast(gEnv->pRenderer->EF_LoadTexture(entry.szFileName, entry.flags)); - // if (pNewTexture) - // { - // CCryNameTSCRC texEntry(entry.szTextureName); - // m_DefaultTextures[texEntry] = pNewTexture; - // } - // else - // { - // AZ_Assert(false, "Error - CTextureManager failed to load default texture %s", entry.szFileName); - // AZ_Warning("[Shaders System]", false, "Error - CTextureManager failed to load default texture %s", entry.szFileName); - // } - // } - //} - //else - //{ - for (const TextureEntry& entry : texturesFromFile) + CTexture* pNewTexture = CTexture::ForName(entry.szFileName, entry.flags, eTF_Unknown); + if (pNewTexture) { - CTexture* pNewTexture = CTexture::ForName(entry.szFileName, entry.flags, eTF_Unknown); - if (pNewTexture) - { - CCryNameTSCRC texEntry(entry.szTextureName); - m_DefaultTextures[texEntry] = pNewTexture; - } - else - { - AZ_Assert(false, "Error - CTextureManager failed to load default texture %s", entry.szFileName); - AZ_Warning("[Shaders System]", false, "Error - CTextureManager failed to load default texture %s", entry.szFileName); - } + CCryNameTSCRC texEntry(entry.szTextureName); + m_DefaultTextures[texEntry] = pNewTexture; } - //} + else + { + AZ_Assert(false, "Error - CTextureManager failed to load default texture %s", entry.szFileName); + AZ_Warning("[Shaders System]", false, "Error - CTextureManager failed to load default texture %s", entry.szFileName); + } + } m_texNoTexture = GetDefaultTexture("NoTexture"); m_texNoTextureCM = GetDefaultTexture("NoTextureCM"); diff --git a/Code/Sandbox/Editor/EditorViewportWidget.cpp b/Code/Sandbox/Editor/EditorViewportWidget.cpp index f7365e74e0..6ece24acd2 100644 --- a/Code/Sandbox/Editor/EditorViewportWidget.cpp +++ b/Code/Sandbox/Editor/EditorViewportWidget.cpp @@ -875,11 +875,7 @@ void EditorViewportWidget::OnBeginPrepareRender() fov = 2 * atanf((h * tan(fov / 2)) / maxTargetHeight); } } -#if 1 // ATOMSHIM FIXUP - m_Camera.SetFrustum(w, h, fov, fNearZ, 8000.0f); -#else m_Camera.SetFrustum(w, h, fov, fNearZ, gEnv->p3DEngine->GetMaxViewDistance()); -#endif } GetIEditor()->GetSystem()->SetViewCamera(m_Camera); diff --git a/Code/Sandbox/Editor/EditorViewportWidget.cpp.orig b/Code/Sandbox/Editor/EditorViewportWidget.cpp.orig new file mode 100644 index 0000000000..d3455fd003 --- /dev/null +++ b/Code/Sandbox/Editor/EditorViewportWidget.cpp.orig @@ -0,0 +1,2880 @@ +/* +* 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 filefov + + +#include "EditorDefs.h" + +#include "EditorViewportWidget.h" + +// Qt +#include +#include +#include +#include +#include +#include + +// AzCore +#include +#include +#include +#include + +// AzFramework +#include +#include +#include +#if defined(AZ_PLATFORM_WINDOWS) +# include +#endif // defined(AZ_PLATFORM_WINDOWS) +#include // for AzFramework::InputDeviceMouse +#include +#include + +// AzQtComponents +#include + +// AzToolsFramework +#include +#include +#include + +// AtomToolsFramework +#include + +// CryCommon +#include +#include + +// AzFramework +#include + +// Editor +#include "Util/fastlib.h" +#include "CryEditDoc.h" +#include "GameEngine.h" +#include "EditTool.h" +#include "ViewManager.h" +#include "Objects/DisplayContext.h" +#include "DisplaySettings.h" +#include "Include/IObjectManager.h" +#include "Include/IDisplayViewport.h" +#include "Objects/ObjectManager.h" +#include "ProcessInfo.h" +#include "IPostEffectGroup.h" +#include "EditorPreferencesPageGeneral.h" +#include "ViewportManipulatorController.h" +#include "LegacyViewportCameraController.h" +#include "ModernViewportCameraController.h" + +#include "ViewPane.h" +#include "CustomResolutionDlg.h" +#include "AnimationContext.h" +#include "Objects/SelectionGroup.h" +#include "Core/QtEditorApplication.h" + +// ComponentEntityEditorPlugin +#include + +// LmbrCentral +#include + +// Atom +#include +#include +#include +#include + +#include + +AZ_CVAR( + bool, ed_visibility_logTiming, false, nullptr, AZ::ConsoleFunctorFlags::Null, + "Output the timing of the new IVisibilitySystem query"); + +EditorViewportWidget* EditorViewportWidget::m_pPrimaryViewport = nullptr; + +#if AZ_TRAIT_OS_PLATFORM_APPLE +void StopFixedCursorMode(); +void StartFixedCursorMode(QObject *viewport); +#endif + +#define RENDER_MESH_TEST_DISTANCE (0.2f) +#define CURSOR_FONT_HEIGHT 8.0f + +AZ_CVAR( + bool, ed_useNewCameraSystem, false, nullptr, AZ::ConsoleFunctorFlags::Null, + "Use the new Editor camera system (the Atom-native Editor viewport (experimental) must also be enabled)"); + +namespace AZ::ViewportHelpers +{ + static const char TextCantCreateCameraNoLevel[] = "Cannot create camera when no level is loaded."; + + class EditorEntityNotifications + : public AzToolsFramework::EditorEntityContextNotificationBus::Handler + { + public: + EditorEntityNotifications(EditorViewportWidget& renderViewport) + : m_renderViewport(renderViewport) + { + AzToolsFramework::EditorEntityContextNotificationBus::Handler::BusConnect(); + } + + ~EditorEntityNotifications() override + { + AzToolsFramework::EditorEntityContextNotificationBus::Handler::BusDisconnect(); + } + + // AzToolsFramework::EditorEntityContextNotificationBus + void OnStartPlayInEditor() override + { + m_renderViewport.OnStartPlayInEditor(); + } + void OnStopPlayInEditor() override + { + m_renderViewport.OnStopPlayInEditor(); + } + private: + EditorViewportWidget& m_renderViewport; + }; +} // namespace AZ::ViewportHelpers + +////////////////////////////////////////////////////////////////////////// +// EditorViewportWidget +////////////////////////////////////////////////////////////////////////// + +EditorViewportWidget::EditorViewportWidget(const QString& name, QWidget* parent) + : QtViewport(parent) + , m_Camera(GetIEditor()->GetSystem()->GetViewCamera()) + , m_camFOV(gSettings.viewports.fDefaultFov) + , m_defaultViewName(name) + , m_renderViewport(nullptr) //m_renderViewport is initialized later, in SetViewportId +{ + // need this to be set in order to allow for language switching on Windows + setAttribute(Qt::WA_InputMethodEnabled); + LockCameraMovement(true); + + EditorViewportWidget::SetViewTM(m_Camera.GetMatrix()); + m_defaultViewTM.SetIdentity(); + + if (GetIEditor()->GetViewManager()->GetSelectedViewport() == nullptr) + { + GetIEditor()->GetViewManager()->SelectViewport(this); + } + + GetIEditor()->RegisterNotifyListener(this); + + m_displayContext.pIconManager = GetIEditor()->GetIconManager(); + GetIEditor()->GetUndoManager()->AddListener(this); + + m_PhysicalLocation.SetIdentity(); + + // The renderer requires something, so don't allow us to shrink to absolutely nothing + // This won't in fact stop the viewport from being shrunk, when it's the centralWidget for + // the MainWindow, but it will stop the viewport from getting resize events + // once it's smaller than that, which from the renderer's perspective works out + // to be the same thing. + setMinimumSize(50, 50); + + OnCreate(); + + setMouseTracking(true); + + Camera::EditorCameraRequestBus::Handler::BusConnect(); + m_editorEntityNotifications = AZStd::make_unique(*this); + AzFramework::AssetCatalogEventBus::Handler::BusConnect(); + + auto handleCameraChange = [this](const AZ::Matrix4x4&) + { + UpdateCameraFromViewportContext(); + }; + + m_cameraViewMatrixChangeHandler = AZ::RPI::ViewportContext::MatrixChangedEvent::Handler(handleCameraChange); + m_cameraProjectionMatrixChangeHandler = AZ::RPI::ViewportContext::MatrixChangedEvent::Handler(handleCameraChange); + + m_manipulatorManager = GetIEditor()->GetViewManager()->GetManipulatorManager(); + if (!m_pPrimaryViewport) + { + SetAsActiveViewport(); + } +} + +////////////////////////////////////////////////////////////////////////// +EditorViewportWidget::~EditorViewportWidget() +{ + if (m_pPrimaryViewport == this) + { + m_pPrimaryViewport = nullptr; + } + + DisconnectViewportInteractionRequestBus(); + m_editorEntityNotifications.reset(); + Camera::EditorCameraRequestBus::Handler::BusDisconnect(); + OnDestroy(); + GetIEditor()->GetUndoManager()->RemoveListener(this); + GetIEditor()->UnregisterNotifyListener(this); +} + +////////////////////////////////////////////////////////////////////////// +// EditorViewportWidget message handlers +////////////////////////////////////////////////////////////////////////// +int EditorViewportWidget::OnCreate() +{ + m_renderer = GetIEditor()->GetRenderer(); + m_engine = GetIEditor()->Get3DEngine(); + assert(m_engine); + + CreateRenderContext(); + + return 0; +} + +////////////////////////////////////////////////////////////////////////// +void EditorViewportWidget::resizeEvent(QResizeEvent* event) +{ + PushDisableRendering(); + QtViewport::resizeEvent(event); + PopDisableRendering(); + + const QRect rcWindow = rect().translated(mapToGlobal(QPoint())); + + gEnv->pSystem->GetISystemEventDispatcher()->OnSystemEvent(ESYSTEM_EVENT_MOVE, rcWindow.left(), rcWindow.top()); + + m_rcClient = rect(); + m_rcClient.setBottomRight(WidgetToViewport(m_rcClient.bottomRight())); + + gEnv->pSystem->GetISystemEventDispatcher()->OnSystemEvent(ESYSTEM_EVENT_RESIZE, width(), height()); + + if (gEnv->pRenderer) + { + gEnv->pRenderer->EF_DisableTemporalEffects(); + } + + // We queue the window resize event because the render overlay may be hidden. + // If the render overlay is not visible, the native window that is backing it will + // also be hidden, and it will not resize until it becomes visible. + m_windowResizedEvent = true; +} + +////////////////////////////////////////////////////////////////////////// +void EditorViewportWidget::paintEvent([[maybe_unused]] QPaintEvent* event) +{ + // Do not call CViewport::OnPaint() for painting messages + // FIXME: paintEvent() isn't the best place for such logic. Should listen to proper eNotify events and to the stuff there instead. (Repeats for other view port classes too). + CGameEngine* ge = GetIEditor()->GetGameEngine(); + if ((ge && ge->IsLevelLoaded()) || (GetType() != ET_ViewportCamera)) + { + setRenderOverlayVisible(true); + } + else + { + setRenderOverlayVisible(false); + QPainter painter(this); // device context for painting + + // draw gradient background + const QRect rc = rect(); + QLinearGradient gradient(rc.topLeft(), rc.bottomLeft()); + gradient.setColorAt(0, QColor(80, 80, 80)); + gradient.setColorAt(1, QColor(200, 200, 200)); + painter.fillRect(rc, gradient); + + // if we have some level loaded/loading/new + // we draw a text + if (!GetIEditor()->GetLevelFolder().isEmpty()) + { + const int kFontSize = 200; + const char* kFontName = "Arial"; + const QColor kTextColor(255, 255, 255); + const QColor kTextShadowColor(0, 0, 0); + const QFont font(kFontName, kFontSize / 10.0); + painter.setFont(font); + + QString friendlyName = QFileInfo(GetIEditor()->GetLevelName()).fileName(); + const QString strMsg = tr("Preparing level %1...").arg(friendlyName); + + // draw text shadow + painter.setPen(kTextShadowColor); + painter.drawText(rc, Qt::AlignCenter, strMsg); + painter.setPen(kTextColor); + // offset rect for normal text + painter.drawText(rc.translated(-1, -1), Qt::AlignCenter, strMsg); + } + } +} + +////////////////////////////////////////////////////////////////////////// +void EditorViewportWidget::mousePressEvent(QMouseEvent* event) +{ + GetIEditor()->GetViewManager()->SelectViewport(this); + + QtViewport::mousePressEvent(event); +} + +AzToolsFramework::ViewportInteraction::MousePick EditorViewportWidget::BuildMousePickInternal(const QPoint& point) const +{ + using namespace AzToolsFramework::ViewportInteraction; + + MousePick mousePick; + mousePick.m_screenCoordinates = AzFramework::ScreenPoint(point.x(), point.y()); + const auto& ray = m_renderViewport->ViewportScreenToWorldRay(point); + if (ray.has_value()) + { + mousePick.m_rayOrigin = ray.value().origin; + mousePick.m_rayDirection = ray.value().direction; + } + return mousePick; +} + +AzToolsFramework::ViewportInteraction::MousePick EditorViewportWidget::BuildMousePick(const QPoint& point) +{ + using namespace AzToolsFramework::ViewportInteraction; + + PreWidgetRendering(); + const MousePick mousePick = BuildMousePickInternal(point); + PostWidgetRendering(); + return mousePick; +} + +AzToolsFramework::ViewportInteraction::MouseInteraction EditorViewportWidget::BuildMouseInteractionInternal( + const AzToolsFramework::ViewportInteraction::MouseButtons buttons, + const AzToolsFramework::ViewportInteraction::KeyboardModifiers modifiers, + const AzToolsFramework::ViewportInteraction::MousePick& mousePick) const +{ + using namespace AzToolsFramework::ViewportInteraction; + + MouseInteraction mouse; + mouse.m_interactionId.m_cameraId = m_viewEntityId; + mouse.m_interactionId.m_viewportId = GetViewportId(); + mouse.m_mouseButtons = buttons; + mouse.m_mousePick = mousePick; + mouse.m_keyboardModifiers = modifiers; + return mouse; +} + +AzToolsFramework::ViewportInteraction::MouseInteraction EditorViewportWidget::BuildMouseInteraction( + const Qt::MouseButtons buttons, const Qt::KeyboardModifiers modifiers, const QPoint& point) +{ + using namespace AzToolsFramework::ViewportInteraction; + + return BuildMouseInteractionInternal( + BuildMouseButtons(buttons), + BuildKeyboardModifiers(modifiers), + BuildMousePick(WidgetToViewport(point))); +} + +void EditorViewportWidget::InjectFakeMouseMove(int deltaX, int deltaY, Qt::MouseButtons buttons) +{ + // this is required, otherwise the user will see the context menu + OnMouseMove(Qt::NoModifier, buttons, QCursor::pos() + QPoint(deltaX, deltaY)); + // we simply move the prev mouse position, so the change will be picked up + // by the next ProcessMouse call + m_prevMousePos -= QPoint(deltaX, deltaY); +} + +////////////////////////////////////////////////////////////////////////// +bool EditorViewportWidget::event(QEvent* event) +{ + switch (event->type()) + { + case QEvent::WindowActivate: + GetIEditor()->GetViewManager()->SelectViewport(this); + // also kill the keys; if we alt-tab back to the viewport, or come back from the debugger, it's done (and there's no guarantee we'll get the keyrelease event anyways) + m_keyDown.clear(); + break; + + case QEvent::Shortcut: + // a shortcut should immediately clear us, otherwise the release event never gets sent + m_keyDown.clear(); + break; + } + + return QtViewport::event(event); +} + +////////////////////////////////////////////////////////////////////////// +void EditorViewportWidget::ResetContent() +{ + QtViewport::ResetContent(); +} + +////////////////////////////////////////////////////////////////////////// +void EditorViewportWidget::UpdateContent(int flags) +{ + QtViewport::UpdateContent(flags); + if (flags & eUpdateObjects) + { + m_bUpdateViewport = true; + } +} + +////////////////////////////////////////////////////////////////////////// +void EditorViewportWidget::Update() +{ + FUNCTION_PROFILER(GetIEditor()->GetSystem(), PROFILE_EDITOR); + + if (Editor::EditorQtApplication::instance()->isMovingOrResizing()) + { + return; + } + + if (!m_engine || m_rcClient.isEmpty() || GetIEditor()->IsInMatEditMode()) + { + return; + } + + if (!isVisible()) + { + return; + } + + m_updatingCameraPosition = true; + auto transform = LYTransformToAZTransform(m_Camera.GetMatrix()); + m_renderViewport->GetViewportContext()->SetCameraTransform(transform); + AZ::Matrix4x4 clipMatrix; + AZ::MakePerspectiveFovMatrixRH( + clipMatrix, + m_Camera.GetFov(), + aznumeric_cast(width()) / aznumeric_cast(height()), + m_Camera.GetNearPlane(), + m_Camera.GetFarPlane(), + true + ); + m_renderViewport->GetViewportContext()->SetCameraProjectionMatrix(clipMatrix); + m_updatingCameraPosition = false; + + + // Don't wait for changes to update the focused viewport. + if (CheckRespondToInput()) + { + m_bUpdateViewport = true; + } + + // While Renderer doesn't support fast rendering of the scene to more then 1 viewport + // render only focused viewport if more then 1 are opened and always update is off. + if (!m_isOnPaint && m_viewManager->GetNumberOfGameViewports() > 1 && GetType() == ET_ViewportCamera) + { + if (m_pPrimaryViewport != this) + { + if (CheckRespondToInput()) // If this is the focused window, set primary viewport. + { + SetAsActiveViewport(); + } + else if (!m_bUpdateViewport) // Skip this viewport. + { + return; + } + } + } + + const bool isGameMode = GetIEditor()->IsInGameMode(); + const bool isSimulationMode = GetIEditor()->GetGameEngine()->GetSimulationMode(); + + // Allow debug visualization in both 'game' (Ctrl-G) and 'simulation' (Ctrl-P) modes + if (isGameMode || isSimulationMode) + { + if (!IsRenderingDisabled()) + { + // Disable rendering to avoid recursion into Update() + PushDisableRendering(); + + // draw debug visualizations + if (m_debugDisplay) + { + const AZ::u32 prevState = m_debugDisplay->GetState(); + m_debugDisplay->SetState( + e_Mode3D | e_AlphaBlended | e_FillModeSolid | e_CullModeBack | e_DepthWriteOn | e_DepthTestOn); + + AzFramework::EntityDebugDisplayEventBus::Broadcast( + &AzFramework::EntityDebugDisplayEvents::DisplayEntityViewport, + AzFramework::ViewportInfo{ GetViewportId() }, *m_debugDisplay); + + m_debugDisplay->SetState(prevState); + } + + QtViewport::Update(); + PopDisableRendering(); + } + + // Game mode rendering is handled by CryAction + if (isGameMode) + { + return; + } + } + + // Prevents rendering recursion due to recursive Paint messages. + if (IsRenderingDisabled()) + { + return; + } + + PushDisableRendering(); + + m_viewTM = m_Camera.GetMatrix(); // synchronize. + + // Render + { + // TODO: Move out this logic to a controller and refactor to work with Atom + // m_renderer->SetClearColor(Vec3(0.4f, 0.4f, 0.4f)); + // 3D engine stats + GetIEditor()->GetSystem()->RenderBegin(); + + OnRender(); + + ProcessRenderLisneters(m_displayContext); + + m_displayContext.Flush2D(); + + // m_renderer->SwitchToNativeResolutionBackbuffer(); + + // 3D engine stats + + CCamera CurCamera = gEnv->pSystem->GetViewCamera(); + gEnv->pSystem->SetViewCamera(m_Camera); + + // Post Render Callback + { + PostRenderers::iterator itr = m_postRenderers.begin(); + PostRenderers::iterator end = m_postRenderers.end(); + for (; itr != end; ++itr) + { + (*itr)->OnPostRender(); + } + } + + GetIEditor()->GetSystem()->RenderEnd(m_bRenderStats); + + gEnv->pSystem->SetViewCamera(CurCamera); + } + + { + auto start = std::chrono::steady_clock::now(); + + m_entityVisibilityQuery.UpdateVisibility(GetCameraState()); + + if (ed_visibility_logTiming) + { + auto stop = std::chrono::steady_clock::now(); + std::chrono::duration diff = stop - start; + AZ_Printf("Visibility", "FindVisibleEntities (new) - Duration: %f", diff); + } + } + + QtViewport::Update(); + + PopDisableRendering(); + m_bUpdateViewport = false; +} + +////////////////////////////////////////////////////////////////////////// +void EditorViewportWidget::SetViewEntity(const AZ::EntityId& viewEntityId, bool lockCameraMovement) +{ + // if they've picked the same camera, then that means they want to toggle + if (viewEntityId.IsValid() && viewEntityId != m_viewEntityId) + { + LockCameraMovement(lockCameraMovement); + m_viewEntityId = viewEntityId; + AZStd::string entityName; + AZ::ComponentApplicationBus::BroadcastResult(entityName, &AZ::ComponentApplicationRequests::GetEntityName, viewEntityId); + SetName(QString("Camera entity: %1").arg(entityName.c_str())); + } + else + { + SetDefaultCamera(); + } + + PostCameraSet(); +} + +////////////////////////////////////////////////////////////////////////// +void EditorViewportWidget::ResetToViewSourceType(const ViewSourceType& viewSourceType) +{ + LockCameraMovement(true); + m_pCameraFOVVariable = nullptr; + m_viewEntityId.SetInvalid(); + m_cameraObjectId = GUID_NULL; + m_viewSourceType = viewSourceType; + SetViewTM(GetViewTM()); +} + +////////////////////////////////////////////////////////////////////////// +void EditorViewportWidget::PostCameraSet() +{ + if (m_viewPane) + { + m_viewPane->OnFOVChanged(GetFOV()); + } + + GetIEditor()->Notify(eNotify_CameraChanged); + QScopedValueRollback rb(m_ignoreSetViewFromEntityPerspective, true); + Camera::EditorCameraNotificationBus::Broadcast( + &Camera::EditorCameraNotificationBus::Events::OnViewportViewEntityChanged, m_viewEntityId); +} + +////////////////////////////////////////////////////////////////////////// +CBaseObject* EditorViewportWidget::GetCameraObject() const +{ + CBaseObject* pCameraObject = nullptr; + + if (m_viewSourceType == ViewSourceType::SequenceCamera) + { + m_cameraObjectId = GetViewManager()->GetCameraObjectId(); + } + if (m_cameraObjectId != GUID_NULL) + { + // Find camera object from id. + pCameraObject = GetIEditor()->GetObjectManager()->FindObject(m_cameraObjectId); + } + else if (m_viewSourceType == ViewSourceType::CameraComponent || m_viewSourceType == ViewSourceType::AZ_Entity) + { + AzToolsFramework::ComponentEntityEditorRequestBus::EventResult( + pCameraObject, m_viewEntityId, &AzToolsFramework::ComponentEntityEditorRequests::GetSandboxObject); + } + return pCameraObject; +} + +////////////////////////////////////////////////////////////////////////// +void EditorViewportWidget::OnEditorNotifyEvent(EEditorNotifyEvent event) +{ + static ICVar* outputToHMD = gEnv->pConsole->GetCVar("output_to_hmd"); + AZ_Assert(outputToHMD, "cvar output_to_hmd is undeclared"); + + switch (event) + { + case eNotify_OnBeginGameMode: + { + if (GetIEditor()->GetViewManager()->GetGameViewport() == this) + { + m_preGameModeViewTM = GetViewTM(); + // this should only occur for the main viewport and no others. + ShowCursor(); + + // If the user has selected game mode, enable outputting to any attached HMD and properly size the context + // to the resolution specified by the VR device. + if (gSettings.bEnableGameModeVR) + { + const AZ::VR::HMDDeviceInfo* deviceInfo = nullptr; + EBUS_EVENT_RESULT(deviceInfo, AZ::VR::HMDDeviceRequestBus, GetDeviceInfo); + AZ_Warning("Render Viewport", deviceInfo, "No VR device detected"); + + if (deviceInfo) + { + // Note: This may also need to adjust the viewport size + outputToHMD->Set(1); + SetActiveWindow(); + SetFocus(); + SetSelected(true); + } + } + SetCurrentCursor(STD_CURSOR_GAME); + } + } + break; + + case eNotify_OnEndGameMode: + if (GetIEditor()->GetViewManager()->GetGameViewport() == this) + { + SetCurrentCursor(STD_CURSOR_DEFAULT); + if (gSettings.bEnableGameModeVR) + { + outputToHMD->Set(0); + } + m_bInRotateMode = false; + m_bInMoveMode = false; + m_bInOrbitMode = false; + m_bInZoomMode = false; + + RestoreViewportAfterGameMode(); + } + break; + + case eNotify_OnCloseScene: + m_renderViewport->SetScene(nullptr); + SetDefaultCamera(); + break; + + case eNotify_OnEndSceneOpen: + UpdateScene(); + break; + + case eNotify_OnBeginNewScene: + PushDisableRendering(); + break; + + case eNotify_OnEndNewScene: + PopDisableRendering(); + + { + AZ::Aabb terrainAabb = AZ::Aabb::CreateFromPoint(AZ::Vector3::CreateZero()); + AzFramework::Terrain::TerrainDataRequestBus::BroadcastResult(terrainAabb, &AzFramework::Terrain::TerrainDataRequests::GetTerrainAabb); + float sx = terrainAabb.GetXExtent(); + float sy = terrainAabb.GetYExtent(); + + Matrix34 viewTM; + viewTM.SetIdentity(); + // Initial camera will be at middle of the map at the height of 2 + // meters above the terrain (default terrain height is 32) + viewTM.SetTranslation(Vec3(sx * 0.5f, sy * 0.5f, 34.0f)); + SetViewTM(viewTM); + } + break; + + case eNotify_OnBeginTerrainCreate: + PushDisableRendering(); + break; + + case eNotify_OnEndTerrainCreate: + PopDisableRendering(); + + { + AZ::Aabb terrainAabb = AZ::Aabb::CreateFromPoint(AZ::Vector3::CreateZero()); + AzFramework::Terrain::TerrainDataRequestBus::BroadcastResult(terrainAabb, &AzFramework::Terrain::TerrainDataRequests::GetTerrainAabb); + float sx = terrainAabb.GetXExtent(); + float sy = terrainAabb.GetYExtent(); + + Matrix34 viewTM; + viewTM.SetIdentity(); + // Initial camera will be at middle of the map at the height of 2 + // meters above the terrain (default terrain height is 32) + viewTM.SetTranslation(Vec3(sx * 0.5f, sy * 0.5f, 34.0f)); + SetViewTM(viewTM); + } + break; + + case eNotify_OnBeginLayerExport: + case eNotify_OnBeginSceneSave: + PushDisableRendering(); + break; + case eNotify_OnEndLayerExport: + case eNotify_OnEndSceneSave: + PopDisableRendering(); + break; + + case eNotify_OnBeginLoad: // disables viewport input when starting to load an existing level + case eNotify_OnBeginCreate: // disables viewport input when starting to create a new level + m_freezeViewportInput = true; + break; + + case eNotify_OnEndLoad: // enables viewport input when finished loading an existing level + case eNotify_OnEndCreate: // enables viewport input when finished creating a new level + m_freezeViewportInput = false; + break; + } +} + +////////////////////////////////////////////////////////////////////////// +void EditorViewportWidget::OnRender() +{ + if (m_rcClient.isEmpty()) + { + // Even in null rendering, update the view camera. + // This is necessary so that automated editor tests using the null renderer to test systems like dynamic vegetation + // are still able to manipulate the current logical camera position, even if nothing is rendered. + GetIEditor()->GetSystem()->SetViewCamera(m_Camera); + GetIEditor()->GetRenderer()->SetCamera(gEnv->pSystem->GetViewCamera()); + m_engine->RenderWorld(0, SRenderingPassInfo::CreateGeneralPassRenderingInfo(m_Camera), __FUNCTION__); + return; + } + + FUNCTION_PROFILER(GetIEditor()->GetSystem(), PROFILE_EDITOR); +} + +void EditorViewportWidget::OnBeginPrepareRender() +{ + if (!m_debugDisplay) + { + AzFramework::DebugDisplayRequestBus::BusPtr debugDisplayBus; + AzFramework::DebugDisplayRequestBus::Bind(debugDisplayBus, GetViewportId()); + AZ_Assert(debugDisplayBus, "Invalid DebugDisplayRequestBus."); + + m_debugDisplay = AzFramework::DebugDisplayRequestBus::FindFirstHandler(debugDisplayBus); + } + + if (!m_debugDisplay) + { + return; + } + + m_isOnPaint = true; + Update(); + m_isOnPaint = false; + + float fNearZ = GetIEditor()->GetConsoleVar("cl_DefaultNearPlane"); + float fFarZ = m_Camera.GetFarPlane(); + + CBaseObject* cameraObject = GetCameraObject(); + if (cameraObject) + { + AZ::Matrix3x3 lookThroughEntityCorrection = AZ::Matrix3x3::CreateIdentity(); + if (m_viewEntityId.IsValid()) + { + Camera::CameraRequestBus::EventResult(fNearZ, m_viewEntityId, &Camera::CameraComponentRequests::GetNearClipDistance); + Camera::CameraRequestBus::EventResult(fFarZ, m_viewEntityId, &Camera::CameraComponentRequests::GetFarClipDistance); + LmbrCentral::EditorCameraCorrectionRequestBus::EventResult( + lookThroughEntityCorrection, m_viewEntityId, &LmbrCentral::EditorCameraCorrectionRequests::GetTransformCorrection); + } + + m_viewTM = cameraObject->GetWorldTM() * AZMatrix3x3ToLYMatrix3x3(lookThroughEntityCorrection); + m_viewTM.OrthonormalizeFast(); + + m_Camera.SetMatrix(m_viewTM); + + int w = m_rcClient.width(); + int h = m_rcClient.height(); + + m_Camera.SetFrustum(w, h, GetFOV(), fNearZ, fFarZ); + } + else if (m_viewEntityId.IsValid()) + { + Camera::CameraRequestBus::EventResult(fNearZ, m_viewEntityId, &Camera::CameraComponentRequests::GetNearClipDistance); + Camera::CameraRequestBus::EventResult(fFarZ, m_viewEntityId, &Camera::CameraComponentRequests::GetFarClipDistance); + int w = m_rcClient.width(); + int h = m_rcClient.height(); + + m_Camera.SetFrustum(w, h, GetFOV(), fNearZ, fFarZ); + } + else + { + // Normal camera. + m_cameraObjectId = GUID_NULL; + int w = m_rcClient.width(); + int h = m_rcClient.height(); + + float fov = gSettings.viewports.fDefaultFov; + + // match viewport fov to default / selected title menu fov + if (GetFOV() != fov) + { + if (m_viewPane) + { + m_viewPane->OnFOVChanged(fov); + SetFOV(fov); + } + } + + // Just for editor: Aspect ratio fix when changing the viewport + if (!GetIEditor()->IsInGameMode()) + { + float viewportAspectRatio = float( w ) / h; + float targetAspectRatio = GetAspectRatio(); + if (targetAspectRatio > viewportAspectRatio) + { + // Correct for vertical FOV change. + float maxTargetHeight = float( w ) / targetAspectRatio; + fov = 2 * atanf((h * tan(fov / 2)) / maxTargetHeight); + } + } +#if 1 // ATOMSHIM FIXUP + m_Camera.SetFrustum(w, h, fov, fNearZ, 8000.0f); +#else + m_Camera.SetFrustum(w, h, fov, fNearZ, gEnv->p3DEngine->GetMaxViewDistance()); +#endif + } + + GetIEditor()->GetSystem()->SetViewCamera(m_Camera); + + if (GetIEditor()->IsInGameMode()) + { + return; + } + + PreWidgetRendering(); + + RenderAll(); + + // Draw 2D helpers. + TransformationMatrices backupSceneMatrices; + m_debugDisplay->DepthTestOff(); + //m_renderer->Set2DMode(m_rcClient.right(), m_rcClient.bottom(), backupSceneMatrices); + auto prevState = m_debugDisplay->GetState(); + m_debugDisplay->SetState(e_Mode3D | e_AlphaBlended | e_FillModeSolid | e_CullModeBack | e_DepthWriteOn | e_DepthTestOn); + + if (gSettings.viewports.bShowSafeFrame) + { + UpdateSafeFrame(); + RenderSafeFrame(); + } + + AzFramework::ViewportDebugDisplayEventBus::Event( + AzToolsFramework::GetEntityContextId(), &AzFramework::ViewportDebugDisplayEvents::DisplayViewport2d, + AzFramework::ViewportInfo{GetViewportId()}, *m_debugDisplay); + + m_debugDisplay->SetState(prevState); + m_debugDisplay->DepthTestOn(); + + PostWidgetRendering(); +<<<<<<< HEAD + +#if 0 // ATOMSHIM FIXUP + if (!m_renderer->IsStereoEnabled()) +#endif + { + GetIEditor()->GetSystem()->RenderStatistics(); + } +======= +>>>>>>> upstream/main +} + +////////////////////////////////////////////////////////////////////////// +void EditorViewportWidget::RenderAll() +{ + if (!m_debugDisplay) + { + return; + } + + // allow the override of in-editor visualization + AzFramework::ViewportDebugDisplayEventBus::Event( + AzToolsFramework::GetEntityContextId(), &AzFramework::ViewportDebugDisplayEvents::DisplayViewport, + AzFramework::ViewportInfo{ GetViewportId() }, *m_debugDisplay); + + m_entityVisibilityQuery.DisplayVisibility(*m_debugDisplay); + + if (m_manipulatorManager != nullptr) + { + using namespace AzToolsFramework::ViewportInteraction; + + m_debugDisplay->DepthTestOff(); + m_manipulatorManager->DrawManipulators( + *m_debugDisplay, GetCameraState(), + BuildMouseInteractionInternal( + MouseButtons(TranslateMouseButtons(QGuiApplication::mouseButtons())), + BuildKeyboardModifiers(QGuiApplication::queryKeyboardModifiers()), + BuildMousePickInternal(WidgetToViewport(mapFromGlobal(QCursor::pos()))))); + m_debugDisplay->DepthTestOn(); + } +} + +////////////////////////////////////////////////////////////////////////// + +////////////////////////////////////////////////////////////////////////// +void EditorViewportWidget::UpdateSafeFrame() +{ + m_safeFrame = m_rcClient; + + if (m_safeFrame.height() == 0) + { + return; + } + + const bool allowSafeFrameBiggerThanViewport = false; + + float safeFrameAspectRatio = float( m_safeFrame.width()) / m_safeFrame.height(); + float targetAspectRatio = GetAspectRatio(); + bool viewportIsWiderThanSafeFrame = (targetAspectRatio <= safeFrameAspectRatio); + if (viewportIsWiderThanSafeFrame || allowSafeFrameBiggerThanViewport) + { + float maxSafeFrameWidth = m_safeFrame.height() * targetAspectRatio; + float widthDifference = m_safeFrame.width() - maxSafeFrameWidth; + + m_safeFrame.setLeft(m_safeFrame.left() + widthDifference * 0.5); + m_safeFrame.setRight(m_safeFrame.right() - widthDifference * 0.5); + } + else + { + float maxSafeFrameHeight = m_safeFrame.width() / targetAspectRatio; + float heightDifference = m_safeFrame.height() - maxSafeFrameHeight; + + m_safeFrame.setTop(m_safeFrame.top() + heightDifference * 0.5); + m_safeFrame.setBottom(m_safeFrame.bottom() - heightDifference * 0.5); + } + + m_safeFrame.adjust(0, 0, -1, -1); // <-- aesthetic improvement. + + const float SAFE_ACTION_SCALE_FACTOR = 0.05f; + m_safeAction = m_safeFrame; + m_safeAction.adjust(m_safeFrame.width() * SAFE_ACTION_SCALE_FACTOR, m_safeFrame.height() * SAFE_ACTION_SCALE_FACTOR, + -m_safeFrame.width() * SAFE_ACTION_SCALE_FACTOR, -m_safeFrame.height() * SAFE_ACTION_SCALE_FACTOR); + + const float SAFE_TITLE_SCALE_FACTOR = 0.1f; + m_safeTitle = m_safeFrame; + m_safeTitle.adjust(m_safeFrame.width() * SAFE_TITLE_SCALE_FACTOR, m_safeFrame.height() * SAFE_TITLE_SCALE_FACTOR, + -m_safeFrame.width() * SAFE_TITLE_SCALE_FACTOR, -m_safeFrame.height() * SAFE_TITLE_SCALE_FACTOR); +} + +////////////////////////////////////////////////////////////////////////// +void EditorViewportWidget::RenderSafeFrame() +{ + RenderSafeFrame(m_safeFrame, 0.75f, 0.75f, 0, 0.8f); + RenderSafeFrame(m_safeAction, 0, 0.85f, 0.80f, 0.8f); + RenderSafeFrame(m_safeTitle, 0.80f, 0.60f, 0, 0.8f); +} + +////////////////////////////////////////////////////////////////////////// +void EditorViewportWidget::RenderSafeFrame(const QRect& frame, float r, float g, float b, float a) +{ + m_debugDisplay->SetColor(r, g, b, a); + + const int LINE_WIDTH = 2; + for (int i = 0; i < LINE_WIDTH; i++) + { + AZ::Vector3 topLeft(frame.left() + i, frame.top() + i, 0); + AZ::Vector3 bottomRight(frame.right() - i, frame.bottom() - i, 0); + m_debugDisplay->DrawWireBox(topLeft, bottomRight); + } +} + +////////////////////////////////////////////////////////////////////////// +float EditorViewportWidget::GetAspectRatio() const +{ + return gSettings.viewports.fDefaultAspectRatio; +} + +////////////////////////////////////////////////////////////////////////// +void EditorViewportWidget::RenderSnapMarker() +{ + if (!gSettings.snap.markerDisplay) + { + return; + } + + QPoint point = QCursor::pos(); + ScreenToClient(point); + Vec3 p = MapViewToCP(point); + + DisplayContext& dc = m_displayContext; + + float fScreenScaleFactor = GetScreenScaleFactor(p); + + Vec3 x(1, 0, 0); + Vec3 y(0, 1, 0); + Vec3 z(0, 0, 1); + x = x * gSettings.snap.markerSize * fScreenScaleFactor * 0.1f; + y = y * gSettings.snap.markerSize * fScreenScaleFactor * 0.1f; + z = z * gSettings.snap.markerSize * fScreenScaleFactor * 0.1f; + + dc.SetColor(gSettings.snap.markerColor); + dc.DrawLine(p - x, p + x); + dc.DrawLine(p - y, p + y); + dc.DrawLine(p - z, p + z); + + point = WorldToView(p); + + int s = 8; + dc.DrawLine2d(point + QPoint(-s, -s), point + QPoint(s, -s), 0); + dc.DrawLine2d(point + QPoint(-s, s), point + QPoint(s, s), 0); + dc.DrawLine2d(point + QPoint(-s, -s), point + QPoint(-s, s), 0); + dc.DrawLine2d(point + QPoint(s, -s), point + QPoint(s, s), 0); +} + +////////////////////////////////////////////////////////////////////////// +void EditorViewportWidget::OnMenuResolutionCustom() +{ + CCustomResolutionDlg resDlg(width(), height(), parentWidget()); + if (resDlg.exec() == QDialog::Accepted) + { + ResizeView(resDlg.GetWidth(), resDlg.GetHeight()); + + const QString text = QString::fromLatin1("%1 x %2").arg(resDlg.GetWidth()).arg(resDlg.GetHeight()); + + QStringList customResPresets; + CViewportTitleDlg::LoadCustomPresets("ResPresets", "ResPresetFor2ndView", customResPresets); + CViewportTitleDlg::UpdateCustomPresets(text, customResPresets); + CViewportTitleDlg::SaveCustomPresets("ResPresets", "ResPresetFor2ndView", customResPresets); + } +} + +////////////////////////////////////////////////////////////////////////// +void EditorViewportWidget::OnMenuCreateCameraEntityFromCurrentView() +{ + Camera::EditorCameraSystemRequestBus::Broadcast(&Camera::EditorCameraSystemRequests::CreateCameraEntityFromViewport); +} + +////////////////////////////////////////////////////////////////////////// +void EditorViewportWidget::OnMenuSelectCurrentCamera() +{ + CBaseObject* pCameraObject = GetCameraObject(); + + if (pCameraObject && !pCameraObject->IsSelected()) + { + GetIEditor()->BeginUndo(); + IObjectManager* pObjectManager = GetIEditor()->GetObjectManager(); + pObjectManager->ClearSelection(); + pObjectManager->SelectObject(pCameraObject); + GetIEditor()->AcceptUndo("Select Current Camera"); + } +} + +AzFramework::CameraState EditorViewportWidget::GetCameraState() +{ + return m_renderViewport->GetCameraState(); +} + +bool EditorViewportWidget::GridSnappingEnabled() +{ + return GetViewManager()->GetGrid()->IsEnabled(); +} + +float EditorViewportWidget::GridSize() +{ + const CGrid* grid = GetViewManager()->GetGrid(); + return grid->scale * grid->size; +} + +bool EditorViewportWidget::ShowGrid() +{ + return gSettings.viewports.bShowGridGuide; +} + +bool EditorViewportWidget::AngleSnappingEnabled() +{ + return GetViewManager()->GetGrid()->IsAngleSnapEnabled(); +} + +float EditorViewportWidget::AngleStep() +{ + return GetViewManager()->GetGrid()->GetAngleSnap(); +} + +AZ::Vector3 EditorViewportWidget::PickTerrain(const QPoint& point) +{ + FUNCTION_PROFILER(GetIEditor()->GetSystem(), PROFILE_EDITOR); + + return LYVec3ToAZVec3(ViewToWorld(point, nullptr, true)); +} + +AZ::EntityId EditorViewportWidget::PickEntity(const QPoint& point) +{ + FUNCTION_PROFILER(GetIEditor()->GetSystem(), PROFILE_EDITOR); + + PreWidgetRendering(); + + AZ::EntityId entityId; + HitContext hitInfo; + hitInfo.view = this; + if (HitTest(point, hitInfo)) + { + if (hitInfo.object && (hitInfo.object->GetType() == OBJTYPE_AZENTITY)) + { + auto entityObject = static_cast(hitInfo.object); + entityId = entityObject->GetAssociatedEntityId(); + } + } + + PostWidgetRendering(); + + return entityId; +} + +float EditorViewportWidget::TerrainHeight(const AZ::Vector2& position) +{ + return GetIEditor()->GetTerrainElevation(position.GetX(), position.GetY()); +} + +void EditorViewportWidget::FindVisibleEntities(AZStd::vector& visibleEntitiesOut) +{ + FUNCTION_PROFILER(GetIEditor()->GetSystem(), PROFILE_EDITOR); + + visibleEntitiesOut.assign(m_entityVisibilityQuery.Begin(), m_entityVisibilityQuery.End()); +} + +QPoint EditorViewportWidget::ViewportWorldToScreen(const AZ::Vector3& worldPosition) +{ + return m_renderViewport->ViewportWorldToScreen(worldPosition); +} + +bool EditorViewportWidget::IsViewportInputFrozen() +{ + return m_freezeViewportInput; +} + +void EditorViewportWidget::FreezeViewportInput(bool freeze) +{ + m_freezeViewportInput = freeze; +} + +QWidget* EditorViewportWidget::GetWidgetForViewportContextMenu() +{ + return this; +} + +void EditorViewportWidget::BeginWidgetContext() +{ + PreWidgetRendering(); +} + +void EditorViewportWidget::EndWidgetContext() +{ + PostWidgetRendering(); +} + +bool EditorViewportWidget::ShowingWorldSpace() +{ + using namespace AzToolsFramework::ViewportInteraction; + return BuildKeyboardModifiers(QGuiApplication::queryKeyboardModifiers()).Shift(); +} + +void EditorViewportWidget::SetViewportId(int id) +{ + CViewport::SetViewportId(id); + + // Now that we have an ID, we can initialize our viewport. + m_renderViewport = new AtomToolsFramework::RenderViewportWidget(id, this); + m_defaultViewportContextName = m_renderViewport->GetViewportContext()->GetName(); + QBoxLayout* layout = new QBoxLayout(QBoxLayout::Direction::TopToBottom, this); + layout->setContentsMargins(QMargins()); + layout->addWidget(m_renderViewport); + + auto viewportContext = m_renderViewport->GetViewportContext(); + viewportContext->ConnectViewMatrixChangedHandler(m_cameraViewMatrixChangeHandler); + viewportContext->ConnectProjectionMatrixChangedHandler(m_cameraProjectionMatrixChangeHandler); + + m_renderViewport->GetControllerList()->Add(AZStd::make_shared()); + + if (ed_useNewCameraSystem) + { + m_renderViewport->GetControllerList()->Add(AZStd::make_shared()); + } + else + { + m_renderViewport->GetControllerList()->Add(AZStd::make_shared()); + } + + UpdateScene(); + + if (m_pPrimaryViewport == this) + { + SetAsActiveViewport(); + } +} + +void EditorViewportWidget::ConnectViewportInteractionRequestBus() +{ + AzToolsFramework::ViewportInteraction::ViewportFreezeRequestBus::Handler::BusConnect(GetViewportId()); + AzToolsFramework::ViewportInteraction::MainEditorViewportInteractionRequestBus::Handler::BusConnect(GetViewportId()); + m_viewportUi.ConnectViewportUiBus(GetViewportId()); + + AzFramework::InputSystemCursorConstraintRequestBus::Handler::BusConnect(); +} + +void EditorViewportWidget::DisconnectViewportInteractionRequestBus() +{ + AzFramework::InputSystemCursorConstraintRequestBus::Handler::BusDisconnect(); + + m_viewportUi.DisconnectViewportUiBus(); + AzToolsFramework::ViewportInteraction::MainEditorViewportInteractionRequestBus::Handler::BusDisconnect(); + AzToolsFramework::ViewportInteraction::ViewportFreezeRequestBus::Handler::BusDisconnect(); +} + +namespace AZ::ViewportHelpers +{ + void ToggleBool(bool* variable, bool* disableVariableIfOn) + { + *variable = !*variable; + if (*variable && disableVariableIfOn) + { + *disableVariableIfOn = false; + } + } + + void ToggleInt(int* variable) + { + *variable = !*variable; + } + + void AddCheckbox(QMenu* menu, const QString& text, bool* variable, bool* disableVariableIfOn = nullptr) + { + QAction* action = menu->addAction(text); + QObject::connect(action, &QAction::triggered, action, [variable, disableVariableIfOn] { ToggleBool(variable, disableVariableIfOn); + }); + action->setCheckable(true); + action->setChecked(*variable); + } + + void AddCheckbox(QMenu* menu, const QString& text, int* variable) + { + QAction* action = menu->addAction(text); + QObject::connect(action, &QAction::triggered, action, [variable] { ToggleInt(variable); + }); + action->setCheckable(true); + action->setChecked(*variable); + } +} + +////////////////////////////////////////////////////////////////////////// +void EditorViewportWidget::OnTitleMenu(QMenu* menu) +{ + const int nWireframe = gEnv->pConsole->GetCVar("r_wireframe")->GetIVal(); + QAction* action = menu->addAction(tr("Wireframe")); + connect(action, &QAction::triggered, action, []() + { + ICVar* piVar(gEnv->pConsole->GetCVar("r_wireframe")); + int nRenderMode = piVar->GetIVal(); + if (nRenderMode != R_WIREFRAME_MODE) + { + piVar->Set(R_WIREFRAME_MODE); + } + else + { + piVar->Set(R_SOLID_MODE); + } + }); + action->setCheckable(true); + action->setChecked(nWireframe == R_WIREFRAME_MODE); + + const bool bDisplayLabels = GetIEditor()->GetDisplaySettings()->IsDisplayLabels(); + action = menu->addAction(tr("Labels")); + connect(action, &QAction::triggered, this, [bDisplayLabels] {GetIEditor()->GetDisplaySettings()->DisplayLabels(!bDisplayLabels); + }); + action->setCheckable(true); + action->setChecked(bDisplayLabels); + + AZ::ViewportHelpers::AddCheckbox(menu, tr("Show Safe Frame"), &gSettings.viewports.bShowSafeFrame); + AZ::ViewportHelpers::AddCheckbox(menu, tr("Show Construction Plane"), &gSettings.snap.constructPlaneDisplay); + AZ::ViewportHelpers::AddCheckbox(menu, tr("Show Trigger Bounds"), &gSettings.viewports.bShowTriggerBounds); + AZ::ViewportHelpers::AddCheckbox(menu, tr("Show Icons"), &gSettings.viewports.bShowIcons, &gSettings.viewports.bShowSizeBasedIcons); + AZ::ViewportHelpers::AddCheckbox(menu, tr("Show Size-based Icons"), &gSettings.viewports.bShowSizeBasedIcons, &gSettings.viewports.bShowIcons); + AZ::ViewportHelpers::AddCheckbox(menu, tr("Show Helpers of Frozen Objects"), &gSettings.viewports.nShowFrozenHelpers); + + if (!m_predefinedAspectRatios.IsEmpty()) + { + QMenu* aspectRatiosMenu = menu->addMenu(tr("Target Aspect Ratio")); + + for (size_t i = 0; i < m_predefinedAspectRatios.GetCount(); ++i) + { + const QString& aspectRatioString = m_predefinedAspectRatios.GetName(i); + QAction* aspectRatioAction = aspectRatiosMenu->addAction(aspectRatioString); + connect(aspectRatioAction, &QAction::triggered, this, [i, this] { + const float aspect = m_predefinedAspectRatios.GetValue(i); + gSettings.viewports.fDefaultAspectRatio = aspect; + }); + aspectRatioAction->setCheckable(true); + aspectRatioAction->setChecked(m_predefinedAspectRatios.IsCurrent(i)); + } + } + + // Set ourself as the active viewport so the following actions create a camera from this view + GetIEditor()->GetViewManager()->SelectViewport(this); + + CGameEngine* gameEngine = GetIEditor()->GetGameEngine(); + + if (Camera::EditorCameraSystemRequestBus::HasHandlers()) + { + action = menu->addAction(tr("Create camera entity from current view")); + connect(action, &QAction::triggered, this, &EditorViewportWidget::OnMenuCreateCameraEntityFromCurrentView); + + if (!gameEngine || !gameEngine->IsLevelLoaded()) + { + action->setEnabled(false); + action->setToolTip(tr(AZ::ViewportHelpers::TextCantCreateCameraNoLevel)); + menu->setToolTipsVisible(true); + } + } + + if (!gameEngine || !gameEngine->IsLevelLoaded()) + { + action->setEnabled(false); + action->setToolTip(tr(AZ::ViewportHelpers::TextCantCreateCameraNoLevel)); + menu->setToolTipsVisible(true); + } + + if (GetCameraObject()) + { + action = menu->addAction(tr("Select Current Camera")); + connect(action, &QAction::triggered, this, &EditorViewportWidget::OnMenuSelectCurrentCamera); + } + + // Add Cameras. + bool bHasCameras = AddCameraMenuItems(menu); + EditorViewportWidget* pFloatingViewport = nullptr; + + if (GetIEditor()->GetViewManager()->GetViewCount() > 1) + { + for (int i = 0; i < GetIEditor()->GetViewManager()->GetViewCount(); ++i) + { + CViewport* vp = GetIEditor()->GetViewManager()->GetView(i); + if (!vp) + { + continue; + } + + if (viewport_cast(vp) == nullptr) + { + continue; + } + + if (vp->GetViewportId() == MAX_NUM_VIEWPORTS - 1) + { + menu->addSeparator(); + + QMenu* floatViewMenu = menu->addMenu(tr("Floating View")); + + pFloatingViewport = (EditorViewportWidget*)vp; + pFloatingViewport->AddCameraMenuItems(floatViewMenu); + + if (bHasCameras) + { + floatViewMenu->addSeparator(); + } + + QMenu* resolutionMenu = floatViewMenu->addMenu(tr("Resolution")); + + QStringList customResPresets; + CViewportTitleDlg::LoadCustomPresets("ResPresets", "ResPresetFor2ndView", customResPresets); + CViewportTitleDlg::AddResolutionMenus(resolutionMenu, [this](int width, int height) { ResizeView(width, height); }, customResPresets); + if (!resolutionMenu->actions().isEmpty()) + { + resolutionMenu->addSeparator(); + } + QAction* customResolutionAction = resolutionMenu->addAction(tr("Custom...")); + connect(customResolutionAction, &QAction::triggered, this, &EditorViewportWidget::OnMenuResolutionCustom); + break; + } + } + } +} + +////////////////////////////////////////////////////////////////////////// +bool EditorViewportWidget::AddCameraMenuItems(QMenu* menu) +{ + if (!menu->isEmpty()) + { + menu->addSeparator(); + } + + AZ::ViewportHelpers::AddCheckbox(menu, "Lock Camera Movement", &m_bLockCameraMovement); + menu->addSeparator(); + + // Camera Sub menu + QMenu* customCameraMenu = menu->addMenu(tr("Camera")); + + QAction* action = customCameraMenu->addAction("Editor Camera"); + action->setCheckable(true); + action->setChecked(m_viewSourceType == ViewSourceType::None); + connect(action, &QAction::triggered, this, &EditorViewportWidget::SetDefaultCamera); + + AZ::EBusAggregateResults getCameraResults; + Camera::CameraBus::BroadcastResult(getCameraResults, &Camera::CameraRequests::GetCameras); + + const int numCameras = getCameraResults.values.size(); + + // only enable if we're editing a sequence in Track View and have cameras in the level + bool enableSequenceCameraMenu = (GetIEditor()->GetAnimation()->GetSequence() && numCameras); + + action = customCameraMenu->addAction(tr("Sequence Camera")); + action->setCheckable(true); + action->setChecked(m_viewSourceType == ViewSourceType::SequenceCamera); + action->setEnabled(enableSequenceCameraMenu); + connect(action, &QAction::triggered, this, &EditorViewportWidget::SetSequenceCamera); + + QVector additionalCameras; + additionalCameras.reserve(getCameraResults.values.size()); + + for (const AZ::EntityId& entityId : getCameraResults.values) + { + AZStd::string entityName; + AZ::ComponentApplicationBus::BroadcastResult(entityName, &AZ::ComponentApplicationRequests::GetEntityName, entityId); + action = new QAction(QString(entityName.c_str()), nullptr); + additionalCameras.append(action); + action->setCheckable(true); + action->setChecked(m_viewEntityId == entityId && m_viewSourceType == ViewSourceType::CameraComponent); + connect(action, &QAction::triggered, this, [this, entityId](bool isChecked) + { + if (isChecked) + { + SetComponentCamera(entityId); + } + else + { + SetDefaultCamera(); + } + }); + } + + std::sort(additionalCameras.begin(), additionalCameras.end(), [] (QAction* a1, QAction* a2) { + return QString::compare(a1->text(), a2->text(), Qt::CaseInsensitive) < 0; + }); + + for (QAction* cameraAction : additionalCameras) + { + customCameraMenu->addAction(cameraAction); + } + + action = customCameraMenu->addAction(tr("Look through entity")); + AzToolsFramework::EntityIdList selectedEntityList; + AzToolsFramework::ToolsApplicationRequests::Bus::BroadcastResult(selectedEntityList, &AzToolsFramework::ToolsApplicationRequests::GetSelectedEntities); + action->setCheckable(selectedEntityList.size() > 0 || m_viewSourceType == ViewSourceType::AZ_Entity); + action->setEnabled(selectedEntityList.size() > 0 || m_viewSourceType == ViewSourceType::AZ_Entity); + action->setChecked(m_viewSourceType == ViewSourceType::AZ_Entity); + connect(action, &QAction::triggered, this, [this](bool isChecked) + { + if (isChecked) + { + AzToolsFramework::EntityIdList selectedEntityList; + AzToolsFramework::ToolsApplicationRequests::Bus::BroadcastResult(selectedEntityList, &AzToolsFramework::ToolsApplicationRequests::GetSelectedEntities); + if (selectedEntityList.size()) + { + SetEntityAsCamera(*selectedEntityList.begin()); + } + } + else + { + SetDefaultCamera(); + } + }); + return true; +} + +////////////////////////////////////////////////////////////////////////// +void EditorViewportWidget::ResizeView(int width, int height) +{ + const QRect rView = rect().translated(mapToGlobal(QPoint())); + int deltaWidth = width - rView.width(); + int deltaHeight = height - rView.height(); + + if (window()->isFullScreen()) + { + setGeometry(rView.left(), rView.top(), rView.width() + deltaWidth, rView.height() + deltaHeight); + } + else + { + QWidget* window = this->window(); + if (window->isMaximized()) + { + window->showNormal(); + } + + const QSize deltaSize = QSize(width, height) - size(); + window->move(0, 0); + window->resize(window->size() + deltaSize); + } +} + +////////////////////////////////////////////////////////////////////////// +void EditorViewportWidget::ToggleCameraObject() +{ + if (m_viewSourceType == ViewSourceType::SequenceCamera) + { + gEnv->p3DEngine->GetPostEffectBaseGroup()->SetParam("Dof_Active", 0.0f); + ResetToViewSourceType(ViewSourceType::LegacyCamera); + } + else + { + ResetToViewSourceType(ViewSourceType::SequenceCamera); + } + PostCameraSet(); + GetIEditor()->GetAnimation()->ForceAnimation(); +} + + +////////////////////////////////////////////////////////////////////////// +void EditorViewportWidget::SetCamera(const CCamera& camera) +{ + m_Camera = camera; + SetViewTM(m_Camera.GetMatrix()); +} + +////////////////////////////////////////////////////////////////////////// +float EditorViewportWidget::GetCameraMoveSpeed() const +{ + return gSettings.cameraMoveSpeed; +} + +////////////////////////////////////////////////////////////////////////// +float EditorViewportWidget::GetCameraRotateSpeed() const +{ + return gSettings.cameraRotateSpeed; +} + +////////////////////////////////////////////////////////////////////////// +bool EditorViewportWidget::GetCameraInvertYRotation() const +{ + return gSettings.invertYRotation; +} + +////////////////////////////////////////////////////////////////////////// +float EditorViewportWidget::GetCameraInvertPan() const +{ + return gSettings.invertPan; +} + +////////////////////////////////////////////////////////////////////////// +EditorViewportWidget* EditorViewportWidget::GetPrimaryViewport() +{ + return m_pPrimaryViewport; +} + +////////////////////////////////////////////////////////////////////////// +void EditorViewportWidget::focusOutEvent([[maybe_unused]] QFocusEvent* event) +{ + // if we lose focus, the keyboard map needs to be cleared immediately + if (!m_keyDown.isEmpty()) + { + m_keyDown.clear(); + + releaseKeyboard(); + } +} + +void EditorViewportWidget::keyPressEvent(QKeyEvent* event) +{ + // Special case Escape key and bubble way up to the top level parent so that it can cancel us out of any active tool + // or clear the current selection + if (event->key() == Qt::Key_Escape) + { + QCoreApplication::sendEvent(GetIEditor()->GetEditorMainWindow(), event); + } + + // NOTE: we keep track of keypresses and releases explicitly because the OS/Qt will insert a slight delay between sending + // keyevents when the key is held down. This is standard, but makes responding to key events for game style input silly + // because we want the movement to be butter smooth. + if (!event->isAutoRepeat()) + { + m_keyDown.insert(event->key()); + } + + QtViewport::keyPressEvent(event); + +#if defined(AZ_PLATFORM_WINDOWS) + // In game mode on windows we need to forward raw text events to the input system. + if (GetIEditor()->IsInGameMode() && GetType() == ET_ViewportCamera) + { + // Get the QString as a '\0'-terminated array of unsigned shorts. + // The result remains valid until the string is modified. + const ushort* codeUnitsUTF16 = event->text().utf16(); + while (ushort codeUnitUTF16 = *codeUnitsUTF16) + { + AzFramework::RawInputNotificationBusWindows::Broadcast(&AzFramework::RawInputNotificationsWindows::OnRawInputCodeUnitUTF16Event, codeUnitUTF16); + ++codeUnitsUTF16; + } + } +#endif // defined(AZ_PLATFORM_WINDOWS) +} + +void EditorViewportWidget::SetViewTM(const Matrix34& viewTM, bool bMoveOnly) +{ + Matrix34 camMatrix = viewTM; + + // If no collision flag set do not check for terrain elevation. + if (GetType() == ET_ViewportCamera) + { + if ((GetIEditor()->GetDisplaySettings()->GetSettings() & SETTINGS_NOCOLLISION) == 0) + { + Vec3 p = camMatrix.GetTranslation(); + bool adjustCameraElevation = true; + auto terrain = AzFramework::Terrain::TerrainDataRequestBus::FindFirstHandler(); + if (terrain) + { + AZ::Aabb terrainAabb(terrain->GetTerrainAabb()); + + // Adjust the AABB to include all Z values. Since the goal here is to snap the camera to the terrain height if + // it's below the terrain, we only want to verify the camera is within the XY bounds of the terrain to adjust the elevation. + terrainAabb.SetMin(AZ::Vector3(terrainAabb.GetMin().GetX(), terrainAabb.GetMin().GetY(), -AZ::Constants::FloatMax)); + terrainAabb.SetMax(AZ::Vector3(terrainAabb.GetMax().GetX(), terrainAabb.GetMax().GetY(), AZ::Constants::FloatMax)); + + if (!terrainAabb.Contains(LYVec3ToAZVec3(p))) + { + adjustCameraElevation = false; + } + else if (terrain->GetIsHoleFromFloats(p.x, p.y)) + { + adjustCameraElevation = false; + } + } + + if (adjustCameraElevation) + { + float z = GetIEditor()->GetTerrainElevation(p.x, p.y); + if (p.z < z + 0.25) + { + p.z = z + 0.25; + camMatrix.SetTranslation(p); + } + } + } + + // Also force this position on game. + if (GetIEditor()->GetGameEngine()) + { + GetIEditor()->GetGameEngine()->SetPlayerViewMatrix(viewTM); + } + } + + CBaseObject* cameraObject = GetCameraObject(); + if (cameraObject) + { + // Ignore camera movement if locked. + if (IsCameraMovementLocked() || (!GetIEditor()->GetAnimation()->IsRecordMode() && !IsCameraObjectMove())) + { + return; + } + + AZ::Matrix3x3 lookThroughEntityCorrection = AZ::Matrix3x3::CreateIdentity(); + if (m_viewEntityId.IsValid()) + { + LmbrCentral::EditorCameraCorrectionRequestBus::EventResult( + lookThroughEntityCorrection, m_viewEntityId, + &LmbrCentral::EditorCameraCorrectionRequests::GetInverseTransformCorrection); + } + + if (m_pressedKeyState != KeyPressedState::PressedInPreviousFrame) + { + CUndo undo("Move Camera"); + if (bMoveOnly) + { + // specify eObjectUpdateFlags_UserInput so that an undo command gets logged + cameraObject->SetWorldPos(camMatrix.GetTranslation(), eObjectUpdateFlags_UserInput); + } + else + { + // specify eObjectUpdateFlags_UserInput so that an undo command gets logged + cameraObject->SetWorldTM(camMatrix * AZMatrix3x3ToLYMatrix3x3(lookThroughEntityCorrection), eObjectUpdateFlags_UserInput); + } + } + else + { + if (bMoveOnly) + { + // Do not specify eObjectUpdateFlags_UserInput, so that an undo command does not get logged; we covered it already when m_pressedKeyState was PressedThisFrame + cameraObject->SetWorldPos(camMatrix.GetTranslation()); + } + else + { + // Do not specify eObjectUpdateFlags_UserInput, so that an undo command does not get logged; we covered it already when m_pressedKeyState was PressedThisFrame + cameraObject->SetWorldTM(camMatrix * AZMatrix3x3ToLYMatrix3x3(lookThroughEntityCorrection)); + } + } + + using namespace AzToolsFramework; + ComponentEntityObjectRequestBus::Event(cameraObject, &ComponentEntityObjectRequestBus::Events::UpdatePreemptiveUndoCache); + } + else if (m_viewEntityId.IsValid()) + { + // Ignore camera movement if locked. + if (IsCameraMovementLocked() || (!GetIEditor()->GetAnimation()->IsRecordMode() && !IsCameraObjectMove())) + { + return; + } + + if (m_pressedKeyState != KeyPressedState::PressedInPreviousFrame) + { + CUndo undo("Move Camera"); + if (bMoveOnly) + { + AZ::TransformBus::Event( + m_viewEntityId, &AZ::TransformInterface::SetWorldTranslation, + LYVec3ToAZVec3(camMatrix.GetTranslation())); + } + else + { + AZ::TransformBus::Event( + m_viewEntityId, &AZ::TransformInterface::SetWorldTM, + LYTransformToAZTransform(camMatrix)); + } + } + else + { + if (bMoveOnly) + { + AZ::TransformBus::Event( + m_viewEntityId, &AZ::TransformInterface::SetWorldTranslation, + LYVec3ToAZVec3(camMatrix.GetTranslation())); + } + else + { + AZ::TransformBus::Event( + m_viewEntityId, &AZ::TransformInterface::SetWorldTM, + LYTransformToAZTransform(camMatrix)); + } + } + + AzToolsFramework::PropertyEditorGUIMessages::Bus::Broadcast( + &AzToolsFramework::PropertyEditorGUIMessages::RequestRefresh, + AzToolsFramework::PropertyModificationRefreshLevel::Refresh_AttributesAndValues); + } + + if (m_pressedKeyState == KeyPressedState::PressedThisFrame) + { + m_pressedKeyState = KeyPressedState::PressedInPreviousFrame; + } + + QtViewport::SetViewTM(camMatrix); + + m_Camera.SetMatrix(camMatrix); +} + +////////////////////////////////////////////////////////////////////////// +void EditorViewportWidget::RenderSelectedRegion() +{ + if (!m_engine) + { + return; + } + + AABB box; + GetIEditor()->GetSelectedRegion(box); + if (box.IsEmpty()) + { + return; + } + + float x1 = box.min.x; + float y1 = box.min.y; + float x2 = box.max.x; + float y2 = box.max.y; + + DisplayContext& dc = m_displayContext; + + float fMaxSide = MAX(y2 - y1, x2 - x1); + if (fMaxSide < 0.1f) + { + return; + } + float fStep = fMaxSide / 100.0f; + + float fMinZ = 0; + float fMaxZ = 0; + + // Draw yellow border lines. + dc.SetColor(1, 1, 0, 1); + float offset = 0.01f; + Vec3 p1, p2; + + const float defaultTerrainHeight = AzFramework::Terrain::TerrainDataRequests::GetDefaultTerrainHeight(); + auto terrain = AzFramework::Terrain::TerrainDataRequestBus::FindFirstHandler(); + + for (float y = y1; y < y2; y += fStep) + { + p1.x = x1; + p1.y = y; + p1.z = terrain ? terrain->GetHeightFromFloats(p1.x, p1.y) + offset : defaultTerrainHeight + offset; + + p2.x = x1; + p2.y = y + fStep; + p2.z = terrain ? terrain->GetHeightFromFloats(p2.x, p2.y) + offset : defaultTerrainHeight + offset; + dc.DrawLine(p1, p2); + + p1.x = x2; + p1.y = y; + p1.z = terrain ? terrain->GetHeightFromFloats(p1.x, p1.y) + offset : defaultTerrainHeight + offset; + + p2.x = x2; + p2.y = y + fStep; + p2.z = terrain ? terrain->GetHeightFromFloats(p2.x, p2.y) + offset : defaultTerrainHeight + offset; + dc.DrawLine(p1, p2); + + fMinZ = min(fMinZ, min(p1.z, p2.z)); + fMaxZ = max(fMaxZ, max(p1.z, p2.z)); + } + for (float x = x1; x < x2; x += fStep) + { + p1.x = x; + p1.y = y1; + p1.z = terrain ? terrain->GetHeightFromFloats(p1.x, p1.y) + offset : defaultTerrainHeight + offset; + + p2.x = x + fStep; + p2.y = y1; + p2.z = terrain ? terrain->GetHeightFromFloats(p2.x, p2.y) + offset : defaultTerrainHeight + offset; + dc.DrawLine(p1, p2); + + p1.x = x; + p1.y = y2; + p1.z = terrain ? terrain->GetHeightFromFloats(p1.x, p1.y) + offset : defaultTerrainHeight + offset; + + p2.x = x + fStep; + p2.y = y2; + p2.z = terrain ? terrain->GetHeightFromFloats(p2.x, p2.y) + offset : defaultTerrainHeight + offset; + dc.DrawLine(p1, p2); + + fMinZ = min(fMinZ, min(p1.z, p2.z)); + fMaxZ = max(fMaxZ, max(p1.z, p2.z)); + } + + { + // Draw a box area + float fBoxOver = fMaxSide / 5.0f; + float fBoxHeight = fBoxOver + fMaxZ - fMinZ; + + ColorB boxColor(64, 64, 255, 128); // light blue + ColorB transparent(boxColor.r, boxColor.g, boxColor.b, 0); + + Vec3 base[] = { + Vec3(x1, y1, fMinZ), + Vec3(x2, y1, fMinZ), + Vec3(x2, y2, fMinZ), + Vec3(x1, y2, fMinZ) + }; + + + // Generate vertices + static AABB boxPrev(AABB::RESET); + static std::vector verts; + static std::vector colors; + + if (!IsEquivalent(boxPrev, box)) + { + verts.resize(0); + colors.resize(0); + for (int i = 0; i < 4; ++i) + { + Vec3& p = base[i]; + + verts.push_back(p); + verts.push_back(Vec3(p.x, p.y, p.z + fBoxHeight)); + verts.push_back(Vec3(p.x, p.y, p.z + fBoxHeight + fBoxOver)); + + colors.push_back(boxColor); + colors.push_back(boxColor); + colors.push_back(transparent); + } + boxPrev = box; + } + + // Generate indices + const int numInds = 4 * 12; + static vtx_idx inds[numInds]; + static bool bNeedIndsInit = true; + if (bNeedIndsInit) + { + vtx_idx* pInds = &inds[0]; + + for (int i = 0; i < 4; ++i) + { + int over = 0; + if (i == 3) + { + over = -12; + } + + int ind = i * 3; + *pInds++ = ind; + *pInds++ = ind + 3 + over; + *pInds++ = ind + 1; + + *pInds++ = ind + 1; + *pInds++ = ind + 3 + over; + *pInds++ = ind + 4 + over; + + ind = i * 3 + 1; + *pInds++ = ind; + *pInds++ = ind + 3 + over; + *pInds++ = ind + 1; + + *pInds++ = ind + 1; + *pInds++ = ind + 3 + over; + *pInds++ = ind + 4 + over; + } + bNeedIndsInit = false; + } + + // Draw lines + for (int i = 0; i < 4; ++i) + { + Vec3& p = base[i]; + + dc.DrawLine(p, Vec3(p.x, p.y, p.z + fBoxHeight), ColorF(1, 1, 0, 1), ColorF(1, 1, 0, 1)); + dc.DrawLine(Vec3(p.x, p.y, p.z + fBoxHeight), Vec3(p.x, p.y, p.z + fBoxHeight + fBoxOver), ColorF(1, 1, 0, 1), ColorF(1, 1, 0, 0)); + } + + // Draw volume + dc.DepthWriteOff(); + dc.CullOff(); + dc.pRenderAuxGeom->DrawTriangles(&verts[0], verts.size(), &inds[0], numInds, &colors[0]); + dc.CullOn(); + dc.DepthWriteOn(); + } +} + +Vec3 EditorViewportWidget::WorldToView3D(const Vec3& wp, [[maybe_unused]] int nFlags) const +{ + Vec3 out(0, 0, 0); + float x, y, z; + + ProjectToScreen(wp.x, wp.y, wp.z, &x, &y, &z); + if (_finite(x) && _finite(y) && _finite(z)) + { + out.x = (x / 100) * m_rcClient.width(); + out.y = (y / 100) * m_rcClient.height(); + out.x /= QHighDpiScaling::factor(windowHandle()->screen()); + out.y /= QHighDpiScaling::factor(windowHandle()->screen()); + out.z = z; + } + return out; +} + +////////////////////////////////////////////////////////////////////////// +QPoint EditorViewportWidget::WorldToView(const Vec3& wp) const +{ + return m_renderViewport->ViewportWorldToScreen(LYVec3ToAZVec3(wp)); +} +////////////////////////////////////////////////////////////////////////// +QPoint EditorViewportWidget::WorldToViewParticleEditor(const Vec3& wp, int width, int height) const +{ + QPoint p; + float x, y, z; + + ProjectToScreen(wp.x, wp.y, wp.z, &x, &y, &z); + if (_finite(x) || _finite(y)) + { + p.rx() = (x / 100) * width; + p.ry() = (y / 100) * height; + } + else + { + QPoint(0, 0); + } + return p; +} + +////////////////////////////////////////////////////////////////////////// +Vec3 EditorViewportWidget::ViewToWorld(const QPoint& vp, bool* collideWithTerrain, bool onlyTerrain, bool bSkipVegetation, bool bTestRenderMesh, bool* collideWithObject) const +{ + AZ_PROFILE_FUNCTION(AZ::Debug::ProfileCategory::Editor); + + AZ_UNUSED(collideWithTerrain) + AZ_UNUSED(onlyTerrain) + AZ_UNUSED(bTestRenderMesh) + AZ_UNUSED(bSkipVegetation) + AZ_UNUSED(bSkipVegetation) + AZ_UNUSED(collideWithObject) + + auto ray = m_renderViewport->ViewportScreenToWorldRay(vp); + if (!ray.has_value()) + { + return Vec3(0, 0, 0); + } + + const float maxDistance = 10000.f; + Vec3 v = AZVec3ToLYVec3(ray.value().direction) * maxDistance; + + if (!_finite(v.x) || !_finite(v.y) || !_finite(v.z)) + { + return Vec3(0, 0, 0); + } + + Vec3 colp = AZVec3ToLYVec3(ray.value().origin) + 0.002f * v; + + return colp; +} + +////////////////////////////////////////////////////////////////////////// +Vec3 EditorViewportWidget::ViewToWorldNormal(const QPoint& vp, bool onlyTerrain, bool bTestRenderMesh) +{ + AZ_UNUSED(vp) + AZ_UNUSED(onlyTerrain) + AZ_UNUSED(bTestRenderMesh) + + AZ_PROFILE_FUNCTION(AZ::Debug::ProfileCategory::Editor); + + return Vec3(0, 0, 1); +} + +////////////////////////////////////////////////////////////////////////// +bool EditorViewportWidget::AdjustObjectPosition(const ray_hit& hit, Vec3& outNormal, Vec3& outPos) const +{ + Matrix34A objMat, objMatInv; + Matrix33 objRot, objRotInv; + + if (hit.pCollider->GetiForeignData() != PHYS_FOREIGN_ID_STATIC) + { + return false; + } + + IRenderNode* pNode = (IRenderNode*) hit.pCollider->GetForeignData(PHYS_FOREIGN_ID_STATIC); + if (!pNode || !pNode->GetEntityStatObj()) + { + return false; + } + + IStatObj* pEntObject = pNode->GetEntityStatObj(hit.partid, 0, &objMat, false); + if (!pEntObject || !pEntObject->GetRenderMesh()) + { + return false; + } + + objRot = Matrix33(objMat); + objRot.NoScale(); // No scale. + objRotInv = objRot; + objRotInv.Invert(); + + float fWorldScale = objMat.GetColumn(0).GetLength(); // GetScale + float fWorldScaleInv = 1.0f / fWorldScale; + + // transform decal into object space + objMatInv = objMat; + objMatInv.Invert(); + + // put into normal object space hit direction of projection + Vec3 invhitn = -(hit.n); + Vec3 vOS_HitDir = objRotInv.TransformVector(invhitn).GetNormalized(); + + // put into position object space hit position + Vec3 vOS_HitPos = objMatInv.TransformPoint(hit.pt); + vOS_HitPos -= vOS_HitDir * RENDER_MESH_TEST_DISTANCE * fWorldScaleInv; + + IRenderMesh* pRM = pEntObject->GetRenderMesh(); + + AABB aabbRNode; + pRM->GetBBox(aabbRNode.min, aabbRNode.max); + Vec3 vOut(0, 0, 0); + if (!Intersect::Ray_AABB(Ray(vOS_HitPos, vOS_HitDir), aabbRNode, vOut)) + { + return false; + } + + if (!pRM || !pRM->GetVerticesCount()) + { + return false; + } + + if (RayRenderMeshIntersection(pRM, vOS_HitPos, vOS_HitDir, outPos, outNormal)) + { + outNormal = objRot.TransformVector(outNormal).GetNormalized(); + outPos = objMat.TransformPoint(outPos); + return true; + } + return false; +} + +////////////////////////////////////////////////////////////////////////// +bool EditorViewportWidget::RayRenderMeshIntersection(IRenderMesh* pRenderMesh, const Vec3& vInPos, const Vec3& vInDir, Vec3& vOutPos, Vec3& vOutNormal) const +{ + SRayHitInfo hitInfo; + hitInfo.bUseCache = false; + hitInfo.bInFirstHit = false; + hitInfo.inRay.origin = vInPos; + hitInfo.inRay.direction = vInDir.GetNormalized(); + hitInfo.inReferencePoint = vInPos; + hitInfo.fMaxHitDistance = 0; + bool bRes = GetIEditor()->Get3DEngine()->RenderMeshRayIntersection(pRenderMesh, hitInfo, nullptr); + vOutPos = hitInfo.vHitPos; + vOutNormal = hitInfo.vHitNormal; + return bRes; +} + +void EditorViewportWidget::UnProjectFromScreen(float sx, float sy, float sz, float* px, float* py, float* pz) const +{ + AZ::Vector3 wp; + wp = m_renderViewport->ViewportScreenToWorld({(int)sx, m_rcClient.bottom() - ((int)sy)}, sz).value_or(wp); + *px = wp.GetX(); + *py = wp.GetY(); + *pz = wp.GetZ(); +} + +void EditorViewportWidget::ProjectToScreen(float ptx, float pty, float ptz, float* sx, float* sy, float* sz) const +{ + QPoint screenPosition = m_renderViewport->ViewportWorldToScreen(AZ::Vector3{ptx, pty, ptz}); + *sx = screenPosition.x(); + *sy = screenPosition.y(); + *sz = 0.f; +} + +////////////////////////////////////////////////////////////////////////// +void EditorViewportWidget::ViewToWorldRay(const QPoint& vp, Vec3& raySrc, Vec3& rayDir) const +{ + QRect rc = m_rcClient; + + Vec3 pos0, pos1; + float wx, wy, wz; + UnProjectFromScreen(vp.x(), rc.bottom() - vp.y(), 0, &wx, &wy, &wz); + if (!_finite(wx) || !_finite(wy) || !_finite(wz)) + { + return; + } + if (fabs(wx) > 1000000 || fabs(wy) > 1000000 || fabs(wz) > 1000000) + { + return; + } + pos0(wx, wy, wz); + UnProjectFromScreen(vp.x(), rc.bottom() - vp.y(), 1, &wx, &wy, &wz); + if (!_finite(wx) || !_finite(wy) || !_finite(wz)) + { + return; + } + if (fabs(wx) > 1000000 || fabs(wy) > 1000000 || fabs(wz) > 1000000) + { + return; + } + pos1(wx, wy, wz); + + Vec3 v = (pos1 - pos0); + v = v.GetNormalized(); + + raySrc = pos0; + rayDir = v; +} + +////////////////////////////////////////////////////////////////////////// +float EditorViewportWidget::GetScreenScaleFactor(const Vec3& worldPoint) const +{ + float dist = m_Camera.GetPosition().GetDistance(worldPoint); + if (dist < m_Camera.GetNearPlane()) + { + dist = m_Camera.GetNearPlane(); + } + return dist; +} +////////////////////////////////////////////////////////////////////////// +float EditorViewportWidget::GetScreenScaleFactor(const CCamera& camera, const Vec3& object_position) +{ + Vec3 camPos = camera.GetPosition(); + float dist = camPos.GetDistance(object_position); + return dist; +} + +////////////////////////////////////////////////////////////////////////// +void EditorViewportWidget::OnDestroy() +{ + DestroyRenderContext(); +} + +////////////////////////////////////////////////////////////////////////// +bool EditorViewportWidget::CheckRespondToInput() const +{ + if (!Editor::EditorQtApplication::IsActive()) + { + return false; + } + + if (!hasFocus() && !m_renderViewport->hasFocus()) + { + return false; + } + + return true; +} + +////////////////////////////////////////////////////////////////////////// +bool EditorViewportWidget::HitTest(const QPoint& point, HitContext& hitInfo) +{ + hitInfo.camera = &m_Camera; + hitInfo.pExcludedObject = GetCameraObject(); + return QtViewport::HitTest(point, hitInfo); +} + +////////////////////////////////////////////////////////////////////////// +bool EditorViewportWidget::IsBoundsVisible(const AABB& box) const +{ + // If at least part of bbox is visible then its visible. + return m_Camera.IsAABBVisible_F(AABB(box.min, box.max)); +} + +////////////////////////////////////////////////////////////////////////// +void EditorViewportWidget::CenterOnSelection() +{ + if (!GetIEditor()->GetSelection()->IsEmpty()) + { + // Get selection bounds & center + CSelectionGroup* sel = GetIEditor()->GetSelection(); + AABB selectionBounds = sel->GetBounds(); + CenterOnAABB(selectionBounds); + } +} + +void EditorViewportWidget::CenterOnAABB(const AABB& aabb) +{ + Vec3 selectionCenter = aabb.GetCenter(); + + // Minimum center size is 40cm + const float minSelectionRadius = 0.4f; + const float selectionSize = std::max(minSelectionRadius, aabb.GetRadius()); + + // Move camera 25% further back than required + const float centerScale = 1.25f; + + // Decompose original transform matrix + const Matrix34& originalTM = GetViewTM(); + AffineParts affineParts; + affineParts.SpectralDecompose(originalTM); + + // Forward vector is y component of rotation matrix + Matrix33 rotationMatrix(affineParts.rot); + const Vec3 viewDirection = rotationMatrix.GetColumn1().GetNormalized(); + + // Compute adjustment required by FOV != 90 degrees + const float fov = GetFOV(); + const float fovScale = (1.0f / tan(fov * 0.5f)); + + // Compute new transform matrix + const float distanceToTarget = selectionSize * fovScale * centerScale; + const Vec3 newPosition = selectionCenter - (viewDirection * distanceToTarget); + Matrix34 newTM = Matrix34(rotationMatrix, newPosition); + + // Set new orbit distance + m_orbitDistance = distanceToTarget; + m_orbitDistance = fabs(m_orbitDistance); + + SetViewTM(newTM); +} + +void EditorViewportWidget::CenterOnSliceInstance() +{ + AzToolsFramework::EntityIdList selectedEntityList; + AzToolsFramework::ToolsApplicationRequestBus::BroadcastResult(selectedEntityList, &AzToolsFramework::ToolsApplicationRequests::GetSelectedEntities); + + AZ::SliceComponent::SliceInstanceAddress sliceAddress; + AzToolsFramework::ToolsApplicationRequestBus::BroadcastResult(sliceAddress, + &AzToolsFramework::ToolsApplicationRequestBus::Events::FindCommonSliceInstanceAddress, selectedEntityList); + + if (!sliceAddress.IsValid()) + { + return; + } + + AZ::EntityId sliceRootEntityId; + AzToolsFramework::ToolsApplicationRequestBus::BroadcastResult(sliceRootEntityId, + &AzToolsFramework::ToolsApplicationRequestBus::Events::GetRootEntityIdOfSliceInstance, sliceAddress); + + if (!sliceRootEntityId.IsValid()) + { + return; + } + + AzToolsFramework::ToolsApplicationRequestBus::Broadcast( + &AzToolsFramework::ToolsApplicationRequestBus::Events::SetSelectedEntities, AzToolsFramework::EntityIdList{sliceRootEntityId}); + + const AZ::SliceComponent::InstantiatedContainer* instantiatedContainer = sliceAddress.GetInstance()->GetInstantiated(); + + AABB aabb(Vec3(std::numeric_limits::max()), Vec3(-std::numeric_limits::max())); + for (AZ::Entity* entity : instantiatedContainer->m_entities) + { + CEntityObject* entityObject = nullptr; + AzToolsFramework::ComponentEntityEditorRequestBus::EventResult(entityObject, entity->GetId(), + &AzToolsFramework::ComponentEntityEditorRequestBus::Events::GetSandboxObject); + AABB box; + entityObject->GetBoundBox(box); + aabb.Add(box.min); + aabb.Add(box.max); + } + CenterOnAABB(aabb); +} + +////////////////////////////////////////////////////////////////////////// +void EditorViewportWidget::SetFOV(float fov) +{ + if (m_pCameraFOVVariable) + { + m_pCameraFOVVariable->Set(fov); + } + else + { + m_camFOV = fov; + } + + if (m_viewPane) + { + m_viewPane->OnFOVChanged(fov); + } +} + +////////////////////////////////////////////////////////////////////////// +float EditorViewportWidget::GetFOV() const +{ + if (m_viewSourceType == ViewSourceType::SequenceCamera) + { + CBaseObject* cameraObject = GetCameraObject(); + + AZ::EntityId cameraEntityId; + AzToolsFramework::ComponentEntityObjectRequestBus::EventResult(cameraEntityId, cameraObject, &AzToolsFramework::ComponentEntityObjectRequestBus::Events::GetAssociatedEntityId); + if (cameraEntityId.IsValid()) + { + // component Camera + float fov = DEFAULT_FOV; + Camera::CameraRequestBus::EventResult(fov, cameraEntityId, &Camera::CameraComponentRequests::GetFov); + return AZ::DegToRad(fov); + } + } + + if (m_pCameraFOVVariable) + { + float fov; + m_pCameraFOVVariable->Get(fov); + return fov; + } + else if (m_viewEntityId.IsValid()) + { + float fov = AZ::RadToDeg(m_camFOV); + Camera::CameraRequestBus::EventResult(fov, m_viewEntityId, &Camera::CameraComponentRequests::GetFov); + return AZ::DegToRad(fov); + } + + return m_camFOV; +} + +////////////////////////////////////////////////////////////////////////// +bool EditorViewportWidget::CreateRenderContext() +{ + return true; +} + +////////////////////////////////////////////////////////////////////////// +void EditorViewportWidget::DestroyRenderContext() +{ +} + +////////////////////////////////////////////////////////////////////////// +void EditorViewportWidget::SetDefaultCamera() +{ + if (IsDefaultCamera()) + { + return; + } + ResetToViewSourceType(ViewSourceType::None); + gEnv->p3DEngine->GetPostEffectBaseGroup()->SetParam("Dof_Active", 0.0f); + GetViewManager()->SetCameraObjectId(m_cameraObjectId); + SetName(m_defaultViewName); + SetViewTM(m_defaultViewTM); + PostCameraSet(); +} + +////////////////////////////////////////////////////////////////////////// +bool EditorViewportWidget::IsDefaultCamera() const +{ + return m_viewSourceType == ViewSourceType::None; +} + +////////////////////////////////////////////////////////////////////////// +void EditorViewportWidget::SetSequenceCamera() +{ + if (m_viewSourceType == ViewSourceType::SequenceCamera) + { + // Reset if we were checked before + SetDefaultCamera(); + } + else + { + ResetToViewSourceType(ViewSourceType::SequenceCamera); + + SetName(tr("Sequence Camera")); + SetViewTM(GetViewTM()); + + GetViewManager()->SetCameraObjectId(m_cameraObjectId); + PostCameraSet(); + + // ForceAnimation() so Track View will set the Camera params + // if a camera is animated in the sequences. + if (GetIEditor() && GetIEditor()->GetAnimation()) + { + GetIEditor()->GetAnimation()->ForceAnimation(); + } + } +} + +////////////////////////////////////////////////////////////////////////// +void EditorViewportWidget::SetComponentCamera(const AZ::EntityId& entityId) +{ + ResetToViewSourceType(ViewSourceType::CameraComponent); + SetViewEntity(entityId); +} + +////////////////////////////////////////////////////////////////////////// +void EditorViewportWidget::SetEntityAsCamera(const AZ::EntityId& entityId, bool lockCameraMovement) +{ + ResetToViewSourceType(ViewSourceType::AZ_Entity); + SetViewEntity(entityId, lockCameraMovement); +} + +void EditorViewportWidget::SetFirstComponentCamera() +{ + AZ::EBusAggregateResults results; + Camera::CameraBus::BroadcastResult(results, &Camera::CameraRequests::GetCameras); + AZStd::sort_heap(results.values.begin(), results.values.end()); + AZ::EntityId entityId; + if (results.values.size() > 0) + { + entityId = results.values[0]; + } + SetComponentCamera(entityId); +} + +////////////////////////////////////////////////////////////////////////// +void EditorViewportWidget::SetSelectedCamera() +{ + AZ::EBusAggregateResults cameraList; + Camera::CameraBus::BroadcastResult(cameraList, &Camera::CameraRequests::GetCameras); + if (cameraList.values.size() > 0) + { + AzToolsFramework::EntityIdList selectedEntityList; + AzToolsFramework::ToolsApplicationRequests::Bus::BroadcastResult(selectedEntityList, &AzToolsFramework::ToolsApplicationRequests::GetSelectedEntities); + for (const AZ::EntityId& entityId : selectedEntityList) + { + if (AZStd::find(cameraList.values.begin(), cameraList.values.end(), entityId) != cameraList.values.end()) + { + SetComponentCamera(entityId); + } + } + } +} + +////////////////////////////////////////////////////////////////////////// +bool EditorViewportWidget::IsSelectedCamera() const +{ + CBaseObject* pCameraObject = GetCameraObject(); + if (pCameraObject && pCameraObject == GetIEditor()->GetSelectedObject()) + { + return true; + } + + AzToolsFramework::EntityIdList selectedEntityList; + AzToolsFramework::ToolsApplicationRequests::Bus::BroadcastResult( + selectedEntityList, &AzToolsFramework::ToolsApplicationRequests::GetSelectedEntities); + + if ((m_viewSourceType == ViewSourceType::CameraComponent || m_viewSourceType == ViewSourceType::AZ_Entity) + && !selectedEntityList.empty() + && AZStd::find(selectedEntityList.begin(), selectedEntityList.end(), m_viewEntityId) != selectedEntityList.end()) + { + return true; + } + + return false; +} + +////////////////////////////////////////////////////////////////////////// +void EditorViewportWidget::CycleCamera() +{ + // None -> Sequence -> LegacyCamera -> ... LegacyCamera -> CameraComponent -> ... CameraComponent -> None + // AZ_Entity has been intentionally left out of the cycle for now. + switch (m_viewSourceType) + { + case EditorViewportWidget::ViewSourceType::None: + { + SetFirstComponentCamera(); + break; + } + case EditorViewportWidget::ViewSourceType::SequenceCamera: + { + AZ_Error("EditorViewportWidget", false, "Legacy cameras no longer exist, unable to set sequence camera."); + break; + } + case EditorViewportWidget::ViewSourceType::LegacyCamera: + { + AZ_Warning("EditorViewportWidget", false, "Legacy cameras no longer exist, using first found component camera instead."); + SetFirstComponentCamera(); + break; + } + case EditorViewportWidget::ViewSourceType::CameraComponent: + { + AZ::EBusAggregateResults results; + Camera::CameraBus::BroadcastResult(results, &Camera::CameraRequests::GetCameras); + AZStd::sort_heap(results.values.begin(), results.values.end()); + auto&& currentCameraIterator = AZStd::find(results.values.begin(), results.values.end(), m_viewEntityId); + if (currentCameraIterator != results.values.end()) + { + ++currentCameraIterator; + if (currentCameraIterator != results.values.end()) + { + SetComponentCamera(*currentCameraIterator); + break; + } + } + SetDefaultCamera(); + break; + } + case EditorViewportWidget::ViewSourceType::AZ_Entity: + { + // we may decide to have this iterate over just selected entities + SetDefaultCamera(); + break; + } + default: + { + SetDefaultCamera(); + break; + } + } +} + +void EditorViewportWidget::SetViewFromEntityPerspective(const AZ::EntityId& entityId) +{ + SetViewAndMovementLockFromEntityPerspective(entityId, false); +} + +void EditorViewportWidget::SetViewAndMovementLockFromEntityPerspective(const AZ::EntityId& entityId, bool lockCameraMovement) +{ + if (!m_ignoreSetViewFromEntityPerspective) + { + SetEntityAsCamera(entityId, lockCameraMovement); + } +} + +bool EditorViewportWidget::GetActiveCameraPosition(AZ::Vector3& cameraPos) +{ + if (m_pPrimaryViewport == this) + { + if (GetIEditor()->IsInGameMode()) + { + const Vec3 camPos = m_engine->GetRenderingCamera().GetPosition(); + cameraPos = LYVec3ToAZVec3(camPos); + } + else + { + // Use viewTM, which is synced with the camera and guaranteed to be up-to-date + cameraPos = LYVec3ToAZVec3(m_viewTM.GetTranslation()); + } + + return true; + } + + return false; +} + +void EditorViewportWidget::OnStartPlayInEditor() +{ + if (m_viewEntityId.IsValid()) + { + m_viewEntityIdCachedForEditMode = m_viewEntityId; + AZ::EntityId runtimeEntityId; + AzToolsFramework::EditorEntityContextRequestBus::Broadcast( + &AzToolsFramework::EditorEntityContextRequestBus::Events::MapEditorIdToRuntimeId, + m_viewEntityId, runtimeEntityId); + + m_viewEntityId = runtimeEntityId; + } +} + +void EditorViewportWidget::OnStopPlayInEditor() +{ + if (m_viewEntityIdCachedForEditMode.IsValid()) + { + m_viewEntityId = m_viewEntityIdCachedForEditMode; + m_viewEntityIdCachedForEditMode.SetInvalid(); + } +} + +////////////////////////////////////////////////////////////////////////// +void EditorViewportWidget::OnCameraFOVVariableChanged([[maybe_unused]] IVariable* var) +{ + if (m_viewPane) + { + m_viewPane->OnFOVChanged(GetFOV()); + } +} + +////////////////////////////////////////////////////////////////////////// +void EditorViewportWidget::HideCursor() +{ + if (m_bCursorHidden || !gSettings.viewports.bHideMouseCursorWhenCaptured) + { + return; + } + + qApp->setOverrideCursor(Qt::BlankCursor); +#if AZ_TRAIT_OS_PLATFORM_APPLE + StartFixedCursorMode(this); +#endif + m_bCursorHidden = true; +} + +////////////////////////////////////////////////////////////////////////// +void EditorViewportWidget::ShowCursor() +{ + if (!m_bCursorHidden || !gSettings.viewports.bHideMouseCursorWhenCaptured) + { + return; + } + +#if AZ_TRAIT_OS_PLATFORM_APPLE + StopFixedCursorMode(); +#endif + qApp->restoreOverrideCursor(); + m_bCursorHidden = false; +} + +bool EditorViewportWidget::IsKeyDown(Qt::Key key) const +{ + return m_keyDown.contains(key); +} + +////////////////////////////////////////////////////////////////////////// +void EditorViewportWidget::PushDisableRendering() +{ + assert(m_disableRenderingCount >= 0); + ++m_disableRenderingCount; +} + +////////////////////////////////////////////////////////////////////////// +void EditorViewportWidget::PopDisableRendering() +{ + assert(m_disableRenderingCount >= 1); + --m_disableRenderingCount; +} + +////////////////////////////////////////////////////////////////////////// +bool EditorViewportWidget::IsRenderingDisabled() const +{ + return m_disableRenderingCount > 0; +} + +////////////////////////////////////////////////////////////////////////// +QPoint EditorViewportWidget::WidgetToViewport(const QPoint &point) const +{ + return point * WidgetToViewportFactor(); +} + +QPoint EditorViewportWidget::ViewportToWidget(const QPoint &point) const +{ + return point / WidgetToViewportFactor(); +} + +////////////////////////////////////////////////////////////////////////// +QSize EditorViewportWidget::WidgetToViewport(const QSize &size) const +{ + return size * WidgetToViewportFactor(); +} + +////////////////////////////////////////////////////////////////////////// +void EditorViewportWidget::BeginUndoTransaction() +{ + PushDisableRendering(); +} + +////////////////////////////////////////////////////////////////////////// +void EditorViewportWidget::EndUndoTransaction() +{ + PopDisableRendering(); + Update(); +} + +void EditorViewportWidget::UpdateCurrentMousePos(const QPoint& newPosition) +{ + m_prevMousePos = m_mousePos; + m_mousePos = newPosition; +} + +void* EditorViewportWidget::GetSystemCursorConstraintWindow() const +{ + AzFramework::SystemCursorState systemCursorState = AzFramework::SystemCursorState::Unknown; + + AzFramework::InputSystemCursorRequestBus::EventResult( + systemCursorState, AzFramework::InputDeviceMouse::Id, &AzFramework::InputSystemCursorRequests::GetSystemCursorState); + + const bool systemCursorConstrained = + (systemCursorState == AzFramework::SystemCursorState::ConstrainedAndHidden || + systemCursorState == AzFramework::SystemCursorState::ConstrainedAndVisible); + + return systemCursorConstrained ? renderOverlayHWND() : nullptr; +} + +void EditorViewportWidget::BuildDragDropContext(AzQtComponents::ViewportDragContext& context, const QPoint& pt) +{ + const auto scaledPoint = WidgetToViewport(pt); + QtViewport::BuildDragDropContext(context, scaledPoint); +} + +void EditorViewportWidget::RestoreViewportAfterGameMode() +{ + Matrix34 preGameModeViewTM = m_preGameModeViewTM; + + QString text = QString("You are exiting Game Mode. Would you like to restore the camera in the viewport to where it was before you entered Game Mode?

This option can always be changed in the General Preferences tab of the Editor Settings, by toggling the \"%1\" option.

").arg(EditorPreferencesGeneralRestoreViewportCameraSettingName); + QString restoreOnExitGameModePopupDisabledRegKey("Editor/AutoHide/ViewportCameraRestoreOnExitGameMode"); + + // Read the popup disabled registry value + QSettings settings; + QVariant restoreOnExitGameModePopupDisabledRegValue = settings.value(restoreOnExitGameModePopupDisabledRegKey); + + // Has the user previously disabled being asked about restoring the camera on exiting game mode? + if (restoreOnExitGameModePopupDisabledRegValue.isNull()) + { + // No, ask them now + QMessageBox messageBox(QMessageBox::Question, "Lumberyard", text, QMessageBox::StandardButtons(QMessageBox::No | QMessageBox::Yes), this); + messageBox.setDefaultButton(QMessageBox::Yes); + + QCheckBox* checkBox = new QCheckBox(QStringLiteral("Do not show this message again")); + messageBox.setCheckBox(checkBox); + + // Unconstrain the system cursor and make it visible before we show the dialog box, otherwise the user can't see the cursor. + AzFramework::InputSystemCursorRequestBus::Event(AzFramework::InputDeviceMouse::Id, + &AzFramework::InputSystemCursorRequests::SetSystemCursorState, + AzFramework::SystemCursorState::UnconstrainedAndVisible); + + int response = messageBox.exec(); + + if (checkBox->isChecked()) + { + settings.setValue(restoreOnExitGameModePopupDisabledRegKey, response); + } + + // Update the value only if the popup hasn't previously been disabled and the value has changed + bool newSetting = (response == QMessageBox::Yes); + if (newSetting != GetIEditor()->GetEditorSettings()->restoreViewportCamera) + { + GetIEditor()->GetEditorSettings()->restoreViewportCamera = newSetting; + GetIEditor()->GetEditorSettings()->Save(); + } + } + + bool restoreViewportCamera = GetIEditor()->GetEditorSettings()->restoreViewportCamera; + if (restoreViewportCamera) + { + SetViewTM(preGameModeViewTM); + } + else + { + SetViewTM(m_gameTM); + } +} + +void EditorViewportWidget::UpdateScene() +{ + AZStd::vector scenes; + AzFramework::SceneSystemRequestBus::BroadcastResult(scenes, &AzFramework::SceneSystemRequests::GetAllScenes); + if (scenes.size() > 0) + { + AZ::RPI::SceneNotificationBus::Handler::BusDisconnect(); + auto scene = scenes[0]; + m_renderViewport->SetScene(scene); + AZ::RPI::SceneNotificationBus::Handler::BusConnect(m_renderViewport->GetViewportContext()->GetRenderScene()->GetId()); + } +} + +void EditorViewportWidget::UpdateCameraFromViewportContext() +{ + // If we're not updating because the cry camera position changed, we should make sure our position gets copied back to the Cry Camera + if (m_updatingCameraPosition) + { + return; + } + + auto cameraState = m_renderViewport->GetCameraState(); + AZ::Matrix3x4 matrix; + matrix.SetBasisAndTranslation(cameraState.m_side, cameraState.m_forward, cameraState.m_up, cameraState.m_position); + auto m = AZMatrix3x4ToLYMatrix3x4(matrix); + SetViewTM(m); + SetFOV(cameraState.m_fovOrZoom); + m_Camera.SetZRange(cameraState.m_nearClip, cameraState.m_farClip); +} + +void EditorViewportWidget::SetAsActiveViewport() +{ + auto viewportContextManager = AZ::Interface::Get(); + + const AZ::Name defaultContextName = viewportContextManager->GetDefaultViewportContextName(); + + // If another viewport was active before, restore its name to its per-ID one. + if (m_pPrimaryViewport && m_pPrimaryViewport != this && m_pPrimaryViewport->m_renderViewport) + { + auto viewportContext = m_pPrimaryViewport->m_renderViewport->GetViewportContext(); + if (viewportContext) + { + // Remove the old viewport's camera from the stack, as it's no longer the owning viewport + viewportContextManager->PopView(defaultContextName, viewportContext->GetDefaultView()); + viewportContextManager->RenameViewportContext(viewportContext, m_pPrimaryViewport->m_defaultViewportContextName); + } + } + + m_pPrimaryViewport = this; + if (m_renderViewport) + { + auto viewportContext = m_renderViewport->GetViewportContext(); + if (viewportContext) + { + // Push our camera onto the default viewport's view stack to preserve camera state continuity + // Other views can still be pushed on top of our view for e.g. game mode + viewportContextManager->PushView(defaultContextName, viewportContext->GetDefaultView()); + viewportContextManager->RenameViewportContext(viewportContext, defaultContextName); + } + } +} + +#include diff --git a/Code/Sandbox/Editor/Material/MaterialManager.cpp b/Code/Sandbox/Editor/Material/MaterialManager.cpp index 8f4269bb3e..dee903dfe4 100644 --- a/Code/Sandbox/Editor/Material/MaterialManager.cpp +++ b/Code/Sandbox/Editor/Material/MaterialManager.cpp @@ -550,7 +550,6 @@ void CMaterialManager::ReloadDirtyMaterials() } } } - } ////////////////////////////////////////////////////////////////////////// diff --git a/Gems/AtomLyIntegration/CryRenderAtomShim/AtomShim_CRELensOptics.cpp b/Gems/AtomLyIntegration/CryRenderAtomShim/AtomShim_CRELensOptics.cpp deleted file mode 100644 index 7b642b95e7..0000000000 --- a/Gems/AtomLyIntegration/CryRenderAtomShim/AtomShim_CRELensOptics.cpp +++ /dev/null @@ -1,29 +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 "CryRenderOther_precompiled.h" -#include "../Common/RendElements/CRELensOptics.h" - - -CRELensOptics::CRELensOptics(void) -{ - mfSetType(eDATA_LensOptics); - mfUpdateFlags(FCEF_TRANSFORM); -} -CRELensOptics::~CRELensOptics(void) {} - -bool CRELensOptics::mfCompile([[maybe_unused]] CParserBin& Parser, [[maybe_unused]] SParserFrame& Frame){ return true; } - -void CRELensOptics::mfPrepare([[maybe_unused]] bool bCheckOverflow) {} - -bool CRELensOptics::mfDraw([[maybe_unused]] CShader* ef, [[maybe_unused]] SShaderPass* sfm) { return true; } \ No newline at end of file diff --git a/Gems/AtomLyIntegration/CryRenderAtomShim/AtomShim_DevBuffer.cpp b/Gems/AtomLyIntegration/CryRenderAtomShim/AtomShim_DevBuffer.cpp deleted file mode 100644 index 01e16e49d5..0000000000 --- a/Gems/AtomLyIntegration/CryRenderAtomShim/AtomShim_DevBuffer.cpp +++ /dev/null @@ -1,192 +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 "CryRenderOther_precompiled.h" - -////////////////////////////////////////////////////////////////////////////////////// -buffer_handle_t CDeviceBufferManager::Create_Locked(BUFFER_BIND_TYPE, BUFFER_USAGE, size_t) -{ - return buffer_handle_t(); -} - -////////////////////////////////////////////////////////////////////////////////////// -void CDeviceBufferManager::Destroy_Locked(buffer_handle_t) -{ -} - -////////////////////////////////////////////////////////////////////////////////////// -void* CDeviceBufferManager::BeginRead_Locked([[maybe_unused]] buffer_handle_t handle) -{ - return nullptr; -} - -////////////////////////////////////////////////////////////////////////////////////// -void* CDeviceBufferManager::BeginWrite_Locked([[maybe_unused]] buffer_handle_t handle) -{ - return nullptr; -} - -////////////////////////////////////////////////////////////////////////////////////// -void CDeviceBufferManager::EndReadWrite_Locked([[maybe_unused]] buffer_handle_t handle) -{ -} - -////////////////////////////////////////////////////////////////////////////////////// -bool CDeviceBufferManager::UpdateBuffer_Locked([[maybe_unused]] buffer_handle_t handle, const void*, size_t) -{ - return false; -} - -////////////////////////////////////////////////////////////////////////////////////// -size_t CDeviceBufferManager::Size_Locked(buffer_handle_t) -{ - return 0; -} - -////////////////////////////////////////////////////////////////////////////////////// -CDeviceBufferManager::CDeviceBufferManager() -{ -} - -////////////////////////////////////////////////////////////////////////////////////// -CDeviceBufferManager::~CDeviceBufferManager() -{ -} - -////////////////////////////////////////////////////////////////////////////////////// -void CDeviceBufferManager::LockDevMan() -{ -} - -////////////////////////////////////////////////////////////////////////////////////// -void CDeviceBufferManager::UnlockDevMan() -{ -} - -////////////////////////////////////////////////////////////////////////////////////// -bool CDeviceBufferManager::Init() -{ - return true; -} - -////////////////////////////////////////////////////////////////////////////////////// -bool CDeviceBufferManager::Shutdown() -{ - return true; -} - -////////////////////////////////////////////////////////////////////////////////////// -void CDeviceBufferManager::Sync([[maybe_unused]] uint32 framdid) -{ -} - -////////////////////////////////////////////////////////////////////////////////////// -void CDeviceBufferManager::Update(uint32, [[maybe_unused]] bool called_during_loading) -{ -} - -////////////////////////////////////////////////////////////////////////////////////// -buffer_handle_t CDeviceBufferManager::Create( - [[maybe_unused]] BUFFER_BIND_TYPE type - , [[maybe_unused]] BUFFER_USAGE usage - , [[maybe_unused]] size_t size) -{ - return ~0u; -} - -////////////////////////////////////////////////////////////////////////////////////// -void CDeviceBufferManager::Destroy([[maybe_unused]] buffer_handle_t handle) -{ -} - -////////////////////////////////////////////////////////////////////////////////////// -void* CDeviceBufferManager::BeginRead([[maybe_unused]] buffer_handle_t handle) -{ - return NULL; -} - -////////////////////////////////////////////////////////////////////////////////////// -void* CDeviceBufferManager::BeginWrite([[maybe_unused]] buffer_handle_t handle) -{ - return NULL; -} - -////////////////////////////////////////////////////////////////////////////////////// -void CDeviceBufferManager::EndReadWrite([[maybe_unused]] buffer_handle_t handle) -{ -} - -////////////////////////////////////////////////////////////////////////////////////// -bool CDeviceBufferManager::UpdateBuffer([[maybe_unused]] buffer_handle_t handle, [[maybe_unused]] const void* src, [[maybe_unused]] size_t size) -{ - return true; -} - -///////////////////////////////////////////////////////////// -// Legacy interface -// -// Use with care, can be removed at any point! -////////////////////////////////////////////////////////////////////////////////////// -void CDeviceBufferManager::ReleaseVBuffer(CVertexBuffer* pVB) -{ - SAFE_DELETE(pVB); -} -////////////////////////////////////////////////////////////////////////////////////// -void CDeviceBufferManager::ReleaseIBuffer(CIndexBuffer* pIB) -{ - SAFE_DELETE(pIB); -} -////////////////////////////////////////////////////////////////////////////////////// -CVertexBuffer* CDeviceBufferManager::CreateVBuffer([[maybe_unused]] size_t nVerts, const AZ::Vertex::Format& vertexFormat, [[maybe_unused]] const char* szName, [[maybe_unused]] BUFFER_USAGE usage) -{ - CVertexBuffer* pVB = new CVertexBuffer(NULL, vertexFormat); - return pVB; -} -////////////////////////////////////////////////////////////////////////////////////// -CIndexBuffer* CDeviceBufferManager::CreateIBuffer([[maybe_unused]] size_t nInds, [[maybe_unused]] const char* szNam, [[maybe_unused]] BUFFER_USAGE usage) -{ - CIndexBuffer* pIB = new CIndexBuffer(NULL); - return pIB; -} -////////////////////////////////////////////////////////////////////////////////////// -bool CDeviceBufferManager::UpdateVBuffer([[maybe_unused]] CVertexBuffer* pVB, [[maybe_unused]] void* pVerts, [[maybe_unused]] size_t nVerts) -{ - return true; -} -////////////////////////////////////////////////////////////////////////////////////// -bool CDeviceBufferManager::UpdateIBuffer([[maybe_unused]] CIndexBuffer* pIB, [[maybe_unused]] void* pInds, [[maybe_unused]] size_t nInds) -{ - return true; -} -////////////////////////////////////////////////////////////////////////////////////// -CVertexBuffer::~CVertexBuffer() -{ -} -////////////////////////////////////////////////////////////////////////////////////// -CIndexBuffer::~CIndexBuffer() -{ -} - -namespace AzRHI -{ - ConstantBuffer::~ConstantBuffer() - {} - - void ConstantBuffer::AddRef() - {} - - AZ::u32 ConstantBuffer::Release() - { - return 0; - } -} diff --git a/Gems/AtomLyIntegration/CryRenderAtomShim/AtomShim_PostProcess.cpp b/Gems/AtomLyIntegration/CryRenderAtomShim/AtomShim_PostProcess.cpp deleted file mode 100644 index 2596662259..0000000000 --- a/Gems/AtomLyIntegration/CryRenderAtomShim/AtomShim_PostProcess.cpp +++ /dev/null @@ -1,258 +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. - -/* -Todo: -* Erradicate StretchRect usage -* Cleanup code -* When we have a proper static branching support use it instead of shader switches inside code -*/ -#include "CryRenderOther_precompiled.h" -#include "AtomShim_Renderer.h" -#include "I3DEngine.h" -#include "../Common/PostProcess/PostEffects.h" - -///////////////////////////////////////////////////////////////////////////////////////////////////// -///////////////////////////////////////////////////////////////////////////////////////////////////// - -AZStd::unique_ptr CMotionBlur::m_Objects[3]; -CThreadSafeRendererContainer CMotionBlur::m_FillData[RT_COMMAND_BUF_COUNT]; - -bool CPostAA::Preprocess() -{ - return true; -} - -void CPostAA::Render() -{ -} - -void CMotionBlur::InsertNewElements() -{ -} - -void CMotionBlur::FreeData() -{ -} - -bool CMotionBlur::Preprocess() -{ - return true; -} - -void CMotionBlur::Render() -{ -} - -void CMotionBlur::GetPrevObjToWorldMat([[maybe_unused]] CRenderObject* pObj, Matrix44A& res) -{ - res = Matrix44(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); -} - -void CMotionBlur::OnBeginFrame() -{ -} - - -bool CSunShafts::Preprocess() -{ - return true; -} - -void CSunShafts::Render() -{ -} - - -void CFilterSharpening::Render() -{ -} -void CFilterBlurring::Render() -{ -} - - -void CUnderwaterGodRays::Render() -{ -} - -void CVolumetricScattering::Render() -{ -} - -void CWaterDroplets::Render() -{ -} - -void CWaterFlow::Render() -{ -} - - -void CWaterRipples::AddHit([[maybe_unused]] const Vec3& vPos, [[maybe_unused]] const float scale, [[maybe_unused]] const float strength) -{ -} - -void CWaterRipples::DEBUG_DrawWaterHits() -{ -} - -bool CWaterRipples::Preprocess() -{ - return true; -} - -void CWaterRipples::Reset([[maybe_unused]] bool bOnSpecChange) -{ -} - -void CWaterRipples::Render() -{ -} - -void CScreenFrost::Render() -{ -} - -bool CRainDrops::Preprocess() -{ - return true; -} -void CRainDrops::Render() -{ -} - -bool CFlashBang::Preprocess() -{ - return true; -} - -void CFlashBang::Render() -{ -} - -void CAlienInterference::Render() -{ -} - -void CGhostVision::Render() -{ -} - -void CHudSilhouettes::Render() -{ -} - -void CColorGrading::Render() -{ -} - -void CWaterVolume::Render() -{ -} - -void CSceneRain::CreateBuffers([[maybe_unused]] uint16 nVerts, [[maybe_unused]] void*& pINpVB, [[maybe_unused]] SVF_P3F_C4B_T2F* pVtxList) -{ -} - -int CSceneRain::CreateResources() -{ - return 1; -} - -void CSceneRain::Release() -{ -} - -void CSceneRain::Render() -{ -} - -bool CSceneSnow::Preprocess() -{ - return true; -} -void CSceneSnow::Render() -{ -} - -int CSceneSnow::CreateResources() -{ - return 1; -} - -void CSceneSnow::Release() -{ -} - -void CImageGhosting::Render() -{ -} - -void CFilterKillCamera::Render() -{ -} - -void CUberGamePostProcess::Render() -{ -} - -void CSoftAlphaTest::Render() -{ -} - -void CScreenBlood::Render() { } - -void CPost3DRenderer::Render() -{ -} - -///////////////////////////////////////////////////////////////////////////////////////////////////// - - -namespace WaterVolumeStaticData -{ - void GetMemoryUsage([[maybe_unused]] ICrySizer* pSizer){} -} -///////////////////////////////////////////////////////////////////////////////////////////////////// - -bool CSceneRain::Preprocess() { return true; } -//void CSceneRain::Render() {} -void CSceneRain::Reset([[maybe_unused]] bool bOnSpecChange) {} -void CSceneRain::OnLostDevice() {} - -const char* CSceneRain::GetName() const {return 0; } -const char* CRainDrops::GetName() const {return 0; } - -///////////////////////////////////////////////////////////////////////////////////////////////////// - -void CSceneSnow::Reset([[maybe_unused]] bool bOnSpecChange) {} - - -const char* CSceneSnow::GetName() const {return 0; } - -///////////////////////////////////////////////////////////////////////////////////////////////////// - -bool CREPostProcess::mfDraw([[maybe_unused]] CShader* ef, [[maybe_unused]] SShaderPass* sfm) -{ - return true; -} - -///////////////////////////////////////////////////////////////////////////////////////////////////// - -void ScreenFader::Render() -{ - -} - -///////////////////////////////////////////////////////////////////////////////////////////////////// \ No newline at end of file diff --git a/Gems/AtomLyIntegration/CryRenderAtomShim/AtomShim_RERender.cpp b/Gems/AtomLyIntegration/CryRenderAtomShim/AtomShim_RERender.cpp deleted file mode 100644 index ca5b0a9c4a..0000000000 --- a/Gems/AtomLyIntegration/CryRenderAtomShim/AtomShim_RERender.cpp +++ /dev/null @@ -1,164 +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 "CryRenderOther_precompiled.h" -#include "AtomShim_Renderer.h" -#include "I3DEngine.h" - -//======================================================================= - -bool CRESky::mfDraw([[maybe_unused]] CShader* ef, [[maybe_unused]] SShaderPass* sfm) -{ - return true; -} - -bool CREHDRSky::mfDraw([[maybe_unused]] CShader* ef, [[maybe_unused]] SShaderPass* sfm) -{ - return true; -} - -bool CREFogVolume::mfDraw([[maybe_unused]] CShader* ef, [[maybe_unused]] SShaderPass* sfm) -{ - return true; -} - -bool CREWaterVolume::mfDraw([[maybe_unused]] CShader* ef, [[maybe_unused]] SShaderPass* sfm) -{ - return true; -} - -void CREWaterOcean::FrameUpdate() -{ -} - -void CREWaterOcean::Create([[maybe_unused]] uint32 nVerticesCount, [[maybe_unused]] SVF_P3F_C4B_T2F* pVertices, [[maybe_unused]] uint32 nIndicesCount, [[maybe_unused]] const void* pIndices, [[maybe_unused]] uint32 nIndexSizeof) -{ -} - -void CREWaterOcean::ReleaseOcean() -{ -} - -bool CREWaterOcean::mfDraw([[maybe_unused]] CShader* ef, [[maybe_unused]] SShaderPass* sfm) -{ - return true; -} - -CREOcclusionQuery::~CREOcclusionQuery() -{ - mfReset(); -} - -void CREOcclusionQuery::mfReset() -{ - m_nOcclusionID = 0; -} - -uint32 CREOcclusionQuery::m_nQueriesPerFrameCounter = 0; -uint32 CREOcclusionQuery::m_nReadResultNowCounter = 0; -uint32 CREOcclusionQuery::m_nReadResultTryCounter = 0; - -bool CREOcclusionQuery::mfDraw([[maybe_unused]] CShader* ef, [[maybe_unused]] SShaderPass* sfm) -{ - return true; -} -bool CREOcclusionQuery::mfReadResult_Now(void) -{ - return true; -} -bool CREOcclusionQuery::mfReadResult_Try([[maybe_unused]] uint32 nDefaultNumSamples) -{ - return true; -} -bool CREOcclusionQuery::RT_ReadResult_Try([[maybe_unused]] uint32 nDefaultNumSamples) -{ - return true; -} - -bool CREMeshImpl::mfPreDraw([[maybe_unused]] SShaderPass* sl) -{ - return true; -} - -bool CREMeshImpl::mfDraw([[maybe_unused]] CShader* ef, [[maybe_unused]] SShaderPass* sl) -{ - return true; -} - -bool CREHDRProcess::mfDraw([[maybe_unused]] CShader* ef, [[maybe_unused]] SShaderPass* sfm) -{ - return true; -} - -bool CREDeferredShading::mfDraw([[maybe_unused]] CShader* ef, [[maybe_unused]] SShaderPass* sfm) -{ - return true; -} - -bool CREBeam::mfDraw([[maybe_unused]] CShader* ef, [[maybe_unused]] SShaderPass* sl) -{ - return true; -} - -bool CREImposter::mfDraw([[maybe_unused]] CShader* ef, [[maybe_unused]] SShaderPass* pPass) -{ - return true; -} - -bool CRECloud::mfDraw([[maybe_unused]] CShader* ef, [[maybe_unused]] SShaderPass* pPass) -{ - return true; -} - -bool CRECloud::UpdateImposter([[maybe_unused]] CRenderObject* pObj) -{ - return true; -} - -bool CRECloud::GenerateCloudImposter([[maybe_unused]] CShader* pShader, [[maybe_unused]] CShaderResources* pRes, [[maybe_unused]] CRenderObject* pObject) -{ - return true; -} - -bool CREImposter::UpdateImposter() -{ - return true; -} - -bool CREVolumeObject::mfDraw([[maybe_unused]] CShader* ef, [[maybe_unused]] SShaderPass* sfm) -{ - return true; -} - -#if !defined(EXCLUDE_DOCUMENTATION_PURPOSE) -bool CREPrismObject::mfDraw([[maybe_unused]] CShader* ef, [[maybe_unused]] SShaderPass* sfm) -{ - return true; -} -#endif // EXCLUDE_DOCUMENTATION_PURPOSE - -bool CREGameEffect::mfDraw([[maybe_unused]] CShader* ef, [[maybe_unused]] SShaderPass* sfm) -{ - return true; -} - -void CRELensOptics::ClearResources() -{ -} - -#if defined(USE_GEOM_CACHES) -bool CREGeomCache::mfDraw([[maybe_unused]] CShader* pShader, [[maybe_unused]] SShaderPass* pShaderPass) -{ - return true; -} -#endif diff --git a/Gems/AtomLyIntegration/CryRenderAtomShim/AtomShim_RendPipeline.cpp b/Gems/AtomLyIntegration/CryRenderAtomShim/AtomShim_RendPipeline.cpp deleted file mode 100644 index 1686c56400..0000000000 --- a/Gems/AtomLyIntegration/CryRenderAtomShim/AtomShim_RendPipeline.cpp +++ /dev/null @@ -1,192 +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 : NULL device specific implementation using shaders pipeline. - - -#include "CryRenderOther_precompiled.h" -#include "AtomShim_Renderer.h" -#include "Common/RenderView.h" -#include "RenderBus.h" - -//============================================================================================ -// Init Shaders rendering - -void CAtomShimRenderer::EF_Init() -{ - m_RP.m_MaxVerts = 600; - m_RP.m_MaxTris = 300; - - //================================================== - // Init RenderObjects - { - m_RP.m_nNumObjectsInPool = 384; // magic number set by Cry. The regular pipe uses a constant set to 1024 - - if (m_RP.m_ObjectsPool != nullptr) - { - for (int j = 0; j < (int)(m_RP.m_nNumObjectsInPool * RT_COMMAND_BUF_COUNT); j++) - { - CRenderObject* pRendObj = &m_RP.m_ObjectsPool[j]; - pRendObj->~CRenderObject(); - } - CryModuleMemalignFree(m_RP.m_ObjectsPool); - } - - // we use a plain allocation and placement new here to garantee the alignment, when using array new, the compiler can store it's size and break the alignment - m_RP.m_ObjectsPool = (CRenderObject*)CryModuleMemalign(sizeof(CRenderObject) * (m_RP.m_nNumObjectsInPool * RT_COMMAND_BUF_COUNT), 16); - for (int j = 0; j < (int)(m_RP.m_nNumObjectsInPool * RT_COMMAND_BUF_COUNT); j++) - { - new(&m_RP.m_ObjectsPool[j])CRenderObject(); - } - - - CRenderObject** arrPrefill = (CRenderObject**)(alloca(m_RP.m_nNumObjectsInPool * sizeof(CRenderObject*))); - for (int j = 0; j < RT_COMMAND_BUF_COUNT; j++) - { - for (int k = 0; k < m_RP.m_nNumObjectsInPool; ++k) - { - arrPrefill[k] = &m_RP.m_ObjectsPool[j * m_RP.m_nNumObjectsInPool + k]; - } - - m_RP.m_TempObjects[j].PrefillContainer(arrPrefill, m_RP.m_nNumObjectsInPool); - m_RP.m_TempObjects[j].resize(0); - } - } - // Init identity RenderObject - SAFE_DELETE(m_RP.m_pIdendityRenderObject); - m_RP.m_pIdendityRenderObject = aznew CRenderObject(); - m_RP.m_pIdendityRenderObject->Init(); - m_RP.m_pIdendityRenderObject->m_II.m_AmbColor = Col_White; - m_RP.m_pIdendityRenderObject->m_II.m_Matrix.SetIdentity(); - m_RP.m_pIdendityRenderObject->m_RState = 0; - m_RP.m_pIdendityRenderObject->m_ObjFlags |= FOB_RENDERER_IDENDITY_OBJECT; - -} - -void CAtomShimRenderer::FX_SetClipPlane ([[maybe_unused]] bool bEnable, [[maybe_unused]] float* pPlane, [[maybe_unused]] bool bRefract) -{ -} - -void CAtomShimRenderer::FX_PipelineShutdown([[maybe_unused]] bool bFastShutdown) -{ - uint32 i, j; - - for (int n = 0; n < 2; n++) - { - for (j = 0; j < 2; j++) - { - for (i = 0; i < CREClientPoly::m_PolysStorage[n][j].Num(); i++) - { - CREClientPoly::m_PolysStorage[n][j][i]->Release(false); - } - CREClientPoly::m_PolysStorage[n][j].Free(); - } - } -} - -void CAtomShimRenderer::EF_Release([[maybe_unused]] int nFlags) -{ -} - -//========================================================================== - -void CAtomShimRenderer::FX_SetState(int st, int AlphaRef, [[maybe_unused]] int RestoreState) -{ - m_RP.m_CurState = st; - m_RP.m_CurAlphaRef = AlphaRef; -} -void CRenderer::FX_SetStencilState([[maybe_unused]] int st, [[maybe_unused]] uint32 nStencRef, [[maybe_unused]] uint32 nStencMask, [[maybe_unused]] uint32 nStencWriteMask, [[maybe_unused]] bool bForceFullReadMask) -{ -} - -//================================================================================= - -// Initialize of the new shader pipeline (only 2d) -void CRenderer::FX_Start([[maybe_unused]] CShader* ef, [[maybe_unused]] int nTech, [[maybe_unused]] CShaderResources* Res, [[maybe_unused]] IRenderElement* re) -{ - m_RP.m_Frame++; -} - -void CRenderer::FX_CheckOverflow([[maybe_unused]] int nVerts, [[maybe_unused]] int nInds, [[maybe_unused]] IRenderElement* re, [[maybe_unused]] int* nNewVerts, [[maybe_unused]] int* nNewInds) -{ -} - -uint32 CRenderer::EF_GetDeferredLightsNum([[maybe_unused]] const eDeferredLightType eLightType) -{ - return 0; -} - -int CRenderer::EF_AddDeferredLight([[maybe_unused]] const CDLight& pLight, float, [[maybe_unused]] const SRenderingPassInfo& passInfo, [[maybe_unused]] const SRendItemSorter& rendItemSorter) -{ - return 0; -} - -void CRenderer::EF_ClearDeferredLightsList() -{ -} - -void CRenderer::EF_ReleaseDeferredData() -{ -} - -uint8 CRenderer::EF_AddDeferredClipVolume([[maybe_unused]] const IClipVolume* pClipVolume) -{ - return 0; -} - - -bool CRenderer::EF_SetDeferredClipVolumeBlendData([[maybe_unused]] const IClipVolume* pClipVolume, [[maybe_unused]] const SClipVolumeBlendInfo& blendInfo) -{ - return false; -} - -void CRenderer::EF_ClearDeferredClipVolumesList() -{ -} - -//======================================================================================== - -void CAtomShimRenderer::EF_EndEf3D([[maybe_unused]] const int nFlags, [[maybe_unused]] const int nPrecacheUpdateId, [[maybe_unused]] const int nNearPrecacheUpdateId, [[maybe_unused]] const SRenderingPassInfo& passInfo) -{ - //m_RP.m_TI[m_RP.m_nFillThreadID].m_RealTime = iTimer->GetCurrTime(); - EF_RemovePolysFromScene(); - - // Only render the UI Canvas and the Console on the main window - // If we're not in the editor, don't bother to check viewport. - if (!gEnv->IsEditor() || m_currContext == nullptr || m_currContext->m_isMainViewport) - { - EBUS_EVENT(AZ::RenderNotificationsBus, OnScene3DEnd); - } - - int nThreadID = m_pRT->GetThreadList(); - SRendItem::m_RecurseLevel[nThreadID]--; -} - -//double timeFtoI, timeFtoL, timeQRound; -//int sSome; -void CAtomShimRenderer::EF_EndEf2D([[maybe_unused]] const bool bSort) -{ -} - -void CRenderView::PrepareForRendering() {} - -void CRenderView::PrepareForWriting() {} - -void CRenderView::ClearRenderItems() {} - -void CRenderView::FreeRenderItems() {} - -CRenderView::CRenderView() {} - -CRenderView::~CRenderView() {} - diff --git a/Gems/AtomLyIntegration/CryRenderAtomShim/AtomShim_RenderAuxGeom.cpp b/Gems/AtomLyIntegration/CryRenderAtomShim/AtomShim_RenderAuxGeom.cpp deleted file mode 100644 index 955b240514..0000000000 --- a/Gems/AtomLyIntegration/CryRenderAtomShim/AtomShim_RenderAuxGeom.cpp +++ /dev/null @@ -1,688 +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 "CryRenderOther_precompiled.h" -#include "AtomShim_Renderer.h" -#include "AtomShim_RenderAuxGeom.h" - -#include -#include -#include - -CAtomShimRenderAuxGeom* CAtomShimRenderAuxGeom::s_pThis = NULL; - -namespace -{ - using DrawFunction = AZStd::function; - void Handle16BitIndices(const vtx_idx* ind, uint32_t numIndices, DrawFunction drawFunc) - { - constexpr bool copyIndicesToUint32 = sizeof(vtx_idx) != sizeof(uint32_t); // mobile platforms use 16 bit vtx_idx - if constexpr(copyIndicesToUint32) - { - uint32_t* indices = new uint32_t[numIndices]; - for (int i = 0; i < numIndices; ++i) - { - indices[i] = ind[i]; - } - drawFunc(indices); - delete[] indices; - } - else - { - // re-interpret because on mobile vtx_idx is a uint16 - // Additionally the else case should not be taken on mobile - // because sizeof(uint16) < sizeof(uint32). - const uint32_t* indices = reinterpret_cast(ind); - drawFunc(indices); - } - } - - AZ::RPI::AuxGeomDraw::DrawStyle LyDrawStyleToAZDrawStyle(bool bSolid, EBoundingBoxDrawStyle bbDrawStyle) - { - AZ::RPI::AuxGeomDraw::DrawStyle drawStyle = AZ::RPI::AuxGeomDraw::DrawStyle::Solid; - if (!bSolid) - { - drawStyle = AZ::RPI::AuxGeomDraw::DrawStyle::Line; - } - else if (bbDrawStyle == eBBD_Extremes_Color_Encoded) - { - drawStyle = AZ::RPI::AuxGeomDraw::DrawStyle::Shaded; // Not the same but shows a difference - } - return drawStyle; - } - - AZ::Aabb LyAABBToAZAabbWithFixup(const AABB& source) - { - AABB fixed; - fixed.min.x = AZStd::min(source.min.x, source.max.x); - fixed.min.y = AZStd::min(source.min.y, source.max.y); - fixed.min.z = AZStd::min(source.min.z, source.max.z); - fixed.max.x = AZStd::max(source.min.x, source.max.x); - fixed.max.y = AZStd::max(source.min.y, source.max.y); - fixed.max.z = AZStd::max(source.min.z, source.max.z); - return LyAABBToAZAabb(fixed); - } - -} - -CAtomShimRenderAuxGeom::CAtomShimRenderAuxGeom(CAtomShimRenderer& renderer) - : m_renderer(&renderer) -{ -} - -CAtomShimRenderAuxGeom::~CAtomShimRenderAuxGeom() -{ -} - -void CAtomShimRenderAuxGeom::BeginFrame() -{ -} - -void CAtomShimRenderAuxGeom::EndFrame() -{ -} - -void CAtomShimRenderAuxGeom::SetViewProjOverride(const AZ::Matrix4x4& viewProj) -{ - auto defaultScene = AZ::RPI::RPISystemInterface::Get()->GetDefaultScene(); - if (auto auxGeom = AZ::RPI::AuxGeomFeatureProcessorInterface::GetDrawQueueForScene(defaultScene)) - { - m_viewProjOverrideIndex = auxGeom->AddViewProjOverride(viewProj); - } -} - -void CAtomShimRenderAuxGeom::UnsetViewProjOverride() -{ - m_viewProjOverrideIndex = -1; -} - -void CAtomShimRenderAuxGeom::SetRenderFlags(const SAuxGeomRenderFlags& renderFlags) -{ - m_cryRenderFlags = renderFlags; - m_drawArgs.m_depthTest = renderFlags.GetDepthTestFlag() == EAuxGeomPublicRenderflags_DepthTest::e_DepthTestOff ? - AZ::RPI::AuxGeomDraw::DepthTest::Off : AZ::RPI::AuxGeomDraw::DepthTest::On; -} - -SAuxGeomRenderFlags CAtomShimRenderAuxGeom::GetRenderFlags() -{ - return m_cryRenderFlags; -} - -void CAtomShimRenderAuxGeom::DrawPoint(const Vec3& v, const ColorB& col, uint8 size /* = 1 */) -{ - DrawPoints(&v, 1, col, size); -} - -void CAtomShimRenderAuxGeom::DrawPoints(const Vec3* v, uint32 numPoints, const ColorB* col, uint8 size /* = 1 */) -{ - auto defaultScene = AZ::RPI::RPISystemInterface::Get()->GetDefaultScene(); - if (auto auxGeom = AZ::RPI::AuxGeomFeatureProcessorInterface::GetDrawQueueForScene(defaultScene)) - { - AZ::Vector3* points = new AZ::Vector3[numPoints]; - AZ::Color* colors = new AZ::Color[numPoints]; - for (int i = 0; i < numPoints; ++i) - { - points[i] = LYVec3ToAZVec3(v[i]); - colors[i] = LYColorBToAZColor(col[i]); - } - AZ::RPI::AuxGeomDraw::AuxGeomDynamicDrawArguments drawArgs(m_drawArgs); - drawArgs.m_verts = points; - drawArgs.m_vertCount = numPoints; - drawArgs.m_colors = colors; - drawArgs.m_colorCount = numPoints; - drawArgs.m_size = size; - drawArgs.m_viewProjectionOverrideIndex = m_viewProjOverrideIndex; - - auxGeom->DrawPoints(drawArgs); - - delete[] points; - } -} - -void CAtomShimRenderAuxGeom::DrawPoints(const Vec3* v, uint32 numPoints, const ColorB& col, uint8 size /* = 1 */) -{ - auto defaultScene = AZ::RPI::RPISystemInterface::Get()->GetDefaultScene(); - if (auto auxGeom = AZ::RPI::AuxGeomFeatureProcessorInterface::GetDrawQueueForScene(defaultScene)) - { - AZ::Vector3* points = new AZ::Vector3[numPoints]; - for (int i = 0; i < numPoints; ++i) - { - points[i] = LYVec3ToAZVec3(v[i]); - } - AZ::Color color = LYColorBToAZColor(col); - - AZ::RPI::AuxGeomDraw::AuxGeomDynamicDrawArguments drawArgs; - drawArgs.m_verts = points; - drawArgs.m_vertCount = numPoints; - drawArgs.m_colors = &color; - drawArgs.m_colorCount = 1; - drawArgs.m_size = size; - drawArgs.m_viewProjectionOverrideIndex = m_viewProjOverrideIndex; - - auxGeom->DrawPoints(drawArgs); - - delete[] points; - } -} - -void CAtomShimRenderAuxGeom::DrawLine(const Vec3& v0, const ColorB& colV0, const Vec3& v1, const ColorB& colV1, float thickness /* = 1.0f */) -{ - const Vec3 verts[2] = {v0, v1}; - const ColorB colors[2] = {colV0, colV1}; - DrawLines(verts, 2, colors, thickness); -} - -void CAtomShimRenderAuxGeom::DrawLines(const Vec3* v, uint32 numPoints, const ColorB& col, float thickness /* = 1.0f */) -{ - auto defaultScene = AZ::RPI::RPISystemInterface::Get()->GetDefaultScene(); - if (auto auxGeom = AZ::RPI::AuxGeomFeatureProcessorInterface::GetDrawQueueForScene(defaultScene)) - { - AZ::Vector3* points = new AZ::Vector3[numPoints]; - for (int i = 0; i < numPoints; ++i) - { - points[i] = LYVec3ToAZVec3(v[i]); - } - - AZ::Color color = LYColorBToAZColor(col); - - AZ::RPI::AuxGeomDraw::AuxGeomDynamicDrawArguments drawArgs(m_drawArgs); - drawArgs.m_verts = points; - drawArgs.m_vertCount = numPoints; - drawArgs.m_colors = &color; - drawArgs.m_colorCount = 1; - drawArgs.m_size = thickness; - drawArgs.m_viewProjectionOverrideIndex = m_viewProjOverrideIndex; - auxGeom->DrawLines(drawArgs); - - delete[] points; - } -} - -void CAtomShimRenderAuxGeom::DrawLines(const Vec3* v, uint32 numPoints, const ColorB* col, float thickness /* = 1.0f */) -{ - auto defaultScene = AZ::RPI::RPISystemInterface::Get()->GetDefaultScene(); - if (auto auxGeom = AZ::RPI::AuxGeomFeatureProcessorInterface::GetDrawQueueForScene(defaultScene)) - { - AZ::Vector3* points = new AZ::Vector3[numPoints]; - AZ::Color* colors = new AZ::Color[numPoints]; - for (int i = 0; i < numPoints; ++i) - { - points[i] = LYVec3ToAZVec3(v[i]); - colors[i] = LYColorBToAZColor(col[i]); - } - - AZ::RPI::AuxGeomDraw::AuxGeomDynamicDrawArguments drawArgs(m_drawArgs); - drawArgs.m_verts = points; - drawArgs.m_vertCount = numPoints; - drawArgs.m_colors = colors; - drawArgs.m_colorCount = numPoints; - drawArgs.m_size = thickness; - drawArgs.m_viewProjectionOverrideIndex = m_viewProjOverrideIndex; - - auxGeom->DrawLines(drawArgs); - - delete[] points; - delete[] colors; - } -} - -void CAtomShimRenderAuxGeom::DrawLines(const Vec3* v, uint32 numPoints, const vtx_idx* ind, uint32 numIndices, const ColorB& col, float thickness /* = 1.0f */) -{ - auto defaultScene = AZ::RPI::RPISystemInterface::Get()->GetDefaultScene(); - if (auto auxGeom = AZ::RPI::AuxGeomFeatureProcessorInterface::GetDrawQueueForScene(defaultScene)) - { - AZ::Vector3* points = new AZ::Vector3[numPoints]; - for (int i = 0; i < numPoints; ++i) - { - points[i] = LYVec3ToAZVec3(v[i]); - } - - AZ::Color color = LYColorBToAZColor(col); - - AZ::RPI::AuxGeomDraw::AuxGeomDynamicIndexedDrawArguments drawArgs(m_drawArgs); - drawArgs.m_verts = points; - drawArgs.m_vertCount = numPoints; - drawArgs.m_indexCount = numIndices; - drawArgs.m_colors = &color; - drawArgs.m_colorCount = 1; - drawArgs.m_size = thickness; - drawArgs.m_viewProjectionOverrideIndex = m_viewProjOverrideIndex; - - Handle16BitIndices( - ind, numIndices, - [&drawArgs, auxGeom](const uint32_t* indices) - { - drawArgs.m_indices = indices; - auxGeom->DrawLines(drawArgs); - } - ); - - delete[] points; - } -} - -void CAtomShimRenderAuxGeom::DrawLines(const Vec3* v, uint32 numPoints, const vtx_idx* ind, uint32 numIndices, const ColorB* col, float thickness /* = 1.0f */) -{ - auto defaultScene = AZ::RPI::RPISystemInterface::Get()->GetDefaultScene(); - if (auto auxGeom = AZ::RPI::AuxGeomFeatureProcessorInterface::GetDrawQueueForScene(defaultScene)) - { - AZ::Vector3* points = new AZ::Vector3[numPoints]; - AZ::Color* colors = new AZ::Color[numPoints]; - for (int i = 0; i < numPoints; ++i) - { - points[i] = LYVec3ToAZVec3(v[i]); - colors[i] = LYColorBToAZColor(col[i]); - } - - AZ::RPI::AuxGeomDraw::AuxGeomDynamicIndexedDrawArguments drawArgs(m_drawArgs); - drawArgs.m_verts = points; - drawArgs.m_vertCount = numPoints; - drawArgs.m_indexCount = numIndices; - drawArgs.m_colors = colors; - drawArgs.m_colorCount = numPoints; - drawArgs.m_size = thickness; - drawArgs.m_viewProjectionOverrideIndex = m_viewProjOverrideIndex; - - Handle16BitIndices( - ind, numIndices, - [&drawArgs, auxGeom](const uint32_t* indices) - { - drawArgs.m_indices = indices; - auxGeom->DrawLines(drawArgs); - } - ); - - delete[] points; - delete[] colors; - } -} - -void CAtomShimRenderAuxGeom::DrawPolyline(const Vec3* v, uint32 numPoints, bool closed, const ColorB& col, float thickness /* = 1.0f */) -{ - auto defaultScene = AZ::RPI::RPISystemInterface::Get()->GetDefaultScene(); - if (auto auxGeom = AZ::RPI::AuxGeomFeatureProcessorInterface::GetDrawQueueForScene(defaultScene)) - { - AZ::Vector3* points = new AZ::Vector3[numPoints]; - for (int i = 0; i < numPoints; ++i) - { - points[i] = LYVec3ToAZVec3(v[i]); - } - - AZ::Color color = LYColorBToAZColor(col); - AZ::RPI::AuxGeomDraw::PolylineEnd polylineClosed = closed ? AZ::RPI::AuxGeomDraw::PolylineEnd::Closed : AZ::RPI::AuxGeomDraw::PolylineEnd::Open; - - AZ::RPI::AuxGeomDraw::AuxGeomDynamicDrawArguments drawArgs; - drawArgs.m_verts = points; - drawArgs.m_vertCount = numPoints; - drawArgs.m_colors = &color; - drawArgs.m_colorCount = 1; - drawArgs.m_size = thickness; - drawArgs.m_viewProjectionOverrideIndex = m_viewProjOverrideIndex; - - auxGeom->DrawPolylines(drawArgs, polylineClosed); - - delete[] points; - } -} - -void CAtomShimRenderAuxGeom::DrawPolyline(const Vec3* v, uint32 numPoints, bool closed, const ColorB* col, float thickness /* = 1.0f */) -{ - auto defaultScene = AZ::RPI::RPISystemInterface::Get()->GetDefaultScene(); - if (auto auxGeom = AZ::RPI::AuxGeomFeatureProcessorInterface::GetDrawQueueForScene(defaultScene)) - { - AZ::Vector3* points = new AZ::Vector3[numPoints]; - AZ::Color* colors = new AZ::Color[numPoints]; - for (int i = 0; i < numPoints; ++i) - { - points[i] = LYVec3ToAZVec3(v[i]); - colors[i] = LYColorBToAZColor(col[i]); - } - - AZ::RPI::AuxGeomDraw::PolylineEnd polylineClosed = closed ? AZ::RPI::AuxGeomDraw::PolylineEnd::Closed : AZ::RPI::AuxGeomDraw::PolylineEnd::Open; - - AZ::RPI::AuxGeomDraw::AuxGeomDynamicDrawArguments drawArgs; - drawArgs.m_verts = points; - drawArgs.m_vertCount = numPoints; - drawArgs.m_colors = colors; - drawArgs.m_colorCount = numPoints; - drawArgs.m_size = thickness; - drawArgs.m_viewProjectionOverrideIndex = m_viewProjOverrideIndex; - auxGeom->DrawPolylines(drawArgs, polylineClosed); - - delete[] points; - delete[] colors; - } -} - -void CAtomShimRenderAuxGeom::DrawTriangle(const Vec3& v0, const ColorB& colV0, const Vec3& v1, const ColorB& colV1, const Vec3& v2, const ColorB& colV2) -{ - auto defaultScene = AZ::RPI::RPISystemInterface::Get()->GetDefaultScene(); - if (auto auxGeom = AZ::RPI::AuxGeomFeatureProcessorInterface::GetDrawQueueForScene(defaultScene)) - { - AZ::Vector3 points[3] = - { - LYVec3ToAZVec3(v0), - LYVec3ToAZVec3(v1), - LYVec3ToAZVec3(v2), - }; - - AZ::Color colors[3] = - { - LYColorBToAZColor(colV0), - LYColorBToAZColor(colV1), - LYColorBToAZColor(colV2), - }; - - AZ::RPI::AuxGeomDraw::AuxGeomDynamicDrawArguments drawArgs; - drawArgs.m_verts = points; - drawArgs.m_vertCount = 3; - drawArgs.m_colors = colors; - drawArgs.m_colorCount = 3; - drawArgs.m_opacityType = (colV0.a == 0xFF && colV1.a == 0xFF && colV2.a == 0xFF) ? AZ::RPI::AuxGeomDraw::OpacityType::Opaque : AZ::RPI::AuxGeomDraw::OpacityType::Translucent; - drawArgs.m_viewProjectionOverrideIndex = m_viewProjOverrideIndex; - - auxGeom->DrawTriangles(drawArgs); - } -} - -void CAtomShimRenderAuxGeom::DrawTriangles(const Vec3* v, uint32 numPoints, const ColorB& col) -{ - auto defaultScene = AZ::RPI::RPISystemInterface::Get()->GetDefaultScene(); - if (auto auxGeom = AZ::RPI::AuxGeomFeatureProcessorInterface::GetDrawQueueForScene(defaultScene)) - { - AZ::Vector3* points = new AZ::Vector3[numPoints]; - for (int i = 0; i < numPoints; ++i) - { - points[i] = LYVec3ToAZVec3(v[i]); - } - AZ::Color color = LYColorBToAZColor(col); - - AZ::RPI::AuxGeomDraw::AuxGeomDynamicDrawArguments drawArgs; - drawArgs.m_verts = points; - drawArgs.m_vertCount = numPoints; - drawArgs.m_colors = &color; - drawArgs.m_colorCount = 1; - drawArgs.m_viewProjectionOverrideIndex = m_viewProjOverrideIndex; - - auxGeom->DrawTriangles(drawArgs); - delete[] points; - } -} - -void CAtomShimRenderAuxGeom::DrawTriangles(const Vec3* v, uint32 numPoints, const ColorB* col) -{ - auto defaultScene = AZ::RPI::RPISystemInterface::Get()->GetDefaultScene(); - if (auto auxGeom = AZ::RPI::AuxGeomFeatureProcessorInterface::GetDrawQueueForScene(defaultScene)) - { - AZ::Vector3* points = new AZ::Vector3[numPoints]; - AZ::Color* colors = new AZ::Color[numPoints]; - for (int i = 0; i < numPoints; ++i) - { - points[i] = LYVec3ToAZVec3(v[i]); - colors[i] = LYColorBToAZColor(col[i]); - } - - AZ::RPI::AuxGeomDraw::AuxGeomDynamicDrawArguments drawArgs; - drawArgs.m_verts = points; - drawArgs.m_vertCount = 3; - drawArgs.m_colors = colors; - drawArgs.m_colorCount = numPoints; - drawArgs.m_viewProjectionOverrideIndex = m_viewProjOverrideIndex; - - auxGeom->DrawTriangles(drawArgs); - delete[] points; - delete[] colors; - } -} - -void CAtomShimRenderAuxGeom::DrawTriangles(const Vec3* v, uint32 numPoints, const vtx_idx* ind, uint32 numIndices, const ColorB& col) -{ - auto defaultScene = AZ::RPI::RPISystemInterface::Get()->GetDefaultScene(); - if (auto auxGeom = AZ::RPI::AuxGeomFeatureProcessorInterface::GetDrawQueueForScene(defaultScene)) - { - AZ::Vector3* points = new AZ::Vector3[numPoints]; - for (int i = 0; i < numPoints; ++i) - { - points[i] = LYVec3ToAZVec3(v[i]); - } - AZ::Color color = LYColorBToAZColor(col); - - AZ::RPI::AuxGeomDraw::AuxGeomDynamicIndexedDrawArguments drawArgs(m_drawArgs); - drawArgs.m_verts = points; - drawArgs.m_vertCount = numPoints; - drawArgs.m_indexCount = numIndices; - drawArgs.m_colors = &color; - drawArgs.m_colorCount = 1; - drawArgs.m_viewProjectionOverrideIndex = m_viewProjOverrideIndex; - - Handle16BitIndices( - ind, numIndices, - [&drawArgs, auxGeom](const uint32_t* indices) - { - drawArgs.m_indices = indices; - auxGeom->DrawTriangles(drawArgs); - } - ); - - delete[] points; - } -} - -void CAtomShimRenderAuxGeom::DrawTriangles(const Vec3* v, uint32 numPoints, const vtx_idx* ind, uint32 numIndices, const ColorB* col) -{ - auto defaultScene = AZ::RPI::RPISystemInterface::Get()->GetDefaultScene(); - if (auto auxGeom = AZ::RPI::AuxGeomFeatureProcessorInterface::GetDrawQueueForScene(defaultScene)) - { - AZ::Vector3* points = new AZ::Vector3[numPoints]; - AZ::Color* colors = new AZ::Color[numPoints]; - for (int i = 0; i < numPoints; ++i) - { - points[i] = LYVec3ToAZVec3(v[i]); - colors[i] = LYColorBToAZColor(col[i]); - } - - AZ::RPI::AuxGeomDraw::AuxGeomDynamicIndexedDrawArguments drawArgs(m_drawArgs); - drawArgs.m_verts = points; - drawArgs.m_vertCount = numPoints; - drawArgs.m_indexCount = numIndices; - drawArgs.m_colors = colors; - drawArgs.m_colorCount = numPoints; - drawArgs.m_viewProjectionOverrideIndex = m_viewProjOverrideIndex; - - Handle16BitIndices( - ind, numIndices, - [&drawArgs, auxGeom](const uint32_t* indices) - { - drawArgs.m_indices = indices; - auxGeom->DrawTriangles(drawArgs); - } - ); - - delete[] points; - delete[] colors; - } -} - -void CAtomShimRenderAuxGeom::DrawQuad(float width, float height, const Matrix34& matWorld, const ColorB& col, bool drawShaded) -{ - auto defaultScene = AZ::RPI::RPISystemInterface::Get()->GetDefaultScene(); - if (auto auxGeom = AZ::RPI::AuxGeomFeatureProcessorInterface::GetDrawQueueForScene(defaultScene)) - { - AZ::RPI::AuxGeomDraw::DrawStyle drawStyle = drawShaded ? AZ::RPI::AuxGeomDraw::DrawStyle::Shaded : AZ::RPI::AuxGeomDraw::DrawStyle::Solid; - AZ::Matrix3x4 local2World = LYTransformToAZMatrix3x4(matWorld); - auxGeom->DrawQuad(width, height, local2World, LYColorBToAZColor(col), drawStyle, m_drawArgs.m_depthTest); - } -} - -void CAtomShimRenderAuxGeom::DrawAABB(const AABB& aabb, bool bSolid, const ColorB& col, const EBoundingBoxDrawStyle& bbDrawStyle) -{ - auto defaultScene = AZ::RPI::RPISystemInterface::Get()->GetDefaultScene(); - if (auto auxGeom = AZ::RPI::AuxGeomFeatureProcessorInterface::GetDrawQueueForScene(defaultScene)) - { - auxGeom->DrawAabb(LyAABBToAZAabbWithFixup(aabb), LYColorBToAZColor(col), LyDrawStyleToAZDrawStyle(bSolid, bbDrawStyle), m_drawArgs.m_depthTest); - } -} - -void CAtomShimRenderAuxGeom::DrawAABBs(const AABB* aabb, uint32 aabbCount, bool bSolid, const ColorB& col, const EBoundingBoxDrawStyle& bbDrawStyle) -{ - auto defaultScene = AZ::RPI::RPISystemInterface::Get()->GetDefaultScene(); - if (auto auxGeom = AZ::RPI::AuxGeomFeatureProcessorInterface::GetDrawQueueForScene(defaultScene)) - { - for (int i = 0; i < aabbCount; ++aabbCount) - { - auxGeom->DrawAabb( - LyAABBToAZAabbWithFixup(aabb[i]), - LYColorBToAZColor(col), - LyDrawStyleToAZDrawStyle(bSolid, bbDrawStyle), - m_drawArgs.m_depthTest, - AZ::RPI::AuxGeomDraw::DepthWrite::On, - AZ::RPI::AuxGeomDraw::FaceCullMode::Back, - m_viewProjOverrideIndex); - } - } -} - -void CAtomShimRenderAuxGeom::DrawAABB(const AABB& aabb, const Matrix34& matWorld, bool bSolid, const ColorB& col, const EBoundingBoxDrawStyle& bbDrawStyle) -{ - auto defaultScene = AZ::RPI::RPISystemInterface::Get()->GetDefaultScene(); - if (auto auxGeom = AZ::RPI::AuxGeomFeatureProcessorInterface::GetDrawQueueForScene(defaultScene)) - { - AZ::Matrix3x4 transform = LYTransformToAZMatrix3x4(matWorld); - auxGeom->DrawAabb( - LyAABBToAZAabbWithFixup(aabb), - transform, - LYColorBToAZColor(col), - LyDrawStyleToAZDrawStyle(bSolid, bbDrawStyle), - m_drawArgs.m_depthTest, - AZ::RPI::AuxGeomDraw::DepthWrite::On, - AZ::RPI::AuxGeomDraw::FaceCullMode::Back, - m_viewProjOverrideIndex); - } -} - -void CAtomShimRenderAuxGeom::DrawOBB(const OBB& obb, const Vec3& pos, bool bSolid, const ColorB& col, const EBoundingBoxDrawStyle& bbDrawStyle) -{ - auto defaultScene = AZ::RPI::RPISystemInterface::Get()->GetDefaultScene(); - if (auto auxGeom = AZ::RPI::AuxGeomFeatureProcessorInterface::GetDrawQueueForScene(defaultScene)) - { - auxGeom->DrawObb(LyOBBtoAZObb(obb), LYVec3ToAZVec3(pos), LYColorBToAZColor(col), LyDrawStyleToAZDrawStyle(bSolid, bbDrawStyle), m_drawArgs.m_depthTest); - } -} - -void CAtomShimRenderAuxGeom::DrawOBB(const OBB& obb, const Matrix34& matWorld, bool bSolid, const ColorB& col, const EBoundingBoxDrawStyle& bbDrawStyle) -{ - auto defaultScene = AZ::RPI::RPISystemInterface::Get()->GetDefaultScene(); - if (auto auxGeom = AZ::RPI::AuxGeomFeatureProcessorInterface::GetDrawQueueForScene(defaultScene)) - { - AZ::Matrix3x4 transform = LYTransformToAZMatrix3x4(matWorld); - auxGeom->DrawObb(LyOBBtoAZObb(obb), transform, LYColorBToAZColor(col), LyDrawStyleToAZDrawStyle(bSolid, bbDrawStyle), m_drawArgs.m_depthTest); - } -} - -void CAtomShimRenderAuxGeom::DrawSphere(const Vec3& pos, float radius, const ColorB& col, bool drawShaded) -{ - auto defaultScene = AZ::RPI::RPISystemInterface::Get()->GetDefaultScene(); - if (auto auxGeom = AZ::RPI::AuxGeomFeatureProcessorInterface::GetDrawQueueForScene(defaultScene)) - { - AZ::RPI::AuxGeomDraw::DrawStyle drawStyle = drawShaded ? AZ::RPI::AuxGeomDraw::DrawStyle::Shaded : AZ::RPI::AuxGeomDraw::DrawStyle::Solid; - auxGeom->DrawSphere(LYVec3ToAZVec3(pos), radius, LYColorBToAZColor(col), drawStyle, m_drawArgs.m_depthTest); - } -} - -void CAtomShimRenderAuxGeom::DrawDisk(const Vec3& pos, const Vec3& dir, float radius, const ColorB& col, bool drawShaded) -{ - auto defaultScene = AZ::RPI::RPISystemInterface::Get()->GetDefaultScene(); - if (auto auxGeom = AZ::RPI::AuxGeomFeatureProcessorInterface::GetDrawQueueForScene(defaultScene)) - { - AZ::RPI::AuxGeomDraw::DrawStyle drawStyle = drawShaded ? AZ::RPI::AuxGeomDraw::DrawStyle::Shaded : AZ::RPI::AuxGeomDraw::DrawStyle::Solid; - auxGeom->DrawDisk(LYVec3ToAZVec3(pos), LYVec3ToAZVec3(dir), radius, LYColorBToAZColor(col), drawStyle, m_drawArgs.m_depthTest); - } -} - -void CAtomShimRenderAuxGeom::DrawCone(const Vec3& pos, const Vec3& dir, float radius, float height, const ColorB& col, bool drawShaded) -{ - auto defaultScene = AZ::RPI::RPISystemInterface::Get()->GetDefaultScene(); - if (auto auxGeom = AZ::RPI::AuxGeomFeatureProcessorInterface::GetDrawQueueForScene(defaultScene)) - { - AZ::RPI::AuxGeomDraw::DrawStyle drawStyle = drawShaded ? AZ::RPI::AuxGeomDraw::DrawStyle::Shaded : AZ::RPI::AuxGeomDraw::DrawStyle::Solid; - auxGeom->DrawCone(LYVec3ToAZVec3(pos), LYVec3ToAZVec3(dir), radius, height, LYColorBToAZColor(col), drawStyle, m_drawArgs.m_depthTest); - } -} - -void CAtomShimRenderAuxGeom::DrawCylinder(const Vec3& pos, const Vec3& dir, float radius, float height, const ColorB& col, bool drawShaded) -{ - auto defaultScene = AZ::RPI::RPISystemInterface::Get()->GetDefaultScene(); - if (auto auxGeom = AZ::RPI::AuxGeomFeatureProcessorInterface::GetDrawQueueForScene(defaultScene)) - { - AZ::RPI::AuxGeomDraw::DrawStyle drawStyle = drawShaded ? AZ::RPI::AuxGeomDraw::DrawStyle::Shaded : AZ::RPI::AuxGeomDraw::DrawStyle::Solid; - auxGeom->DrawCylinder(LYVec3ToAZVec3(pos), LYVec3ToAZVec3(dir), radius, height, LYColorBToAZColor(col), drawStyle, m_drawArgs.m_depthTest); - } -} - -void CAtomShimRenderAuxGeom::DrawBone(const Vec3& p, const Vec3& c, ColorB col) -{ - Vec3 vBoneVec = c - p; - float fBoneLength = vBoneVec.GetLength(); - - if (fBoneLength < 1e-4) - { - return; - } - - Matrix33 m33 = Matrix33::CreateRotationV0V1(Vec3(1, 0, 0), vBoneVec / fBoneLength); - Matrix34 m34 = Matrix34(m33, p); - - f32 t = min(0.01f, fBoneLength * 0.05f); - - //bone points in x-direction - Vec3 s = Vec3(ZERO); - Vec3 m0 = Vec3(t, +t, +t); - Vec3 m1 = Vec3(t, -t, +t); - Vec3 m2 = Vec3(t, -t, -t); - Vec3 m3 = Vec3(t, +t, -t); - Vec3 e = Vec3(fBoneLength, 0, 0); - - Vec3 VBuffer[6]; - ColorB CBuffer[6]; - - VBuffer[0] = m34 * s; - CBuffer[0] = RGBA8(0xff, 0x1f, 0x1f, 0x00); //start of bone (joint) - - VBuffer[1] = m34 * m0; - CBuffer[1] = col; - VBuffer[2] = m34 * m1; - CBuffer[2] = col; - VBuffer[3] = m34 * m2; - CBuffer[3] = col; - VBuffer[4] = m34 * m3; - CBuffer[4] = col; - - VBuffer[5] = m34 * e; - CBuffer[5] = RGBA8(0x07, 0x0f, 0x1f, 0x00); //end of bone - - - DrawLine(VBuffer[0], CBuffer[0], VBuffer[1], CBuffer[1]); - DrawLine(VBuffer[0], CBuffer[0], VBuffer[2], CBuffer[2]); - DrawLine(VBuffer[0], CBuffer[0], VBuffer[3], CBuffer[3]); - DrawLine(VBuffer[0], CBuffer[0], VBuffer[4], CBuffer[4]); - - DrawLine(VBuffer[1], CBuffer[1], VBuffer[2], CBuffer[2]); - DrawLine(VBuffer[2], CBuffer[2], VBuffer[3], CBuffer[3]); - DrawLine(VBuffer[3], CBuffer[3], VBuffer[4], CBuffer[4]); - DrawLine(VBuffer[4], CBuffer[4], VBuffer[1], CBuffer[1]); - - DrawLine(VBuffer[5], CBuffer[5], VBuffer[1], CBuffer[1]); - DrawLine(VBuffer[5], CBuffer[5], VBuffer[2], CBuffer[2]); - DrawLine(VBuffer[5], CBuffer[5], VBuffer[3], CBuffer[3]); - DrawLine(VBuffer[5], CBuffer[5], VBuffer[4], CBuffer[4]); -} diff --git a/Gems/AtomLyIntegration/CryRenderAtomShim/AtomShim_RenderAuxGeom.h b/Gems/AtomLyIntegration/CryRenderAtomShim/AtomShim_RenderAuxGeom.h deleted file mode 100644 index 50dc262e8d..0000000000 --- a/Gems/AtomLyIntegration/CryRenderAtomShim/AtomShim_RenderAuxGeom.h +++ /dev/null @@ -1,105 +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_CRYENGINE_RENDERDLL_XRENDERATOMSHIM_ATOMSHIMRENDERAUXGEOM_H -#define CRYINCLUDE_CRYENGINE_RENDERDLL_XRENDERATOMSHIM_ATOMSHIMRENDERAUXGEOM_H -#pragma once -#include "../Common/RenderAuxGeom.h" -#include -#include - -class CAtomShimRenderer; -class ICrySizer; - -class CAtomShimRenderAuxGeom - : public IRenderAuxGeom -{ -public: - // interface - virtual void SetRenderFlags(const SAuxGeomRenderFlags& renderFlags); - virtual SAuxGeomRenderFlags GetRenderFlags(); - - virtual void Flush() {} - virtual void Commit([[maybe_unused]] uint frames = 0) {} - virtual void Process() {} - - virtual void DrawPoint(const Vec3& v, const ColorB& col, uint8 size = 1); - virtual void DrawPoints(const Vec3* v, uint32 numPoints, const ColorB& col, uint8 size = 1); - virtual void DrawPoints(const Vec3* v, uint32 numPoints, const ColorB* col, uint8 size = 1); - - virtual void DrawLine(const Vec3& v0, const ColorB& colV0, const Vec3& v1, const ColorB& colV1, float thickness = 1.0f); - virtual void DrawLines(const Vec3* v, uint32 numPoints, const ColorB& col, float thickness = 1.0f); - virtual void DrawLines(const Vec3* v, uint32 numPoints, const ColorB* col, float thickness = 1.0f); - virtual void DrawLines(const Vec3* v, uint32 numPoints, const vtx_idx* ind, uint32 numIndices, const ColorB& col, float thickness = 1.0f); - virtual void DrawLines(const Vec3* v, uint32 numPoints, const vtx_idx* ind, uint32 numIndices, const ColorB* col, float thickness = 1.0f); - virtual void DrawPolyline(const Vec3* v, uint32 numPoints, bool closed, const ColorB& col, float thickness = 1.0f); - virtual void DrawPolyline(const Vec3* v, uint32 numPoints, bool closed, const ColorB* col, float thickness = 1.0f); - - virtual void DrawTriangle(const Vec3& v0, const ColorB& colV0, const Vec3& v1, const ColorB& colV1, const Vec3& v2, const ColorB& colV2); - virtual void DrawTriangles(const Vec3* v, uint32 numPoints, const ColorB& col); - virtual void DrawTriangles(const Vec3* v, uint32 numPoints, const ColorB* col); - virtual void DrawTriangles(const Vec3* v, uint32 numPoints, const vtx_idx* ind, uint32 numIndices, const ColorB& col); - virtual void DrawTriangles(const Vec3* v, uint32 numPoints, const vtx_idx* ind, uint32 numIndices, const ColorB* col); - - virtual void DrawQuad(float width, float height, const Matrix34& matWorld, const ColorB& col, bool drawShaded = true); - - virtual void DrawAABB(const AABB& aabb, bool bSolid, const ColorB& col, const EBoundingBoxDrawStyle& bbDrawStyle); - virtual void DrawAABBs(const AABB* aabb, uint32 aabbCount, bool bSolid, const ColorB& col, const EBoundingBoxDrawStyle& bbDrawStyle); - virtual void DrawAABB(const AABB& aabb, const Matrix34& matWorld, bool bSolid, const ColorB& col, const EBoundingBoxDrawStyle& bbDrawStyle); - - virtual void DrawOBB(const OBB& obb, const Vec3& pos, bool bSolid, const ColorB& col, const EBoundingBoxDrawStyle& bbDrawStyle); - virtual void DrawOBB(const OBB& obb, const Matrix34& matWorld, bool bSolid, const ColorB& col, const EBoundingBoxDrawStyle& bbDrawStyle); - - virtual void DrawSphere(const Vec3& pos, float radius, const ColorB& col, bool drawShaded = true); - virtual void DrawDisk(const Vec3& pos, const Vec3& dir, float radius, const ColorB& col, bool drawShaded = true); - virtual void DrawCone(const Vec3& pos, const Vec3& dir, float radius, float height, const ColorB& col, bool drawShaded = true); - virtual void DrawCylinder(const Vec3& pos, const Vec3& dir, float radius, float height, const ColorB& col, bool drawShaded = true); - - virtual void DrawBone(const Vec3& rParent, const Vec3& rBone, ColorB col); - - virtual void RenderText([[maybe_unused]] Vec3 pos, [[maybe_unused]] SDrawTextInfo& ti, [[maybe_unused]] const char* forma, [[maybe_unused]] va_list args) {} - virtual void RenderText_NoArgs([[maybe_unused]] Vec3 pos, [[maybe_unused]] SDrawTextInfo& ti, [[maybe_unused]] const char* text) {} - -public: - static CAtomShimRenderAuxGeom* Create(CAtomShimRenderer& renderer) - { - if (s_pThis == NULL) - { - s_pThis = new CAtomShimRenderAuxGeom(renderer); - } - return s_pThis; - } - -public: - ~CAtomShimRenderAuxGeom(); - - void BeginFrame(); - void EndFrame(); - - void SetViewProjOverride(const AZ::Matrix4x4& viewProj); - void UnsetViewProjOverride(); - -private: - CAtomShimRenderAuxGeom(CAtomShimRenderer& renderer); - - int32_t m_viewProjOverrideIndex = -1; - AZ::RPI::AuxGeomDraw::AuxGeomDynamicIndexedDrawArguments m_drawArgs; - - CAtomShimRenderer* m_renderer; - - static CAtomShimRenderAuxGeom* s_pThis; - - SAuxGeomRenderFlags m_cryRenderFlags; -}; - -#endif // NULL_RENDER_AUX_GEOM_H diff --git a/Gems/AtomLyIntegration/CryRenderAtomShim/AtomShim_Renderer.cpp b/Gems/AtomLyIntegration/CryRenderAtomShim/AtomShim_Renderer.cpp deleted file mode 100644 index 838dd9a20c..0000000000 --- a/Gems/AtomLyIntegration/CryRenderAtomShim/AtomShim_Renderer.cpp +++ /dev/null @@ -1,1678 +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 of the NULL renderer API - -#include "CryRenderOther_precompiled.h" -#include "AtomShim_Renderer.h" -#include -#include "IStereoRenderer.h" -#include "../Common/Textures/TextureManager.h" - -#include -#include -// init memory pool usage - -#include "GraphicsPipeline/FurBendData.h" - -#include -#include - -#include - -#include - -#include -#include -#include -#include -#include -#include -#include - -#include -#include - -#include - -#include //std::random_device - -CCryNameTSCRC CTexture::s_sClassName = CCryNameTSCRC("CTexture"); -CCryNameTSCRC CHWShader::s_sClassNameVS = CCryNameTSCRC("CHWShader_VS"); -CCryNameTSCRC CHWShader::s_sClassNamePS = CCryNameTSCRC("CHWShader_PS"); -CCryNameTSCRC CShader::s_sClassName = CCryNameTSCRC("CShader"); - -CAtomShimRenderer* gcpAtomShim = NULL; - - #ifdef _DEBUG -// static array used to check that calls to Set2DMode and Unset2DMode are matched. (static array initialized to zeros automatically). -int s_isIn2DMode[RT_COMMAND_BUF_COUNT]; -#endif - -////////////////////////////////////////////////////////////////////// - -class CNullColorGradingController - : public IColorGradingController -{ -public: - virtual int LoadColorChart([[maybe_unused]] const char* pChartFilePath) const { return 0; } - virtual int LoadDefaultColorChart() const { return 0; } - virtual void UnloadColorChart([[maybe_unused]] int texID) const {} - virtual void SetLayers([[maybe_unused]] const SColorChartLayer* pLayers, [[maybe_unused]] uint32 numLayers) {} -}; - -////////////////////////////////////////////////////////////////////// - -class CNullStereoRenderer - : public IStereoRenderer -{ -public: - virtual EStereoDevice GetDevice() { return STEREO_DEVICE_NONE; } - virtual EStereoDeviceState GetDeviceState() { return STEREO_DEVSTATE_UNSUPPORTED_DEVICE; } - virtual void GetInfo(EStereoDevice* device, EStereoMode* mode, EStereoOutput* output, EStereoDeviceState* state) const - { - if (device) - { - *device = STEREO_DEVICE_NONE; - } - if (mode) - { - *mode = STEREO_MODE_NO_STEREO; - } - if (output) - { - *output = STEREO_OUTPUT_STANDARD; - } - if (state) - { - *state = STEREO_DEVSTATE_OK; - } - } - virtual bool GetStereoEnabled() { return false; } - virtual float GetStereoStrength() { return 0; } - virtual float GetMaxSeparationScene([[maybe_unused]] bool half = true) { return 0; } - virtual float GetZeroParallaxPlaneDist() { return 0; } - virtual void GetNVControlValues([[maybe_unused]] bool& stereoEnabled, [[maybe_unused]] float& stereoStrength) {}; - virtual void OnHmdDeviceChanged() {} - virtual bool IsRenderingToHMD() override { return false; } - Status GetStatus() const override { return IStereoRenderer::Status::kIdle; } -}; - -////////////////////////////////////////////////////////////////////// -CAtomShimRenderer::CAtomShimRenderer() -{ - gcpAtomShim = this; - m_pAtomShimRenderAuxGeom = CAtomShimRenderAuxGeom::Create(*this); - m_pAtomShimColorGradingController = new CNullColorGradingController(); - m_pAtomShimStereoRenderer = new CNullStereoRenderer(); - m_pixelAspectRatio = 1.0f; - Camera::ActiveCameraRequestBus::Handler::BusConnect(); -} - -////////////////////////////////////////////////////////////////////////// -bool QueryIsFullscreen() -{ - return false; -} - - -#include - -namespace Platform -{ - WIN_HWND GetNativeWindowHandle(); -} - -////////////////////////////////////////////////////////////////////// -CAtomShimRenderer::~CAtomShimRenderer() -{ - Camera::ActiveCameraRequestBus::Handler::BusDisconnect(); - ShutDown(); - delete m_pAtomShimRenderAuxGeom; - delete m_pAtomShimColorGradingController; - delete m_pAtomShimStereoRenderer; -} - -////////////////////////////////////////////////////////////////////// -void CAtomShimRenderer::EnableTMU([[maybe_unused]] bool enable) -{ -} - -////////////////////////////////////////////////////////////////////// -void CAtomShimRenderer::CheckError([[maybe_unused]] const char* comment) -{ -} - -////////////////////////////////////////////////////////////////////// -void CAtomShimRenderer::BeginFrame() -{ - if (!m_isFinalInitializationDone) - { - // This will cause the default textures (such as the White texture) to be loaded. In legacy renderer it is called in CRenderer::PostInit - // but that is disabled for AtomShim because NULL_RENDERER is defined. Anyway, it would not work if we called it there because the Asset Catalog - // is not yet loaded when CRenderer::PostInit is called and we use it to load Atom textures. - // [GFX TODO] Do we want NULL_RENDERER defined for AtomShim? It would affect a lot of code in AtomShim if we removed that define. - InitSystemResources(FRR_SYSTEM_RESOURCES); - - // In the legacy renderer this is done in CRenderer::PostInit but that is only done is NULL_RENDERER is not defined. - if (gEnv->pCryFont) - { - m_pDefaultFont = gEnv->pCryFont->GetFont("default"); - if (!m_pDefaultFont) - { - CryWarning(VALIDATOR_MODULE_SYSTEM, VALIDATOR_ERROR, "Error getting default font"); - } - } - - AZ::Name apiName = AZ::RHI::Factory::Get().GetName(); - if (!apiName.IsEmpty()) - { - m_rendererDescription = AZStd::string::format("Atom using %s RHI", apiName.GetCStr()); - } - - // Initialize dynamic draw which is used for 2d drawing - const char* shaderFilepath = "Shaders/SimpleTextured.azshader"; - m_dynamicDraw = AZ::RPI::DynamicDrawInterface::Get()->CreateDynamicDrawContext( - AZ::RPI::RPISystemInterface::Get()->GetDefaultScene().get()); - AZ::Data::Instance shader = AZ::RPI::LoadShader(shaderFilepath); - m_dynamicDraw->InitShader(shader); - m_dynamicDraw->InitVertexFormat( - {{"POSITION", AZ::RHI::Format::R32G32B32_FLOAT}, - {"COLOR", AZ::RHI::Format::R8G8B8A8_UNORM}, - {"TEXCOORD0", AZ::RHI::Format::R32G32_FLOAT}}); - // enable the ability to change cull mode, blend mode, the depth state - m_dynamicDraw->AddDrawStateOptions( AZ::RPI::DynamicDrawContext::DrawStateOptions::BlendMode - | AZ::RPI::DynamicDrawContext::DrawStateOptions::PrimitiveType - | AZ::RPI::DynamicDrawContext::DrawStateOptions::DepthState - | AZ::RPI::DynamicDrawContext::DrawStateOptions::FaceCullMode); - m_dynamicDraw->EndInit(); - - // declare the two shader variants it will use - AZ::RPI::ShaderOptionList shaderOptionsClamp; - shaderOptionsClamp.push_back(AZ::RPI::ShaderOption(AZ::Name("o_useColorChannels"), AZ::Name("true"))); - shaderOptionsClamp.push_back(AZ::RPI::ShaderOption(AZ::Name("o_clamp"), AZ::Name("true"))); - m_shaderVariantClamp = m_dynamicDraw->UseShaderVariant(shaderOptionsClamp); - AZ::RPI::ShaderOptionList shaderOptionsWrap; - shaderOptionsWrap.push_back(AZ::RPI::ShaderOption(AZ::Name("o_useColorChannels"), AZ::Name("true"))); - shaderOptionsWrap.push_back(AZ::RPI::ShaderOption(AZ::Name("o_clamp"), AZ::Name("false"))); - m_shaderVariantWrap = m_dynamicDraw->UseShaderVariant(shaderOptionsWrap); - - m_dynamicDraw->NewDrawSrg(); - - m_isFinalInitializationDone = true; - } - - if (m_isInFrame) - { - // If there has not been an EndFrame since the latest BeginFrame then ignore this call to BeginFrame. - return; - } - - m_isInFrame = true; - - m_RP.m_TI[m_RP.m_nFillThreadID].m_nFrameID++; - m_RP.m_TI[m_RP.m_nFillThreadID].m_nFrameUpdateID++; - m_RP.m_TI[m_RP.m_nFillThreadID].m_RealTime = iTimer->GetCurrTime(); - - m_RP.m_TI[m_RP.m_nFillThreadID].m_matView.SetIdentity(); - m_RP.m_TI[m_RP.m_nFillThreadID].m_matProj.SetIdentity(); - - m_pAtomShimRenderAuxGeom->BeginFrame(); -} - -////////////////////////////////////////////////////////////////////// -bool CAtomShimRenderer::ChangeDisplay([[maybe_unused]] unsigned int width, [[maybe_unused]] unsigned int height, [[maybe_unused]] unsigned int bpp) -{ - return false; -} - -////////////////////////////////////////////////////////////////////// -void CAtomShimRenderer::ChangeViewport(unsigned int x, unsigned int y, unsigned int width, unsigned int height, bool bMainViewport, float scaleWidth, float scaleHeight) -{ - float fWidth = aznumeric_cast(width); - float fHeight = aznumeric_cast(height); - - width = aznumeric_cast(fWidth * scaleWidth); - height = aznumeric_cast(fHeight * scaleHeight); - - m_MainRTViewport.nX = x; - m_MainRTViewport.nY = y; - m_MainRTViewport.nWidth = width; - m_MainRTViewport.nHeight = height; - - m_width = m_nativeWidth = m_backbufferWidth = width; - m_height = m_nativeHeight = m_backbufferHeight = height; - - if (m_currContext) - { - m_currContext->m_width = width; - m_currContext->m_height = height; - m_currContext->m_isMainViewport = bMainViewport; - } -} - -void CAtomShimRenderer::RenderDebug([[maybe_unused]] bool bRenderStats) -{ -#if !defined(_RELEASE) - // debug render listeners - { - for (TListRenderDebugListeners::iterator itr = m_listRenderDebugListeners.begin(); - itr != m_listRenderDebugListeners.end(); - ++itr) - { - (*itr)->OnDebugDraw(); - } - } -#endif//_RELEASE -} - -void CAtomShimRenderer::EndFrame() -{ - if (!m_isInFrame) - { - // If there has not been a BeginFrame since the latest EndFrame then ignore this call to EndFrame. - // This can happen when EndFrame is called from UnloadLevel. - return; - } - - m_pAtomShimRenderAuxGeom->EndFrame(); - - EF_RenderTextMessages(); - - // Hack: Assume we're just rendering to the default ViewContext - // Proper multi viewport support will be handled after this shim is removed - if (!m_viewportContext) - { - auto viewContextManager = AZ::Interface::Get(); - auto viewportContext = viewContextManager->GetViewportContextByName(viewContextManager->GetDefaultViewportContextName()); - // If the viewportContext exists and is created with the default ID, we can safely assume control - if (viewportContext && viewportContext->GetId() == -10) - { - m_viewportContext = viewportContext; - } - } - - if (m_viewportContext) - { - m_viewportContext->SetRenderScene(AZ::RPI::RPISystemInterface::Get()->GetDefaultScene()); - m_viewportContext->RenderTick(); - } - - m_isInFrame = false; -} - -void CAtomShimRenderer::TryFlush() -{ -} - -void CAtomShimRenderer::GetMemoryUsage([[maybe_unused]] ICrySizer* Sizer) -{ -} - -WIN_HWND CAtomShimRenderer::GetHWND() -{ - return Platform::GetNativeWindowHandle(); -} - -bool CAtomShimRenderer::SetWindowIcon([[maybe_unused]] const char* path) -{ - return false; -} - -ERenderType CAtomShimRenderer::GetRenderType() const -{ - return eRT_Undefined; -} - -const char* CAtomShimRenderer::GetRenderDescription() const -{ - return m_rendererDescription.c_str(); -} - -void TexBlurAnisotropicVertical([[maybe_unused]] CTexture* pTex, [[maybe_unused]] int nAmount, [[maybe_unused]] float fScale, [[maybe_unused]] float fDistribution, [[maybe_unused]] bool bAlphaOnly) -{ -} - -//////////////////////////////////////////////////////////////////////////////////////////////////////// -//IMAGES DRAWING -//////////////////////////////////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////// -void CAtomShimRenderer::Draw2dImage([[maybe_unused]] float xpos, [[maybe_unused]] float ypos, [[maybe_unused]] float w, [[maybe_unused]] float h, [[maybe_unused]] int texture_id, [[maybe_unused]] float s0, [[maybe_unused]] float t0, [[maybe_unused]] float s1, [[maybe_unused]] float t1, [[maybe_unused]] float angle, [[maybe_unused]] float r, [[maybe_unused]] float g, [[maybe_unused]] float b, [[maybe_unused]] float a, [[maybe_unused]] float z) -{ -} - -////////////////////////////////////////////////////////////////////// -void CAtomShimRenderer::Push2dImage([[maybe_unused]] float xpos, [[maybe_unused]] float ypos, [[maybe_unused]] float w, [[maybe_unused]] float h, [[maybe_unused]] int texture_id, [[maybe_unused]] float s0, [[maybe_unused]] float t0, [[maybe_unused]] float s1, [[maybe_unused]] float t1, [[maybe_unused]] float angle, [[maybe_unused]] float r, [[maybe_unused]] float g, [[maybe_unused]] float b, [[maybe_unused]] float a, [[maybe_unused]] float z, [[maybe_unused]] float stereoDepth) -{ -} - -void CAtomShimRenderer::Draw2dImageList() -{ -} - -////////////////////////////////////////////////////////////////////// -void CAtomShimRenderer::DrawImage(float xpos, float ypos, float w, float h, int texture_id, float s0, float t0, float s1, float t1, float r, float g, float b, float a, bool filtered) -{ - float s[4], t[4]; - - s[0] = s0; - t[0] = 1.0f - t0; - s[1] = s1; - t[1] = 1.0f - t0; - s[2] = s1; - t[2] = 1.0f - t1; - s[3] = s0; - t[3] = 1.0f - t1; - - DrawImageWithUV(xpos, ypos, 0, w, h, texture_id, s, t, r, g, b, a, filtered); -} - -/////////////////////////////////////////// -void CAtomShimRenderer::DrawImageWithUV(float xpos, float ypos, float z, float w, float h, int texture_id, float s[4], float t[4], float r, float g, float b, float a, bool filtered) -{ - SetCullMode(R_CULL_DISABLE); - EF_SetColorOp(eCO_MODULATE, eCO_MODULATE, DEF_TEXARG0, DEF_TEXARG0); - EF_SetSrgbWrite(false); - - DWORD col = D3DRGBA(r, g, b, a); - - SVF_P3F_C4B_T2F vQuad[4]; - - vQuad[0].xyz.x = xpos; - vQuad[0].xyz.y = ypos; - vQuad[0].xyz.z = z; - vQuad[0].st = Vec2(s[0], t[0]); - vQuad[0].color.dcolor = col; - - vQuad[1].xyz.x = xpos + w; - vQuad[1].xyz.y = ypos; - vQuad[1].xyz.z = z; - vQuad[1].st = Vec2(s[1], t[1]); - vQuad[1].color.dcolor = col; - - vQuad[2].xyz.x = xpos; - vQuad[2].xyz.y = ypos + h; - vQuad[2].xyz.z = z; - vQuad[2].st = Vec2(s[3], t[3]); - vQuad[2].color.dcolor = col; - - vQuad[3].xyz.x = xpos + w; - vQuad[3].xyz.y = ypos + h; - vQuad[3].xyz.z = z; - vQuad[3].st = Vec2(s[2], t[2]); - vQuad[3].color.dcolor = col; - - STexState TS; - TS.SetFilterMode(filtered ? FILTER_BILINEAR : FILTER_POINT); - TS.SetClampMode(1, 1, 1); - SetTexture(texture_id); - - DrawDynVB(vQuad, nullptr, 4, 0, prtTriangleStrip); -} - -/////////////////////////////////////////// -void CAtomShimRenderer::DrawBuffer([[maybe_unused]] CVertexBuffer* pVBuf, [[maybe_unused]] CIndexBuffer* pIBuf, [[maybe_unused]] int nNumIndices, [[maybe_unused]] int nOffsIndex, [[maybe_unused]] const PublicRenderPrimitiveType nPrmode, [[maybe_unused]] int nVertStart, [[maybe_unused]] int nVertStop) -{ -} - -/////////////////////////////////////////// -void CAtomShimRenderer::DrawPrimitivesInternal([[maybe_unused]] CVertexBuffer* src, [[maybe_unused]] int vert_num, [[maybe_unused]] const eRenderPrimitiveType prim_type) -{ -} - -/////////////////////////////////////////// -void CRenderMesh::DrawImmediately() -{ -} - -/////////////////////////////////////////// -void CAtomShimRenderer::SetCullMode(int mode) -{ - AZ::RHI::CullMode cullMode = AZ::RHI::CullMode::None; - switch (mode) - { - case R_CULL_FRONT: - cullMode = AZ::RHI::CullMode::Front; - break; - case R_CULL_BACK: - cullMode = AZ::RHI::CullMode::Back; - break; - } - m_dynamicDraw->SetCullMode(cullMode); -} - -/////////////////////////////////////////// -bool CAtomShimRenderer::EnableFog([[maybe_unused]] bool enable) -{ - return false; -} - -//////////////////////////////////////////////////////////////////////////////////////////////////////// -//MISC EXTENSIONS -//////////////////////////////////////////////////////////////////////////////////////////////////////// - -/////////////////////////////////////////// -void CAtomShimRenderer::EnableVSync([[maybe_unused]] bool enable) -{ -} - -////////////////////////////////////////////////////////////////////// -void CAtomShimRenderer::SelectTMU([[maybe_unused]] int tnum) -{ -} - -//////////////////////////////////////////////////////////////////////////////////////////////////////// -//MATRIX FUNCTIONS -//////////////////////////////////////////////////////////////////////////////////////////////////////// - -/////////////////////////////////////////// -void CAtomShimRenderer::PushMatrix() -{ -} - -/////////////////////////////////////////// -void CAtomShimRenderer::RotateMatrix([[maybe_unused]] float a, [[maybe_unused]] float x, [[maybe_unused]] float y, [[maybe_unused]] float z) -{ -} - -void CAtomShimRenderer::RotateMatrix([[maybe_unused]] const Vec3& angles) -{ -} - -/////////////////////////////////////////// -void CAtomShimRenderer::TranslateMatrix([[maybe_unused]] float x, [[maybe_unused]] float y, [[maybe_unused]] float z) -{ -} - -void CAtomShimRenderer::MultMatrix([[maybe_unused]] const float* mat) -{ -} - -void CAtomShimRenderer::TranslateMatrix([[maybe_unused]] const Vec3& pos) -{ -} - -/////////////////////////////////////////// -void CAtomShimRenderer::ScaleMatrix([[maybe_unused]] float x, [[maybe_unused]] float y, [[maybe_unused]] float z) -{ -} - -/////////////////////////////////////////// -void CAtomShimRenderer::PopMatrix() -{ -} - -//////////////////////////////////////////////////////////////////////////////////////////////////////// -void CAtomShimRenderer::LoadMatrix([[maybe_unused]] const Matrix34* src) -{ -} - -//////////////////////////////////////////////////////////////////////////////////////////////////////// -//MISC -//////////////////////////////////////////////////////////////////////////////////////////////////////// - -/////////////////////////////////////////// -void CAtomShimRenderer::PushWireframeMode([[maybe_unused]] int mode){} -void CAtomShimRenderer::PopWireframeMode(){} -void CAtomShimRenderer::FX_PushWireframeMode([[maybe_unused]] int mode){} -void CAtomShimRenderer::FX_PopWireframeMode(){} -void CAtomShimRenderer::FX_SetWireframeMode([[maybe_unused]] int mode){} - -/////////////////////////////////////////// -void CAtomShimRenderer::SetCamera(const CCamera& cam) -{ - CacheCameraConfiguration(cam); - CacheCameraTransform(cam); - - int nThreadID = m_pRT->GetThreadList(); - - // Ortho-normalize camera matrix in double precision to minimize numerical errors and improve precision when inverting matrix - Matrix34_tpl mCam34 = cam.GetMatrix(); - mCam34.OrthonormalizeFast(); - - Matrix44_tpl mCam44T = mCam34.GetTransposed(); - Matrix44_tpl mView64; - mathMatrixLookAtInverse(&mView64, &mCam44T); - - Matrix44 mView = (Matrix44_tpl)mView64; - - // Rotate around x-axis by -PI/2 - Matrix44 mViewFinal = mView; - mViewFinal.m01 = mView.m02; - mViewFinal.m02 = -mView.m01; - mViewFinal.m11 = mView.m12; - mViewFinal.m12 = -mView.m11; - mViewFinal.m21 = mView.m22; - mViewFinal.m22 = -mView.m21; - mViewFinal.m31 = mView.m32; - mViewFinal.m32 = -mView.m31; - - m_RP.m_TI[nThreadID].m_matView = mViewFinal; - - mViewFinal.m30 = 0; - mViewFinal.m31 = 0; - mViewFinal.m32 = 0; - m_CameraZeroMatrix[nThreadID] = mViewFinal; - - if (m_RP.m_TI[nThreadID].m_PersFlags & RBPF_MIRRORCAMERA) - { - Matrix44A tmp; - - tmp = Matrix44A(Matrix33::CreateScale(Vec3(1, -1, 1))).GetTransposed(); - m_RP.m_TI[nThreadID].m_matView = tmp * m_RP.m_TI[nThreadID].m_matView; - } - - m_RP.m_TI[nThreadID].m_cam = cam; - - CameraViewParameters viewParameters; - - // Asymmetric frustum - float Near = cam.GetNearPlane(), Far = cam.GetFarPlane(); - - float wT = tanf(cam.GetFov() * 0.5f) * Near, wB = -wT; - float wR = wT * cam.GetProjRatio(), wL = -wR; - - viewParameters.Frustum(wL + cam.GetAsymL(), wR + cam.GetAsymR(), wB + cam.GetAsymB(), wT + cam.GetAsymT(), Near, Far); - - Vec3 vEye = cam.GetPosition(); - Vec3 vAt = vEye + Vec3((f32)mCam34(0, 1), (f32)mCam34(1, 1), (f32)mCam34(2, 1)); - Vec3 vUp = Vec3((f32)mCam34(0, 2), (f32)mCam34(1, 2), (f32)mCam34(2, 2)); - viewParameters.LookAt(vEye, vAt, vUp); - ApplyViewParameters(viewParameters); - - // Set the Atom view for the context to match the given camera - { - AZ::RPI::ViewPtr viewForCurrentContext; - - // If we have a current context (which we have in Editor but not yet in launcher) then use the view from that. - // Otherwise use the default view from the default scene. - if (m_currContext && m_currContext->m_view) - { - viewForCurrentContext = m_currContext->m_view; - } - else - { - AZ::RPI::ScenePtr scene = AZ::RPI::RPISystemInterface::Get()->GetDefaultScene(); - AZ::RPI::RenderPipelinePtr renderPipeline = scene->GetDefaultRenderPipeline(); - if (renderPipeline) - { - viewForCurrentContext = renderPipeline->GetDefaultView(); - } - } - - if (viewForCurrentContext) - { - // Set camera to world transform for view - AZ::Matrix3x4 cameraWorldTransform = LYTransformToAZMatrix3x4(cam.GetMatrix()); - viewForCurrentContext->SetCameraTransform(cameraWorldTransform); - - // Set projection transform for view - // [GFX TODO] [ATOM-1501] Currently we always assume reverse depth - float fov = cam.GetFov(); - float aspectRatio = cam.GetProjRatio(); - float nearPlane = cam.GetNearPlane(); - float farPlane = cam.GetFarPlane(); - AZ::Matrix4x4 viewToClipMatrix; - AZ::MakePerspectiveFovMatrixRH(viewToClipMatrix, fov, aspectRatio, nearPlane, farPlane, true); - viewForCurrentContext->SetViewToClipMatrix(viewToClipMatrix); - } - } -} - -void CAtomShimRenderer::GetViewport(int* x, int* y, int* width, int* height) const -{ - const SViewport& vp = m_MainRTViewport; - *x = vp.nX; - *y = vp.nY; - *width = vp.nWidth; - *height = vp.nHeight; -} - -void CAtomShimRenderer::SetViewport(int x, int y, int width, int height, [[maybe_unused]] int id) -{ - m_MainRTViewport.nX = x; - m_MainRTViewport.nY = y; - m_MainRTViewport.nWidth = width; - m_MainRTViewport.nHeight = height; - - m_width = width; - m_height = height; -} - -void CAtomShimRenderer::SetScissor(int x, int y, int width, int height) -{ - m_dynamicDraw->SetScissor(AZ::RHI::Scissor(x, y, x + width, y + height)); -} - -////////////////////////////////////////////////////////////////////// -void CAtomShimRenderer::GetModelViewMatrix(float* mat) -{ - int nThreadID = m_pRT->GetThreadList(); - *(Matrix44*)mat = m_RP.m_TI[nThreadID].m_matView; -} - -////////////////////////////////////////////////////////////////////// -void CAtomShimRenderer::GetProjectionMatrix(float* mat) -{ - int nThreadID = m_pRT->GetThreadList(); - *(Matrix44*)mat = m_RP.m_TI[nThreadID].m_matProj; -} - -////////////////////////////////////////////////////////////////////// -void CAtomShimRenderer::SetMatrices(float* pProjMat, float* pViewMat) -{ - int nThreadID = m_pRT->GetThreadList(); - m_RP.m_TI[nThreadID].m_matProj = *(Matrix44*)pProjMat; - m_RP.m_TI[nThreadID].m_matView = *(Matrix44*)pViewMat; -} - -////////////////////////////////////////////////////////////////////// -void CAtomShimRenderer::ApplyViewParameters(const CameraViewParameters& viewParameters) -{ - int nThreadID = m_pRT->GetThreadList(); - m_RP.m_TI[nThreadID].m_cam.m_viewParameters = viewParameters; - Matrix44A* m = &m_RP.m_TI[nThreadID].m_matView; - viewParameters.GetModelviewMatrix((float*)m); - if (m_RP.m_TI[nThreadID].m_PersFlags & RBPF_MIRRORCAMERA) - { - Matrix44A tmp; - - tmp = Matrix44A(Matrix33::CreateScale(Vec3(1, -1, 1))).GetTransposed(); - m_RP.m_TI[nThreadID].m_matView = tmp * m_RP.m_TI[nThreadID].m_matView; - } - m = &m_RP.m_TI[nThreadID].m_matProj; - - const bool bReverseDepth = true; // [GFX TODO] [ATOM-1501] Currently we always assume reverse depth - const bool bWasReverseDepth = (m_RP.m_TI[nThreadID].m_PersFlags & RBPF_REVERSE_DEPTH) != 0 ? 1 : 0; - - m_RP.m_TI[nThreadID].m_PersFlags &= ~RBPF_REVERSE_DEPTH; - if (bReverseDepth) - { - mathMatrixPerspectiveOffCenterReverseDepth((Matrix44A*)m, viewParameters.fWL, viewParameters.fWR, viewParameters.fWB, viewParameters.fWT, viewParameters.fNear, viewParameters.fFar); - m_RP.m_TI[nThreadID].m_PersFlags |= RBPF_REVERSE_DEPTH; - } - -} - -// Check if a file exists. This does not go through the AssetCatalog so that it can identify files that exist but aren't processed yet, -// and so that it will work before the AssetCatalog has loaded -bool CheckIfFileExists(const AZStd::string& sourceRelativePath, const AZStd::string& cacheRelativePath) -{ - // If the file exists, it has already been processed and does not need to be modified - bool fileExists = AZ::IO::FileIOBase::GetInstance()->Exists(cacheRelativePath.c_str()); - - if (!fileExists) - { - // If the texture doesn't exist check if it's queued or being compiled. - AzFramework::AssetSystem::AssetStatus status; - AzFramework::AssetSystemRequestBus::BroadcastResult(status, &AzFramework::AssetSystemRequestBus::Events::GetAssetStatus, sourceRelativePath); - - switch (status) - { - case AzFramework::AssetSystem::AssetStatus_Queued: - case AzFramework::AssetSystem::AssetStatus_Compiling: - case AzFramework::AssetSystem::AssetStatus_Compiled: - case AzFramework::AssetSystem::AssetStatus_Failed: - { - // The file is queued, in progress, or finished processing after the initial FileIO check - fileExists = true; - break; - } - case AzFramework::AssetSystem::AssetStatus_Unknown: - case AzFramework::AssetSystem::AssetStatus_Missing: - default: - { - // The file does not exist - fileExists = false; - break; - } - } - } - - return fileExists; -} - -////////////////////////////////////////////////////////////////////// -ITexture* CAtomShimRenderer::EF_LoadTexture(const char * nameTex, const uint32 flags) -{ - AtomShimTexture* atomTexture = nullptr; - - // have to see if it is already loaded - CBaseResource* pBR = CBaseResource::GetResource(CTexture::mfGetClassName(), nameTex, false); - if (pBR) - { - // if a texture with this ID exists but it is not an Atom texture then we return nullptr - CTexture* texture = static_cast(pBR); - AtomShimTexture* atomTexture2 = CastITextureToAtomShimTexture(texture); - if (atomTexture2) - { - atomTexture2->AddRef(); - return atomTexture2; - } - else - { - return nullptr; - } - } - - AZ_Error("CAtomShimRenderer", AzFramework::StringFunc::Path::IsRelative(nameTex), "CAtomShimRenderer::EF_LoadTexture assumes that it will always be given a relative path, but got '%s'", nameTex); - - atomTexture = new AtomShimTexture(flags); - atomTexture->Register(CTexture::mfGetClassName(), nameTex); - atomTexture->SetSourceName( nameTex ); // needs to be normalized? - - AZStd::string sourceRelativePath(nameTex); - AZStd::string cacheRelativePath = sourceRelativePath + ".streamingimage"; - - bool textureExists = false; - textureExists = CheckIfFileExists(sourceRelativePath, cacheRelativePath); - - if(!textureExists) - { - // A lot of cry code uses the .dds extension even when the actual source file is .tif. - // For the .streamingimage file we need the correct source extension before .streamingimage - // So if the file doesn't exist and the extension was .dds then try replacing it with .tif - AZStd::string extension; - AzFramework::StringFunc::Path::GetExtension(nameTex, extension, false); - if (extension == "dds") - { - sourceRelativePath = nameTex; - - static const char* textureExtensions[] = { "png", "tif", "tiff", "tga", "jpg", "jpeg", "bmp", "gif" }; - - for (const char* extensionReplacement : textureExtensions) - { - AzFramework::StringFunc::Path::ReplaceExtension(sourceRelativePath, extensionReplacement); - cacheRelativePath = sourceRelativePath + ".streamingimage"; - - textureExists = CheckIfFileExists(sourceRelativePath, cacheRelativePath); - if (textureExists) - { - break; - } - } - } - } - - if(!textureExists) - { - AZ_Error("CAtomShimRenderer", false, "EF_LoadTexture attempted to load '%s', but it does not exist.", nameTex); - // Since neither the given extension nor the .dds version exist, we'll default to the given extension for hot-reloading in case the file is added to the source folder later - sourceRelativePath = nameTex; - cacheRelativePath = sourceRelativePath + ".streamingimage"; - } - - // now load the texture - // NOTE: CTexture::CreateTexture does the actual setting of texture data in Cry D3D case - // But it also calls CreateDeviceTexture - - { - using namespace AZ; - - // The file may not be in the AssetCatalog at this point if it is still processing or doesn't exist on disk. - // Use GenerateAssetIdTEMP instead of GetAssetIdByPath so that it will return a valid AssetId anyways - Data::AssetId streamingImageAssetId; - Data::AssetCatalogRequestBus::BroadcastResult( - streamingImageAssetId, &Data::AssetCatalogRequestBus::Events::GenerateAssetIdTEMP, - sourceRelativePath.c_str()); - streamingImageAssetId.m_subId = RPI::StreamingImageAsset::GetImageAssetSubId(); - - auto streamingImageAsset = Data::AssetManager::Instance().FindOrCreateAsset(streamingImageAssetId, AZ::Data::AssetLoadBehavior::PreLoad); - - if (!streamingImageAsset.IsReady()) - { - atomTexture->QueueForHotReload(streamingImageAssetId); - } - else - { - atomTexture->CreateFromStreamingImageAsset(streamingImageAsset); - } - } - - atomTexture->SetTexStates(); - - return atomTexture; -} - -////////////////////////////////////////////////////////////////////// -ITexture* CAtomShimRenderer::EF_LoadDefaultTexture(const char * nameTex) -{ - return CTextureManager::Instance()->GetDefaultTexture(nameTex); -} - -////////////////////////////////////////////////////////////////////// -void CAtomShimRenderer::DrawQuad([[maybe_unused]] const Vec3& right, [[maybe_unused]] const Vec3& up, [[maybe_unused]] const Vec3& origin, [[maybe_unused]] int nFlipmode /*=0*/) -{ -} - -////////////////////////////////////////////////////////////////////// -bool CAtomShimRenderer::ProjectToScreen(float ptx, float pty, float ptz, float* sx, float* sy, float* sz) -{ - int nThreadID = m_pRT->GetThreadList(); - SViewport& vp = m_MainRTViewport; - - Vec3 vOut, vIn; - vIn.x = ptx; - vIn.y = pty; - vIn.z = ptz; - - int32 v[4]; - v[0] = vp.nX; - v[1] = vp.nY; - v[2] = vp.nWidth; - v[3] = vp.nHeight; - - Matrix44A mIdent; - mIdent.SetIdentity(); - if (mathVec3Project( - &vOut, - &vIn, - v, - &m_RP.m_TI[nThreadID].m_matProj, - &m_RP.m_TI[nThreadID].m_matView, - &mIdent)) - { - *sx = vOut.x * 100 / vp.nWidth; - *sy = vOut.y * 100 / vp.nHeight; - *sz = (m_RP.m_TI[nThreadID].m_PersFlags & RBPF_REVERSE_DEPTH) ? 1.0f - vOut.z : vOut.z; - - return true; - } - - return false; -} - -static bool InvertMatrixPrecise(Matrix44& out, const float* m) -{ - // Inverts matrix using Gaussian Elimination which is slower but numerically more stable than Cramer's Rule - - float expmat[4][8] = { - { m[0], m[4], m[8], m[12], 1.f, 0.f, 0.f, 0.f }, - { m[1], m[5], m[9], m[13], 0.f, 1.f, 0.f, 0.f }, - { m[2], m[6], m[10], m[14], 0.f, 0.f, 1.f, 0.f }, - { m[3], m[7], m[11], m[15], 0.f, 0.f, 0.f, 1.f } - }; - - float t0, t1, t2, t3, t; - float* r0 = expmat[0], * r1 = expmat[1], * r2 = expmat[2], * r3 = expmat[3]; - - // Choose pivots and eliminate variables - if (fabs(r3[0]) > fabs(r2[0])) - { - std::swap(r3, r2); - } - if (fabs(r2[0]) > fabs(r1[0])) - { - std::swap(r2, r1); - } - if (fabs(r1[0]) > fabs(r0[0])) - { - std::swap(r1, r0); - } - if (r0[0] == 0) - { - return false; - } - t1 = r1[0] / r0[0]; - t2 = r2[0] / r0[0]; - t3 = r3[0] / r0[0]; - t = r0[1]; - r1[1] -= t1 * t; - r2[1] -= t2 * t; - r3[1] -= t3 * t; - t = r0[2]; - r1[2] -= t1 * t; - r2[2] -= t2 * t; - r3[2] -= t3 * t; - t = r0[3]; - r1[3] -= t1 * t; - r2[3] -= t2 * t; - r3[3] -= t3 * t; - t = r0[4]; - if (t != 0.0) - { - r1[4] -= t1 * t; - r2[4] -= t2 * t; - r3[4] -= t3 * t; - } - t = r0[5]; - if (t != 0.0) - { - r1[5] -= t1 * t; - r2[5] -= t2 * t; - r3[5] -= t3 * t; - } - t = r0[6]; - if (t != 0.0) - { - r1[6] -= t1 * t; - r2[6] -= t2 * t; - r3[6] -= t3 * t; - } - t = r0[7]; - if (t != 0.0) - { - r1[7] -= t1 * t; - r2[7] -= t2 * t; - r3[7] -= t3 * t; - } - - if (fabs(r3[1]) > fabs(r2[1])) - { - std::swap(r3, r2); - } - if (fabs(r2[1]) > fabs(r1[1])) - { - std::swap(r2, r1); - } - if (r1[1] == 0) - { - return false; - } - t2 = r2[1] / r1[1]; - t3 = r3[1] / r1[1]; - r2[2] -= t2 * r1[2]; - r3[2] -= t3 * r1[2]; - r2[3] -= t2 * r1[3]; - r3[3] -= t3 * r1[3]; - t = r1[4]; - if (0.0 != t) - { - r2[4] -= t2 * t; - r3[4] -= t3 * t; - } - t = r1[5]; - if (0.0 != t) - { - r2[5] -= t2 * t; - r3[5] -= t3 * t; - } - t = r1[6]; - if (0.0 != t) - { - r2[6] -= t2 * t; - r3[6] -= t3 * t; - } - t = r1[7]; - if (0.0 != t) - { - r2[7] -= t2 * t; - r3[7] -= t3 * t; - } - - if (fabs(r3[2]) > fabs(r2[2])) - { - std::swap(r3, r2); - } - if (r2[2] == 0) - { - return false; - } - t3 = r3[2] / r2[2]; - r3[3] -= t3 * r2[3]; - r3[4] -= t3 * r2[4]; - r3[5] -= t3 * r2[5]; - r3[6] -= t3 * r2[6]; - r3[7] -= t3 * r2[7]; - - if (r3[3] == 0) - { - return false; - } - - // Substitute back - t = 1.0f / r3[3]; - r3[4] *= t; - r3[5] *= t; - r3[6] *= t; - r3[7] *= t; // Row 3 - - t2 = r2[3]; - t = 1.0f / r2[2]; // Row 2 - r2[4] = t * (r2[4] - r3[4] * t2); - r2[5] = t * (r2[5] - r3[5] * t2); - r2[6] = t * (r2[6] - r3[6] * t2); - r2[7] = t * (r2[7] - r3[7] * t2); - t1 = r1[3]; - r1[4] -= r3[4] * t1; - r1[5] -= r3[5] * t1; - r1[6] -= r3[6] * t1; - r1[7] -= r3[7] * t1; - t0 = r0[3]; - r0[4] -= r3[4] * t0; - r0[5] -= r3[5] * t0; - r0[6] -= r3[6] * t0; - r0[7] -= r3[7] * t0; - - t1 = r1[2]; - t = 1.0f / r1[1]; // Row 1 - r1[4] = t * (r1[4] - r2[4] * t1); - r1[5] = t * (r1[5] - r2[5] * t1); - r1[6] = t * (r1[6] - r2[6] * t1); - r1[7] = t * (r1[7] - r2[7] * t1); - t0 = r0[2]; - r0[4] -= r2[4] * t0; - r0[5] -= r2[5] * t0; - r0[6] -= r2[6] * t0, r0[7] -= r2[7] * t0; - - t0 = r0[1]; - t = 1.0f / r0[0]; // Row 0 - r0[4] = t * (r0[4] - r1[4] * t0); - r0[5] = t * (r0[5] - r1[5] * t0); - r0[6] = t * (r0[6] - r1[6] * t0); - r0[7] = t * (r0[7] - r1[7] * t0); - - out.m00 = r0[4]; - out.m01 = r0[5]; - out.m02 = r0[6]; - out.m03 = r0[7]; - out.m10 = r1[4]; - out.m11 = r1[5]; - out.m12 = r1[6]; - out.m13 = r1[7]; - out.m20 = r2[4]; - out.m21 = r2[5]; - out.m22 = r2[6]; - out.m23 = r2[7]; - out.m30 = r3[4]; - out.m31 = r3[5]; - out.m32 = r3[6]; - out.m33 = r3[7]; - - return true; -} - -static int sUnProject(float winx, float winy, float winz, const float model[16], const float proj[16], const int viewport[4], float* objx, float* objy, float* objz) -{ - Vec4 vIn; - vIn.x = (winx - viewport[0]) * 2 / viewport[2] - 1.0f; - vIn.y = (winy - viewport[1]) * 2 / viewport[3] - 1.0f; - vIn.z = winz;//2.0f * winz - 1.0f; - vIn.w = 1.0; - - float m1[16]; - for (int i = 0; i < 4; i++) - { - float ai0 = proj[i], ai1 = proj[4 + i], ai2 = proj[8 + i], ai3 = proj[12 + i]; - m1[i] = ai0 * model[0] + ai1 * model[1] + ai2 * model[2] + ai3 * model[3]; - m1[4 + i] = ai0 * model[4] + ai1 * model[5] + ai2 * model[6] + ai3 * model[7]; - m1[8 + i] = ai0 * model[8] + ai1 * model[9] + ai2 * model[10] + ai3 * model[11]; - m1[12 + i] = ai0 * model[12] + ai1 * model[13] + ai2 * model[14] + ai3 * model[15]; - } - - Matrix44 m; - InvertMatrixPrecise(m, m1); - - Vec4 vOut = m * vIn; - if (vOut.w == 0.0) - { - return false; - } - *objx = vOut.x / vOut.w; - *objy = vOut.y / vOut.w; - *objz = vOut.z / vOut.w; - return true; -} - -int CAtomShimRenderer::UnProject(float sx, float sy, float sz, - float* px, float* py, float* pz, - const float modelMatrix[16], - const float projMatrix[16], - const int viewport[4]) -{ - return sUnProject(sx, sy, sz, modelMatrix, projMatrix, viewport, px, py, pz); -} - -////////////////////////////////////////////////////////////////////// -int CAtomShimRenderer::UnProjectFromScreen(float sx, float sy, float sz, - float* px, float* py, float* pz) -{ - float modelMatrix[16]; - float projMatrix[16]; - int viewport[4]; - - const int nThreadID = m_pRT->GetThreadList(); - if (m_RP.m_TI[nThreadID].m_PersFlags & RBPF_REVERSE_DEPTH) - { - sz = 1.0f - sz; - } - - GetModelViewMatrix(modelMatrix); - GetProjectionMatrix(projMatrix); - GetViewport(&viewport[0], &viewport[1], &viewport[2], &viewport[3]); - return sUnProject(sx, sy, sz, modelMatrix, projMatrix, viewport, px, py, pz); -} - -////////////////////////////////////////////////////////////////////// -bool CAtomShimRenderer::ScreenShot([[maybe_unused]] const char* filename, [[maybe_unused]] int width) -{ - return true; -} - -int CAtomShimRenderer::ScreenToTexture([[maybe_unused]] int nTexID) -{ - return 0; -} - -void CAtomShimRenderer::ResetToDefault() -{ -} - -/////////////////////////////////////////// -void CAtomShimRenderer::SetMaterialColor([[maybe_unused]] float r, [[maybe_unused]] float g, [[maybe_unused]] float b, [[maybe_unused]] float a) -{ -} - -////////////////////////////////////////////////////////////////////// -void CAtomShimRenderer::ClearTargetsImmediately([[maybe_unused]] uint32 nFlags) {} -void CAtomShimRenderer::ClearTargetsImmediately([[maybe_unused]] uint32 nFlags, [[maybe_unused]] const ColorF& Colors, [[maybe_unused]] float fDepth) {} -void CAtomShimRenderer::ClearTargetsImmediately([[maybe_unused]] uint32 nFlags, [[maybe_unused]] const ColorF& Colors) {} -void CAtomShimRenderer::ClearTargetsImmediately([[maybe_unused]] uint32 nFlags, [[maybe_unused]] float fDepth) {} - -void CAtomShimRenderer::ClearTargetsLater([[maybe_unused]] uint32 nFlags) {} -void CAtomShimRenderer::ClearTargetsLater([[maybe_unused]] uint32 nFlags, [[maybe_unused]] const ColorF& Colors, [[maybe_unused]] float fDepth) {} -void CAtomShimRenderer::ClearTargetsLater([[maybe_unused]] uint32 nFlags, [[maybe_unused]] const ColorF& Colors) {} -void CAtomShimRenderer::ClearTargetsLater([[maybe_unused]] uint32 nFlags, [[maybe_unused]] float fDepth) {} - -void CAtomShimRenderer::ReadFrameBuffer([[maybe_unused]] unsigned char* pRGB, [[maybe_unused]] int nImageX, [[maybe_unused]] int nSizeX, [[maybe_unused]] int nSizeY, [[maybe_unused]] ERB_Type eRBType, [[maybe_unused]] bool bRGBA, [[maybe_unused]] int nScaledX, [[maybe_unused]] int nScaledY) -{ -} - -void CAtomShimRenderer::ReadFrameBufferFast([[maybe_unused]] uint32* pDstARGBA8, [[maybe_unused]] int dstWidth, [[maybe_unused]] int dstHeight, [[maybe_unused]] bool BGRA) -{ -} - -bool CAtomShimRenderer::CaptureFrameBufferFast([[maybe_unused]] unsigned char* pDstRGBA8, [[maybe_unused]] int destinationWidth, [[maybe_unused]] int destinationHeight) -{ - return false; -} -bool CAtomShimRenderer::CopyFrameBufferFast([[maybe_unused]] unsigned char* pDstRGBA8, [[maybe_unused]] int destinationWidth, [[maybe_unused]] int destinationHeight) -{ - return false; -} - -bool CAtomShimRenderer::InitCaptureFrameBufferFast([[maybe_unused]] uint32 bufferWidth, [[maybe_unused]] uint32 bufferHeight) -{ - return(false); -} - -void CAtomShimRenderer::CloseCaptureFrameBufferFast(void) -{ -} - -bool CAtomShimRenderer::RegisterCaptureFrame([[maybe_unused]] ICaptureFrameListener* pCapture) -{ - return(false); -} -bool CAtomShimRenderer::UnRegisterCaptureFrame([[maybe_unused]] ICaptureFrameListener* pCapture) -{ - return(false); -} - -void CAtomShimRenderer::CaptureFrameBufferCallBack(void) -{ -} - - -void CAtomShimRenderer::SetFogColor([[maybe_unused]] const ColorF& color) -{ -} - -void CAtomShimRenderer::DrawQuad([[maybe_unused]] float dy, [[maybe_unused]] float dx, [[maybe_unused]] float dz, [[maybe_unused]] float x, [[maybe_unused]] float y, [[maybe_unused]] float z) -{ -} - -////////////////////////////////////////////////////////////////////// - -int CAtomShimRenderer::CreateRenderTarget([[maybe_unused]] const char* name, [[maybe_unused]] int nWidth, [[maybe_unused]] int nHeight, [[maybe_unused]] const ColorF& cClear, [[maybe_unused]] ETEX_Format eTF) -{ - return 0; -} - -bool CAtomShimRenderer::ResizeRenderTarget([[maybe_unused]] int nHandle, [[maybe_unused]] int nWidth, [[maybe_unused]] int nHeight) -{ - return true; -} - -bool CAtomShimRenderer::DestroyRenderTarget([[maybe_unused]] int nHandle) -{ - return true; -} - -bool CAtomShimRenderer::SetRenderTarget([[maybe_unused]] int nHandle, [[maybe_unused]] SDepthTexture* pDepthSurf) -{ - return true; -} - -SDepthTexture* CAtomShimRenderer::CreateDepthSurface([[maybe_unused]] int nWidth, [[maybe_unused]] int nHeight, [[maybe_unused]] bool shaderResourceView) -{ - return nullptr; -} - -void CAtomShimRenderer::DestroyDepthSurface([[maybe_unused]] SDepthTexture* pDepthSurf) -{ -} - -void CAtomShimRenderer::WaitForParticleBuffer([[maybe_unused]] threadID nThreadId) -{ -} - -int CAtomShimRenderer::GetOcclusionBuffer([[maybe_unused]] uint16* pOutOcclBuffer, [[maybe_unused]] Matrix44* pmCamBuffe) -{ - return 0; -} - -IColorGradingController* CAtomShimRenderer::GetIColorGradingController() -{ - return m_pAtomShimColorGradingController; -} - -IStereoRenderer* CAtomShimRenderer::GetIStereoRenderer() -{ - return m_pAtomShimStereoRenderer; -} - -ITexture* CAtomShimRenderer::Create2DTexture([[maybe_unused]] const char* name, [[maybe_unused]] int width, [[maybe_unused]] int height, [[maybe_unused]] int numMips, [[maybe_unused]] int flags, [[maybe_unused]] unsigned char* data, [[maybe_unused]] ETEX_Format format) -{ - return nullptr; -} - -//========================================================================================= - - -ILog* iLog; -IConsole* iConsole; -ITimer* iTimer; -ISystem* iSystem; - -StaticInstance g_nullRenderer; - -extern "C" DLL_EXPORT IRenderer * CreateCryRenderInterface(ISystem * pSystem) -{ - ModuleInitISystem(pSystem, "CryRenderer"); - - gbRgb = false; - - iConsole = gEnv->pConsole; - iLog = gEnv->pLog; - iTimer = gEnv->pTimer; - iSystem = gEnv->pSystem; - - CRenderer* rd = g_nullRenderer; - if (rd) - { - rd->InitRenderer(); - } - - std::random_device randDev; - srand(static_cast(randDev())); - - return rd; -} - -class CEngineModule_CryRenderer - : public IEngineModule -{ - CRYINTERFACE_SIMPLE(IEngineModule) - CRYGENERATE_SINGLETONCLASS(CEngineModule_CryRenderer, "EngineModule_CryRenderer", 0x540c91a7338e41d3, 0xaceeac9d55614450) - - virtual const char* GetName() const { - return "CryRenderer"; - } - virtual const char* GetCategory() const {return "CryEngine"; } - - virtual bool Initialize(SSystemGlobalEnvironment& env, [[maybe_unused]] const SSystemInitParams& initParams) - { - ISystem* pSystem = env.pSystem; - env.pRenderer = CreateCryRenderInterface(pSystem); - return env.pRenderer != 0; - } -}; - -CRYREGISTER_SINGLETON_CLASS(CEngineModule_CryRenderer) - -CEngineModule_CryRenderer::CEngineModule_CryRenderer() -{ -}; - -CEngineModule_CryRenderer::~CEngineModule_CryRenderer() -{ -}; - -void COcclusionQuery::Create() -{ -} - -void COcclusionQuery::Release() -{ -} - -void COcclusionQuery::BeginQuery() -{ -} - -void COcclusionQuery::EndQuery() -{ -} - -uint32 COcclusionQuery::GetVisibleSamples([[maybe_unused]] bool bAsynchronous) -{ - return 0; -} - -/*static*/ FurBendData& FurBendData::Get() -{ - static FurBendData s_instance; - return s_instance; -} - -void FurBendData::InsertNewElements() -{ -} - -void FurBendData::FreeData() -{ -} - -void FurBendData::OnBeginFrame() -{ -} - -TArray* CRenderer::EF_GetDeferredLights([[maybe_unused]] const SRenderingPassInfo& passInfo, [[maybe_unused]] const eDeferredLightType eLightType) -{ - static TArray lights; - return &lights; -} - -SRenderLight* CRenderer::EF_GetDeferredLightByID([[maybe_unused]] const uint16 nLightID, [[maybe_unused]] const eDeferredLightType eLightType) -{ - return nullptr; -} - - -void CRenderer::BeginSpawningGeneratingRendItemJobs([[maybe_unused]] int nThreadID) -{ -} - -void CRenderer::BeginSpawningShadowGeneratingRendItemJobs([[maybe_unused]] int nThreadID) -{ -} - -void CRenderer::EndSpawningGeneratingRendItemJobs() -{ -} - -void CAtomShimRenderer::PrecacheResources() -{ -} - -bool CAtomShimRenderer::EF_PrecacheResource([[maybe_unused]] SShaderItem* pSI, [[maybe_unused]] float fMipFactorSI, [[maybe_unused]] float fTimeToReady, [[maybe_unused]] int Flags, [[maybe_unused]] int nUpdateId, [[maybe_unused]] int nCounter) -{ - return true; -} - -ITexture* CAtomShimRenderer::EF_CreateCompositeTexture([[maybe_unused]] int type, [[maybe_unused]] const char* szName, [[maybe_unused]] int nWidth, [[maybe_unused]] int nHeight, [[maybe_unused]] int nDepth, [[maybe_unused]] int nMips, [[maybe_unused]] int nFlags, [[maybe_unused]] ETEX_Format eTF, [[maybe_unused]] const STexComposition* pCompositions, [[maybe_unused]] size_t nCompositions, [[maybe_unused]] int8 nPriority) -{ - return CTextureManager::Instance()->GetNoTexture(); -} - -void CAtomShimRenderer::FX_ClearTarget([[maybe_unused]] ITexture* pTex) -{ -} - -void CAtomShimRenderer::FX_ClearTarget([[maybe_unused]] SDepthTexture* pTex) -{ -} - -bool CAtomShimRenderer::FX_SetRenderTarget([[maybe_unused]] int nTarget, [[maybe_unused]] void* pTargetSurf, [[maybe_unused]] SDepthTexture* pDepthTarget, [[maybe_unused]] uint32 nTileCount) -{ - return true; -} - -bool CAtomShimRenderer::FX_PushRenderTarget([[maybe_unused]] int nTarget, [[maybe_unused]] void* pTargetSurf, [[maybe_unused]] SDepthTexture* pDepthTarget, [[maybe_unused]] uint32 nTileCount) -{ - return true; -} - -bool CAtomShimRenderer::FX_SetRenderTarget([[maybe_unused]] int nTarget, [[maybe_unused]] CTexture* pTarget, [[maybe_unused]] SDepthTexture* pDepthTarget, [[maybe_unused]] bool bPush, [[maybe_unused]] int nCMSide, [[maybe_unused]] bool bScreenVP, [[maybe_unused]] uint32 nTileCount) -{ - return true; -} - -bool CAtomShimRenderer::FX_PushRenderTarget([[maybe_unused]] int nTarget, [[maybe_unused]] CTexture* pTarget, [[maybe_unused]] SDepthTexture* pDepthTarget, [[maybe_unused]] int nCMSide, [[maybe_unused]] bool bScreenVP, [[maybe_unused]] uint32 nTileCount) -{ - return true; -} -bool CAtomShimRenderer::FX_RestoreRenderTarget([[maybe_unused]] int nTarget) -{ - return true; -} -bool CAtomShimRenderer::FX_PopRenderTarget([[maybe_unused]] int nTarget) -{ - return true; -} - -IDynTexture* CAtomShimRenderer::CreateDynTexture2([[maybe_unused]] uint32 nWidth, [[maybe_unused]] uint32 nHeight, [[maybe_unused]] uint32 nTexFlags, [[maybe_unused]] const char* szSource, [[maybe_unused]] ETexPool eTexPool) -{ - return nullptr; -} - -void CAtomShimRenderer::InitSystemResources([[maybe_unused]] int nFlags) -{ - // This is an override of the implementation in CRenderer and is significantly cut down for the shim. - if (!m_bSystemResourcesInit || m_bDeviceLost == 2) - { - CTextureManager::Instance()->Init(); - m_bSystemResourcesInit = 1; - } -} - -void CAtomShimRenderer::SetTexture(int tnum) -{ - SetTexture(tnum, 0); -} - -void CAtomShimRenderer::SetTexture(int tnum, int nUnit) -{ - SetTextureForUnit(nUnit, tnum); -} - -void CAtomShimRenderer::SetState([[maybe_unused]] int State, [[maybe_unused]] int AlphaRef) -{ - // [GFX TODO] would need to implement this for LyShine mask support and blend mode support -} - -void CAtomShimRenderer::SetTextureForUnit(int unit, int textureId) -{ - AZ_Assert(unit >= 0 && unit < 32, "Invalid texture unit"); - AtomShimTexture* atomTexture = CastITextureToAtomShimTexture(EF_GetTextureByID(textureId)); - m_currentTextureForUnit[unit] = atomTexture; - m_clampFlagPerTextureUnit[unit] = (atomTexture->GetFlags() & FT_STATE_CLAMP) ? true : false; -} - -const AZ::Transform& CAtomShimRenderer::GetActiveCameraTransform() -{ - return m_cameraTransform; -} - -const Camera::Configuration& CAtomShimRenderer::GetActiveCameraConfiguration() -{ - return m_cameraConfiguration; -} - -void CAtomShimRenderer::CacheCameraTransform(const CCamera& camera) -{ - m_cameraTransform = LYTransformToAZTransform(camera.GetMatrix()); -} - -void CAtomShimRenderer::CacheCameraConfiguration(const CCamera& camera) -{ - Camera::Configuration& config = m_cameraConfiguration; - config.m_fovRadians = camera.GetFov(); - config.m_nearClipDistance = camera.GetNearPlane(); - config.m_farClipDistance = camera.GetFarPlane(); - config.m_frustumHeight = config.m_farClipDistance * tanf(config.m_fovRadians / 2) * 2; - config.m_frustumWidth = config.m_frustumHeight * camera.GetViewSurfaceX() / camera.GetViewSurfaceZ(); -} - -void CAtomShimRenderer::DrawStringU( - [[maybe_unused]] IFFont_RenderProxy* pFont, [[maybe_unused]] float x, [[maybe_unused]] float y, [[maybe_unused]] float z, - [[maybe_unused]] const char* pStr, [[maybe_unused]] const bool asciiMultiLine, [[maybe_unused]] const STextDrawContext& ctx) const -{ - // RenderCallback disabled, ICryFont has been directly implemented on Atom by Gems/AtomLyIntegration/AtomFont. -} - -void CAtomShimRenderer::DrawDynVB(SVF_P3F_C4B_T2F* pBuf, uint16* pInds, int nVerts, int nInds, const PublicRenderPrimitiveType nPrimType) -{ - using namespace AZ; - - // if nothing to draw then return - if (!pBuf || !nVerts || (pInds && !nInds) || (nInds && !pInds)) - { - return; - } - - // get view proj materix - Matrix44A matView, matProj; - GetModelViewMatrix(matView.GetData()); - GetProjectionMatrix(matProj.GetData()); - Matrix44A matViewProj = matView * matProj; - Matrix4x4 azMatViewProj = Matrix4x4::CreateFromColumnMajorFloat16(matViewProj.GetData()); - - bool isClamp = m_clampFlagPerTextureUnit[0]; - m_dynamicDraw->SetShaderVariant(isClamp? m_shaderVariantClamp : m_shaderVariantWrap); - - Data::Instance drawSrg = m_dynamicDraw->NewDrawSrg(); - drawSrg->SetConstant(m_viewProjInputIndex, azMatViewProj); - - AtomShimTexture* atomTexture = m_currentTextureForUnit[0]; - drawSrg->SetImageView(m_imageInputIndex, atomTexture->m_imageView.get()); - - drawSrg->Compile(); - - RHI::PrimitiveTopology primitiveType = RHI::PrimitiveTopology::TriangleList; - - switch (nPrimType) - { - case prtTriangleList: - primitiveType = RHI::PrimitiveTopology::TriangleList; - break; - case prtTriangleStrip: - primitiveType = RHI::PrimitiveTopology::TriangleStrip; - break; - case prtLineList: - primitiveType = RHI::PrimitiveTopology::LineList; - break; - case prtLineStrip: - primitiveType = RHI::PrimitiveTopology::LineStrip; - break; - } - - m_dynamicDraw->SetPrimitiveType(primitiveType); - - if (pInds) - { - m_dynamicDraw->DrawIndexed(pBuf, nVerts, pInds, nInds, RHI::IndexFormat::Uint16, drawSrg); - } - else - { - m_dynamicDraw->DrawLinear(pBuf, nVerts, drawSrg); - } -} - -void CAtomShimRenderer::DrawDynUiPrimitiveList( - [[maybe_unused]] DynUiPrimitiveList& primitives, [[maybe_unused]] int totalNumVertices, [[maybe_unused]] int totalNumIndices) -{ - // This function was only used by LyShine and LyShine is moving to Atom implementation. - return; -} - -void CAtomShimRenderer::Set2DMode(uint32 orthoWidth, uint32 orthoHeight, TransformationMatrices& backupMatrices, float znear, float zfar) -{ - Set2DModeNonZeroTopLeft(0.0f, 0.0f, static_cast(orthoWidth), static_cast(orthoHeight), backupMatrices, znear, zfar); -} - -void CAtomShimRenderer::Unset2DMode(const TransformationMatrices& restoringMatrices) -{ - int nThreadID = m_pRT->GetThreadList(); - -#ifdef _DEBUG - // Check that we are already in 2D mode on this thread and decrement the counter used for this check. - AZ_Assert(s_isIn2DMode[nThreadID]-- > 0, "Calls to Set2DMode and Unset2DMode appear mismatched"); -#endif - - m_RP.m_TI[nThreadID].m_matView = restoringMatrices.m_viewMatrix; - m_RP.m_TI[nThreadID].m_matProj = restoringMatrices.m_projectMatrix; - - // The legacy renderer supports nested Set2dMode/Unset2dMode so we use a counter to support that also. - m_isIn2dModeCounter--; - if (m_isIn2dModeCounter > 0) - { - // We're still in 2d mode, so set the viewProjOverride to the current matrix - // For 2d drawing, the view matrix is an identity matrix, so viewProj == proj - AZ::Matrix4x4 viewProj = AZ::Matrix4x4::CreateFromColumnMajorFloat16(m_RP.m_TI[nThreadID].m_matProj.GetData()); - m_pAtomShimRenderAuxGeom->SetViewProjOverride(viewProj); - } - else - { - m_pAtomShimRenderAuxGeom->UnsetViewProjOverride(); - } -} - -void CAtomShimRenderer::Set2DModeNonZeroTopLeft( - float orthoLeft, float orthoTop, float orthoWidth, float orthoHeight, TransformationMatrices& backupMatrices, float znear, float zfar) -{ - int nThreadID = m_pRT->GetThreadList(); - -#ifdef _DEBUG - // Increment the counter used to check that Set2DMode and Unset2DMode are balanced. - // It should never be negative before the increment. - AZ_Assert(s_isIn2DMode[nThreadID]++ >= 0, "Calls to Set2DMode and Unset2DMode appear mismatched"); -#endif - - backupMatrices.m_projectMatrix = m_RP.m_TI[nThreadID].m_matProj; - - // Move the zfar a bit away from the znear if they're the same. - if (AZ::IsClose(znear, zfar, .001f)) - { - zfar += .01f; - } - - float left = orthoLeft; - float right = left + orthoWidth; - float top = orthoTop; - float bottom = top + orthoHeight; - - mathMatrixOrthoOffCenterLH(&m_RP.m_TI[nThreadID].m_matProj, left, right, bottom, top, znear, zfar); - - if (m_RP.m_TI[nThreadID].m_PersFlags & RBPF_REVERSE_DEPTH) - { - // [GFX TODO] [ATOM-661] may need to reverse the depth here (though for 2D it may not be necessary) - } - - backupMatrices.m_viewMatrix = m_RP.m_TI[nThreadID].m_matView; - m_RP.m_TI[nThreadID].m_matView.SetIdentity(); - - m_isIn2dModeCounter++; - - // For 2d drawing, the view matrix is an identity matrix, so viewProj == proj - AZ::Matrix4x4 viewProj = AZ::Matrix4x4::CreateFromColumnMajorFloat16(m_RP.m_TI[nThreadID].m_matProj.GetData()); - m_pAtomShimRenderAuxGeom->SetViewProjOverride(viewProj); -} - -void CAtomShimRenderer::SetColorOp( - [[maybe_unused]] byte eCo, [[maybe_unused]] byte eAo, [[maybe_unused]] byte eCa, [[maybe_unused]] byte eAa) -{ - // this is only used by LY ImGui gem -} diff --git a/Gems/AtomLyIntegration/CryRenderAtomShim/AtomShim_Renderer.h b/Gems/AtomLyIntegration/CryRenderAtomShim/AtomShim_Renderer.h deleted file mode 100644 index a95dfb602c..0000000000 --- a/Gems/AtomLyIntegration/CryRenderAtomShim/AtomShim_Renderer.h +++ /dev/null @@ -1,617 +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 NULL_RENDERER_H -#define NULL_RENDERER_H - -#if _MSC_VER > 1000 -# pragma once -#endif - -/* -=========================================== -The NULLRenderer interface Class -=========================================== -*/ - -#define MAX_TEXTURE_STAGES 4 - -#include "CryArray.h" -#include "AtomShim_RenderAuxGeom.h" - -#include - -#include - -#include -#include -#include -#include - -#include - -// Forward declaration. -namespace AZ -{ - namespace RHI - { - class Image; - } - - namespace RPI - { - class Scene; - class RenderPipeline; - class WindowContext; - class View; - class ViewportContext; - } -} - -//! A vector of these structs is used to keep track of the different viewports using Atom to render. -//! Each viewport currently has its own scene and pipeline. -struct AtomShimViewContext -{ - HWND m_hWnd; - bool m_isMainViewport; - - // width and height of the viewport. - // These are not fully used currently since each viewport window sends OnWindowResized messages to the WindowContext - // these could instead be sent via the AtomShim in future if desired. - int m_width; - int m_height; - - AZ::RPI::Scene* m_scene = nullptr; - AZStd::shared_ptr m_renderPipeline; - AZStd::shared_ptr m_view; -}; - -#define ATOM_SHIM_TEXTURE_TYPE eTT_MaxTexType - -struct AtomShimTexture - : public CTexture - , public AZ::Data::AssetBus::Handler -{ - AtomShimTexture(uint32 nFlags) : CTexture(nFlags) - { - } - - virtual ~AtomShimTexture(); - - void QueueForHotReload(const AZ::Data::AssetId& assetId); - - void OnAssetReady(AZ::Data::Asset asset) override; - - void CreateFromStreamingImageAsset(const AZ::Data::Asset& streamingImageAsset); - void CreateFromImage(const AZ::Data::Instance& image); - - virtual void SetClamp(bool bEnable) - { - uint32 flags = GetFlags(); - if (bEnable) - { - flags |= FT_STATE_CLAMP; - } - else - { - flags &= ~FT_STATE_CLAMP; - } - SetFlags(flags); - } - - AZ::Data::Instance m_instance; // This is only set for textures loaded from an asset - AZ::RHI::Ptr m_image; // This is only set for textures created dynamically (e.g. font images) - AZ::RHI::Ptr m_imageView; -}; - -////////////////////////////////////////////////////////////////////// -class CAtomShimRenderer - : public CRenderer - , public AZ::Module // This is a base class so that StaticNames in the NameDictionary work in this DLL - , Camera::ActiveCameraRequestBus::Handler -{ -public: - - ////--------------------------------------------------------------------------------------------------------------------- - virtual SRenderPipeline* GetRenderPipeline() override { return nullptr; } - virtual SRenderThread* GetRenderThread() override { return nullptr; } - virtual void FX_SetState(int st, int AlphaRef = -1, int RestoreState = 0) override; - void SetCull([[maybe_unused]] ECull eCull, [[maybe_unused]] bool bSkipMirrorCull = false) override {} - virtual SDepthTexture* GetDepthBufferOrig() override { return nullptr; } - virtual uint32 GetBackBufferWidth() override { return 0; } - virtual uint32 GetBackBufferHeight() override { return 0; }; - virtual const SRenderTileInfo* GetRenderTileInfo() const override { return nullptr; } - - virtual void FX_CommitStates([[maybe_unused]] const SShaderTechnique* pTech, [[maybe_unused]] const SShaderPass* pPass, [[maybe_unused]] bool bUseMaterialState) override {} - virtual void FX_Commit([[maybe_unused]] bool bAllowDIP = false) override {} - virtual long FX_SetVertexDeclaration([[maybe_unused]] int StreamMask, [[maybe_unused]] const AZ::Vertex::Format& vertexFormat) override { return 0; } - virtual void FX_DrawIndexedPrimitive([[maybe_unused]] const eRenderPrimitiveType eType, [[maybe_unused]] const int nVBOffset, [[maybe_unused]] const int nMinVertexIndex, [[maybe_unused]] const int nVerticesCount, [[maybe_unused]] const int nStartIndex, [[maybe_unused]] const int nNumIndices, [[maybe_unused]] bool bInstanced = false) override {} - virtual SDepthTexture* FX_GetDepthSurface([[maybe_unused]] int nWidth, [[maybe_unused]] int nHeight, [[maybe_unused]] bool bAA, [[maybe_unused]] bool shaderResourceView = false) override { return nullptr; } - virtual long FX_SetIStream([[maybe_unused]] const void* pB, [[maybe_unused]] uint32 nOffs, [[maybe_unused]] RenderIndexType idxType) override { return -1; } - virtual long FX_SetVStream([[maybe_unused]] int nID, [[maybe_unused]] const void* pB, [[maybe_unused]] uint32 nOffs, [[maybe_unused]] uint32 nStride, [[maybe_unused]] uint32 nFreq = 1) override { return -1; } - virtual void FX_DrawPrimitive([[maybe_unused]] eRenderPrimitiveType eType, [[maybe_unused]] int nStartVertex, [[maybe_unused]] int nVerticesCount, [[maybe_unused]] int nInstanceVertices = 0) {} - virtual void DrawQuad3D([[maybe_unused]] const Vec3& v0, [[maybe_unused]] const Vec3& v1, [[maybe_unused]] const Vec3& v2, [[maybe_unused]] const Vec3& v3, [[maybe_unused]] const ColorF& color, [[maybe_unused]] float ftx0, [[maybe_unused]] float fty0, [[maybe_unused]] float ftx1, [[maybe_unused]] float fty1) override {} - virtual void DrawQuad([[maybe_unused]] float x0, [[maybe_unused]] float y0, [[maybe_unused]] float x1, [[maybe_unused]] float y1, [[maybe_unused]] const ColorF& color, [[maybe_unused]] float z = 1.0f, [[maybe_unused]] float s0 = 0.0f, [[maybe_unused]] float t0 = 0.0f, [[maybe_unused]] float s1 = 1.0f, [[maybe_unused]] float t1 = 1.0f) override {}; - virtual void FX_ClearTarget(ITexture* pTex) override; - virtual void FX_ClearTarget(SDepthTexture* pTex) override; - - virtual bool FX_SetRenderTarget(int nTarget, void* pTargetSurf, SDepthTexture* pDepthTarget, uint32 nTileCount = 1) override; - virtual bool FX_PushRenderTarget(int nTarget, void* pTargetSurf, SDepthTexture* pDepthTarget, uint32 nTileCount = 1) override; - virtual bool FX_SetRenderTarget(int nTarget, CTexture* pTarget, SDepthTexture* pDepthTarget, bool bPush = false, int nCMSide = -1, bool bScreenVP = false, uint32 nTileCount = 1) override; - virtual bool FX_PushRenderTarget(int nTarget, CTexture* pTarget, SDepthTexture* pDepthTarget, int nCMSide = -1, bool bScreenVP = false, uint32 nTileCount = 1) override; - virtual bool FX_RestoreRenderTarget(int nTarget) override; - virtual bool FX_PopRenderTarget(int nTarget) override; - virtual void FX_SetActiveRenderTargets([[maybe_unused]] bool bAllowDIP = false) override {} - virtual void EF_Scissor([[maybe_unused]] bool bEnable, [[maybe_unused]] int sX, [[maybe_unused]] int sY, [[maybe_unused]] int sWdt, [[maybe_unused]] int sHgt) override {}; - virtual void FX_ResetPipe() override {}; - - ////--------------------------------------------------------------------------------------------------------------------- - - CAtomShimRenderer(); - virtual ~CAtomShimRenderer(); - - virtual WIN_HWND Init(int x, int y, int width, int height, unsigned int cbpp, int zbpp, int sbits, bool fullscreen, bool isEditor, WIN_HINSTANCE hinst, WIN_HWND Glhwnd = 0, bool bReInit = false, const SCustomRenderInitArgs* pCustomArgs = 0, bool bShaderCacheGen = false); - virtual WIN_HWND GetHWND(); - virtual bool SetWindowIcon(const char* path); - - virtual ERenderType GetRenderType() const override; - - virtual const char* GetRenderDescription() const override; - - ///////////////////////////////////////////////////////////////////////////////// - // Render-context management - ///////////////////////////////////////////////////////////////////////////////// - virtual bool SetCurrentContext(WIN_HWND hWnd); - virtual bool CreateContext(WIN_HWND hWnd, bool bAllowMSAA, int SSX, int SSY); - virtual bool DeleteContext(WIN_HWND hWnd); - virtual void MakeMainContextActive(); - virtual WIN_HWND GetCurrentContextHWND() { return m_currContext ? m_currContext->m_hWnd : m_hWnd; } - virtual bool IsCurrentContextMainVP() { return m_currContext ? m_currContext->m_isMainViewport : true; } - - virtual int GetCurrentContextViewportWidth() const { return -1; } - virtual int GetCurrentContextViewportHeight() const { return -1; } - ///////////////////////////////////////////////////////////////////////////////// - - virtual int CreateRenderTarget(const char* name, int nWidth, int nHeight, const ColorF& cClear, ETEX_Format eTF = eTF_R8G8B8A8); - virtual bool ResizeRenderTarget(int nHandle, int nWidth, int nHeight); - virtual bool DestroyRenderTarget(int nHandle); - virtual bool SetRenderTarget(int nHandle, SDepthTexture* pDepthSurf = nullptr); - virtual SDepthTexture* CreateDepthSurface(int nWidth, int nHeight, bool shaderResourceView = false); - virtual void DestroyDepthSurface(SDepthTexture* pDepthSurf); - - virtual int GetOcclusionBuffer(uint16* pOutOcclBuffer, Matrix44* pmCamBuffe); - virtual void WaitForParticleBuffer(threadID nThreadId); - - virtual void GetVideoMemoryUsageStats([[maybe_unused]] size_t& vidMemUsedThisFrame, [[maybe_unused]] size_t& vidMemUsedRecently, [[maybe_unused]] bool bGetPoolsSizes = false) {} - - virtual void SetRenderTile([[maybe_unused]] f32 nTilesPosX, [[maybe_unused]] f32 nTilesPosY, [[maybe_unused]] f32 nTilesGridSizeX, [[maybe_unused]] f32 nTilesGridSizeY) {} - - virtual void EF_InvokeShadowMapRenderJobs([[maybe_unused]] int nFlags){} - //! Fills array of all supported video formats (except low resolution formats) - //! Returns number of formats, also when called with NULL - virtual int EnumDisplayFormats(SDispFormat* Formats); - - //! Return all supported by video card video AA formats - virtual int EnumAAFormats([[maybe_unused]] SAAFormat* Formats) { return 0; } - - //! Changes resolution of the window/device (doen't require to reload the level - virtual bool ChangeResolution(int nNewWidth, int nNewHeight, int nNewColDepth, int nNewRefreshHZ, bool bFullScreen, bool bForce); - - virtual Vec2 SetViewportDownscale([[maybe_unused]] float xscale, [[maybe_unused]] float yscale) { return Vec2(0, 0); } - virtual void SetCurDownscaleFactor([[maybe_unused]] Vec2 sf) {}; - - virtual EScreenAspectRatio GetScreenAspect([[maybe_unused]] int nWidth, [[maybe_unused]] int nHeight) { return eAspect_4_3; } - - virtual void SwitchToNativeResolutionBackbuffer() {} - - virtual void ShutDown(bool bReInit = false); - virtual void ShutDownFast(); - - virtual void BeginFrame(); - virtual void RenderDebug(bool bRernderStats = true); - virtual void EndFrame(); - virtual void LimitFramerate([[maybe_unused]] const int maxFPS, [[maybe_unused]] const bool bUseSleep) {} - - virtual void TryFlush(); - - virtual void Reset (void) {}; - virtual void RT_ReleaseCB(void*){} - - virtual void InitSystemResources(int nFlags); - virtual void ForceGC() {} - virtual void FlushPendingTextureTasks() {} - - virtual void SetTexture(int tnum); - virtual void SetTexture(int tnum, int nUnit); - virtual void SetState(int State, int AlphaRef); - - virtual void DrawStringU(IFFont_RenderProxy* pFont, float x, float y, float z, const char* pStr, bool asciiMultiLine, const STextDrawContext& ctx) const; - virtual void DrawDynVB(SVF_P3F_C4B_T2F* pBuf, uint16* pInds, int nVerts, int nInds, PublicRenderPrimitiveType nPrimType); - virtual void DrawDynUiPrimitiveList(DynUiPrimitiveList& primitives, int totalNumVertices, int totalNumIndices); - - virtual void DrawBuffer(CVertexBuffer* pVBuf, CIndexBuffer* pIBuf, int nNumIndices, int nOffsIndex, const PublicRenderPrimitiveType nPrmode, int nVertStart = 0, int nVertStop = 0); - - virtual void CheckError(const char* comment); - - virtual void DrawLine([[maybe_unused]] const Vec3& vPos1, [[maybe_unused]] const Vec3& vPos2) {}; - virtual void Graph([[maybe_unused]] byte* g, [[maybe_unused]] int x, [[maybe_unused]] int y, [[maybe_unused]] int wdt, [[maybe_unused]] int hgt, [[maybe_unused]] int nC, [[maybe_unused]] int type, [[maybe_unused]] const char* text, [[maybe_unused]] ColorF& color, [[maybe_unused]] float fScale) {}; - - virtual void SetCamera(const CCamera& cam); - virtual void SetViewport(int x, int y, int width, int height, int id = 0); - virtual void SetScissor(int x = 0, int y = 0, int width = 0, int height = 0); - virtual void GetViewport(int* x, int* y, int* width, int* height) const; - - virtual void SetCullMode (int mode = R_CULL_BACK); - virtual bool EnableFog (bool enable); - virtual void SetFogColor(const ColorF& color); - virtual void EnableVSync(bool enable); - - virtual void DrawPrimitivesInternal(CVertexBuffer* src, int vert_num, const eRenderPrimitiveType prim_type); - - virtual void PushMatrix(); - virtual void RotateMatrix(float a, float x, float y, float z); - virtual void RotateMatrix(const Vec3& angels); - virtual void TranslateMatrix(float x, float y, float z); - virtual void ScaleMatrix(float x, float y, float z); - virtual void TranslateMatrix(const Vec3& pos); - virtual void MultMatrix(const float* mat); - virtual void LoadMatrix(const Matrix34* src = 0); - virtual void PopMatrix(); - - virtual void EnableTMU(bool enable); - virtual void SelectTMU(int tnum); - - virtual bool ChangeDisplay(unsigned int width, unsigned int height, unsigned int cbpp); - virtual void ChangeViewport(unsigned int x, unsigned int y, unsigned int width, unsigned int height, bool bMainViewport = false, float scaleWidth = 1.0f, float scaleHeight = 1.0f); - - virtual bool SaveTga([[maybe_unused]] unsigned char* sourcedata, [[maybe_unused]] int sourceformat, [[maybe_unused]] int w, [[maybe_unused]] int h, [[maybe_unused]] const char* filename, [[maybe_unused]] bool flip) const { return false; } - - //download an image to video memory. 0 in case of failure - virtual void CreateResourceAsync([[maybe_unused]] SResourceAsync* Resource) {}; - virtual void ReleaseResourceAsync([[maybe_unused]] SResourceAsync* Resource) {}; - void ReleaseResourceAsync(AZStd::unique_ptr Resource) override {}; - virtual unsigned int DownLoadToVideoMemory([[maybe_unused]] const byte* data, [[maybe_unused]] int w, [[maybe_unused]] int h, [[maybe_unused]] int d, [[maybe_unused]] ETEX_Format eTFSrc, [[maybe_unused]] ETEX_Format eTFDst, [[maybe_unused]] int nummipmap, [[maybe_unused]] ETEX_Type eTT, [[maybe_unused]] bool repeat = true, [[maybe_unused]] int filter = FILTER_BILINEAR, [[maybe_unused]] int Id = 0, [[maybe_unused]] const char* szCacheName = NULL, [[maybe_unused]] int flags = 0, [[maybe_unused]] EEndian eEndian = eLittleEndian, [[maybe_unused]] RectI* pRegion = NULL, [[maybe_unused]] bool bAsynDevTexCreation = false) { return 0; } - virtual unsigned int DownLoadToVideoMemory([[maybe_unused]] const byte* data, [[maybe_unused]] int w, [[maybe_unused]] int h, [[maybe_unused]] ETEX_Format eTFSrc, [[maybe_unused]] ETEX_Format eTFDst, [[maybe_unused]] int nummipmap, [[maybe_unused]] bool repeat = true, [[maybe_unused]] int filter = FILTER_BILINEAR, [[maybe_unused]] int Id = 0, [[maybe_unused]] const char* szCacheName = NULL, [[maybe_unused]] int flags = 0, [[maybe_unused]] EEndian eEndian = eLittleEndian, [[maybe_unused]] RectI* pRegion = NULL, [[maybe_unused]] bool bAsynDevTexCreation = false) { return 0; } - virtual unsigned int DownLoadToVideoMemoryCube([[maybe_unused]] const byte* data, [[maybe_unused]] int w, [[maybe_unused]] int h, [[maybe_unused]] ETEX_Format eTFSrc, [[maybe_unused]] ETEX_Format eTFDst, [[maybe_unused]] int nummipmap, [[maybe_unused]] bool repeat = true, [[maybe_unused]] int filter = FILTER_BILINEAR, [[maybe_unused]] int Id = 0, [[maybe_unused]] const char* szCacheName = NULL, [[maybe_unused]] int flags = 0, [[maybe_unused]] EEndian eEndian = eLittleEndian, [[maybe_unused]] RectI* pRegion = NULL, [[maybe_unused]] bool bAsynDevTexCreation = false) { return 0; } - virtual unsigned int DownLoadToVideoMemory3D([[maybe_unused]] const byte* data, [[maybe_unused]] int w, [[maybe_unused]] int h, [[maybe_unused]] int d, [[maybe_unused]] ETEX_Format eTFSrc, [[maybe_unused]] ETEX_Format eTFDst, [[maybe_unused]] int nummipmap, [[maybe_unused]] bool repeat = true, [[maybe_unused]] int filter = FILTER_BILINEAR, [[maybe_unused]] int Id = 0, [[maybe_unused]] const char* szCacheName = NULL, [[maybe_unused]] int flags = 0, [[maybe_unused]] EEndian eEndian = eLittleEndian, [[maybe_unused]] RectI* pRegion = NULL, [[maybe_unused]] bool bAsynDevTexCreation = false) { return 0; } - virtual void UpdateTextureInVideoMemory([[maybe_unused]] uint32 tnum, [[maybe_unused]] const byte* newdata, [[maybe_unused]] int posx, [[maybe_unused]] int posy, [[maybe_unused]] int w, [[maybe_unused]] int h, [[maybe_unused]] ETEX_Format eTFSrc = eTF_R8G8B8A8, [[maybe_unused]] int posz = 0, [[maybe_unused]] int sizez = 1){} - - virtual bool SetGammaDelta(float fGamma); - virtual void RestoreGamma(void) {}; - - virtual void RemoveTexture([[maybe_unused]] unsigned int TextureId) {} - virtual void DeleteFont([[maybe_unused]] IFFont* font) {} - - virtual void Draw2dImage(float xpos, float ypos, float w, float h, int texture_id, float s0 = 0, float t0 = 0, float s1 = 1, float t1 = 1, float angle = 0, float r = 1, float g = 1, float b = 1, float a = 1, float z = 1); - virtual void Push2dImage(float xpos, float ypos, float w, float h, int texture_id, float s0 = 0, float t0 = 0, float s1 = 1, float t1 = 1, float angle = 0, float r = 1, float g = 1, float b = 1, float a = 1, float z = 1, float stereoDepth = 0); - virtual void Draw2dImageList(); - virtual void Draw2dImageStretchMode([[maybe_unused]] bool stretch) {}; - virtual void DrawImage(float xpos, float ypos, float w, float h, int texture_id, float s0, float t0, float s1, float t1, float r, float g, float b, float a, bool filtered = true); - virtual void DrawImageWithUV(float xpos, float ypos, float z, float w, float h, int texture_id, float s[4], float t[4], float r, float g, float b, float a, bool filtered = true); - - virtual void PushWireframeMode(int mode); - virtual void PopWireframeMode(); - virtual void FX_PushWireframeMode(int mode); - virtual void FX_PopWireframeMode(); - virtual void FX_SetWireframeMode(int mode); - - virtual void FX_PreRender([[maybe_unused]] int Stage) override {} - virtual void FX_PostRender() override {} - - virtual void ResetToDefault(); - virtual void SetDefaultRenderStates() {} - - virtual int GenerateAlphaGlowTexture(float k); - - virtual void ApplyViewParameters(const CameraViewParameters&) override; - virtual void SetMaterialColor(float r, float g, float b, float a); - - virtual void GetMemoryUsage(ICrySizer* Sizer); - - // Project/UnProject. Returns true if successful. - virtual bool ProjectToScreen(float ptx, float pty, float ptz, - float* sx, float* sy, float* sz); - virtual int UnProject(float sx, float sy, float sz, - float* px, float* py, float* pz, - const float modelMatrix[16], - const float projMatrix[16], - const int viewport[4]); - virtual int UnProjectFromScreen(float sx, float sy, float sz, - float* px, float* py, float* pz); - - // Shadow Mapping - virtual bool PrepareDepthMap(ShadowMapFrustum* SMSource, int nFrustumLOD = 0, bool bClearPool = false); - virtual void DrawAllShadowsOnTheScreen(); - virtual void OnEntityDeleted([[maybe_unused]] IRenderNode* pRenderNode) {}; - - virtual void FX_SetClipPlane (bool bEnable, float* pPlane, bool bRefract); - - virtual void SetColorOp(byte eCo, byte eAo, byte eCa, byte eAa); - virtual void EF_SetColorOp([[maybe_unused]] byte eCo, [[maybe_unused]] byte eAo, [[maybe_unused]] byte eCa, [[maybe_unused]] byte eAa) {}; - - virtual void SetSrgbWrite([[maybe_unused]] bool srgbWrite) {}; - virtual void EF_SetSrgbWrite([[maybe_unused]] bool sRGBWrite) {}; - - //for editor - virtual void GetModelViewMatrix(float* mat); - virtual void GetProjectionMatrix(float* mat); - - //for texture - virtual ITexture* EF_LoadTexture(const char* nameTex, uint32 flags = 0); - virtual ITexture* EF_LoadDefaultTexture(const char* nameTex); - - virtual void DrawQuad(const Vec3& right, const Vec3& up, const Vec3& origin, int nFlipMode = 0); - virtual void DrawQuad(float dy, float dx, float dz, float x, float y, float z); - // NOTE: deprecated - virtual void ClearTargetsImmediately(uint32 nFlags); - virtual void ClearTargetsImmediately(uint32 nFlags, const ColorF& Colors, float fDepth); - virtual void ClearTargetsImmediately(uint32 nFlags, const ColorF& Colors); - virtual void ClearTargetsImmediately(uint32 nFlags, float fDepth); - - virtual void ClearTargetsLater(uint32 nFlags); - virtual void ClearTargetsLater(uint32 nFlags, const ColorF& Colors, float fDepth); - virtual void ClearTargetsLater(uint32 nFlags, const ColorF& Colors); - virtual void ClearTargetsLater(uint32 nFlags, float fDepth); - - virtual void ReadFrameBuffer(unsigned char* pRGB, int nImageX, int nSizeX, int nSizeY, ERB_Type eRBType, bool bRGBA, int nScaledX = -1, int nScaledY = -1); - virtual void ReadFrameBufferFast(uint32* pDstARGBA8, int dstWidth, int dstHeight, bool BGRA = true); - - virtual bool CaptureFrameBufferFast(unsigned char* pDstRGBA8, int destinationWidth, int destinationHeight); - virtual bool CopyFrameBufferFast(unsigned char* pDstRGBA8, int destinationWidth, int destinationHeight); - virtual bool RegisterCaptureFrame(ICaptureFrameListener* pCapture); - virtual bool UnRegisterCaptureFrame(ICaptureFrameListener* pCapture); - virtual bool InitCaptureFrameBufferFast(uint32 bufferWidth, uint32 bufferHeight); - virtual void CloseCaptureFrameBufferFast(void); - virtual void CaptureFrameBufferCallBack(void); - - - virtual void ReleaseHWShaders() {} - virtual void PrintResourcesLeaks() {} - - //misc - virtual bool ScreenShot(const char* filename = NULL, int width = 0); - - virtual void Set2DMode(uint32 orthoWidth, uint32 orthoHeight, TransformationMatrices& backupMatrices, float znear = -1e10f, float zfar = 1e10f); - virtual void Unset2DMode(const TransformationMatrices& restoringMatrices); - virtual void Set2DModeNonZeroTopLeft(float orthoLeft, float orthoTop, float orthoWidth, float orthoHeight, TransformationMatrices& backupMatrices, float znear = -1e10f, float zfar = 1e10f); - - virtual int ScreenToTexture(int nTexID); - - virtual void DrawPoints([[maybe_unused]] Vec3 v[], [[maybe_unused]] int nump, [[maybe_unused]] ColorF& col, [[maybe_unused]] int flags) {}; - virtual void DrawLines([[maybe_unused]] Vec3 v[], [[maybe_unused]] int nump, [[maybe_unused]] ColorF& col, [[maybe_unused]] int flags, [[maybe_unused]] float fGround) {}; - - virtual void RefreshSystemShaders() {} - - // Shaders/Shaders support - // RE - RenderElement - - virtual void EF_Release(int nFlags); - virtual void FX_PipelineShutdown(bool bFastShutdown = false); - - //========================================================== - // external interface for shaders - //========================================================== - - virtual bool EF_SetLightHole(Vec3 vPos, Vec3 vNormal, int idTex, float fScale = 1.0f, bool bAdditive = true); - - // Draw all shaded REs in the list - virtual void EF_EndEf3D (int nFlags, int nPrecacheUpdateId, int nNearPrecacheUpdateId, const SRenderingPassInfo& passInfo); - - // 2d interface for shaders - virtual void EF_EndEf2D(bool bSort); - virtual bool EF_PrecacheResource(SShaderItem* pSI, float fMipFactor, float fTimeToReady, int Flags, int nUpdateId, int nCounter); - virtual bool EF_PrecacheResource(ITexture* pTP, float fDist, float fTimeToReady, int Flags, int nUpdateId, int nCounter); - virtual void PrecacheResources(); - virtual void PostLevelLoading() {} - virtual void PostLevelUnload() {} - - virtual ITexture* EF_CreateCompositeTexture(int type, const char* szName, int nWidth, int nHeight, int nDepth, int nMips, int nFlags, ETEX_Format eTF, const STexComposition* pCompositions, size_t nCompositions, int8 nPriority = -1); - - void EF_Init(); - - virtual IDynTexture* MakeDynTextureFromShadowBuffer(int nSize, IDynTexture* pDynTexture); - virtual void MakeSprite(IDynTexture*& rTexturePtr, float _fSpriteDistance, int nTexSize, float angle, float angle2, IStatObj* pStatObj, const float fBrightnessMultiplier, SRendParams& rParms); - virtual uint32 RenderOccludersIntoBuffer([[maybe_unused]] const CCamera& viewCam, [[maybe_unused]] int nTexSize, [[maybe_unused]] PodArray& lstOccluders, [[maybe_unused]] float* pBuffer) { return 0; } - - virtual IRenderAuxGeom* GetIRenderAuxGeom([[maybe_unused]] void* jobID = 0) - { - return m_pAtomShimRenderAuxGeom; - } - - virtual IColorGradingController* GetIColorGradingController(); - virtual IStereoRenderer* GetIStereoRenderer(); - - virtual ITexture* Create2DTexture(const char* name, int width, int height, int numMips, int flags, unsigned char* data, ETEX_Format format); - - ////////////////////////////////////////////////////////////////////// - // All font functions are not implemented since the font is rendered by AtomFont - int FontCreateTexture( - [[maybe_unused]] int Width, [[maybe_unused]] int Height, [[maybe_unused]] byte* pData, - [[maybe_unused]] ETEX_Format eTF = eTF_R8G8B8A8, [[maybe_unused]] bool genMips = false, - [[maybe_unused]] const char* textureName = nullptr) override - { - return -1; - } - bool FontUpdateTexture( - [[maybe_unused]] int nTexId, [[maybe_unused]] int X, [[maybe_unused]] int Y, [[maybe_unused]] int USize, [[maybe_unused]] int VSize, - [[maybe_unused]] byte* pData) override - { - return true; - } - void FontSetTexture([[maybe_unused]] int nTexId, [[maybe_unused]] int nFilterMode) override { } - void FontSetRenderingState([[maybe_unused]] bool overrideViewProjMatrices, [[maybe_unused]] TransformationMatrices& backupMatrices) override { } - void FontSetBlending([[maybe_unused]] int src, [[maybe_unused]] int dst, [[maybe_unused]] int baseState) override { } - void FontRestoreRenderingState([[maybe_unused]] bool overrideViewProjMatrices, [[maybe_unused]] const TransformationMatrices& restoringMatrices) override { } - - virtual void GetLogVBuffers(void) {} - - virtual void RT_PresentFast() {} - - virtual void RT_ForceSwapBuffers() {} - virtual void RT_SwitchToNativeResolutionBackbuffer([[maybe_unused]] bool resolveBackBuffer) {} - - virtual void RT_BeginFrame() {} - virtual void RT_EndFrame() {} - virtual void RT_Init() {} - virtual void RT_ShutDown([[maybe_unused]] uint32 nFlags) {} - virtual bool RT_CreateDevice() { return true; } - virtual void RT_Reset() {} - virtual void RT_SetCull([[maybe_unused]] int nMode) {} - virtual void RT_SetScissor([[maybe_unused]] bool bEnable, [[maybe_unused]] int x, [[maybe_unused]] int y, [[maybe_unused]] int width, [[maybe_unused]] int height){} - virtual void RT_RenderScene([[maybe_unused]] int nFlags, [[maybe_unused]] SThreadInfo& TI, [[maybe_unused]] RenderFunc pRenderFunc) {} - virtual void RT_PrepareStereo([[maybe_unused]] int mode, [[maybe_unused]] int output) {} - virtual void RT_CopyToStereoTex([[maybe_unused]] int channel) {} - virtual void RT_UpdateTrackingStates() {} - virtual void RT_DisplayStereo() {} - virtual void RT_SetCameraInfo() {} - virtual void RT_SetStereoCamera() {} - virtual void RT_ReadFrameBuffer([[maybe_unused]] unsigned char* pRGB, [[maybe_unused]] int nImageX, [[maybe_unused]] int nSizeX, [[maybe_unused]] int nSizeY, [[maybe_unused]] ERB_Type eRBType, [[maybe_unused]] bool bRGBA, [[maybe_unused]] int nScaledX, [[maybe_unused]] int nScaledY) {} - virtual void RT_RenderScene([[maybe_unused]] int nFlags, [[maybe_unused]] SThreadInfo& TI, [[maybe_unused]] int nR, [[maybe_unused]] RenderFunc pRenderFunc) {}; - virtual void RT_CreateResource([[maybe_unused]] SResourceAsync* Res) {}; - virtual void RT_ReleaseResource([[maybe_unused]] SResourceAsync* Res) {}; - virtual void RT_ReleaseRenderResources() {}; - virtual void RT_UnbindResources() {}; - virtual void RT_UnbindTMUs() {}; - virtual void RT_PrecacheDefaultShaders() {}; - virtual void RT_CreateRenderResources() {}; - virtual void RT_ClearTarget([[maybe_unused]] ITexture* pTex, [[maybe_unused]] const ColorF& color) {}; - virtual void RT_RenderDebug([[maybe_unused]] bool bRenderStats = true) {}; - - virtual HRESULT RT_CreateVertexBuffer([[maybe_unused]] UINT Length, [[maybe_unused]] DWORD Usage, [[maybe_unused]] DWORD FVF, [[maybe_unused]] UINT Pool, [[maybe_unused]] void** ppVertexBuffer, [[maybe_unused]] HANDLE* pSharedHandle) { return S_OK; } - virtual HRESULT RT_CreateIndexBuffer([[maybe_unused]] UINT Length, [[maybe_unused]] DWORD Usage, [[maybe_unused]] DWORD Format, [[maybe_unused]] UINT Pool, [[maybe_unused]] void** ppVertexBuffer, [[maybe_unused]] HANDLE* pSharedHandle) { return S_OK; }; - virtual HRESULT RT_CreateVertexShader([[maybe_unused]] DWORD* pBuf, [[maybe_unused]] void** pShader, [[maybe_unused]] void* pInst) { return S_OK; }; - virtual HRESULT RT_CreatePixelShader([[maybe_unused]] DWORD* pBuf, [[maybe_unused]] void** pShader) { return S_OK; }; - virtual void RT_ReleaseVBStream([[maybe_unused]] void* pVB, [[maybe_unused]] int nStream) {}; - virtual void RT_DrawDynVB([[maybe_unused]] int Pool, [[maybe_unused]] uint32 nVerts) {} - virtual void RT_DrawDynVB([[maybe_unused]] SVF_P3F_C4B_T2F* pBuf, [[maybe_unused]] uint16* pInds, [[maybe_unused]] uint32 nVerts, [[maybe_unused]] uint32 nInds, [[maybe_unused]] const PublicRenderPrimitiveType nPrimType) {} - virtual void RT_DrawDynVBUI([[maybe_unused]] SVF_P2F_C4B_T2F_F4B* pBuf, [[maybe_unused]] uint16* pInds, [[maybe_unused]] uint32 nVerts, [[maybe_unused]] uint32 nInds, [[maybe_unused]] const PublicRenderPrimitiveType nPrimType) {} - virtual void RT_DrawStringU([[maybe_unused]] IFFont_RenderProxy* pFont, [[maybe_unused]] float x, [[maybe_unused]] float y, [[maybe_unused]] float z, [[maybe_unused]] const char* pStr, [[maybe_unused]] bool asciiMultiLine, [[maybe_unused]] const STextDrawContext& ctx) const {} - virtual void RT_DrawLines([[maybe_unused]] Vec3 v[], [[maybe_unused]] int nump, [[maybe_unused]] ColorF& col, [[maybe_unused]] int flags, [[maybe_unused]] float fGround) {} - virtual void RT_Draw2dImage([[maybe_unused]] float xpos, [[maybe_unused]] float ypos, [[maybe_unused]] float w, [[maybe_unused]] float h, [[maybe_unused]] CTexture* pTexture, [[maybe_unused]] float s0, [[maybe_unused]] float t0, [[maybe_unused]] float s1, [[maybe_unused]] float t1, [[maybe_unused]] float angle, [[maybe_unused]] DWORD col, [[maybe_unused]] float z) {} - virtual void RT_Push2dImage([[maybe_unused]] float xpos, [[maybe_unused]] float ypos, [[maybe_unused]] float w, [[maybe_unused]] float h, [[maybe_unused]] CTexture* pTexture, [[maybe_unused]] float s0, [[maybe_unused]] float t0, [[maybe_unused]] float s1, [[maybe_unused]] float t1, [[maybe_unused]] float angle, [[maybe_unused]] DWORD col, [[maybe_unused]] float z, [[maybe_unused]] float stereoDepth) {} - virtual void RT_Draw2dImageList() {} - virtual void RT_Draw2dImageStretchMode([[maybe_unused]] bool bStretch) {} - virtual void RT_DrawImageWithUV([[maybe_unused]] float xpos, [[maybe_unused]] float ypos, [[maybe_unused]] float z, [[maybe_unused]] float w, [[maybe_unused]] float h, [[maybe_unused]] int texture_id, [[maybe_unused]] float* s, [[maybe_unused]] float* t, [[maybe_unused]] DWORD col, [[maybe_unused]] bool filtered = true) {} - virtual void EF_ClearTargetsImmediately([[maybe_unused]] uint32 nFlags) {} - virtual void EF_ClearTargetsImmediately([[maybe_unused]] uint32 nFlags, [[maybe_unused]] const ColorF& Colors, [[maybe_unused]] float fDepth, [[maybe_unused]] uint8 nStencil) {} - virtual void EF_ClearTargetsImmediately([[maybe_unused]] uint32 nFlags, [[maybe_unused]] const ColorF& Colors) {} - virtual void EF_ClearTargetsImmediately([[maybe_unused]] uint32 nFlags, [[maybe_unused]] float fDepth, [[maybe_unused]] uint8 nStencil) {} - - virtual void EF_ClearTargetsLater([[maybe_unused]] uint32 nFlags) {} - virtual void EF_ClearTargetsLater([[maybe_unused]] uint32 nFlags, [[maybe_unused]] const ColorF& Colors, [[maybe_unused]] float fDepth, [[maybe_unused]] uint8 nStencil) {} - virtual void EF_ClearTargetsLater([[maybe_unused]] uint32 nFlags, [[maybe_unused]] const ColorF& Colors) {} - virtual void EF_ClearTargetsLater([[maybe_unused]] uint32 nFlags, [[maybe_unused]] float fDepth, [[maybe_unused]] uint8 nStencil) {} - - virtual void RT_PushRenderTarget([[maybe_unused]] int nTarget, [[maybe_unused]] CTexture* pTex, [[maybe_unused]] SDepthTexture* pDS, [[maybe_unused]] int nS) {}; - virtual void RT_PopRenderTarget([[maybe_unused]] int nTarget) {}; - virtual void RT_SetViewport([[maybe_unused]] int x, [[maybe_unused]] int y, [[maybe_unused]] int width, [[maybe_unused]] int height, [[maybe_unused]] int id) {} - - virtual void RT_SetRendererCVar([[maybe_unused]] ICVar* pCVar, [[maybe_unused]] const char* pArgText, [[maybe_unused]] const bool bSilentMode = false) {}; - virtual void SetRendererCVar([[maybe_unused]] ICVar* pCVar, [[maybe_unused]] const char* pArgText, [[maybe_unused]] bool bSilentMode = false) {}; - - virtual void SetMatrices(float* pProjMat, float* pViewMat); - - virtual void PushProfileMarker([[maybe_unused]] const char* label) {} - virtual void PopProfileMarker([[maybe_unused]] const char* label) {} - - virtual void RT_InsertGpuCallback([[maybe_unused]] uint32 context, [[maybe_unused]] GpuCallbackFunc callback) {} - virtual void EnablePipelineProfiler([[maybe_unused]] bool bEnable) {} - - virtual IOpticsElementBase* CreateOptics([[maybe_unused]] EFlareType type) const { return NULL; } - - virtual bool BakeMesh([[maybe_unused]] const SMeshBakingInputParams* pInputParams, [[maybe_unused]] SMeshBakingOutput* pReturnValues) { return false; } - virtual PerInstanceConstantBufferPool* GetPerInstanceConstantBufferPoolPointer() override { return nullptr; } - - IDynTexture* CreateDynTexture2(uint32 nWidth, uint32 nHeight, uint32 nTexFlags, const char* szSource, ETexPool eTexPool) override; - - virtual void BeginProfilerSection([[maybe_unused]] const char* name, [[maybe_unused]] uint32 eProfileLabelFlags = 0) override {} - virtual void EndProfilerSection([[maybe_unused]] const char* name) override {} - virtual void AddProfilerLabel([[maybe_unused]] const char* name) override {} - -#ifdef SUPPORT_HW_MOUSE_CURSOR - virtual IHWMouseCursor* GetIHWMouseCursor() { return NULL; } -#endif - - virtual void StartLoadtimePlayback([[maybe_unused]] ILoadtimeCallback* pCallback) {} - virtual void StopLoadtimePlayback() {} - - // used to track current textures - void SetTextureForUnit(int unit, int textureId); - - void RT_DrawVideoRenderer([[maybe_unused]] AZ::VideoRenderer::IVideoRenderer* pVideoRenderer, [[maybe_unused]] const AZ::VideoRenderer::DrawArguments& drawArguments) override {} - -private: - static constexpr char LogName[] = "CAtomShimRenderer"; - - //! Camera::ActiveCameraSystemRequestBus::Handler overrides... - const AZ::Transform& GetActiveCameraTransform() override; - const Camera::Configuration& GetActiveCameraConfiguration() override; - - void CacheCameraTransform(const CCamera& camera); - void CacheCameraConfiguration(const CCamera& camamera); - - HWND m_hWnd = nullptr; // The main app window - - AZStd::string m_rendererDescription; - - CAtomShimRenderAuxGeom* m_pAtomShimRenderAuxGeom; - IColorGradingController* m_pAtomShimColorGradingController; - IStereoRenderer* m_pAtomShimStereoRenderer; - - AZ::RHI::Ptr m_dynamicDraw; - - AZ::RPI::ShaderVariantId m_shaderVariantWrap; - AZ::RPI::ShaderVariantId m_shaderVariantClamp; - - // cached input indices for dynamic draw's draw srg - AZ::RHI::ShaderInputNameIndex m_imageInputIndex = "m_texture"; - AZ::RHI::ShaderInputNameIndex m_viewProjInputIndex = "m_worldToProj"; - - AZStd::unordered_map m_viewContexts; - AtomShimViewContext* m_currContext = nullptr; - - int m_renderPipelineNameSuffix = 1; - - AtomShimTexture* m_currentTextureForUnit[32]; - bool m_clampFlagPerTextureUnit[32]; - - int m_currentFontTextureId = -1; - - bool m_isFinalInitializationDone = false; - bool m_isInFrame = false; // True when between calls to BeginFrame and EndFrame - - int m_isIn2dModeCounter = 0; - - AZ::Transform m_cameraTransform = AZ::Transform::CreateIdentity(); - Camera::Configuration m_cameraConfiguration; - AZStd::shared_ptr m_viewportContext; - - static AtomShimTexture* CastITextureToAtomShimTexture(ITexture* texture) - { - // If GetDevTexture returns a non-null value then this is not an AtomShim texture - if (!(texture && !texture->GetDevTexture())) - { - return nullptr; - } - - return static_cast(texture); - } -}; - -//============================================================================= - -extern CAtomShimRenderer* gcpAtomShim; - - - -#endif //NULL_RENDERER diff --git a/Gems/AtomLyIntegration/CryRenderAtomShim/AtomShim_Shaders.cpp b/Gems/AtomLyIntegration/CryRenderAtomShim/AtomShim_Shaders.cpp deleted file mode 100644 index 9093c4b3d4..0000000000 --- a/Gems/AtomLyIntegration/CryRenderAtomShim/AtomShim_Shaders.cpp +++ /dev/null @@ -1,162 +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 "CryRenderOther_precompiled.h" -#include "AtomShim_Renderer.h" -#include "I3DEngine.h" - -//============================================================================ - -bool CShader::FXSetTechnique([[maybe_unused]] const CCryNameTSCRC& szName) -{ - return true; -} - -bool CShader::FXSetPSFloat([[maybe_unused]] const CCryNameR& NameParam, [[maybe_unused]] const Vec4* fParams, [[maybe_unused]] int nParams) -{ - return true; -} - -bool CShader::FXSetPSFloat([[maybe_unused]] const char* NameParam, [[maybe_unused]] const Vec4* fParams, [[maybe_unused]] int nParams) -{ - return true; -} - -bool CShader::FXSetVSFloat([[maybe_unused]] const CCryNameR& NameParam, [[maybe_unused]] const Vec4* fParams, [[maybe_unused]] int nParams) -{ - return true; -} - -bool CShader::FXSetVSFloat([[maybe_unused]] const char* NameParam, [[maybe_unused]] const Vec4* fParams, [[maybe_unused]] int nParams) -{ - return true; -} - -bool CShader::FXSetGSFloat([[maybe_unused]] const CCryNameR& NameParam, [[maybe_unused]] const Vec4* fParams, [[maybe_unused]] int nParams) -{ - return true; -} - -bool CShader::FXSetGSFloat([[maybe_unused]] const char* NameParam, [[maybe_unused]] const Vec4* fParams, [[maybe_unused]] int nParams) -{ - return true; -} - -bool CShader::FXSetCSFloat([[maybe_unused]] const CCryNameR& NameParam, [[maybe_unused]] const Vec4* fParams, [[maybe_unused]] int nParams) -{ - return true; -} - -bool CShader::FXSetCSFloat([[maybe_unused]] const char* NameParam, [[maybe_unused]] const Vec4* fParams, [[maybe_unused]] int nParams) -{ - return true; -} -bool CShader::FXBegin([[maybe_unused]] uint32* uiPassCount, [[maybe_unused]] uint32 nFlags) -{ - return true; -} - -bool CShader::FXBeginPass([[maybe_unused]] uint32 uiPass) -{ - return true; -} - -bool CShader::FXEndPass() -{ - return true; -} - -bool CShader::FXEnd() -{ - return true; -} - -bool CShader::FXCommit([[maybe_unused]] const uint32 nFlags) -{ - return true; -} - -//=================================================================================== - -FXShaderCache CHWShader::m_ShaderCache; -FXShaderCacheNames CHWShader::m_ShaderCacheList; - -void CRenderer::RefreshSystemShaders() -{ -} - -SShaderCache::~SShaderCache() -{ - CHWShader::m_ShaderCache.erase(m_Name); - SAFE_DELETE(m_pRes[CACHE_USER]); - SAFE_DELETE(m_pRes[CACHE_READONLY]); -} - -SShaderCache* CHWShader::mfInitCache([[maybe_unused]] const char* name, [[maybe_unused]] CHWShader* pSH, [[maybe_unused]] bool bCheckValid, [[maybe_unused]] uint32 CRC32, [[maybe_unused]] bool bReadOnly, [[maybe_unused]] bool bAsync) -{ - return NULL; -} - -#if !defined(CONSOLE) -bool CHWShader::mfOptimiseCacheFile([[maybe_unused]] SShaderCache* pCache, [[maybe_unused]] bool bForce, [[maybe_unused]] SOptimiseStats* Stats) -{ - return true; -} -#endif - -bool CHWShader::PreactivateShaders() -{ - bool bRes = true; - return bRes; -} -void CHWShader::RT_PreactivateShaders() -{ -} - -const char* CHWShader::GetCurrentShaderCombinations([[maybe_unused]] bool bLevel) -{ - return ""; -} - -void CHWShader::mfFlushPendedShadersWait([[maybe_unused]] int nMaxAllowed) -{ -} - -void CShaderResources::Rebuild([[maybe_unused]] IShader* pSH, [[maybe_unused]] AzRHI::ConstantBufferUsage usage) -{ -} - -void CShaderResources::CloneConstants([[maybe_unused]] const IRenderShaderResources* pSrc) -{ -} - -void CShaderResources::ReleaseConstants() -{ -} - -void CShaderResources::UpdateConstants([[maybe_unused]] IShader* pSH) -{ -} - -void CShader::mfFlushPendedShaders() -{ -} - -void SShaderCache::Cleanup(void) -{ -} - -void CShaderResources::AdjustForSpec() -{ -} - diff --git a/Gems/AtomLyIntegration/CryRenderAtomShim/AtomShim_Shadows.cpp b/Gems/AtomLyIntegration/CryRenderAtomShim/AtomShim_Shadows.cpp deleted file mode 100644 index ee6f80b51d..0000000000 --- a/Gems/AtomLyIntegration/CryRenderAtomShim/AtomShim_Shadows.cpp +++ /dev/null @@ -1,36 +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 of the shadow maps using NULL device specific implementation -// shadow map calculations - - -#include "CryRenderOther_precompiled.h" -#include "AtomShim_Renderer.h" -#include "../Common/Shadow_Renderer.h" - -#include "I3DEngine.h" - -IDynTexture* CAtomShimRenderer::MakeDynTextureFromShadowBuffer([[maybe_unused]] int nSize, [[maybe_unused]] IDynTexture* pDynTexture) -{ - return NULL; -} - -bool CAtomShimRenderer::PrepareDepthMap([[maybe_unused]] ShadowMapFrustum* SMSource, [[maybe_unused]] int nFrustumLOD, [[maybe_unused]] bool bClearPool) -{ - return true; -} - -void CAtomShimRenderer::DrawAllShadowsOnTheScreen() -{ -} diff --git a/Gems/AtomLyIntegration/CryRenderAtomShim/AtomShim_System.cpp b/Gems/AtomLyIntegration/CryRenderAtomShim/AtomShim_System.cpp deleted file mode 100644 index 3098ed3c3e..0000000000 --- a/Gems/AtomLyIntegration/CryRenderAtomShim/AtomShim_System.cpp +++ /dev/null @@ -1,190 +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 : NULL device specific implementation and extensions handling. - - -#include "CryRenderOther_precompiled.h" -#include "AtomShim_Renderer.h" - -#include -#include -#include - -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include - -bool CAtomShimRenderer::SetGammaDelta(const float fGamma) -{ - m_fDeltaGamma = fGamma; - return true; -} - -int CAtomShimRenderer::EnumDisplayFormats([[maybe_unused]] SDispFormat* Formats) -{ - return 0; -} - -bool CAtomShimRenderer::ChangeResolution([[maybe_unused]] int nNewWidth, [[maybe_unused]] int nNewHeight, [[maybe_unused]] int nNewColDepth, [[maybe_unused]] int nNewRefreshHZ, [[maybe_unused]] bool bFullScreen, [[maybe_unused]] bool bForce) -{ - return false; -} - -WIN_HWND CAtomShimRenderer::Init([[maybe_unused]] int x, [[maybe_unused]] int y, int width, int height, [[maybe_unused]] unsigned int cbpp, [[maybe_unused]] int zbpp, [[maybe_unused]] int sbits, [[maybe_unused]] bool fullscreen, [[maybe_unused]] bool isEditor, [[maybe_unused]] WIN_HINSTANCE hinst, WIN_HWND Glhwnd, [[maybe_unused]] bool bReInit, [[maybe_unused]] const SCustomRenderInitArgs* pCustomArgs, [[maybe_unused]] bool bShaderCacheGen) -{ - //======================================= - // Add init code here - //======================================= - - FX_SetWireframeMode(R_SOLID_MODE); - - m_width = width; - m_height = height; - m_backbufferWidth = width; - m_backbufferHeight = height; - m_nativeWidth = width; - m_nativeHeight = height; - m_Features |= RFT_HW_NVIDIA; - - m_hWnd = (HWND)Glhwnd; - - if (!g_shaderGeneralHeap) - { - g_shaderGeneralHeap = CryGetIMemoryManager()->CreateGeneralExpandingMemoryHeap(4 * 1024 * 1024, 0, "Shader General"); - } - - iLog->Log("Init Shaders\n"); - - gRenDev->m_cEF.mfInit(); - EF_Init(); - -#if NULL_SYSTEM_TRAIT_INIT_RETURNTHIS - return (WIN_HWND)this;//it just get checked against NULL anyway -#else - return (WIN_HWND)GetDesktopWindow(); -#endif -} - - -bool CAtomShimRenderer::SetCurrentContext(WIN_HWND hWnd) -{ - auto itr = m_viewContexts.find(hWnd); - if (itr == m_viewContexts.end()) - { - return false; - } - - m_currContext = itr->second; - return true; -} - -bool CAtomShimRenderer::CreateContext(WIN_HWND hWnd, bool /* bAllowMSAA */, int /* SSX */, int /* SSY */) -{ - if (m_viewContexts.find(hWnd) != m_viewContexts.end()) - { - return true; - } - - AZ::RPI::RenderPipelinePtr renderPipeline = AZ::RPI::RPISystemInterface::Get()->GetRenderPipelineForWindow(hWnd); - if (!renderPipeline) - { - return false; - } - - AtomShimViewContext* pContext = new AtomShimViewContext; - pContext->m_hWnd = (HWND)hWnd; - pContext->m_width = m_width; - pContext->m_height = m_height; - pContext->m_isMainViewport = !gEnv->IsEditor(); - - pContext->m_renderPipeline = renderPipeline; - pContext->m_view = renderPipeline->GetDefaultView(); - pContext->m_scene = renderPipeline->GetScene(); - - m_viewContexts[hWnd] = pContext; - m_currContext = pContext; - return true; -} - -bool CAtomShimRenderer::DeleteContext(WIN_HWND hWnd) -{ - // Attempt to find matching context with this window handle - auto contextToDeleteIter = m_viewContexts.find(hWnd); - - if (contextToDeleteIter == m_viewContexts.end()) - { - return false; - } - - AtomShimViewContext* contextToDelete = contextToDeleteIter->second; - - // remove this context from the map of contexts - m_viewContexts.erase(contextToDeleteIter); - - - // If we are deleting the current context then set current context to the first one still in list (if any are left) - if (m_currContext == contextToDelete) - { - if (m_viewContexts.empty()) - { - m_currContext = nullptr; - - m_width = 0; - m_height = 0; - } - else - { - m_currContext = m_viewContexts.begin()->second; - - m_width = m_currContext->m_width; - m_height = m_currContext->m_height; - } - } - - delete contextToDelete; - - return true; -} - -void CAtomShimRenderer::MakeMainContextActive() -{ - if (m_viewContexts.empty()) - { - return; - } - - m_currContext = m_viewContexts.begin()->second; -} - -void CAtomShimRenderer::ShutDown([[maybe_unused]] bool bReInit) -{ - iLog = nullptr; - FreeResources(FRR_ALL); - FX_PipelineShutdown(); -} - -void CAtomShimRenderer::ShutDownFast() -{ - FX_PipelineShutdown(); -} - diff --git a/Gems/AtomLyIntegration/CryRenderAtomShim/AtomShim_Textures.cpp b/Gems/AtomLyIntegration/CryRenderAtomShim/AtomShim_Textures.cpp deleted file mode 100644 index 5bc6b6f872..0000000000 --- a/Gems/AtomLyIntegration/CryRenderAtomShim/AtomShim_Textures.cpp +++ /dev/null @@ -1,363 +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 : NULL device specific texture manager implementation. - -#include "CryRenderOther_precompiled.h" -#include "AtomShim_Renderer.h" -#include -#include - -//================================================================================= - -/////////////////////////////////////////////////////////////////////////////////// - - -void CAtomShimRenderer::MakeSprite(IDynTexture*& rTexturePtr, [[maybe_unused]] float _fSpriteDistance, [[maybe_unused]] int nTexSize, [[maybe_unused]] float angle, [[maybe_unused]] float angle2, [[maybe_unused]] IStatObj* pStatObj, [[maybe_unused]] const float fBrightnessMultiplier, [[maybe_unused]] SRendParams& rParms) -{ - rTexturePtr = NULL; -} - -int CAtomShimRenderer::GenerateAlphaGlowTexture([[maybe_unused]] float k) -{ - return 0; -} - -bool CAtomShimRenderer::EF_SetLightHole([[maybe_unused]] Vec3 vPos, [[maybe_unused]] Vec3 vNormal, [[maybe_unused]] int idTex, [[maybe_unused]] float fScale, [[maybe_unused]] bool bAdditive) -{ - return false; -} - -bool CAtomShimRenderer::EF_PrecacheResource([[maybe_unused]] ITexture* pTP, [[maybe_unused]] float fDist, [[maybe_unused]] float fTimeToReady, [[maybe_unused]] int Flags, [[maybe_unused]] int nUpdateId, [[maybe_unused]] int nCounter) -{ - return false; -} - -bool CTexture::RenderEnvironmentCMHDR([[maybe_unused]] int size, [[maybe_unused]] Vec3& Pos, [[maybe_unused]] TArray& vecData) -{ - return true; -} - -void CTexture::Apply([[maybe_unused]] int nTUnit, [[maybe_unused]] int nState, [[maybe_unused]] int nTMatSlot, [[maybe_unused]] int nSUnit, [[maybe_unused]] SResourceView::KeyType nResViewKey, [[maybe_unused]] EHWShaderClass eSHClass) -{ -} - -#if defined(TEXTURE_GET_SYSTEM_COPY_SUPPORT) -byte* CTexture::Convert([[maybe_unused]] const byte* pSrc, [[maybe_unused]] int nWidth, [[maybe_unused]] int nHeight, [[maybe_unused]] int nMips, [[maybe_unused]] ETEX_Format eTFSrc, [[maybe_unused]] ETEX_Format eTFDst, [[maybe_unused]] int& nOutSize, [[maybe_unused]] bool bLinear) -{ - return NULL; -} -#endif - -void CTexture::ReleaseDeviceTexture([[maybe_unused]] bool bKeepLastMips, [[maybe_unused]] bool bFromUnload) -{ -} - -bool CTexture::Clear([[maybe_unused]] const ColorF& color) -{ - return true; -} - -void CTexture::SetTexStates() -{ - STexState s; - - const bool noMipFiltering = m_nMips <= 1 && !(m_nFlags & FT_FORCE_MIPS); - s.m_nMinFilter = FILTER_LINEAR; - s.m_nMagFilter = FILTER_LINEAR; - s.m_nMipFilter = noMipFiltering ? FILTER_NONE : FILTER_LINEAR; - - const int addrMode = (m_nFlags & FT_STATE_CLAMP || m_eTT == eTT_Cube) ? TADDR_CLAMP : TADDR_WRAP; - s.SetClampMode(addrMode, addrMode, addrMode); - - m_nDefState = (uint16)CTexture::GetTexState(s); -} - -bool CTexture::CreateDeviceTexture([[maybe_unused]] const byte* pData[6]) -{ - return true; -} - -void* CTexture::CreateDeviceResourceView([[maybe_unused]] const SResourceView& rv) -{ - return NULL; -} - -ETEX_Format CTexture::ClosestFormatSupported(ETEX_Format eTFDst) -{ - return eTFDst; -} - -bool CTexture::SetFilterMode(int nFilter) -{ - return s_sDefState.SetFilterMode(nFilter); -} - -bool CTexture::CreateRenderTarget([[maybe_unused]] ETEX_Format eTF, [[maybe_unused]] const ColorF& cClear) -{ - return true; -} - -bool CTexture::SetClampingMode(int nAddressU, int nAddressV, int nAddressW) -{ - return s_sDefState.SetClampMode(nAddressU, nAddressV, nAddressW); -} - -void CTexture::UpdateTexStates() -{ -} - -void CTexture::GenerateCachedShadowMaps() -{ -} - -void CTexture::Readback([[maybe_unused]] AZ::u32 subresourceIndex, StagingHook callback) -{ -} - -//====================================================================================== - -void SEnvTexture::Release() -{ -} - -void SEnvTexture::RT_SetMatrix(void) -{ -} - -bool SDynTexture::RestoreRT([[maybe_unused]] int nRT, [[maybe_unused]] bool bPop) -{ - return true; -} - -bool SDynTexture::ClearRT() -{ - return true; -} - -bool SDynTexture2::ClearRT() -{ - return true; -} - -bool SDynTexture::SetRT([[maybe_unused]] int nRT, [[maybe_unused]] bool bPush, [[maybe_unused]] SDepthTexture* pDepthSurf, [[maybe_unused]] bool bScreenVP) -{ - return true; -} - -bool SDynTexture2::SetRT([[maybe_unused]] int nRT, [[maybe_unused]] bool bPush, [[maybe_unused]] SDepthTexture* pDepthSurf, [[maybe_unused]] bool bScreenVP) -{ - return true; -} - -bool SDynTexture2::RestoreRT([[maybe_unused]] int nRT, [[maybe_unused]] bool bPop) -{ - return true; -} - -bool SDynTexture2::SetRectStates() -{ - return true; -} - -//=============================================================================== - -void STexState::PostCreate() -{ -} - -void STexState::Destroy() -{ -} - -void STexState::Init(const STexState& src) -{ - memcpy(this, &src, sizeof(src)); -} - -void STexState::SetComparisonFilter([[maybe_unused]] bool bEnable) -{ -} - -bool STexState::SetClampMode(int nAddressU, int nAddressV, int nAddressW) -{ - m_nAddressU = nAddressU; - m_nAddressV = nAddressV; - m_nAddressW = nAddressW; - return true; -} - -bool STexState::SetFilterMode([[maybe_unused]] int nFilter) -{ - m_nMinFilter = 0; - m_nMagFilter = 0; - m_nMipFilter = 0; - return true; -} - -void STexState::SetBorderColor(DWORD dwColor) -{ - m_dwBorderColor = dwColor; -} - - -SDepthTexture::~SDepthTexture() -{ -} - -void SDepthTexture::Release([[maybe_unused]] bool bReleaseTex) -{ -} - -ETEX_Format CTexture::TexFormatFromDeviceFormat([[maybe_unused]] D3DFormat nFormat) -{ - return eTF_Unknown; -} - -bool CTexture::RT_CreateDeviceTexture([[maybe_unused]] const byte* pData[6]) -{ - return true; -} - -void CTexture::UpdateTextureRegion([[maybe_unused]] const uint8_t* data, [[maybe_unused]] int X, [[maybe_unused]] int Y, [[maybe_unused]] int Z, [[maybe_unused]] int USize, [[maybe_unused]] int VSize, [[maybe_unused]] int ZSize, [[maybe_unused]] ETEX_Format eTFSrc) -{ -} -void CTexture::RT_UpdateTextureRegion([[maybe_unused]] const uint8_t* data, [[maybe_unused]] int X, [[maybe_unused]] int Y, [[maybe_unused]] int Z, [[maybe_unused]] int USize, [[maybe_unused]] int VSize, [[maybe_unused]] int ZSize, [[maybe_unused]] ETEX_Format eTFSrc) -{ -} - -void CTexture::Unbind() -{ -} - -bool SDynTexture::RT_SetRT([[maybe_unused]] int nRT, [[maybe_unused]] int nWidth, [[maybe_unused]] int nHeight, [[maybe_unused]] bool bPush, [[maybe_unused]] bool bScreenVP) -{ - return true; -} - -bool SDynTexture::RT_Update([[maybe_unused]] int nNewWidth, [[maybe_unused]] int nNewHeight) -{ - return true; -} - -void CTexture::ReleaseSystemTargets(void) {} -void CTexture::ReleaseMiscTargets(void) {} -void CTexture::CreateSystemTargets(void) {} - -//=============================================================================== - -namespace TextureHelpers -{ - bool VerifyTexSuffix([[maybe_unused]] EEfResTextures texSlot, [[maybe_unused]] const char* texPath) - { - return false; - } - - bool VerifyTexSuffix([[maybe_unused]] EEfResTextures texSlot, [[maybe_unused]] const string& texPath) - { - return false; - } - - const char* LookupTexSuffix([[maybe_unused]] EEfResTextures texSlot) - { - return nullptr; - } - - int8 LookupTexPriority([[maybe_unused]] EEfResTextures texSlot) - { - return 0; - } - - CTexture* LookupTexDefault([[maybe_unused]] EEfResTextures texSlot) - { - return nullptr; - } - - CTexture* LookupTexBlank([[maybe_unused]] EEfResTextures texSlot) - { - return nullptr; - } -} - -bool CTexture::Clear() { return true; } - -uint32 CDeviceTexture::TextureDataSize([[maybe_unused]] uint32 nWidth, [[maybe_unused]] uint32 nHeight, [[maybe_unused]] uint32 nDepth, [[maybe_unused]] uint32 nMips, [[maybe_unused]] uint32 nSlices, [[maybe_unused]] const ETEX_Format eTF) -{ - return 0; -} - -AtomShimTexture::~AtomShimTexture() -{ - if(AZ::Data::AssetBus::Handler::BusIsConnected()) - { - AZ::Data::AssetBus::Handler::BusDisconnect(); - } -} - -// Hot-reloading support for the AtomShimTexture. -// This only supports OnAssetReady, not OnAssetReloaded, because it is only intended to handle the case where a texture has not been processed or does not exist. -// The RPI::StreamingImage will handle re-loading if the file changes after it has been loaded initially -void AtomShimTexture::QueueForHotReload(const AZ::Data::AssetId& assetId) -{ - AZ::Data::AssetBus::Handler::BusConnect(assetId); - - // Lyshine may try to load a texture before the ImageSystem wasn't ready - if (AZ::RPI::ImageSystemInterface::Get()) - { - CreateFromImage(AZ::RPI::ImageSystemInterface::Get()->GetSystemImage(AZ::RPI::SystemImage::Magenta)); - } -} - -void AtomShimTexture::OnAssetReady(AZ::Data::Asset asset) -{ - AZ::Data::AssetBus::Handler::BusDisconnect(asset.GetId()); - - AZ::Data::Asset imageAsset = asset; - AZ_Assert(imageAsset, "This should be a streaming image asset"); - - CreateFromStreamingImageAsset(imageAsset); -} - -void AtomShimTexture::CreateFromStreamingImageAsset(const AZ::Data::Asset& imageAsset) -{ - AZ::Data::Instance image = AZ::RPI::StreamingImage::FindOrCreate(imageAsset); - if (!image) - { - AZ_Error("CAtomShimRenderer", false, "Failed to find or create an image instance from image asset '%s'", imageAsset.GetHint().c_str()); - return; - } - - CreateFromImage(image); -} - -void AtomShimTexture::CreateFromImage(const AZ::Data::Instance& image) -{ - AZ::RHI::Format rhiViewFormat = AZ::RHI::Format::Unknown; - AZ::RHI::ImageViewDescriptor viewDesc = AZ::RHI::ImageViewDescriptor(rhiViewFormat); - AZ::RHI::Image* rhiImage = image->GetRHIImage(); - - AZ::RHI::Ptr imageView = rhiImage->GetImageView(viewDesc); - if(!imageView.get()) - { - AZ_Assert(false, "Failed to acquire an image view"); - return; - } - - m_instance = image; - m_image = rhiImage; - m_imageView = imageView; - - SetWidth(rhiImage->GetDescriptor().m_size.m_width); - SetHeight(rhiImage->GetDescriptor().m_size.m_height); -} - diff --git a/Gems/AtomLyIntegration/CryRenderAtomShim/AtomShim_TexturesStreaming.cpp b/Gems/AtomLyIntegration/CryRenderAtomShim/AtomShim_TexturesStreaming.cpp deleted file mode 100644 index 14ecb6ed57..0000000000 --- a/Gems/AtomLyIntegration/CryRenderAtomShim/AtomShim_TexturesStreaming.cpp +++ /dev/null @@ -1,98 +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 "CryRenderOther_precompiled.h" -#include "AtomShim_Renderer.h" -#include "../Common/Textures/TextureStreamPool.h" - -//=============================================================================== - -bool STexPoolItem::IsStillUsedByGPU([[maybe_unused]] uint32 nCurTick) -{ - return false; -} - -STexPoolItem::~STexPoolItem() -{ -} - -void CTexture::InitStreamingDev() -{ -} - -void CTexture::StreamExpandMip([[maybe_unused]] const void* pRawData, [[maybe_unused]] int nMip, [[maybe_unused]] int nBaseMipOffset, [[maybe_unused]] int nSideDelta) -{ -} - -void CTexture::StreamCopyMipsTexToTex([[maybe_unused]] STexPoolItem* pSrcItem, [[maybe_unused]] int nMipSrc, [[maybe_unused]] STexPoolItem* pDestItem, [[maybe_unused]] int nMipDest, [[maybe_unused]] int nNumMips) -{ -} - -bool CTexture::StreamPrepare_Platform() -{ - return true; -} - -int CTexture::StreamTrim([[maybe_unused]] int nToMip) -{ - return 0; -} - -// Just remove item from the texture object and keep Item in Pool list for future use -// This function doesn't release API texture -void CTexture::StreamRemoveFromPool() -{ -} - -void CTexture::StreamCopyMipsTexToMem([[maybe_unused]] int nStartMip, [[maybe_unused]] int nEndMip, [[maybe_unused]] bool bToDevice, [[maybe_unused]] STexPoolItem* pNewPoolItem) -{ -} - -STexPoolItem* CTexture::StreamGetPoolItem([[maybe_unused]] int nStartMip, [[maybe_unused]] int nMips, [[maybe_unused]] bool bShouldBeCreated, [[maybe_unused]] bool bCreateFromMipData, [[maybe_unused]] bool bCanCreate, [[maybe_unused]] bool bForStreamOut) -{ - return NULL; -} - -void CTexture::StreamAssignPoolItem([[maybe_unused]] STexPoolItem* pItem, [[maybe_unused]] int nMinMip) -{ -} - - -CTextureStreamPoolMgr::CTextureStreamPoolMgr() -{ -} - -CTextureStreamPoolMgr::~CTextureStreamPoolMgr() -{ -} - -void CTextureStreamPoolMgr::Flush() -{ -} - -STexPoolItem* CTextureStreamPoolMgr::GetPoolItem([[maybe_unused]] int nWidth, [[maybe_unused]] int nHeight, [[maybe_unused]] int nArraySize, [[maybe_unused]] int nMips, [[maybe_unused]] ETEX_Format eTF, [[maybe_unused]] bool bIsSRGB, [[maybe_unused]] ETEX_Type eTT, [[maybe_unused]] bool bShouldBeCreated, [[maybe_unused]] const char* sName, [[maybe_unused]] STextureInfo* pTI, [[maybe_unused]] bool bCanCreate, [[maybe_unused]] bool bWaitForIdle) -{ - return NULL; -} - -void CTextureStreamPoolMgr::ReleaseItem([[maybe_unused]] STexPoolItem* pItem) -{ -} - -void CTextureStreamPoolMgr::GarbageCollect([[maybe_unused]] size_t* nCurTexPoolSize, [[maybe_unused]] size_t nLowerPoolLimit, [[maybe_unused]] int nMaxItemsToFree) -{ -} - -void CTextureStreamPoolMgr::GetMemoryUsage([[maybe_unused]] ICrySizer* pSizer) -{ -} diff --git a/Gems/AtomLyIntegration/CryRenderAtomShim/CMakeLists.txt b/Gems/AtomLyIntegration/CryRenderAtomShim/CMakeLists.txt deleted file mode 100644 index 9ad9958449..0000000000 --- a/Gems/AtomLyIntegration/CryRenderAtomShim/CMakeLists.txt +++ /dev/null @@ -1,45 +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_get_list_relative_pal_filename(pal_dir ${CMAKE_CURRENT_LIST_DIR}/Platform/${PAL_PLATFORM_NAME}) - -include(${pal_dir}/PAL_${PAL_PLATFORM_NAME_LOWERCASE}.cmake) # For PAL_TRAIT_ATOM_CRYRENDEROTHER_SUPPORTED - -if(NOT PAL_TRAIT_ATOM_CRYRENDEROTHER_SUPPORTED) - return() -endif() - -ly_add_target( - NAME CryRenderOther ${PAL_TRAIT_MONOLITHIC_DRIVEN_MODULE_TYPE} - NAMESPACE Legacy - FILES_CMAKE - atom_shim_renderer_files.cmake - ${pal_dir}/platform_${PAL_PLATFORM_NAME_LOWERCASE}_files.cmake - PLATFORM_INCLUDE_FILES - ${pal_dir}/platform_${PAL_PLATFORM_NAME_LOWERCASE}.cmake - INCLUDE_DIRECTORIES - PRIVATE - . - PCH - BUILD_DEPENDENCIES - PUBLIC - AZ::AzCore - Legacy::CryCommon - Legacy::CryRender.Headers - Legacy::CryRenderNULL.Static - AZ::AtomCore - Gem::Atom_RHI.Reflect - Gem::Atom_RPI.Public -) - -# Atom_AtomBridge.Static is the one that drives loading CryRenderOther, however, CryRenderOther -# is not enabled in every platform, so we define the dependency here -ly_add_dependencies(Atom_AtomBridge.Static CryRenderOther) diff --git a/Gems/AtomLyIntegration/CryRenderAtomShim/CryRenderAtomShim.rc b/Gems/AtomLyIntegration/CryRenderAtomShim/CryRenderAtomShim.rc deleted file mode 100644 index 5730d0a537..0000000000 --- a/Gems/AtomLyIntegration/CryRenderAtomShim/CryRenderAtomShim.rc +++ /dev/null @@ -1,111 +0,0 @@ -// Microsoft Visual C++ generated resource script. -// -#include "resource.h" - -#define APSTUDIO_READONLY_SYMBOLS -///////////////////////////////////////////////////////////////////////////// -// -// Generated from the TEXTINCLUDE 2 resource. -// -#include "winres.h" - -///////////////////////////////////////////////////////////////////////////// -#undef APSTUDIO_READONLY_SYMBOLS - -///////////////////////////////////////////////////////////////////////////// -// Russian resources - -#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_RUS) -#ifdef _WIN32 -LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT -#pragma code_page(1251) -#endif //_WIN32 - -#ifdef APSTUDIO_INVOKED -///////////////////////////////////////////////////////////////////////////// -// -// TEXTINCLUDE -// - -1 TEXTINCLUDE -BEGIN - "resource.h\0" -END - -2 TEXTINCLUDE -BEGIN - "#include ""winres.h""\r\n" - "\0" -END - -3 TEXTINCLUDE -BEGIN - "\r\n" - "\0" -END - -#endif // APSTUDIO_INVOKED - -#endif // Russian resources -///////////////////////////////////////////////////////////////////////////// - - -///////////////////////////////////////////////////////////////////////////// -// German (Germany) resources - -#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_DEU) -#ifdef _WIN32 -LANGUAGE LANG_GERMAN, SUBLANG_GERMAN -#pragma code_page(1252) -#endif //_WIN32 - -///////////////////////////////////////////////////////////////////////////// -// -// Version -// - -VS_VERSION_INFO VERSIONINFO - FILEVERSION 1,0,0,1 - PRODUCTVERSION 1,0,0,1 - FILEFLAGSMASK 0x17L -#ifdef _DEBUG - FILEFLAGS 0x1L -#else - FILEFLAGS 0x0L -#endif - FILEOS 0x4L - FILETYPE 0x2L - FILESUBTYPE 0x0L -BEGIN - BLOCK "StringFileInfo" - BEGIN - BLOCK "000904b0" - BEGIN - VALUE "CompanyName", "Amazon.com, Inc." - VALUE "FileVersion", "1, 0, 0, 1" - VALUE "LegalCopyright", "Portions of this file Copyright (c) Amazon.com, Inc. or its affiliates. All Rights Reserved. Original file Copyright (c) Crytek GMBH. Used under license by Amazon.com, Inc. and its affiliates." - VALUE "ProductName", "Lumberyard" - VALUE "ProductVersion", "1, 0, 0, 1" - END - END - BLOCK "VarFileInfo" - BEGIN - VALUE "Translation", 0x9, 1200 - END -END - -#endif // German (Germany) resources -///////////////////////////////////////////////////////////////////////////// - - - -#ifndef APSTUDIO_INVOKED -///////////////////////////////////////////////////////////////////////////// -// -// Generated from the TEXTINCLUDE 3 resource. -// - - -///////////////////////////////////////////////////////////////////////////// -#endif // not APSTUDIO_INVOKED - diff --git a/Gems/AtomLyIntegration/CryRenderAtomShim/PCH/CryRenderOther_precompiled.h b/Gems/AtomLyIntegration/CryRenderAtomShim/PCH/CryRenderOther_precompiled.h deleted file mode 100644 index 70450d0c5e..0000000000 --- a/Gems/AtomLyIntegration/CryRenderAtomShim/PCH/CryRenderOther_precompiled.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 - -#include -#include -#include -#include "Common/DevBuffer.h" - -#include "XRenderD3D9/DeviceManager/DeviceManager.h" - -#include - -#include "Common/CommonRender.h" -#include -#include "Common/Shaders/ShaderComponents.h" -#include "Common/Shaders/Shader.h" -#include "Common/Shaders/CShader.h" -#include "Common/RenderMesh.h" -#include "Common/RenderPipeline.h" -#include "Common/RenderThread.h" - -#include "Common/Renderer.h" -#include "Common/Textures/Texture.h" - -#include "Common/OcclQuery.h" - -#include "Common/PostProcess/PostProcess.h" - -// All handled render elements (except common ones included in "RendElement.h") -#include "Common/RendElements/CREBeam.h" -#include "Common/RendElements/CREClientPoly.h" -#include "Common/RendElements/CRELensOptics.h" -#include "Common/RendElements/CREHDRProcess.h" -#include "Common/RendElements/CRECloud.h" -#include "Common/RendElements/CREDeferredShading.h" -#include "Common/RendElements/CREMeshImpl.h" diff --git a/Gems/AtomLyIntegration/CryRenderAtomShim/Platform/Android/PAL_android.cmake b/Gems/AtomLyIntegration/CryRenderAtomShim/Platform/Android/PAL_android.cmake deleted file mode 100644 index 64ee12d5a7..0000000000 --- a/Gems/AtomLyIntegration/CryRenderAtomShim/Platform/Android/PAL_android.cmake +++ /dev/null @@ -1,12 +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(PAL_TRAIT_ATOM_CRYRENDEROTHER_SUPPORTED TRUE) \ No newline at end of file diff --git a/Gems/AtomLyIntegration/CryRenderAtomShim/Platform/Android/platform_android.cmake b/Gems/AtomLyIntegration/CryRenderAtomShim/Platform/Android/platform_android.cmake deleted file mode 100644 index f5b9ea77a2..0000000000 --- a/Gems/AtomLyIntegration/CryRenderAtomShim/Platform/Android/platform_android.cmake +++ /dev/null @@ -1,11 +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/Gems/AtomLyIntegration/CryRenderAtomShim/Platform/Android/platform_android_files.cmake b/Gems/AtomLyIntegration/CryRenderAtomShim/Platform/Android/platform_android_files.cmake deleted file mode 100644 index 52ed52bc87..0000000000 --- a/Gems/AtomLyIntegration/CryRenderAtomShim/Platform/Android/platform_android_files.cmake +++ /dev/null @@ -1,14 +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(FILES - ../Common/Unimplemented/AtomShim_Renderer_Unimplemented.cpp -) diff --git a/Gems/AtomLyIntegration/CryRenderAtomShim/Platform/Common/Unimplemented/AtomShim_Renderer_Unimplemented.cpp b/Gems/AtomLyIntegration/CryRenderAtomShim/Platform/Common/Unimplemented/AtomShim_Renderer_Unimplemented.cpp deleted file mode 100644 index 50c4d07cc5..0000000000 --- a/Gems/AtomLyIntegration/CryRenderAtomShim/Platform/Common/Unimplemented/AtomShim_Renderer_Unimplemented.cpp +++ /dev/null @@ -1,22 +0,0 @@ -/* -* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates, or -* a third party where indicated. -* -* 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 "CryRenderOther_precompiled.h" - -namespace Platform -{ - WIN_HWND GetNativeWindowHandle() - { - return NULL; - } -} - - diff --git a/Gems/AtomLyIntegration/CryRenderAtomShim/Platform/Linux/PAL_linux.cmake b/Gems/AtomLyIntegration/CryRenderAtomShim/Platform/Linux/PAL_linux.cmake deleted file mode 100644 index 64ee12d5a7..0000000000 --- a/Gems/AtomLyIntegration/CryRenderAtomShim/Platform/Linux/PAL_linux.cmake +++ /dev/null @@ -1,12 +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(PAL_TRAIT_ATOM_CRYRENDEROTHER_SUPPORTED TRUE) \ No newline at end of file diff --git a/Gems/AtomLyIntegration/CryRenderAtomShim/Platform/Linux/platform_linux.cmake b/Gems/AtomLyIntegration/CryRenderAtomShim/Platform/Linux/platform_linux.cmake deleted file mode 100644 index f5b9ea77a2..0000000000 --- a/Gems/AtomLyIntegration/CryRenderAtomShim/Platform/Linux/platform_linux.cmake +++ /dev/null @@ -1,11 +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/Gems/AtomLyIntegration/CryRenderAtomShim/Platform/Linux/platform_linux_files.cmake b/Gems/AtomLyIntegration/CryRenderAtomShim/Platform/Linux/platform_linux_files.cmake deleted file mode 100644 index 52ed52bc87..0000000000 --- a/Gems/AtomLyIntegration/CryRenderAtomShim/Platform/Linux/platform_linux_files.cmake +++ /dev/null @@ -1,14 +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(FILES - ../Common/Unimplemented/AtomShim_Renderer_Unimplemented.cpp -) diff --git a/Gems/AtomLyIntegration/CryRenderAtomShim/Platform/Mac/AtomShim_Renderer_Mac.cpp b/Gems/AtomLyIntegration/CryRenderAtomShim/Platform/Mac/AtomShim_Renderer_Mac.cpp deleted file mode 100644 index 63531162bf..0000000000 --- a/Gems/AtomLyIntegration/CryRenderAtomShim/Platform/Mac/AtomShim_Renderer_Mac.cpp +++ /dev/null @@ -1,31 +0,0 @@ -/* -* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates, or -* a third party where indicated. -* -* 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 "CryRenderOther_precompiled.h" -#import - -bool UIDeviceIsTablet() -{ - return false; -} - -bool UIKitGetPrimaryPhysicalDisplayDimensions(int& o_widthPixels, int& o_heightPixels) -{ - NSScreen* nativeScreen = [NSScreen mainScreen]; - CGRect screenBounds = [nativeScreen frame]; - CGFloat screenScale = [nativeScreen backingScaleFactor]; - o_widthPixels = static_cast(screenBounds.size.width * screenScale); - o_heightPixels = static_cast(screenBounds.size.height * screenScale); - return true; -} - - diff --git a/Gems/AtomLyIntegration/CryRenderAtomShim/Platform/Mac/PAL_mac.cmake b/Gems/AtomLyIntegration/CryRenderAtomShim/Platform/Mac/PAL_mac.cmake deleted file mode 100644 index 64ee12d5a7..0000000000 --- a/Gems/AtomLyIntegration/CryRenderAtomShim/Platform/Mac/PAL_mac.cmake +++ /dev/null @@ -1,12 +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(PAL_TRAIT_ATOM_CRYRENDEROTHER_SUPPORTED TRUE) \ No newline at end of file diff --git a/Gems/AtomLyIntegration/CryRenderAtomShim/Platform/Mac/platform_mac.cmake b/Gems/AtomLyIntegration/CryRenderAtomShim/Platform/Mac/platform_mac.cmake deleted file mode 100644 index 209e7f9107..0000000000 --- a/Gems/AtomLyIntegration/CryRenderAtomShim/Platform/Mac/platform_mac.cmake +++ /dev/null @@ -1,15 +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(LY_COMPILE_OPTIONS - PRIVATE - -xobjective-c++ -) \ No newline at end of file diff --git a/Gems/AtomLyIntegration/CryRenderAtomShim/Platform/Mac/platform_mac_files.cmake b/Gems/AtomLyIntegration/CryRenderAtomShim/Platform/Mac/platform_mac_files.cmake deleted file mode 100644 index f0296f198b..0000000000 --- a/Gems/AtomLyIntegration/CryRenderAtomShim/Platform/Mac/platform_mac_files.cmake +++ /dev/null @@ -1,15 +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(FILES - ../Common/Unimplemented/AtomShim_Renderer_Unimplemented.cpp - AtomShim_Renderer_Mac.cpp -) diff --git a/Gems/AtomLyIntegration/CryRenderAtomShim/Platform/Windows/AtomShim_Renderer_Windows.cpp b/Gems/AtomLyIntegration/CryRenderAtomShim/Platform/Windows/AtomShim_Renderer_Windows.cpp deleted file mode 100644 index ca5dbd8950..0000000000 --- a/Gems/AtomLyIntegration/CryRenderAtomShim/Platform/Windows/AtomShim_Renderer_Windows.cpp +++ /dev/null @@ -1,23 +0,0 @@ -/* -* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates, or -* a third party where indicated. -* -* 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 "CryRenderOther_precompiled.h" - -namespace Platform -{ - WIN_HWND GetNativeWindowHandle() - { - return GetDesktopWindow(); - } -} - - diff --git a/Gems/AtomLyIntegration/CryRenderAtomShim/Platform/Windows/PAL_windows.cmake b/Gems/AtomLyIntegration/CryRenderAtomShim/Platform/Windows/PAL_windows.cmake deleted file mode 100644 index 64ee12d5a7..0000000000 --- a/Gems/AtomLyIntegration/CryRenderAtomShim/Platform/Windows/PAL_windows.cmake +++ /dev/null @@ -1,12 +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(PAL_TRAIT_ATOM_CRYRENDEROTHER_SUPPORTED TRUE) \ No newline at end of file diff --git a/Gems/AtomLyIntegration/CryRenderAtomShim/Platform/Windows/platform_windows.cmake b/Gems/AtomLyIntegration/CryRenderAtomShim/Platform/Windows/platform_windows.cmake deleted file mode 100644 index ad8a620993..0000000000 --- a/Gems/AtomLyIntegration/CryRenderAtomShim/Platform/Windows/platform_windows.cmake +++ /dev/null @@ -1,14 +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(LY_BUILD_DEPENDENCIES - PRIVATE -) \ No newline at end of file diff --git a/Gems/AtomLyIntegration/CryRenderAtomShim/Platform/Windows/platform_windows_files.cmake b/Gems/AtomLyIntegration/CryRenderAtomShim/Platform/Windows/platform_windows_files.cmake deleted file mode 100644 index e110029d0d..0000000000 --- a/Gems/AtomLyIntegration/CryRenderAtomShim/Platform/Windows/platform_windows_files.cmake +++ /dev/null @@ -1,14 +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(FILES - AtomShim_Renderer_Windows.cpp -) diff --git a/Gems/AtomLyIntegration/CryRenderAtomShim/Platform/iOS/AtomShim_Renderer_iOS.cpp b/Gems/AtomLyIntegration/CryRenderAtomShim/Platform/iOS/AtomShim_Renderer_iOS.cpp deleted file mode 100644 index 90132cdd75..0000000000 --- a/Gems/AtomLyIntegration/CryRenderAtomShim/Platform/iOS/AtomShim_Renderer_iOS.cpp +++ /dev/null @@ -1,85 +0,0 @@ -/* -* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates, or -* a third party where indicated. -* -* 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 "CryRenderOther_precompiled.h" -#import - -using NativeScreenType = UIScreen; -using NativeWindowType = UIWindow; - -bool UIDeviceIsTablet() -{ - if([UIDevice currentDevice].userInterfaceIdiom == UIUserInterfaceIdiomPad) - { - return true; - } - return false; -} - -bool UIKitGetPrimaryPhysicalDisplayDimensions(int& o_widthPixels, int& o_heightPixels) -{ - UIScreen* nativeScreen = [UIScreen mainScreen]; - - CGRect screenBounds = [nativeScreen bounds]; - CGFloat screenScale = [nativeScreen scale]; - - o_widthPixels = static_cast(screenBounds.size.width * screenScale); - o_heightPixels = static_cast(screenBounds.size.height * screenScale); - - const bool isScreenLandscape = o_widthPixels > o_heightPixels; - UIInterfaceOrientation uiOrientation = UIInterfaceOrientationUnknown; -#if defined(__IPHONE_13_0) || defined(__TVOS_13_0) - if(@available(iOS 13.0, tvOS 13.0, *)) - { - UIWindow* foundWindow = nil; - - //Find the key window - NSArray* windows = [[UIApplication sharedApplication] windows]; - for (UIWindow* window in windows) - { - if (window.isKeyWindow) - { - foundWindow = window; - break; - } - } - - //Check if the key window is found - if(foundWindow) - { - uiOrientation = foundWindow.windowScene.interfaceOrientation; - } - else - { - //If no key window is found create a temporary window in order to extract the orientation - //This can happen as this function gets called before the renderer is initialized - CGRect screenBounds = [[UIScreen mainScreen] bounds]; - UIWindow* tempWindow = [[UIWindow alloc] initWithFrame: screenBounds]; - uiOrientation = tempWindow.windowScene.interfaceOrientation; - [tempWindow release]; - } - } -#else - uiOrientation = UIApplication.sharedApplication.statusBarOrientation; -#endif - - const bool isInterfaceLandscape = UIInterfaceOrientationIsLandscape(uiOrientation); - if (isScreenLandscape != isInterfaceLandscape) - { - const int width = o_widthPixels; - o_widthPixels = o_heightPixels; - o_heightPixels = width; - } - - return true; -} - diff --git a/Gems/AtomLyIntegration/CryRenderAtomShim/Platform/iOS/PAL_ios.cmake b/Gems/AtomLyIntegration/CryRenderAtomShim/Platform/iOS/PAL_ios.cmake deleted file mode 100644 index 64ee12d5a7..0000000000 --- a/Gems/AtomLyIntegration/CryRenderAtomShim/Platform/iOS/PAL_ios.cmake +++ /dev/null @@ -1,12 +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(PAL_TRAIT_ATOM_CRYRENDEROTHER_SUPPORTED TRUE) \ No newline at end of file diff --git a/Gems/AtomLyIntegration/CryRenderAtomShim/Platform/iOS/platform_ios.cmake b/Gems/AtomLyIntegration/CryRenderAtomShim/Platform/iOS/platform_ios.cmake deleted file mode 100644 index 0286e6465b..0000000000 --- a/Gems/AtomLyIntegration/CryRenderAtomShim/Platform/iOS/platform_ios.cmake +++ /dev/null @@ -1,15 +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(LY_COMPILE_OPTIONS - PRIVATE - -xobjective-c++ -) diff --git a/Gems/AtomLyIntegration/CryRenderAtomShim/Platform/iOS/platform_ios_files.cmake b/Gems/AtomLyIntegration/CryRenderAtomShim/Platform/iOS/platform_ios_files.cmake deleted file mode 100644 index a5a3d98144..0000000000 --- a/Gems/AtomLyIntegration/CryRenderAtomShim/Platform/iOS/platform_ios_files.cmake +++ /dev/null @@ -1,15 +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(FILES - ../Common/Unimplemented/AtomShim_Renderer_Unimplemented.cpp - AtomShim_Renderer_iOS.cpp -) diff --git a/Gems/AtomLyIntegration/CryRenderAtomShim/atom_shim_renderer_files.cmake b/Gems/AtomLyIntegration/CryRenderAtomShim/atom_shim_renderer_files.cmake deleted file mode 100644 index 0259c65b26..0000000000 --- a/Gems/AtomLyIntegration/CryRenderAtomShim/atom_shim_renderer_files.cmake +++ /dev/null @@ -1,29 +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(FILES - AtomShim_DevBuffer.cpp - AtomShim_PostProcess.cpp - AtomShim_Renderer.cpp - AtomShim_RendPipeline.cpp - AtomShim_RERender.cpp - AtomShim_Shaders.cpp - AtomShim_Shadows.cpp - AtomShim_System.cpp - AtomShim_Textures.cpp - AtomShim_TexturesStreaming.cpp - AtomShim_RenderAuxGeom.cpp - AtomShim_Renderer.h - AtomShim_RenderAuxGeom.h - resource.h - AtomShim_CRELensOptics.cpp - PCH/CryRenderOther_precompiled.h -) diff --git a/Gems/AtomLyIntegration/CryRenderAtomShim/resource.h b/Gems/AtomLyIntegration/CryRenderAtomShim/resource.h deleted file mode 100644 index ed88839421..0000000000 --- a/Gems/AtomLyIntegration/CryRenderAtomShim/resource.h +++ /dev/null @@ -1,25 +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. - -#define VS_VERSION_INFO 1 - -// Next default values for new objects -// -#ifdef APSTUDIO_INVOKED -#ifndef APSTUDIO_READONLY_SYMBOLS -#define _APS_NEXT_RESOURCE_VALUE 101 -#define _APS_NEXT_COMMAND_VALUE 40001 -#define _APS_NEXT_CONTROL_VALUE 1001 -#define _APS_NEXT_SYMED_VALUE 101 -#endif -#endif From f750a491c8b2df148d51c072f1e3fd2a6505bb3e Mon Sep 17 00:00:00 2001 From: rgba16f <82187279+rgba16f@users.noreply.github.com> Date: Wed, 21 Apr 2021 20:46:28 -0500 Subject: [PATCH 09/32] remove mistakenly added .orig file --- .../Editor/EditorViewportWidget.cpp.orig | 2880 ----------------- 1 file changed, 2880 deletions(-) delete mode 100644 Code/Sandbox/Editor/EditorViewportWidget.cpp.orig diff --git a/Code/Sandbox/Editor/EditorViewportWidget.cpp.orig b/Code/Sandbox/Editor/EditorViewportWidget.cpp.orig deleted file mode 100644 index d3455fd003..0000000000 --- a/Code/Sandbox/Editor/EditorViewportWidget.cpp.orig +++ /dev/null @@ -1,2880 +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 filefov - - -#include "EditorDefs.h" - -#include "EditorViewportWidget.h" - -// Qt -#include -#include -#include -#include -#include -#include - -// AzCore -#include -#include -#include -#include - -// AzFramework -#include -#include -#include -#if defined(AZ_PLATFORM_WINDOWS) -# include -#endif // defined(AZ_PLATFORM_WINDOWS) -#include // for AzFramework::InputDeviceMouse -#include -#include - -// AzQtComponents -#include - -// AzToolsFramework -#include -#include -#include - -// AtomToolsFramework -#include - -// CryCommon -#include -#include - -// AzFramework -#include - -// Editor -#include "Util/fastlib.h" -#include "CryEditDoc.h" -#include "GameEngine.h" -#include "EditTool.h" -#include "ViewManager.h" -#include "Objects/DisplayContext.h" -#include "DisplaySettings.h" -#include "Include/IObjectManager.h" -#include "Include/IDisplayViewport.h" -#include "Objects/ObjectManager.h" -#include "ProcessInfo.h" -#include "IPostEffectGroup.h" -#include "EditorPreferencesPageGeneral.h" -#include "ViewportManipulatorController.h" -#include "LegacyViewportCameraController.h" -#include "ModernViewportCameraController.h" - -#include "ViewPane.h" -#include "CustomResolutionDlg.h" -#include "AnimationContext.h" -#include "Objects/SelectionGroup.h" -#include "Core/QtEditorApplication.h" - -// ComponentEntityEditorPlugin -#include - -// LmbrCentral -#include - -// Atom -#include -#include -#include -#include - -#include - -AZ_CVAR( - bool, ed_visibility_logTiming, false, nullptr, AZ::ConsoleFunctorFlags::Null, - "Output the timing of the new IVisibilitySystem query"); - -EditorViewportWidget* EditorViewportWidget::m_pPrimaryViewport = nullptr; - -#if AZ_TRAIT_OS_PLATFORM_APPLE -void StopFixedCursorMode(); -void StartFixedCursorMode(QObject *viewport); -#endif - -#define RENDER_MESH_TEST_DISTANCE (0.2f) -#define CURSOR_FONT_HEIGHT 8.0f - -AZ_CVAR( - bool, ed_useNewCameraSystem, false, nullptr, AZ::ConsoleFunctorFlags::Null, - "Use the new Editor camera system (the Atom-native Editor viewport (experimental) must also be enabled)"); - -namespace AZ::ViewportHelpers -{ - static const char TextCantCreateCameraNoLevel[] = "Cannot create camera when no level is loaded."; - - class EditorEntityNotifications - : public AzToolsFramework::EditorEntityContextNotificationBus::Handler - { - public: - EditorEntityNotifications(EditorViewportWidget& renderViewport) - : m_renderViewport(renderViewport) - { - AzToolsFramework::EditorEntityContextNotificationBus::Handler::BusConnect(); - } - - ~EditorEntityNotifications() override - { - AzToolsFramework::EditorEntityContextNotificationBus::Handler::BusDisconnect(); - } - - // AzToolsFramework::EditorEntityContextNotificationBus - void OnStartPlayInEditor() override - { - m_renderViewport.OnStartPlayInEditor(); - } - void OnStopPlayInEditor() override - { - m_renderViewport.OnStopPlayInEditor(); - } - private: - EditorViewportWidget& m_renderViewport; - }; -} // namespace AZ::ViewportHelpers - -////////////////////////////////////////////////////////////////////////// -// EditorViewportWidget -////////////////////////////////////////////////////////////////////////// - -EditorViewportWidget::EditorViewportWidget(const QString& name, QWidget* parent) - : QtViewport(parent) - , m_Camera(GetIEditor()->GetSystem()->GetViewCamera()) - , m_camFOV(gSettings.viewports.fDefaultFov) - , m_defaultViewName(name) - , m_renderViewport(nullptr) //m_renderViewport is initialized later, in SetViewportId -{ - // need this to be set in order to allow for language switching on Windows - setAttribute(Qt::WA_InputMethodEnabled); - LockCameraMovement(true); - - EditorViewportWidget::SetViewTM(m_Camera.GetMatrix()); - m_defaultViewTM.SetIdentity(); - - if (GetIEditor()->GetViewManager()->GetSelectedViewport() == nullptr) - { - GetIEditor()->GetViewManager()->SelectViewport(this); - } - - GetIEditor()->RegisterNotifyListener(this); - - m_displayContext.pIconManager = GetIEditor()->GetIconManager(); - GetIEditor()->GetUndoManager()->AddListener(this); - - m_PhysicalLocation.SetIdentity(); - - // The renderer requires something, so don't allow us to shrink to absolutely nothing - // This won't in fact stop the viewport from being shrunk, when it's the centralWidget for - // the MainWindow, but it will stop the viewport from getting resize events - // once it's smaller than that, which from the renderer's perspective works out - // to be the same thing. - setMinimumSize(50, 50); - - OnCreate(); - - setMouseTracking(true); - - Camera::EditorCameraRequestBus::Handler::BusConnect(); - m_editorEntityNotifications = AZStd::make_unique(*this); - AzFramework::AssetCatalogEventBus::Handler::BusConnect(); - - auto handleCameraChange = [this](const AZ::Matrix4x4&) - { - UpdateCameraFromViewportContext(); - }; - - m_cameraViewMatrixChangeHandler = AZ::RPI::ViewportContext::MatrixChangedEvent::Handler(handleCameraChange); - m_cameraProjectionMatrixChangeHandler = AZ::RPI::ViewportContext::MatrixChangedEvent::Handler(handleCameraChange); - - m_manipulatorManager = GetIEditor()->GetViewManager()->GetManipulatorManager(); - if (!m_pPrimaryViewport) - { - SetAsActiveViewport(); - } -} - -////////////////////////////////////////////////////////////////////////// -EditorViewportWidget::~EditorViewportWidget() -{ - if (m_pPrimaryViewport == this) - { - m_pPrimaryViewport = nullptr; - } - - DisconnectViewportInteractionRequestBus(); - m_editorEntityNotifications.reset(); - Camera::EditorCameraRequestBus::Handler::BusDisconnect(); - OnDestroy(); - GetIEditor()->GetUndoManager()->RemoveListener(this); - GetIEditor()->UnregisterNotifyListener(this); -} - -////////////////////////////////////////////////////////////////////////// -// EditorViewportWidget message handlers -////////////////////////////////////////////////////////////////////////// -int EditorViewportWidget::OnCreate() -{ - m_renderer = GetIEditor()->GetRenderer(); - m_engine = GetIEditor()->Get3DEngine(); - assert(m_engine); - - CreateRenderContext(); - - return 0; -} - -////////////////////////////////////////////////////////////////////////// -void EditorViewportWidget::resizeEvent(QResizeEvent* event) -{ - PushDisableRendering(); - QtViewport::resizeEvent(event); - PopDisableRendering(); - - const QRect rcWindow = rect().translated(mapToGlobal(QPoint())); - - gEnv->pSystem->GetISystemEventDispatcher()->OnSystemEvent(ESYSTEM_EVENT_MOVE, rcWindow.left(), rcWindow.top()); - - m_rcClient = rect(); - m_rcClient.setBottomRight(WidgetToViewport(m_rcClient.bottomRight())); - - gEnv->pSystem->GetISystemEventDispatcher()->OnSystemEvent(ESYSTEM_EVENT_RESIZE, width(), height()); - - if (gEnv->pRenderer) - { - gEnv->pRenderer->EF_DisableTemporalEffects(); - } - - // We queue the window resize event because the render overlay may be hidden. - // If the render overlay is not visible, the native window that is backing it will - // also be hidden, and it will not resize until it becomes visible. - m_windowResizedEvent = true; -} - -////////////////////////////////////////////////////////////////////////// -void EditorViewportWidget::paintEvent([[maybe_unused]] QPaintEvent* event) -{ - // Do not call CViewport::OnPaint() for painting messages - // FIXME: paintEvent() isn't the best place for such logic. Should listen to proper eNotify events and to the stuff there instead. (Repeats for other view port classes too). - CGameEngine* ge = GetIEditor()->GetGameEngine(); - if ((ge && ge->IsLevelLoaded()) || (GetType() != ET_ViewportCamera)) - { - setRenderOverlayVisible(true); - } - else - { - setRenderOverlayVisible(false); - QPainter painter(this); // device context for painting - - // draw gradient background - const QRect rc = rect(); - QLinearGradient gradient(rc.topLeft(), rc.bottomLeft()); - gradient.setColorAt(0, QColor(80, 80, 80)); - gradient.setColorAt(1, QColor(200, 200, 200)); - painter.fillRect(rc, gradient); - - // if we have some level loaded/loading/new - // we draw a text - if (!GetIEditor()->GetLevelFolder().isEmpty()) - { - const int kFontSize = 200; - const char* kFontName = "Arial"; - const QColor kTextColor(255, 255, 255); - const QColor kTextShadowColor(0, 0, 0); - const QFont font(kFontName, kFontSize / 10.0); - painter.setFont(font); - - QString friendlyName = QFileInfo(GetIEditor()->GetLevelName()).fileName(); - const QString strMsg = tr("Preparing level %1...").arg(friendlyName); - - // draw text shadow - painter.setPen(kTextShadowColor); - painter.drawText(rc, Qt::AlignCenter, strMsg); - painter.setPen(kTextColor); - // offset rect for normal text - painter.drawText(rc.translated(-1, -1), Qt::AlignCenter, strMsg); - } - } -} - -////////////////////////////////////////////////////////////////////////// -void EditorViewportWidget::mousePressEvent(QMouseEvent* event) -{ - GetIEditor()->GetViewManager()->SelectViewport(this); - - QtViewport::mousePressEvent(event); -} - -AzToolsFramework::ViewportInteraction::MousePick EditorViewportWidget::BuildMousePickInternal(const QPoint& point) const -{ - using namespace AzToolsFramework::ViewportInteraction; - - MousePick mousePick; - mousePick.m_screenCoordinates = AzFramework::ScreenPoint(point.x(), point.y()); - const auto& ray = m_renderViewport->ViewportScreenToWorldRay(point); - if (ray.has_value()) - { - mousePick.m_rayOrigin = ray.value().origin; - mousePick.m_rayDirection = ray.value().direction; - } - return mousePick; -} - -AzToolsFramework::ViewportInteraction::MousePick EditorViewportWidget::BuildMousePick(const QPoint& point) -{ - using namespace AzToolsFramework::ViewportInteraction; - - PreWidgetRendering(); - const MousePick mousePick = BuildMousePickInternal(point); - PostWidgetRendering(); - return mousePick; -} - -AzToolsFramework::ViewportInteraction::MouseInteraction EditorViewportWidget::BuildMouseInteractionInternal( - const AzToolsFramework::ViewportInteraction::MouseButtons buttons, - const AzToolsFramework::ViewportInteraction::KeyboardModifiers modifiers, - const AzToolsFramework::ViewportInteraction::MousePick& mousePick) const -{ - using namespace AzToolsFramework::ViewportInteraction; - - MouseInteraction mouse; - mouse.m_interactionId.m_cameraId = m_viewEntityId; - mouse.m_interactionId.m_viewportId = GetViewportId(); - mouse.m_mouseButtons = buttons; - mouse.m_mousePick = mousePick; - mouse.m_keyboardModifiers = modifiers; - return mouse; -} - -AzToolsFramework::ViewportInteraction::MouseInteraction EditorViewportWidget::BuildMouseInteraction( - const Qt::MouseButtons buttons, const Qt::KeyboardModifiers modifiers, const QPoint& point) -{ - using namespace AzToolsFramework::ViewportInteraction; - - return BuildMouseInteractionInternal( - BuildMouseButtons(buttons), - BuildKeyboardModifiers(modifiers), - BuildMousePick(WidgetToViewport(point))); -} - -void EditorViewportWidget::InjectFakeMouseMove(int deltaX, int deltaY, Qt::MouseButtons buttons) -{ - // this is required, otherwise the user will see the context menu - OnMouseMove(Qt::NoModifier, buttons, QCursor::pos() + QPoint(deltaX, deltaY)); - // we simply move the prev mouse position, so the change will be picked up - // by the next ProcessMouse call - m_prevMousePos -= QPoint(deltaX, deltaY); -} - -////////////////////////////////////////////////////////////////////////// -bool EditorViewportWidget::event(QEvent* event) -{ - switch (event->type()) - { - case QEvent::WindowActivate: - GetIEditor()->GetViewManager()->SelectViewport(this); - // also kill the keys; if we alt-tab back to the viewport, or come back from the debugger, it's done (and there's no guarantee we'll get the keyrelease event anyways) - m_keyDown.clear(); - break; - - case QEvent::Shortcut: - // a shortcut should immediately clear us, otherwise the release event never gets sent - m_keyDown.clear(); - break; - } - - return QtViewport::event(event); -} - -////////////////////////////////////////////////////////////////////////// -void EditorViewportWidget::ResetContent() -{ - QtViewport::ResetContent(); -} - -////////////////////////////////////////////////////////////////////////// -void EditorViewportWidget::UpdateContent(int flags) -{ - QtViewport::UpdateContent(flags); - if (flags & eUpdateObjects) - { - m_bUpdateViewport = true; - } -} - -////////////////////////////////////////////////////////////////////////// -void EditorViewportWidget::Update() -{ - FUNCTION_PROFILER(GetIEditor()->GetSystem(), PROFILE_EDITOR); - - if (Editor::EditorQtApplication::instance()->isMovingOrResizing()) - { - return; - } - - if (!m_engine || m_rcClient.isEmpty() || GetIEditor()->IsInMatEditMode()) - { - return; - } - - if (!isVisible()) - { - return; - } - - m_updatingCameraPosition = true; - auto transform = LYTransformToAZTransform(m_Camera.GetMatrix()); - m_renderViewport->GetViewportContext()->SetCameraTransform(transform); - AZ::Matrix4x4 clipMatrix; - AZ::MakePerspectiveFovMatrixRH( - clipMatrix, - m_Camera.GetFov(), - aznumeric_cast(width()) / aznumeric_cast(height()), - m_Camera.GetNearPlane(), - m_Camera.GetFarPlane(), - true - ); - m_renderViewport->GetViewportContext()->SetCameraProjectionMatrix(clipMatrix); - m_updatingCameraPosition = false; - - - // Don't wait for changes to update the focused viewport. - if (CheckRespondToInput()) - { - m_bUpdateViewport = true; - } - - // While Renderer doesn't support fast rendering of the scene to more then 1 viewport - // render only focused viewport if more then 1 are opened and always update is off. - if (!m_isOnPaint && m_viewManager->GetNumberOfGameViewports() > 1 && GetType() == ET_ViewportCamera) - { - if (m_pPrimaryViewport != this) - { - if (CheckRespondToInput()) // If this is the focused window, set primary viewport. - { - SetAsActiveViewport(); - } - else if (!m_bUpdateViewport) // Skip this viewport. - { - return; - } - } - } - - const bool isGameMode = GetIEditor()->IsInGameMode(); - const bool isSimulationMode = GetIEditor()->GetGameEngine()->GetSimulationMode(); - - // Allow debug visualization in both 'game' (Ctrl-G) and 'simulation' (Ctrl-P) modes - if (isGameMode || isSimulationMode) - { - if (!IsRenderingDisabled()) - { - // Disable rendering to avoid recursion into Update() - PushDisableRendering(); - - // draw debug visualizations - if (m_debugDisplay) - { - const AZ::u32 prevState = m_debugDisplay->GetState(); - m_debugDisplay->SetState( - e_Mode3D | e_AlphaBlended | e_FillModeSolid | e_CullModeBack | e_DepthWriteOn | e_DepthTestOn); - - AzFramework::EntityDebugDisplayEventBus::Broadcast( - &AzFramework::EntityDebugDisplayEvents::DisplayEntityViewport, - AzFramework::ViewportInfo{ GetViewportId() }, *m_debugDisplay); - - m_debugDisplay->SetState(prevState); - } - - QtViewport::Update(); - PopDisableRendering(); - } - - // Game mode rendering is handled by CryAction - if (isGameMode) - { - return; - } - } - - // Prevents rendering recursion due to recursive Paint messages. - if (IsRenderingDisabled()) - { - return; - } - - PushDisableRendering(); - - m_viewTM = m_Camera.GetMatrix(); // synchronize. - - // Render - { - // TODO: Move out this logic to a controller and refactor to work with Atom - // m_renderer->SetClearColor(Vec3(0.4f, 0.4f, 0.4f)); - // 3D engine stats - GetIEditor()->GetSystem()->RenderBegin(); - - OnRender(); - - ProcessRenderLisneters(m_displayContext); - - m_displayContext.Flush2D(); - - // m_renderer->SwitchToNativeResolutionBackbuffer(); - - // 3D engine stats - - CCamera CurCamera = gEnv->pSystem->GetViewCamera(); - gEnv->pSystem->SetViewCamera(m_Camera); - - // Post Render Callback - { - PostRenderers::iterator itr = m_postRenderers.begin(); - PostRenderers::iterator end = m_postRenderers.end(); - for (; itr != end; ++itr) - { - (*itr)->OnPostRender(); - } - } - - GetIEditor()->GetSystem()->RenderEnd(m_bRenderStats); - - gEnv->pSystem->SetViewCamera(CurCamera); - } - - { - auto start = std::chrono::steady_clock::now(); - - m_entityVisibilityQuery.UpdateVisibility(GetCameraState()); - - if (ed_visibility_logTiming) - { - auto stop = std::chrono::steady_clock::now(); - std::chrono::duration diff = stop - start; - AZ_Printf("Visibility", "FindVisibleEntities (new) - Duration: %f", diff); - } - } - - QtViewport::Update(); - - PopDisableRendering(); - m_bUpdateViewport = false; -} - -////////////////////////////////////////////////////////////////////////// -void EditorViewportWidget::SetViewEntity(const AZ::EntityId& viewEntityId, bool lockCameraMovement) -{ - // if they've picked the same camera, then that means they want to toggle - if (viewEntityId.IsValid() && viewEntityId != m_viewEntityId) - { - LockCameraMovement(lockCameraMovement); - m_viewEntityId = viewEntityId; - AZStd::string entityName; - AZ::ComponentApplicationBus::BroadcastResult(entityName, &AZ::ComponentApplicationRequests::GetEntityName, viewEntityId); - SetName(QString("Camera entity: %1").arg(entityName.c_str())); - } - else - { - SetDefaultCamera(); - } - - PostCameraSet(); -} - -////////////////////////////////////////////////////////////////////////// -void EditorViewportWidget::ResetToViewSourceType(const ViewSourceType& viewSourceType) -{ - LockCameraMovement(true); - m_pCameraFOVVariable = nullptr; - m_viewEntityId.SetInvalid(); - m_cameraObjectId = GUID_NULL; - m_viewSourceType = viewSourceType; - SetViewTM(GetViewTM()); -} - -////////////////////////////////////////////////////////////////////////// -void EditorViewportWidget::PostCameraSet() -{ - if (m_viewPane) - { - m_viewPane->OnFOVChanged(GetFOV()); - } - - GetIEditor()->Notify(eNotify_CameraChanged); - QScopedValueRollback rb(m_ignoreSetViewFromEntityPerspective, true); - Camera::EditorCameraNotificationBus::Broadcast( - &Camera::EditorCameraNotificationBus::Events::OnViewportViewEntityChanged, m_viewEntityId); -} - -////////////////////////////////////////////////////////////////////////// -CBaseObject* EditorViewportWidget::GetCameraObject() const -{ - CBaseObject* pCameraObject = nullptr; - - if (m_viewSourceType == ViewSourceType::SequenceCamera) - { - m_cameraObjectId = GetViewManager()->GetCameraObjectId(); - } - if (m_cameraObjectId != GUID_NULL) - { - // Find camera object from id. - pCameraObject = GetIEditor()->GetObjectManager()->FindObject(m_cameraObjectId); - } - else if (m_viewSourceType == ViewSourceType::CameraComponent || m_viewSourceType == ViewSourceType::AZ_Entity) - { - AzToolsFramework::ComponentEntityEditorRequestBus::EventResult( - pCameraObject, m_viewEntityId, &AzToolsFramework::ComponentEntityEditorRequests::GetSandboxObject); - } - return pCameraObject; -} - -////////////////////////////////////////////////////////////////////////// -void EditorViewportWidget::OnEditorNotifyEvent(EEditorNotifyEvent event) -{ - static ICVar* outputToHMD = gEnv->pConsole->GetCVar("output_to_hmd"); - AZ_Assert(outputToHMD, "cvar output_to_hmd is undeclared"); - - switch (event) - { - case eNotify_OnBeginGameMode: - { - if (GetIEditor()->GetViewManager()->GetGameViewport() == this) - { - m_preGameModeViewTM = GetViewTM(); - // this should only occur for the main viewport and no others. - ShowCursor(); - - // If the user has selected game mode, enable outputting to any attached HMD and properly size the context - // to the resolution specified by the VR device. - if (gSettings.bEnableGameModeVR) - { - const AZ::VR::HMDDeviceInfo* deviceInfo = nullptr; - EBUS_EVENT_RESULT(deviceInfo, AZ::VR::HMDDeviceRequestBus, GetDeviceInfo); - AZ_Warning("Render Viewport", deviceInfo, "No VR device detected"); - - if (deviceInfo) - { - // Note: This may also need to adjust the viewport size - outputToHMD->Set(1); - SetActiveWindow(); - SetFocus(); - SetSelected(true); - } - } - SetCurrentCursor(STD_CURSOR_GAME); - } - } - break; - - case eNotify_OnEndGameMode: - if (GetIEditor()->GetViewManager()->GetGameViewport() == this) - { - SetCurrentCursor(STD_CURSOR_DEFAULT); - if (gSettings.bEnableGameModeVR) - { - outputToHMD->Set(0); - } - m_bInRotateMode = false; - m_bInMoveMode = false; - m_bInOrbitMode = false; - m_bInZoomMode = false; - - RestoreViewportAfterGameMode(); - } - break; - - case eNotify_OnCloseScene: - m_renderViewport->SetScene(nullptr); - SetDefaultCamera(); - break; - - case eNotify_OnEndSceneOpen: - UpdateScene(); - break; - - case eNotify_OnBeginNewScene: - PushDisableRendering(); - break; - - case eNotify_OnEndNewScene: - PopDisableRendering(); - - { - AZ::Aabb terrainAabb = AZ::Aabb::CreateFromPoint(AZ::Vector3::CreateZero()); - AzFramework::Terrain::TerrainDataRequestBus::BroadcastResult(terrainAabb, &AzFramework::Terrain::TerrainDataRequests::GetTerrainAabb); - float sx = terrainAabb.GetXExtent(); - float sy = terrainAabb.GetYExtent(); - - Matrix34 viewTM; - viewTM.SetIdentity(); - // Initial camera will be at middle of the map at the height of 2 - // meters above the terrain (default terrain height is 32) - viewTM.SetTranslation(Vec3(sx * 0.5f, sy * 0.5f, 34.0f)); - SetViewTM(viewTM); - } - break; - - case eNotify_OnBeginTerrainCreate: - PushDisableRendering(); - break; - - case eNotify_OnEndTerrainCreate: - PopDisableRendering(); - - { - AZ::Aabb terrainAabb = AZ::Aabb::CreateFromPoint(AZ::Vector3::CreateZero()); - AzFramework::Terrain::TerrainDataRequestBus::BroadcastResult(terrainAabb, &AzFramework::Terrain::TerrainDataRequests::GetTerrainAabb); - float sx = terrainAabb.GetXExtent(); - float sy = terrainAabb.GetYExtent(); - - Matrix34 viewTM; - viewTM.SetIdentity(); - // Initial camera will be at middle of the map at the height of 2 - // meters above the terrain (default terrain height is 32) - viewTM.SetTranslation(Vec3(sx * 0.5f, sy * 0.5f, 34.0f)); - SetViewTM(viewTM); - } - break; - - case eNotify_OnBeginLayerExport: - case eNotify_OnBeginSceneSave: - PushDisableRendering(); - break; - case eNotify_OnEndLayerExport: - case eNotify_OnEndSceneSave: - PopDisableRendering(); - break; - - case eNotify_OnBeginLoad: // disables viewport input when starting to load an existing level - case eNotify_OnBeginCreate: // disables viewport input when starting to create a new level - m_freezeViewportInput = true; - break; - - case eNotify_OnEndLoad: // enables viewport input when finished loading an existing level - case eNotify_OnEndCreate: // enables viewport input when finished creating a new level - m_freezeViewportInput = false; - break; - } -} - -////////////////////////////////////////////////////////////////////////// -void EditorViewportWidget::OnRender() -{ - if (m_rcClient.isEmpty()) - { - // Even in null rendering, update the view camera. - // This is necessary so that automated editor tests using the null renderer to test systems like dynamic vegetation - // are still able to manipulate the current logical camera position, even if nothing is rendered. - GetIEditor()->GetSystem()->SetViewCamera(m_Camera); - GetIEditor()->GetRenderer()->SetCamera(gEnv->pSystem->GetViewCamera()); - m_engine->RenderWorld(0, SRenderingPassInfo::CreateGeneralPassRenderingInfo(m_Camera), __FUNCTION__); - return; - } - - FUNCTION_PROFILER(GetIEditor()->GetSystem(), PROFILE_EDITOR); -} - -void EditorViewportWidget::OnBeginPrepareRender() -{ - if (!m_debugDisplay) - { - AzFramework::DebugDisplayRequestBus::BusPtr debugDisplayBus; - AzFramework::DebugDisplayRequestBus::Bind(debugDisplayBus, GetViewportId()); - AZ_Assert(debugDisplayBus, "Invalid DebugDisplayRequestBus."); - - m_debugDisplay = AzFramework::DebugDisplayRequestBus::FindFirstHandler(debugDisplayBus); - } - - if (!m_debugDisplay) - { - return; - } - - m_isOnPaint = true; - Update(); - m_isOnPaint = false; - - float fNearZ = GetIEditor()->GetConsoleVar("cl_DefaultNearPlane"); - float fFarZ = m_Camera.GetFarPlane(); - - CBaseObject* cameraObject = GetCameraObject(); - if (cameraObject) - { - AZ::Matrix3x3 lookThroughEntityCorrection = AZ::Matrix3x3::CreateIdentity(); - if (m_viewEntityId.IsValid()) - { - Camera::CameraRequestBus::EventResult(fNearZ, m_viewEntityId, &Camera::CameraComponentRequests::GetNearClipDistance); - Camera::CameraRequestBus::EventResult(fFarZ, m_viewEntityId, &Camera::CameraComponentRequests::GetFarClipDistance); - LmbrCentral::EditorCameraCorrectionRequestBus::EventResult( - lookThroughEntityCorrection, m_viewEntityId, &LmbrCentral::EditorCameraCorrectionRequests::GetTransformCorrection); - } - - m_viewTM = cameraObject->GetWorldTM() * AZMatrix3x3ToLYMatrix3x3(lookThroughEntityCorrection); - m_viewTM.OrthonormalizeFast(); - - m_Camera.SetMatrix(m_viewTM); - - int w = m_rcClient.width(); - int h = m_rcClient.height(); - - m_Camera.SetFrustum(w, h, GetFOV(), fNearZ, fFarZ); - } - else if (m_viewEntityId.IsValid()) - { - Camera::CameraRequestBus::EventResult(fNearZ, m_viewEntityId, &Camera::CameraComponentRequests::GetNearClipDistance); - Camera::CameraRequestBus::EventResult(fFarZ, m_viewEntityId, &Camera::CameraComponentRequests::GetFarClipDistance); - int w = m_rcClient.width(); - int h = m_rcClient.height(); - - m_Camera.SetFrustum(w, h, GetFOV(), fNearZ, fFarZ); - } - else - { - // Normal camera. - m_cameraObjectId = GUID_NULL; - int w = m_rcClient.width(); - int h = m_rcClient.height(); - - float fov = gSettings.viewports.fDefaultFov; - - // match viewport fov to default / selected title menu fov - if (GetFOV() != fov) - { - if (m_viewPane) - { - m_viewPane->OnFOVChanged(fov); - SetFOV(fov); - } - } - - // Just for editor: Aspect ratio fix when changing the viewport - if (!GetIEditor()->IsInGameMode()) - { - float viewportAspectRatio = float( w ) / h; - float targetAspectRatio = GetAspectRatio(); - if (targetAspectRatio > viewportAspectRatio) - { - // Correct for vertical FOV change. - float maxTargetHeight = float( w ) / targetAspectRatio; - fov = 2 * atanf((h * tan(fov / 2)) / maxTargetHeight); - } - } -#if 1 // ATOMSHIM FIXUP - m_Camera.SetFrustum(w, h, fov, fNearZ, 8000.0f); -#else - m_Camera.SetFrustum(w, h, fov, fNearZ, gEnv->p3DEngine->GetMaxViewDistance()); -#endif - } - - GetIEditor()->GetSystem()->SetViewCamera(m_Camera); - - if (GetIEditor()->IsInGameMode()) - { - return; - } - - PreWidgetRendering(); - - RenderAll(); - - // Draw 2D helpers. - TransformationMatrices backupSceneMatrices; - m_debugDisplay->DepthTestOff(); - //m_renderer->Set2DMode(m_rcClient.right(), m_rcClient.bottom(), backupSceneMatrices); - auto prevState = m_debugDisplay->GetState(); - m_debugDisplay->SetState(e_Mode3D | e_AlphaBlended | e_FillModeSolid | e_CullModeBack | e_DepthWriteOn | e_DepthTestOn); - - if (gSettings.viewports.bShowSafeFrame) - { - UpdateSafeFrame(); - RenderSafeFrame(); - } - - AzFramework::ViewportDebugDisplayEventBus::Event( - AzToolsFramework::GetEntityContextId(), &AzFramework::ViewportDebugDisplayEvents::DisplayViewport2d, - AzFramework::ViewportInfo{GetViewportId()}, *m_debugDisplay); - - m_debugDisplay->SetState(prevState); - m_debugDisplay->DepthTestOn(); - - PostWidgetRendering(); -<<<<<<< HEAD - -#if 0 // ATOMSHIM FIXUP - if (!m_renderer->IsStereoEnabled()) -#endif - { - GetIEditor()->GetSystem()->RenderStatistics(); - } -======= ->>>>>>> upstream/main -} - -////////////////////////////////////////////////////////////////////////// -void EditorViewportWidget::RenderAll() -{ - if (!m_debugDisplay) - { - return; - } - - // allow the override of in-editor visualization - AzFramework::ViewportDebugDisplayEventBus::Event( - AzToolsFramework::GetEntityContextId(), &AzFramework::ViewportDebugDisplayEvents::DisplayViewport, - AzFramework::ViewportInfo{ GetViewportId() }, *m_debugDisplay); - - m_entityVisibilityQuery.DisplayVisibility(*m_debugDisplay); - - if (m_manipulatorManager != nullptr) - { - using namespace AzToolsFramework::ViewportInteraction; - - m_debugDisplay->DepthTestOff(); - m_manipulatorManager->DrawManipulators( - *m_debugDisplay, GetCameraState(), - BuildMouseInteractionInternal( - MouseButtons(TranslateMouseButtons(QGuiApplication::mouseButtons())), - BuildKeyboardModifiers(QGuiApplication::queryKeyboardModifiers()), - BuildMousePickInternal(WidgetToViewport(mapFromGlobal(QCursor::pos()))))); - m_debugDisplay->DepthTestOn(); - } -} - -////////////////////////////////////////////////////////////////////////// - -////////////////////////////////////////////////////////////////////////// -void EditorViewportWidget::UpdateSafeFrame() -{ - m_safeFrame = m_rcClient; - - if (m_safeFrame.height() == 0) - { - return; - } - - const bool allowSafeFrameBiggerThanViewport = false; - - float safeFrameAspectRatio = float( m_safeFrame.width()) / m_safeFrame.height(); - float targetAspectRatio = GetAspectRatio(); - bool viewportIsWiderThanSafeFrame = (targetAspectRatio <= safeFrameAspectRatio); - if (viewportIsWiderThanSafeFrame || allowSafeFrameBiggerThanViewport) - { - float maxSafeFrameWidth = m_safeFrame.height() * targetAspectRatio; - float widthDifference = m_safeFrame.width() - maxSafeFrameWidth; - - m_safeFrame.setLeft(m_safeFrame.left() + widthDifference * 0.5); - m_safeFrame.setRight(m_safeFrame.right() - widthDifference * 0.5); - } - else - { - float maxSafeFrameHeight = m_safeFrame.width() / targetAspectRatio; - float heightDifference = m_safeFrame.height() - maxSafeFrameHeight; - - m_safeFrame.setTop(m_safeFrame.top() + heightDifference * 0.5); - m_safeFrame.setBottom(m_safeFrame.bottom() - heightDifference * 0.5); - } - - m_safeFrame.adjust(0, 0, -1, -1); // <-- aesthetic improvement. - - const float SAFE_ACTION_SCALE_FACTOR = 0.05f; - m_safeAction = m_safeFrame; - m_safeAction.adjust(m_safeFrame.width() * SAFE_ACTION_SCALE_FACTOR, m_safeFrame.height() * SAFE_ACTION_SCALE_FACTOR, - -m_safeFrame.width() * SAFE_ACTION_SCALE_FACTOR, -m_safeFrame.height() * SAFE_ACTION_SCALE_FACTOR); - - const float SAFE_TITLE_SCALE_FACTOR = 0.1f; - m_safeTitle = m_safeFrame; - m_safeTitle.adjust(m_safeFrame.width() * SAFE_TITLE_SCALE_FACTOR, m_safeFrame.height() * SAFE_TITLE_SCALE_FACTOR, - -m_safeFrame.width() * SAFE_TITLE_SCALE_FACTOR, -m_safeFrame.height() * SAFE_TITLE_SCALE_FACTOR); -} - -////////////////////////////////////////////////////////////////////////// -void EditorViewportWidget::RenderSafeFrame() -{ - RenderSafeFrame(m_safeFrame, 0.75f, 0.75f, 0, 0.8f); - RenderSafeFrame(m_safeAction, 0, 0.85f, 0.80f, 0.8f); - RenderSafeFrame(m_safeTitle, 0.80f, 0.60f, 0, 0.8f); -} - -////////////////////////////////////////////////////////////////////////// -void EditorViewportWidget::RenderSafeFrame(const QRect& frame, float r, float g, float b, float a) -{ - m_debugDisplay->SetColor(r, g, b, a); - - const int LINE_WIDTH = 2; - for (int i = 0; i < LINE_WIDTH; i++) - { - AZ::Vector3 topLeft(frame.left() + i, frame.top() + i, 0); - AZ::Vector3 bottomRight(frame.right() - i, frame.bottom() - i, 0); - m_debugDisplay->DrawWireBox(topLeft, bottomRight); - } -} - -////////////////////////////////////////////////////////////////////////// -float EditorViewportWidget::GetAspectRatio() const -{ - return gSettings.viewports.fDefaultAspectRatio; -} - -////////////////////////////////////////////////////////////////////////// -void EditorViewportWidget::RenderSnapMarker() -{ - if (!gSettings.snap.markerDisplay) - { - return; - } - - QPoint point = QCursor::pos(); - ScreenToClient(point); - Vec3 p = MapViewToCP(point); - - DisplayContext& dc = m_displayContext; - - float fScreenScaleFactor = GetScreenScaleFactor(p); - - Vec3 x(1, 0, 0); - Vec3 y(0, 1, 0); - Vec3 z(0, 0, 1); - x = x * gSettings.snap.markerSize * fScreenScaleFactor * 0.1f; - y = y * gSettings.snap.markerSize * fScreenScaleFactor * 0.1f; - z = z * gSettings.snap.markerSize * fScreenScaleFactor * 0.1f; - - dc.SetColor(gSettings.snap.markerColor); - dc.DrawLine(p - x, p + x); - dc.DrawLine(p - y, p + y); - dc.DrawLine(p - z, p + z); - - point = WorldToView(p); - - int s = 8; - dc.DrawLine2d(point + QPoint(-s, -s), point + QPoint(s, -s), 0); - dc.DrawLine2d(point + QPoint(-s, s), point + QPoint(s, s), 0); - dc.DrawLine2d(point + QPoint(-s, -s), point + QPoint(-s, s), 0); - dc.DrawLine2d(point + QPoint(s, -s), point + QPoint(s, s), 0); -} - -////////////////////////////////////////////////////////////////////////// -void EditorViewportWidget::OnMenuResolutionCustom() -{ - CCustomResolutionDlg resDlg(width(), height(), parentWidget()); - if (resDlg.exec() == QDialog::Accepted) - { - ResizeView(resDlg.GetWidth(), resDlg.GetHeight()); - - const QString text = QString::fromLatin1("%1 x %2").arg(resDlg.GetWidth()).arg(resDlg.GetHeight()); - - QStringList customResPresets; - CViewportTitleDlg::LoadCustomPresets("ResPresets", "ResPresetFor2ndView", customResPresets); - CViewportTitleDlg::UpdateCustomPresets(text, customResPresets); - CViewportTitleDlg::SaveCustomPresets("ResPresets", "ResPresetFor2ndView", customResPresets); - } -} - -////////////////////////////////////////////////////////////////////////// -void EditorViewportWidget::OnMenuCreateCameraEntityFromCurrentView() -{ - Camera::EditorCameraSystemRequestBus::Broadcast(&Camera::EditorCameraSystemRequests::CreateCameraEntityFromViewport); -} - -////////////////////////////////////////////////////////////////////////// -void EditorViewportWidget::OnMenuSelectCurrentCamera() -{ - CBaseObject* pCameraObject = GetCameraObject(); - - if (pCameraObject && !pCameraObject->IsSelected()) - { - GetIEditor()->BeginUndo(); - IObjectManager* pObjectManager = GetIEditor()->GetObjectManager(); - pObjectManager->ClearSelection(); - pObjectManager->SelectObject(pCameraObject); - GetIEditor()->AcceptUndo("Select Current Camera"); - } -} - -AzFramework::CameraState EditorViewportWidget::GetCameraState() -{ - return m_renderViewport->GetCameraState(); -} - -bool EditorViewportWidget::GridSnappingEnabled() -{ - return GetViewManager()->GetGrid()->IsEnabled(); -} - -float EditorViewportWidget::GridSize() -{ - const CGrid* grid = GetViewManager()->GetGrid(); - return grid->scale * grid->size; -} - -bool EditorViewportWidget::ShowGrid() -{ - return gSettings.viewports.bShowGridGuide; -} - -bool EditorViewportWidget::AngleSnappingEnabled() -{ - return GetViewManager()->GetGrid()->IsAngleSnapEnabled(); -} - -float EditorViewportWidget::AngleStep() -{ - return GetViewManager()->GetGrid()->GetAngleSnap(); -} - -AZ::Vector3 EditorViewportWidget::PickTerrain(const QPoint& point) -{ - FUNCTION_PROFILER(GetIEditor()->GetSystem(), PROFILE_EDITOR); - - return LYVec3ToAZVec3(ViewToWorld(point, nullptr, true)); -} - -AZ::EntityId EditorViewportWidget::PickEntity(const QPoint& point) -{ - FUNCTION_PROFILER(GetIEditor()->GetSystem(), PROFILE_EDITOR); - - PreWidgetRendering(); - - AZ::EntityId entityId; - HitContext hitInfo; - hitInfo.view = this; - if (HitTest(point, hitInfo)) - { - if (hitInfo.object && (hitInfo.object->GetType() == OBJTYPE_AZENTITY)) - { - auto entityObject = static_cast(hitInfo.object); - entityId = entityObject->GetAssociatedEntityId(); - } - } - - PostWidgetRendering(); - - return entityId; -} - -float EditorViewportWidget::TerrainHeight(const AZ::Vector2& position) -{ - return GetIEditor()->GetTerrainElevation(position.GetX(), position.GetY()); -} - -void EditorViewportWidget::FindVisibleEntities(AZStd::vector& visibleEntitiesOut) -{ - FUNCTION_PROFILER(GetIEditor()->GetSystem(), PROFILE_EDITOR); - - visibleEntitiesOut.assign(m_entityVisibilityQuery.Begin(), m_entityVisibilityQuery.End()); -} - -QPoint EditorViewportWidget::ViewportWorldToScreen(const AZ::Vector3& worldPosition) -{ - return m_renderViewport->ViewportWorldToScreen(worldPosition); -} - -bool EditorViewportWidget::IsViewportInputFrozen() -{ - return m_freezeViewportInput; -} - -void EditorViewportWidget::FreezeViewportInput(bool freeze) -{ - m_freezeViewportInput = freeze; -} - -QWidget* EditorViewportWidget::GetWidgetForViewportContextMenu() -{ - return this; -} - -void EditorViewportWidget::BeginWidgetContext() -{ - PreWidgetRendering(); -} - -void EditorViewportWidget::EndWidgetContext() -{ - PostWidgetRendering(); -} - -bool EditorViewportWidget::ShowingWorldSpace() -{ - using namespace AzToolsFramework::ViewportInteraction; - return BuildKeyboardModifiers(QGuiApplication::queryKeyboardModifiers()).Shift(); -} - -void EditorViewportWidget::SetViewportId(int id) -{ - CViewport::SetViewportId(id); - - // Now that we have an ID, we can initialize our viewport. - m_renderViewport = new AtomToolsFramework::RenderViewportWidget(id, this); - m_defaultViewportContextName = m_renderViewport->GetViewportContext()->GetName(); - QBoxLayout* layout = new QBoxLayout(QBoxLayout::Direction::TopToBottom, this); - layout->setContentsMargins(QMargins()); - layout->addWidget(m_renderViewport); - - auto viewportContext = m_renderViewport->GetViewportContext(); - viewportContext->ConnectViewMatrixChangedHandler(m_cameraViewMatrixChangeHandler); - viewportContext->ConnectProjectionMatrixChangedHandler(m_cameraProjectionMatrixChangeHandler); - - m_renderViewport->GetControllerList()->Add(AZStd::make_shared()); - - if (ed_useNewCameraSystem) - { - m_renderViewport->GetControllerList()->Add(AZStd::make_shared()); - } - else - { - m_renderViewport->GetControllerList()->Add(AZStd::make_shared()); - } - - UpdateScene(); - - if (m_pPrimaryViewport == this) - { - SetAsActiveViewport(); - } -} - -void EditorViewportWidget::ConnectViewportInteractionRequestBus() -{ - AzToolsFramework::ViewportInteraction::ViewportFreezeRequestBus::Handler::BusConnect(GetViewportId()); - AzToolsFramework::ViewportInteraction::MainEditorViewportInteractionRequestBus::Handler::BusConnect(GetViewportId()); - m_viewportUi.ConnectViewportUiBus(GetViewportId()); - - AzFramework::InputSystemCursorConstraintRequestBus::Handler::BusConnect(); -} - -void EditorViewportWidget::DisconnectViewportInteractionRequestBus() -{ - AzFramework::InputSystemCursorConstraintRequestBus::Handler::BusDisconnect(); - - m_viewportUi.DisconnectViewportUiBus(); - AzToolsFramework::ViewportInteraction::MainEditorViewportInteractionRequestBus::Handler::BusDisconnect(); - AzToolsFramework::ViewportInteraction::ViewportFreezeRequestBus::Handler::BusDisconnect(); -} - -namespace AZ::ViewportHelpers -{ - void ToggleBool(bool* variable, bool* disableVariableIfOn) - { - *variable = !*variable; - if (*variable && disableVariableIfOn) - { - *disableVariableIfOn = false; - } - } - - void ToggleInt(int* variable) - { - *variable = !*variable; - } - - void AddCheckbox(QMenu* menu, const QString& text, bool* variable, bool* disableVariableIfOn = nullptr) - { - QAction* action = menu->addAction(text); - QObject::connect(action, &QAction::triggered, action, [variable, disableVariableIfOn] { ToggleBool(variable, disableVariableIfOn); - }); - action->setCheckable(true); - action->setChecked(*variable); - } - - void AddCheckbox(QMenu* menu, const QString& text, int* variable) - { - QAction* action = menu->addAction(text); - QObject::connect(action, &QAction::triggered, action, [variable] { ToggleInt(variable); - }); - action->setCheckable(true); - action->setChecked(*variable); - } -} - -////////////////////////////////////////////////////////////////////////// -void EditorViewportWidget::OnTitleMenu(QMenu* menu) -{ - const int nWireframe = gEnv->pConsole->GetCVar("r_wireframe")->GetIVal(); - QAction* action = menu->addAction(tr("Wireframe")); - connect(action, &QAction::triggered, action, []() - { - ICVar* piVar(gEnv->pConsole->GetCVar("r_wireframe")); - int nRenderMode = piVar->GetIVal(); - if (nRenderMode != R_WIREFRAME_MODE) - { - piVar->Set(R_WIREFRAME_MODE); - } - else - { - piVar->Set(R_SOLID_MODE); - } - }); - action->setCheckable(true); - action->setChecked(nWireframe == R_WIREFRAME_MODE); - - const bool bDisplayLabels = GetIEditor()->GetDisplaySettings()->IsDisplayLabels(); - action = menu->addAction(tr("Labels")); - connect(action, &QAction::triggered, this, [bDisplayLabels] {GetIEditor()->GetDisplaySettings()->DisplayLabels(!bDisplayLabels); - }); - action->setCheckable(true); - action->setChecked(bDisplayLabels); - - AZ::ViewportHelpers::AddCheckbox(menu, tr("Show Safe Frame"), &gSettings.viewports.bShowSafeFrame); - AZ::ViewportHelpers::AddCheckbox(menu, tr("Show Construction Plane"), &gSettings.snap.constructPlaneDisplay); - AZ::ViewportHelpers::AddCheckbox(menu, tr("Show Trigger Bounds"), &gSettings.viewports.bShowTriggerBounds); - AZ::ViewportHelpers::AddCheckbox(menu, tr("Show Icons"), &gSettings.viewports.bShowIcons, &gSettings.viewports.bShowSizeBasedIcons); - AZ::ViewportHelpers::AddCheckbox(menu, tr("Show Size-based Icons"), &gSettings.viewports.bShowSizeBasedIcons, &gSettings.viewports.bShowIcons); - AZ::ViewportHelpers::AddCheckbox(menu, tr("Show Helpers of Frozen Objects"), &gSettings.viewports.nShowFrozenHelpers); - - if (!m_predefinedAspectRatios.IsEmpty()) - { - QMenu* aspectRatiosMenu = menu->addMenu(tr("Target Aspect Ratio")); - - for (size_t i = 0; i < m_predefinedAspectRatios.GetCount(); ++i) - { - const QString& aspectRatioString = m_predefinedAspectRatios.GetName(i); - QAction* aspectRatioAction = aspectRatiosMenu->addAction(aspectRatioString); - connect(aspectRatioAction, &QAction::triggered, this, [i, this] { - const float aspect = m_predefinedAspectRatios.GetValue(i); - gSettings.viewports.fDefaultAspectRatio = aspect; - }); - aspectRatioAction->setCheckable(true); - aspectRatioAction->setChecked(m_predefinedAspectRatios.IsCurrent(i)); - } - } - - // Set ourself as the active viewport so the following actions create a camera from this view - GetIEditor()->GetViewManager()->SelectViewport(this); - - CGameEngine* gameEngine = GetIEditor()->GetGameEngine(); - - if (Camera::EditorCameraSystemRequestBus::HasHandlers()) - { - action = menu->addAction(tr("Create camera entity from current view")); - connect(action, &QAction::triggered, this, &EditorViewportWidget::OnMenuCreateCameraEntityFromCurrentView); - - if (!gameEngine || !gameEngine->IsLevelLoaded()) - { - action->setEnabled(false); - action->setToolTip(tr(AZ::ViewportHelpers::TextCantCreateCameraNoLevel)); - menu->setToolTipsVisible(true); - } - } - - if (!gameEngine || !gameEngine->IsLevelLoaded()) - { - action->setEnabled(false); - action->setToolTip(tr(AZ::ViewportHelpers::TextCantCreateCameraNoLevel)); - menu->setToolTipsVisible(true); - } - - if (GetCameraObject()) - { - action = menu->addAction(tr("Select Current Camera")); - connect(action, &QAction::triggered, this, &EditorViewportWidget::OnMenuSelectCurrentCamera); - } - - // Add Cameras. - bool bHasCameras = AddCameraMenuItems(menu); - EditorViewportWidget* pFloatingViewport = nullptr; - - if (GetIEditor()->GetViewManager()->GetViewCount() > 1) - { - for (int i = 0; i < GetIEditor()->GetViewManager()->GetViewCount(); ++i) - { - CViewport* vp = GetIEditor()->GetViewManager()->GetView(i); - if (!vp) - { - continue; - } - - if (viewport_cast(vp) == nullptr) - { - continue; - } - - if (vp->GetViewportId() == MAX_NUM_VIEWPORTS - 1) - { - menu->addSeparator(); - - QMenu* floatViewMenu = menu->addMenu(tr("Floating View")); - - pFloatingViewport = (EditorViewportWidget*)vp; - pFloatingViewport->AddCameraMenuItems(floatViewMenu); - - if (bHasCameras) - { - floatViewMenu->addSeparator(); - } - - QMenu* resolutionMenu = floatViewMenu->addMenu(tr("Resolution")); - - QStringList customResPresets; - CViewportTitleDlg::LoadCustomPresets("ResPresets", "ResPresetFor2ndView", customResPresets); - CViewportTitleDlg::AddResolutionMenus(resolutionMenu, [this](int width, int height) { ResizeView(width, height); }, customResPresets); - if (!resolutionMenu->actions().isEmpty()) - { - resolutionMenu->addSeparator(); - } - QAction* customResolutionAction = resolutionMenu->addAction(tr("Custom...")); - connect(customResolutionAction, &QAction::triggered, this, &EditorViewportWidget::OnMenuResolutionCustom); - break; - } - } - } -} - -////////////////////////////////////////////////////////////////////////// -bool EditorViewportWidget::AddCameraMenuItems(QMenu* menu) -{ - if (!menu->isEmpty()) - { - menu->addSeparator(); - } - - AZ::ViewportHelpers::AddCheckbox(menu, "Lock Camera Movement", &m_bLockCameraMovement); - menu->addSeparator(); - - // Camera Sub menu - QMenu* customCameraMenu = menu->addMenu(tr("Camera")); - - QAction* action = customCameraMenu->addAction("Editor Camera"); - action->setCheckable(true); - action->setChecked(m_viewSourceType == ViewSourceType::None); - connect(action, &QAction::triggered, this, &EditorViewportWidget::SetDefaultCamera); - - AZ::EBusAggregateResults getCameraResults; - Camera::CameraBus::BroadcastResult(getCameraResults, &Camera::CameraRequests::GetCameras); - - const int numCameras = getCameraResults.values.size(); - - // only enable if we're editing a sequence in Track View and have cameras in the level - bool enableSequenceCameraMenu = (GetIEditor()->GetAnimation()->GetSequence() && numCameras); - - action = customCameraMenu->addAction(tr("Sequence Camera")); - action->setCheckable(true); - action->setChecked(m_viewSourceType == ViewSourceType::SequenceCamera); - action->setEnabled(enableSequenceCameraMenu); - connect(action, &QAction::triggered, this, &EditorViewportWidget::SetSequenceCamera); - - QVector additionalCameras; - additionalCameras.reserve(getCameraResults.values.size()); - - for (const AZ::EntityId& entityId : getCameraResults.values) - { - AZStd::string entityName; - AZ::ComponentApplicationBus::BroadcastResult(entityName, &AZ::ComponentApplicationRequests::GetEntityName, entityId); - action = new QAction(QString(entityName.c_str()), nullptr); - additionalCameras.append(action); - action->setCheckable(true); - action->setChecked(m_viewEntityId == entityId && m_viewSourceType == ViewSourceType::CameraComponent); - connect(action, &QAction::triggered, this, [this, entityId](bool isChecked) - { - if (isChecked) - { - SetComponentCamera(entityId); - } - else - { - SetDefaultCamera(); - } - }); - } - - std::sort(additionalCameras.begin(), additionalCameras.end(), [] (QAction* a1, QAction* a2) { - return QString::compare(a1->text(), a2->text(), Qt::CaseInsensitive) < 0; - }); - - for (QAction* cameraAction : additionalCameras) - { - customCameraMenu->addAction(cameraAction); - } - - action = customCameraMenu->addAction(tr("Look through entity")); - AzToolsFramework::EntityIdList selectedEntityList; - AzToolsFramework::ToolsApplicationRequests::Bus::BroadcastResult(selectedEntityList, &AzToolsFramework::ToolsApplicationRequests::GetSelectedEntities); - action->setCheckable(selectedEntityList.size() > 0 || m_viewSourceType == ViewSourceType::AZ_Entity); - action->setEnabled(selectedEntityList.size() > 0 || m_viewSourceType == ViewSourceType::AZ_Entity); - action->setChecked(m_viewSourceType == ViewSourceType::AZ_Entity); - connect(action, &QAction::triggered, this, [this](bool isChecked) - { - if (isChecked) - { - AzToolsFramework::EntityIdList selectedEntityList; - AzToolsFramework::ToolsApplicationRequests::Bus::BroadcastResult(selectedEntityList, &AzToolsFramework::ToolsApplicationRequests::GetSelectedEntities); - if (selectedEntityList.size()) - { - SetEntityAsCamera(*selectedEntityList.begin()); - } - } - else - { - SetDefaultCamera(); - } - }); - return true; -} - -////////////////////////////////////////////////////////////////////////// -void EditorViewportWidget::ResizeView(int width, int height) -{ - const QRect rView = rect().translated(mapToGlobal(QPoint())); - int deltaWidth = width - rView.width(); - int deltaHeight = height - rView.height(); - - if (window()->isFullScreen()) - { - setGeometry(rView.left(), rView.top(), rView.width() + deltaWidth, rView.height() + deltaHeight); - } - else - { - QWidget* window = this->window(); - if (window->isMaximized()) - { - window->showNormal(); - } - - const QSize deltaSize = QSize(width, height) - size(); - window->move(0, 0); - window->resize(window->size() + deltaSize); - } -} - -////////////////////////////////////////////////////////////////////////// -void EditorViewportWidget::ToggleCameraObject() -{ - if (m_viewSourceType == ViewSourceType::SequenceCamera) - { - gEnv->p3DEngine->GetPostEffectBaseGroup()->SetParam("Dof_Active", 0.0f); - ResetToViewSourceType(ViewSourceType::LegacyCamera); - } - else - { - ResetToViewSourceType(ViewSourceType::SequenceCamera); - } - PostCameraSet(); - GetIEditor()->GetAnimation()->ForceAnimation(); -} - - -////////////////////////////////////////////////////////////////////////// -void EditorViewportWidget::SetCamera(const CCamera& camera) -{ - m_Camera = camera; - SetViewTM(m_Camera.GetMatrix()); -} - -////////////////////////////////////////////////////////////////////////// -float EditorViewportWidget::GetCameraMoveSpeed() const -{ - return gSettings.cameraMoveSpeed; -} - -////////////////////////////////////////////////////////////////////////// -float EditorViewportWidget::GetCameraRotateSpeed() const -{ - return gSettings.cameraRotateSpeed; -} - -////////////////////////////////////////////////////////////////////////// -bool EditorViewportWidget::GetCameraInvertYRotation() const -{ - return gSettings.invertYRotation; -} - -////////////////////////////////////////////////////////////////////////// -float EditorViewportWidget::GetCameraInvertPan() const -{ - return gSettings.invertPan; -} - -////////////////////////////////////////////////////////////////////////// -EditorViewportWidget* EditorViewportWidget::GetPrimaryViewport() -{ - return m_pPrimaryViewport; -} - -////////////////////////////////////////////////////////////////////////// -void EditorViewportWidget::focusOutEvent([[maybe_unused]] QFocusEvent* event) -{ - // if we lose focus, the keyboard map needs to be cleared immediately - if (!m_keyDown.isEmpty()) - { - m_keyDown.clear(); - - releaseKeyboard(); - } -} - -void EditorViewportWidget::keyPressEvent(QKeyEvent* event) -{ - // Special case Escape key and bubble way up to the top level parent so that it can cancel us out of any active tool - // or clear the current selection - if (event->key() == Qt::Key_Escape) - { - QCoreApplication::sendEvent(GetIEditor()->GetEditorMainWindow(), event); - } - - // NOTE: we keep track of keypresses and releases explicitly because the OS/Qt will insert a slight delay between sending - // keyevents when the key is held down. This is standard, but makes responding to key events for game style input silly - // because we want the movement to be butter smooth. - if (!event->isAutoRepeat()) - { - m_keyDown.insert(event->key()); - } - - QtViewport::keyPressEvent(event); - -#if defined(AZ_PLATFORM_WINDOWS) - // In game mode on windows we need to forward raw text events to the input system. - if (GetIEditor()->IsInGameMode() && GetType() == ET_ViewportCamera) - { - // Get the QString as a '\0'-terminated array of unsigned shorts. - // The result remains valid until the string is modified. - const ushort* codeUnitsUTF16 = event->text().utf16(); - while (ushort codeUnitUTF16 = *codeUnitsUTF16) - { - AzFramework::RawInputNotificationBusWindows::Broadcast(&AzFramework::RawInputNotificationsWindows::OnRawInputCodeUnitUTF16Event, codeUnitUTF16); - ++codeUnitsUTF16; - } - } -#endif // defined(AZ_PLATFORM_WINDOWS) -} - -void EditorViewportWidget::SetViewTM(const Matrix34& viewTM, bool bMoveOnly) -{ - Matrix34 camMatrix = viewTM; - - // If no collision flag set do not check for terrain elevation. - if (GetType() == ET_ViewportCamera) - { - if ((GetIEditor()->GetDisplaySettings()->GetSettings() & SETTINGS_NOCOLLISION) == 0) - { - Vec3 p = camMatrix.GetTranslation(); - bool adjustCameraElevation = true; - auto terrain = AzFramework::Terrain::TerrainDataRequestBus::FindFirstHandler(); - if (terrain) - { - AZ::Aabb terrainAabb(terrain->GetTerrainAabb()); - - // Adjust the AABB to include all Z values. Since the goal here is to snap the camera to the terrain height if - // it's below the terrain, we only want to verify the camera is within the XY bounds of the terrain to adjust the elevation. - terrainAabb.SetMin(AZ::Vector3(terrainAabb.GetMin().GetX(), terrainAabb.GetMin().GetY(), -AZ::Constants::FloatMax)); - terrainAabb.SetMax(AZ::Vector3(terrainAabb.GetMax().GetX(), terrainAabb.GetMax().GetY(), AZ::Constants::FloatMax)); - - if (!terrainAabb.Contains(LYVec3ToAZVec3(p))) - { - adjustCameraElevation = false; - } - else if (terrain->GetIsHoleFromFloats(p.x, p.y)) - { - adjustCameraElevation = false; - } - } - - if (adjustCameraElevation) - { - float z = GetIEditor()->GetTerrainElevation(p.x, p.y); - if (p.z < z + 0.25) - { - p.z = z + 0.25; - camMatrix.SetTranslation(p); - } - } - } - - // Also force this position on game. - if (GetIEditor()->GetGameEngine()) - { - GetIEditor()->GetGameEngine()->SetPlayerViewMatrix(viewTM); - } - } - - CBaseObject* cameraObject = GetCameraObject(); - if (cameraObject) - { - // Ignore camera movement if locked. - if (IsCameraMovementLocked() || (!GetIEditor()->GetAnimation()->IsRecordMode() && !IsCameraObjectMove())) - { - return; - } - - AZ::Matrix3x3 lookThroughEntityCorrection = AZ::Matrix3x3::CreateIdentity(); - if (m_viewEntityId.IsValid()) - { - LmbrCentral::EditorCameraCorrectionRequestBus::EventResult( - lookThroughEntityCorrection, m_viewEntityId, - &LmbrCentral::EditorCameraCorrectionRequests::GetInverseTransformCorrection); - } - - if (m_pressedKeyState != KeyPressedState::PressedInPreviousFrame) - { - CUndo undo("Move Camera"); - if (bMoveOnly) - { - // specify eObjectUpdateFlags_UserInput so that an undo command gets logged - cameraObject->SetWorldPos(camMatrix.GetTranslation(), eObjectUpdateFlags_UserInput); - } - else - { - // specify eObjectUpdateFlags_UserInput so that an undo command gets logged - cameraObject->SetWorldTM(camMatrix * AZMatrix3x3ToLYMatrix3x3(lookThroughEntityCorrection), eObjectUpdateFlags_UserInput); - } - } - else - { - if (bMoveOnly) - { - // Do not specify eObjectUpdateFlags_UserInput, so that an undo command does not get logged; we covered it already when m_pressedKeyState was PressedThisFrame - cameraObject->SetWorldPos(camMatrix.GetTranslation()); - } - else - { - // Do not specify eObjectUpdateFlags_UserInput, so that an undo command does not get logged; we covered it already when m_pressedKeyState was PressedThisFrame - cameraObject->SetWorldTM(camMatrix * AZMatrix3x3ToLYMatrix3x3(lookThroughEntityCorrection)); - } - } - - using namespace AzToolsFramework; - ComponentEntityObjectRequestBus::Event(cameraObject, &ComponentEntityObjectRequestBus::Events::UpdatePreemptiveUndoCache); - } - else if (m_viewEntityId.IsValid()) - { - // Ignore camera movement if locked. - if (IsCameraMovementLocked() || (!GetIEditor()->GetAnimation()->IsRecordMode() && !IsCameraObjectMove())) - { - return; - } - - if (m_pressedKeyState != KeyPressedState::PressedInPreviousFrame) - { - CUndo undo("Move Camera"); - if (bMoveOnly) - { - AZ::TransformBus::Event( - m_viewEntityId, &AZ::TransformInterface::SetWorldTranslation, - LYVec3ToAZVec3(camMatrix.GetTranslation())); - } - else - { - AZ::TransformBus::Event( - m_viewEntityId, &AZ::TransformInterface::SetWorldTM, - LYTransformToAZTransform(camMatrix)); - } - } - else - { - if (bMoveOnly) - { - AZ::TransformBus::Event( - m_viewEntityId, &AZ::TransformInterface::SetWorldTranslation, - LYVec3ToAZVec3(camMatrix.GetTranslation())); - } - else - { - AZ::TransformBus::Event( - m_viewEntityId, &AZ::TransformInterface::SetWorldTM, - LYTransformToAZTransform(camMatrix)); - } - } - - AzToolsFramework::PropertyEditorGUIMessages::Bus::Broadcast( - &AzToolsFramework::PropertyEditorGUIMessages::RequestRefresh, - AzToolsFramework::PropertyModificationRefreshLevel::Refresh_AttributesAndValues); - } - - if (m_pressedKeyState == KeyPressedState::PressedThisFrame) - { - m_pressedKeyState = KeyPressedState::PressedInPreviousFrame; - } - - QtViewport::SetViewTM(camMatrix); - - m_Camera.SetMatrix(camMatrix); -} - -////////////////////////////////////////////////////////////////////////// -void EditorViewportWidget::RenderSelectedRegion() -{ - if (!m_engine) - { - return; - } - - AABB box; - GetIEditor()->GetSelectedRegion(box); - if (box.IsEmpty()) - { - return; - } - - float x1 = box.min.x; - float y1 = box.min.y; - float x2 = box.max.x; - float y2 = box.max.y; - - DisplayContext& dc = m_displayContext; - - float fMaxSide = MAX(y2 - y1, x2 - x1); - if (fMaxSide < 0.1f) - { - return; - } - float fStep = fMaxSide / 100.0f; - - float fMinZ = 0; - float fMaxZ = 0; - - // Draw yellow border lines. - dc.SetColor(1, 1, 0, 1); - float offset = 0.01f; - Vec3 p1, p2; - - const float defaultTerrainHeight = AzFramework::Terrain::TerrainDataRequests::GetDefaultTerrainHeight(); - auto terrain = AzFramework::Terrain::TerrainDataRequestBus::FindFirstHandler(); - - for (float y = y1; y < y2; y += fStep) - { - p1.x = x1; - p1.y = y; - p1.z = terrain ? terrain->GetHeightFromFloats(p1.x, p1.y) + offset : defaultTerrainHeight + offset; - - p2.x = x1; - p2.y = y + fStep; - p2.z = terrain ? terrain->GetHeightFromFloats(p2.x, p2.y) + offset : defaultTerrainHeight + offset; - dc.DrawLine(p1, p2); - - p1.x = x2; - p1.y = y; - p1.z = terrain ? terrain->GetHeightFromFloats(p1.x, p1.y) + offset : defaultTerrainHeight + offset; - - p2.x = x2; - p2.y = y + fStep; - p2.z = terrain ? terrain->GetHeightFromFloats(p2.x, p2.y) + offset : defaultTerrainHeight + offset; - dc.DrawLine(p1, p2); - - fMinZ = min(fMinZ, min(p1.z, p2.z)); - fMaxZ = max(fMaxZ, max(p1.z, p2.z)); - } - for (float x = x1; x < x2; x += fStep) - { - p1.x = x; - p1.y = y1; - p1.z = terrain ? terrain->GetHeightFromFloats(p1.x, p1.y) + offset : defaultTerrainHeight + offset; - - p2.x = x + fStep; - p2.y = y1; - p2.z = terrain ? terrain->GetHeightFromFloats(p2.x, p2.y) + offset : defaultTerrainHeight + offset; - dc.DrawLine(p1, p2); - - p1.x = x; - p1.y = y2; - p1.z = terrain ? terrain->GetHeightFromFloats(p1.x, p1.y) + offset : defaultTerrainHeight + offset; - - p2.x = x + fStep; - p2.y = y2; - p2.z = terrain ? terrain->GetHeightFromFloats(p2.x, p2.y) + offset : defaultTerrainHeight + offset; - dc.DrawLine(p1, p2); - - fMinZ = min(fMinZ, min(p1.z, p2.z)); - fMaxZ = max(fMaxZ, max(p1.z, p2.z)); - } - - { - // Draw a box area - float fBoxOver = fMaxSide / 5.0f; - float fBoxHeight = fBoxOver + fMaxZ - fMinZ; - - ColorB boxColor(64, 64, 255, 128); // light blue - ColorB transparent(boxColor.r, boxColor.g, boxColor.b, 0); - - Vec3 base[] = { - Vec3(x1, y1, fMinZ), - Vec3(x2, y1, fMinZ), - Vec3(x2, y2, fMinZ), - Vec3(x1, y2, fMinZ) - }; - - - // Generate vertices - static AABB boxPrev(AABB::RESET); - static std::vector verts; - static std::vector colors; - - if (!IsEquivalent(boxPrev, box)) - { - verts.resize(0); - colors.resize(0); - for (int i = 0; i < 4; ++i) - { - Vec3& p = base[i]; - - verts.push_back(p); - verts.push_back(Vec3(p.x, p.y, p.z + fBoxHeight)); - verts.push_back(Vec3(p.x, p.y, p.z + fBoxHeight + fBoxOver)); - - colors.push_back(boxColor); - colors.push_back(boxColor); - colors.push_back(transparent); - } - boxPrev = box; - } - - // Generate indices - const int numInds = 4 * 12; - static vtx_idx inds[numInds]; - static bool bNeedIndsInit = true; - if (bNeedIndsInit) - { - vtx_idx* pInds = &inds[0]; - - for (int i = 0; i < 4; ++i) - { - int over = 0; - if (i == 3) - { - over = -12; - } - - int ind = i * 3; - *pInds++ = ind; - *pInds++ = ind + 3 + over; - *pInds++ = ind + 1; - - *pInds++ = ind + 1; - *pInds++ = ind + 3 + over; - *pInds++ = ind + 4 + over; - - ind = i * 3 + 1; - *pInds++ = ind; - *pInds++ = ind + 3 + over; - *pInds++ = ind + 1; - - *pInds++ = ind + 1; - *pInds++ = ind + 3 + over; - *pInds++ = ind + 4 + over; - } - bNeedIndsInit = false; - } - - // Draw lines - for (int i = 0; i < 4; ++i) - { - Vec3& p = base[i]; - - dc.DrawLine(p, Vec3(p.x, p.y, p.z + fBoxHeight), ColorF(1, 1, 0, 1), ColorF(1, 1, 0, 1)); - dc.DrawLine(Vec3(p.x, p.y, p.z + fBoxHeight), Vec3(p.x, p.y, p.z + fBoxHeight + fBoxOver), ColorF(1, 1, 0, 1), ColorF(1, 1, 0, 0)); - } - - // Draw volume - dc.DepthWriteOff(); - dc.CullOff(); - dc.pRenderAuxGeom->DrawTriangles(&verts[0], verts.size(), &inds[0], numInds, &colors[0]); - dc.CullOn(); - dc.DepthWriteOn(); - } -} - -Vec3 EditorViewportWidget::WorldToView3D(const Vec3& wp, [[maybe_unused]] int nFlags) const -{ - Vec3 out(0, 0, 0); - float x, y, z; - - ProjectToScreen(wp.x, wp.y, wp.z, &x, &y, &z); - if (_finite(x) && _finite(y) && _finite(z)) - { - out.x = (x / 100) * m_rcClient.width(); - out.y = (y / 100) * m_rcClient.height(); - out.x /= QHighDpiScaling::factor(windowHandle()->screen()); - out.y /= QHighDpiScaling::factor(windowHandle()->screen()); - out.z = z; - } - return out; -} - -////////////////////////////////////////////////////////////////////////// -QPoint EditorViewportWidget::WorldToView(const Vec3& wp) const -{ - return m_renderViewport->ViewportWorldToScreen(LYVec3ToAZVec3(wp)); -} -////////////////////////////////////////////////////////////////////////// -QPoint EditorViewportWidget::WorldToViewParticleEditor(const Vec3& wp, int width, int height) const -{ - QPoint p; - float x, y, z; - - ProjectToScreen(wp.x, wp.y, wp.z, &x, &y, &z); - if (_finite(x) || _finite(y)) - { - p.rx() = (x / 100) * width; - p.ry() = (y / 100) * height; - } - else - { - QPoint(0, 0); - } - return p; -} - -////////////////////////////////////////////////////////////////////////// -Vec3 EditorViewportWidget::ViewToWorld(const QPoint& vp, bool* collideWithTerrain, bool onlyTerrain, bool bSkipVegetation, bool bTestRenderMesh, bool* collideWithObject) const -{ - AZ_PROFILE_FUNCTION(AZ::Debug::ProfileCategory::Editor); - - AZ_UNUSED(collideWithTerrain) - AZ_UNUSED(onlyTerrain) - AZ_UNUSED(bTestRenderMesh) - AZ_UNUSED(bSkipVegetation) - AZ_UNUSED(bSkipVegetation) - AZ_UNUSED(collideWithObject) - - auto ray = m_renderViewport->ViewportScreenToWorldRay(vp); - if (!ray.has_value()) - { - return Vec3(0, 0, 0); - } - - const float maxDistance = 10000.f; - Vec3 v = AZVec3ToLYVec3(ray.value().direction) * maxDistance; - - if (!_finite(v.x) || !_finite(v.y) || !_finite(v.z)) - { - return Vec3(0, 0, 0); - } - - Vec3 colp = AZVec3ToLYVec3(ray.value().origin) + 0.002f * v; - - return colp; -} - -////////////////////////////////////////////////////////////////////////// -Vec3 EditorViewportWidget::ViewToWorldNormal(const QPoint& vp, bool onlyTerrain, bool bTestRenderMesh) -{ - AZ_UNUSED(vp) - AZ_UNUSED(onlyTerrain) - AZ_UNUSED(bTestRenderMesh) - - AZ_PROFILE_FUNCTION(AZ::Debug::ProfileCategory::Editor); - - return Vec3(0, 0, 1); -} - -////////////////////////////////////////////////////////////////////////// -bool EditorViewportWidget::AdjustObjectPosition(const ray_hit& hit, Vec3& outNormal, Vec3& outPos) const -{ - Matrix34A objMat, objMatInv; - Matrix33 objRot, objRotInv; - - if (hit.pCollider->GetiForeignData() != PHYS_FOREIGN_ID_STATIC) - { - return false; - } - - IRenderNode* pNode = (IRenderNode*) hit.pCollider->GetForeignData(PHYS_FOREIGN_ID_STATIC); - if (!pNode || !pNode->GetEntityStatObj()) - { - return false; - } - - IStatObj* pEntObject = pNode->GetEntityStatObj(hit.partid, 0, &objMat, false); - if (!pEntObject || !pEntObject->GetRenderMesh()) - { - return false; - } - - objRot = Matrix33(objMat); - objRot.NoScale(); // No scale. - objRotInv = objRot; - objRotInv.Invert(); - - float fWorldScale = objMat.GetColumn(0).GetLength(); // GetScale - float fWorldScaleInv = 1.0f / fWorldScale; - - // transform decal into object space - objMatInv = objMat; - objMatInv.Invert(); - - // put into normal object space hit direction of projection - Vec3 invhitn = -(hit.n); - Vec3 vOS_HitDir = objRotInv.TransformVector(invhitn).GetNormalized(); - - // put into position object space hit position - Vec3 vOS_HitPos = objMatInv.TransformPoint(hit.pt); - vOS_HitPos -= vOS_HitDir * RENDER_MESH_TEST_DISTANCE * fWorldScaleInv; - - IRenderMesh* pRM = pEntObject->GetRenderMesh(); - - AABB aabbRNode; - pRM->GetBBox(aabbRNode.min, aabbRNode.max); - Vec3 vOut(0, 0, 0); - if (!Intersect::Ray_AABB(Ray(vOS_HitPos, vOS_HitDir), aabbRNode, vOut)) - { - return false; - } - - if (!pRM || !pRM->GetVerticesCount()) - { - return false; - } - - if (RayRenderMeshIntersection(pRM, vOS_HitPos, vOS_HitDir, outPos, outNormal)) - { - outNormal = objRot.TransformVector(outNormal).GetNormalized(); - outPos = objMat.TransformPoint(outPos); - return true; - } - return false; -} - -////////////////////////////////////////////////////////////////////////// -bool EditorViewportWidget::RayRenderMeshIntersection(IRenderMesh* pRenderMesh, const Vec3& vInPos, const Vec3& vInDir, Vec3& vOutPos, Vec3& vOutNormal) const -{ - SRayHitInfo hitInfo; - hitInfo.bUseCache = false; - hitInfo.bInFirstHit = false; - hitInfo.inRay.origin = vInPos; - hitInfo.inRay.direction = vInDir.GetNormalized(); - hitInfo.inReferencePoint = vInPos; - hitInfo.fMaxHitDistance = 0; - bool bRes = GetIEditor()->Get3DEngine()->RenderMeshRayIntersection(pRenderMesh, hitInfo, nullptr); - vOutPos = hitInfo.vHitPos; - vOutNormal = hitInfo.vHitNormal; - return bRes; -} - -void EditorViewportWidget::UnProjectFromScreen(float sx, float sy, float sz, float* px, float* py, float* pz) const -{ - AZ::Vector3 wp; - wp = m_renderViewport->ViewportScreenToWorld({(int)sx, m_rcClient.bottom() - ((int)sy)}, sz).value_or(wp); - *px = wp.GetX(); - *py = wp.GetY(); - *pz = wp.GetZ(); -} - -void EditorViewportWidget::ProjectToScreen(float ptx, float pty, float ptz, float* sx, float* sy, float* sz) const -{ - QPoint screenPosition = m_renderViewport->ViewportWorldToScreen(AZ::Vector3{ptx, pty, ptz}); - *sx = screenPosition.x(); - *sy = screenPosition.y(); - *sz = 0.f; -} - -////////////////////////////////////////////////////////////////////////// -void EditorViewportWidget::ViewToWorldRay(const QPoint& vp, Vec3& raySrc, Vec3& rayDir) const -{ - QRect rc = m_rcClient; - - Vec3 pos0, pos1; - float wx, wy, wz; - UnProjectFromScreen(vp.x(), rc.bottom() - vp.y(), 0, &wx, &wy, &wz); - if (!_finite(wx) || !_finite(wy) || !_finite(wz)) - { - return; - } - if (fabs(wx) > 1000000 || fabs(wy) > 1000000 || fabs(wz) > 1000000) - { - return; - } - pos0(wx, wy, wz); - UnProjectFromScreen(vp.x(), rc.bottom() - vp.y(), 1, &wx, &wy, &wz); - if (!_finite(wx) || !_finite(wy) || !_finite(wz)) - { - return; - } - if (fabs(wx) > 1000000 || fabs(wy) > 1000000 || fabs(wz) > 1000000) - { - return; - } - pos1(wx, wy, wz); - - Vec3 v = (pos1 - pos0); - v = v.GetNormalized(); - - raySrc = pos0; - rayDir = v; -} - -////////////////////////////////////////////////////////////////////////// -float EditorViewportWidget::GetScreenScaleFactor(const Vec3& worldPoint) const -{ - float dist = m_Camera.GetPosition().GetDistance(worldPoint); - if (dist < m_Camera.GetNearPlane()) - { - dist = m_Camera.GetNearPlane(); - } - return dist; -} -////////////////////////////////////////////////////////////////////////// -float EditorViewportWidget::GetScreenScaleFactor(const CCamera& camera, const Vec3& object_position) -{ - Vec3 camPos = camera.GetPosition(); - float dist = camPos.GetDistance(object_position); - return dist; -} - -////////////////////////////////////////////////////////////////////////// -void EditorViewportWidget::OnDestroy() -{ - DestroyRenderContext(); -} - -////////////////////////////////////////////////////////////////////////// -bool EditorViewportWidget::CheckRespondToInput() const -{ - if (!Editor::EditorQtApplication::IsActive()) - { - return false; - } - - if (!hasFocus() && !m_renderViewport->hasFocus()) - { - return false; - } - - return true; -} - -////////////////////////////////////////////////////////////////////////// -bool EditorViewportWidget::HitTest(const QPoint& point, HitContext& hitInfo) -{ - hitInfo.camera = &m_Camera; - hitInfo.pExcludedObject = GetCameraObject(); - return QtViewport::HitTest(point, hitInfo); -} - -////////////////////////////////////////////////////////////////////////// -bool EditorViewportWidget::IsBoundsVisible(const AABB& box) const -{ - // If at least part of bbox is visible then its visible. - return m_Camera.IsAABBVisible_F(AABB(box.min, box.max)); -} - -////////////////////////////////////////////////////////////////////////// -void EditorViewportWidget::CenterOnSelection() -{ - if (!GetIEditor()->GetSelection()->IsEmpty()) - { - // Get selection bounds & center - CSelectionGroup* sel = GetIEditor()->GetSelection(); - AABB selectionBounds = sel->GetBounds(); - CenterOnAABB(selectionBounds); - } -} - -void EditorViewportWidget::CenterOnAABB(const AABB& aabb) -{ - Vec3 selectionCenter = aabb.GetCenter(); - - // Minimum center size is 40cm - const float minSelectionRadius = 0.4f; - const float selectionSize = std::max(minSelectionRadius, aabb.GetRadius()); - - // Move camera 25% further back than required - const float centerScale = 1.25f; - - // Decompose original transform matrix - const Matrix34& originalTM = GetViewTM(); - AffineParts affineParts; - affineParts.SpectralDecompose(originalTM); - - // Forward vector is y component of rotation matrix - Matrix33 rotationMatrix(affineParts.rot); - const Vec3 viewDirection = rotationMatrix.GetColumn1().GetNormalized(); - - // Compute adjustment required by FOV != 90 degrees - const float fov = GetFOV(); - const float fovScale = (1.0f / tan(fov * 0.5f)); - - // Compute new transform matrix - const float distanceToTarget = selectionSize * fovScale * centerScale; - const Vec3 newPosition = selectionCenter - (viewDirection * distanceToTarget); - Matrix34 newTM = Matrix34(rotationMatrix, newPosition); - - // Set new orbit distance - m_orbitDistance = distanceToTarget; - m_orbitDistance = fabs(m_orbitDistance); - - SetViewTM(newTM); -} - -void EditorViewportWidget::CenterOnSliceInstance() -{ - AzToolsFramework::EntityIdList selectedEntityList; - AzToolsFramework::ToolsApplicationRequestBus::BroadcastResult(selectedEntityList, &AzToolsFramework::ToolsApplicationRequests::GetSelectedEntities); - - AZ::SliceComponent::SliceInstanceAddress sliceAddress; - AzToolsFramework::ToolsApplicationRequestBus::BroadcastResult(sliceAddress, - &AzToolsFramework::ToolsApplicationRequestBus::Events::FindCommonSliceInstanceAddress, selectedEntityList); - - if (!sliceAddress.IsValid()) - { - return; - } - - AZ::EntityId sliceRootEntityId; - AzToolsFramework::ToolsApplicationRequestBus::BroadcastResult(sliceRootEntityId, - &AzToolsFramework::ToolsApplicationRequestBus::Events::GetRootEntityIdOfSliceInstance, sliceAddress); - - if (!sliceRootEntityId.IsValid()) - { - return; - } - - AzToolsFramework::ToolsApplicationRequestBus::Broadcast( - &AzToolsFramework::ToolsApplicationRequestBus::Events::SetSelectedEntities, AzToolsFramework::EntityIdList{sliceRootEntityId}); - - const AZ::SliceComponent::InstantiatedContainer* instantiatedContainer = sliceAddress.GetInstance()->GetInstantiated(); - - AABB aabb(Vec3(std::numeric_limits::max()), Vec3(-std::numeric_limits::max())); - for (AZ::Entity* entity : instantiatedContainer->m_entities) - { - CEntityObject* entityObject = nullptr; - AzToolsFramework::ComponentEntityEditorRequestBus::EventResult(entityObject, entity->GetId(), - &AzToolsFramework::ComponentEntityEditorRequestBus::Events::GetSandboxObject); - AABB box; - entityObject->GetBoundBox(box); - aabb.Add(box.min); - aabb.Add(box.max); - } - CenterOnAABB(aabb); -} - -////////////////////////////////////////////////////////////////////////// -void EditorViewportWidget::SetFOV(float fov) -{ - if (m_pCameraFOVVariable) - { - m_pCameraFOVVariable->Set(fov); - } - else - { - m_camFOV = fov; - } - - if (m_viewPane) - { - m_viewPane->OnFOVChanged(fov); - } -} - -////////////////////////////////////////////////////////////////////////// -float EditorViewportWidget::GetFOV() const -{ - if (m_viewSourceType == ViewSourceType::SequenceCamera) - { - CBaseObject* cameraObject = GetCameraObject(); - - AZ::EntityId cameraEntityId; - AzToolsFramework::ComponentEntityObjectRequestBus::EventResult(cameraEntityId, cameraObject, &AzToolsFramework::ComponentEntityObjectRequestBus::Events::GetAssociatedEntityId); - if (cameraEntityId.IsValid()) - { - // component Camera - float fov = DEFAULT_FOV; - Camera::CameraRequestBus::EventResult(fov, cameraEntityId, &Camera::CameraComponentRequests::GetFov); - return AZ::DegToRad(fov); - } - } - - if (m_pCameraFOVVariable) - { - float fov; - m_pCameraFOVVariable->Get(fov); - return fov; - } - else if (m_viewEntityId.IsValid()) - { - float fov = AZ::RadToDeg(m_camFOV); - Camera::CameraRequestBus::EventResult(fov, m_viewEntityId, &Camera::CameraComponentRequests::GetFov); - return AZ::DegToRad(fov); - } - - return m_camFOV; -} - -////////////////////////////////////////////////////////////////////////// -bool EditorViewportWidget::CreateRenderContext() -{ - return true; -} - -////////////////////////////////////////////////////////////////////////// -void EditorViewportWidget::DestroyRenderContext() -{ -} - -////////////////////////////////////////////////////////////////////////// -void EditorViewportWidget::SetDefaultCamera() -{ - if (IsDefaultCamera()) - { - return; - } - ResetToViewSourceType(ViewSourceType::None); - gEnv->p3DEngine->GetPostEffectBaseGroup()->SetParam("Dof_Active", 0.0f); - GetViewManager()->SetCameraObjectId(m_cameraObjectId); - SetName(m_defaultViewName); - SetViewTM(m_defaultViewTM); - PostCameraSet(); -} - -////////////////////////////////////////////////////////////////////////// -bool EditorViewportWidget::IsDefaultCamera() const -{ - return m_viewSourceType == ViewSourceType::None; -} - -////////////////////////////////////////////////////////////////////////// -void EditorViewportWidget::SetSequenceCamera() -{ - if (m_viewSourceType == ViewSourceType::SequenceCamera) - { - // Reset if we were checked before - SetDefaultCamera(); - } - else - { - ResetToViewSourceType(ViewSourceType::SequenceCamera); - - SetName(tr("Sequence Camera")); - SetViewTM(GetViewTM()); - - GetViewManager()->SetCameraObjectId(m_cameraObjectId); - PostCameraSet(); - - // ForceAnimation() so Track View will set the Camera params - // if a camera is animated in the sequences. - if (GetIEditor() && GetIEditor()->GetAnimation()) - { - GetIEditor()->GetAnimation()->ForceAnimation(); - } - } -} - -////////////////////////////////////////////////////////////////////////// -void EditorViewportWidget::SetComponentCamera(const AZ::EntityId& entityId) -{ - ResetToViewSourceType(ViewSourceType::CameraComponent); - SetViewEntity(entityId); -} - -////////////////////////////////////////////////////////////////////////// -void EditorViewportWidget::SetEntityAsCamera(const AZ::EntityId& entityId, bool lockCameraMovement) -{ - ResetToViewSourceType(ViewSourceType::AZ_Entity); - SetViewEntity(entityId, lockCameraMovement); -} - -void EditorViewportWidget::SetFirstComponentCamera() -{ - AZ::EBusAggregateResults results; - Camera::CameraBus::BroadcastResult(results, &Camera::CameraRequests::GetCameras); - AZStd::sort_heap(results.values.begin(), results.values.end()); - AZ::EntityId entityId; - if (results.values.size() > 0) - { - entityId = results.values[0]; - } - SetComponentCamera(entityId); -} - -////////////////////////////////////////////////////////////////////////// -void EditorViewportWidget::SetSelectedCamera() -{ - AZ::EBusAggregateResults cameraList; - Camera::CameraBus::BroadcastResult(cameraList, &Camera::CameraRequests::GetCameras); - if (cameraList.values.size() > 0) - { - AzToolsFramework::EntityIdList selectedEntityList; - AzToolsFramework::ToolsApplicationRequests::Bus::BroadcastResult(selectedEntityList, &AzToolsFramework::ToolsApplicationRequests::GetSelectedEntities); - for (const AZ::EntityId& entityId : selectedEntityList) - { - if (AZStd::find(cameraList.values.begin(), cameraList.values.end(), entityId) != cameraList.values.end()) - { - SetComponentCamera(entityId); - } - } - } -} - -////////////////////////////////////////////////////////////////////////// -bool EditorViewportWidget::IsSelectedCamera() const -{ - CBaseObject* pCameraObject = GetCameraObject(); - if (pCameraObject && pCameraObject == GetIEditor()->GetSelectedObject()) - { - return true; - } - - AzToolsFramework::EntityIdList selectedEntityList; - AzToolsFramework::ToolsApplicationRequests::Bus::BroadcastResult( - selectedEntityList, &AzToolsFramework::ToolsApplicationRequests::GetSelectedEntities); - - if ((m_viewSourceType == ViewSourceType::CameraComponent || m_viewSourceType == ViewSourceType::AZ_Entity) - && !selectedEntityList.empty() - && AZStd::find(selectedEntityList.begin(), selectedEntityList.end(), m_viewEntityId) != selectedEntityList.end()) - { - return true; - } - - return false; -} - -////////////////////////////////////////////////////////////////////////// -void EditorViewportWidget::CycleCamera() -{ - // None -> Sequence -> LegacyCamera -> ... LegacyCamera -> CameraComponent -> ... CameraComponent -> None - // AZ_Entity has been intentionally left out of the cycle for now. - switch (m_viewSourceType) - { - case EditorViewportWidget::ViewSourceType::None: - { - SetFirstComponentCamera(); - break; - } - case EditorViewportWidget::ViewSourceType::SequenceCamera: - { - AZ_Error("EditorViewportWidget", false, "Legacy cameras no longer exist, unable to set sequence camera."); - break; - } - case EditorViewportWidget::ViewSourceType::LegacyCamera: - { - AZ_Warning("EditorViewportWidget", false, "Legacy cameras no longer exist, using first found component camera instead."); - SetFirstComponentCamera(); - break; - } - case EditorViewportWidget::ViewSourceType::CameraComponent: - { - AZ::EBusAggregateResults results; - Camera::CameraBus::BroadcastResult(results, &Camera::CameraRequests::GetCameras); - AZStd::sort_heap(results.values.begin(), results.values.end()); - auto&& currentCameraIterator = AZStd::find(results.values.begin(), results.values.end(), m_viewEntityId); - if (currentCameraIterator != results.values.end()) - { - ++currentCameraIterator; - if (currentCameraIterator != results.values.end()) - { - SetComponentCamera(*currentCameraIterator); - break; - } - } - SetDefaultCamera(); - break; - } - case EditorViewportWidget::ViewSourceType::AZ_Entity: - { - // we may decide to have this iterate over just selected entities - SetDefaultCamera(); - break; - } - default: - { - SetDefaultCamera(); - break; - } - } -} - -void EditorViewportWidget::SetViewFromEntityPerspective(const AZ::EntityId& entityId) -{ - SetViewAndMovementLockFromEntityPerspective(entityId, false); -} - -void EditorViewportWidget::SetViewAndMovementLockFromEntityPerspective(const AZ::EntityId& entityId, bool lockCameraMovement) -{ - if (!m_ignoreSetViewFromEntityPerspective) - { - SetEntityAsCamera(entityId, lockCameraMovement); - } -} - -bool EditorViewportWidget::GetActiveCameraPosition(AZ::Vector3& cameraPos) -{ - if (m_pPrimaryViewport == this) - { - if (GetIEditor()->IsInGameMode()) - { - const Vec3 camPos = m_engine->GetRenderingCamera().GetPosition(); - cameraPos = LYVec3ToAZVec3(camPos); - } - else - { - // Use viewTM, which is synced with the camera and guaranteed to be up-to-date - cameraPos = LYVec3ToAZVec3(m_viewTM.GetTranslation()); - } - - return true; - } - - return false; -} - -void EditorViewportWidget::OnStartPlayInEditor() -{ - if (m_viewEntityId.IsValid()) - { - m_viewEntityIdCachedForEditMode = m_viewEntityId; - AZ::EntityId runtimeEntityId; - AzToolsFramework::EditorEntityContextRequestBus::Broadcast( - &AzToolsFramework::EditorEntityContextRequestBus::Events::MapEditorIdToRuntimeId, - m_viewEntityId, runtimeEntityId); - - m_viewEntityId = runtimeEntityId; - } -} - -void EditorViewportWidget::OnStopPlayInEditor() -{ - if (m_viewEntityIdCachedForEditMode.IsValid()) - { - m_viewEntityId = m_viewEntityIdCachedForEditMode; - m_viewEntityIdCachedForEditMode.SetInvalid(); - } -} - -////////////////////////////////////////////////////////////////////////// -void EditorViewportWidget::OnCameraFOVVariableChanged([[maybe_unused]] IVariable* var) -{ - if (m_viewPane) - { - m_viewPane->OnFOVChanged(GetFOV()); - } -} - -////////////////////////////////////////////////////////////////////////// -void EditorViewportWidget::HideCursor() -{ - if (m_bCursorHidden || !gSettings.viewports.bHideMouseCursorWhenCaptured) - { - return; - } - - qApp->setOverrideCursor(Qt::BlankCursor); -#if AZ_TRAIT_OS_PLATFORM_APPLE - StartFixedCursorMode(this); -#endif - m_bCursorHidden = true; -} - -////////////////////////////////////////////////////////////////////////// -void EditorViewportWidget::ShowCursor() -{ - if (!m_bCursorHidden || !gSettings.viewports.bHideMouseCursorWhenCaptured) - { - return; - } - -#if AZ_TRAIT_OS_PLATFORM_APPLE - StopFixedCursorMode(); -#endif - qApp->restoreOverrideCursor(); - m_bCursorHidden = false; -} - -bool EditorViewportWidget::IsKeyDown(Qt::Key key) const -{ - return m_keyDown.contains(key); -} - -////////////////////////////////////////////////////////////////////////// -void EditorViewportWidget::PushDisableRendering() -{ - assert(m_disableRenderingCount >= 0); - ++m_disableRenderingCount; -} - -////////////////////////////////////////////////////////////////////////// -void EditorViewportWidget::PopDisableRendering() -{ - assert(m_disableRenderingCount >= 1); - --m_disableRenderingCount; -} - -////////////////////////////////////////////////////////////////////////// -bool EditorViewportWidget::IsRenderingDisabled() const -{ - return m_disableRenderingCount > 0; -} - -////////////////////////////////////////////////////////////////////////// -QPoint EditorViewportWidget::WidgetToViewport(const QPoint &point) const -{ - return point * WidgetToViewportFactor(); -} - -QPoint EditorViewportWidget::ViewportToWidget(const QPoint &point) const -{ - return point / WidgetToViewportFactor(); -} - -////////////////////////////////////////////////////////////////////////// -QSize EditorViewportWidget::WidgetToViewport(const QSize &size) const -{ - return size * WidgetToViewportFactor(); -} - -////////////////////////////////////////////////////////////////////////// -void EditorViewportWidget::BeginUndoTransaction() -{ - PushDisableRendering(); -} - -////////////////////////////////////////////////////////////////////////// -void EditorViewportWidget::EndUndoTransaction() -{ - PopDisableRendering(); - Update(); -} - -void EditorViewportWidget::UpdateCurrentMousePos(const QPoint& newPosition) -{ - m_prevMousePos = m_mousePos; - m_mousePos = newPosition; -} - -void* EditorViewportWidget::GetSystemCursorConstraintWindow() const -{ - AzFramework::SystemCursorState systemCursorState = AzFramework::SystemCursorState::Unknown; - - AzFramework::InputSystemCursorRequestBus::EventResult( - systemCursorState, AzFramework::InputDeviceMouse::Id, &AzFramework::InputSystemCursorRequests::GetSystemCursorState); - - const bool systemCursorConstrained = - (systemCursorState == AzFramework::SystemCursorState::ConstrainedAndHidden || - systemCursorState == AzFramework::SystemCursorState::ConstrainedAndVisible); - - return systemCursorConstrained ? renderOverlayHWND() : nullptr; -} - -void EditorViewportWidget::BuildDragDropContext(AzQtComponents::ViewportDragContext& context, const QPoint& pt) -{ - const auto scaledPoint = WidgetToViewport(pt); - QtViewport::BuildDragDropContext(context, scaledPoint); -} - -void EditorViewportWidget::RestoreViewportAfterGameMode() -{ - Matrix34 preGameModeViewTM = m_preGameModeViewTM; - - QString text = QString("You are exiting Game Mode. Would you like to restore the camera in the viewport to where it was before you entered Game Mode?

This option can always be changed in the General Preferences tab of the Editor Settings, by toggling the \"%1\" option.

").arg(EditorPreferencesGeneralRestoreViewportCameraSettingName); - QString restoreOnExitGameModePopupDisabledRegKey("Editor/AutoHide/ViewportCameraRestoreOnExitGameMode"); - - // Read the popup disabled registry value - QSettings settings; - QVariant restoreOnExitGameModePopupDisabledRegValue = settings.value(restoreOnExitGameModePopupDisabledRegKey); - - // Has the user previously disabled being asked about restoring the camera on exiting game mode? - if (restoreOnExitGameModePopupDisabledRegValue.isNull()) - { - // No, ask them now - QMessageBox messageBox(QMessageBox::Question, "Lumberyard", text, QMessageBox::StandardButtons(QMessageBox::No | QMessageBox::Yes), this); - messageBox.setDefaultButton(QMessageBox::Yes); - - QCheckBox* checkBox = new QCheckBox(QStringLiteral("Do not show this message again")); - messageBox.setCheckBox(checkBox); - - // Unconstrain the system cursor and make it visible before we show the dialog box, otherwise the user can't see the cursor. - AzFramework::InputSystemCursorRequestBus::Event(AzFramework::InputDeviceMouse::Id, - &AzFramework::InputSystemCursorRequests::SetSystemCursorState, - AzFramework::SystemCursorState::UnconstrainedAndVisible); - - int response = messageBox.exec(); - - if (checkBox->isChecked()) - { - settings.setValue(restoreOnExitGameModePopupDisabledRegKey, response); - } - - // Update the value only if the popup hasn't previously been disabled and the value has changed - bool newSetting = (response == QMessageBox::Yes); - if (newSetting != GetIEditor()->GetEditorSettings()->restoreViewportCamera) - { - GetIEditor()->GetEditorSettings()->restoreViewportCamera = newSetting; - GetIEditor()->GetEditorSettings()->Save(); - } - } - - bool restoreViewportCamera = GetIEditor()->GetEditorSettings()->restoreViewportCamera; - if (restoreViewportCamera) - { - SetViewTM(preGameModeViewTM); - } - else - { - SetViewTM(m_gameTM); - } -} - -void EditorViewportWidget::UpdateScene() -{ - AZStd::vector scenes; - AzFramework::SceneSystemRequestBus::BroadcastResult(scenes, &AzFramework::SceneSystemRequests::GetAllScenes); - if (scenes.size() > 0) - { - AZ::RPI::SceneNotificationBus::Handler::BusDisconnect(); - auto scene = scenes[0]; - m_renderViewport->SetScene(scene); - AZ::RPI::SceneNotificationBus::Handler::BusConnect(m_renderViewport->GetViewportContext()->GetRenderScene()->GetId()); - } -} - -void EditorViewportWidget::UpdateCameraFromViewportContext() -{ - // If we're not updating because the cry camera position changed, we should make sure our position gets copied back to the Cry Camera - if (m_updatingCameraPosition) - { - return; - } - - auto cameraState = m_renderViewport->GetCameraState(); - AZ::Matrix3x4 matrix; - matrix.SetBasisAndTranslation(cameraState.m_side, cameraState.m_forward, cameraState.m_up, cameraState.m_position); - auto m = AZMatrix3x4ToLYMatrix3x4(matrix); - SetViewTM(m); - SetFOV(cameraState.m_fovOrZoom); - m_Camera.SetZRange(cameraState.m_nearClip, cameraState.m_farClip); -} - -void EditorViewportWidget::SetAsActiveViewport() -{ - auto viewportContextManager = AZ::Interface::Get(); - - const AZ::Name defaultContextName = viewportContextManager->GetDefaultViewportContextName(); - - // If another viewport was active before, restore its name to its per-ID one. - if (m_pPrimaryViewport && m_pPrimaryViewport != this && m_pPrimaryViewport->m_renderViewport) - { - auto viewportContext = m_pPrimaryViewport->m_renderViewport->GetViewportContext(); - if (viewportContext) - { - // Remove the old viewport's camera from the stack, as it's no longer the owning viewport - viewportContextManager->PopView(defaultContextName, viewportContext->GetDefaultView()); - viewportContextManager->RenameViewportContext(viewportContext, m_pPrimaryViewport->m_defaultViewportContextName); - } - } - - m_pPrimaryViewport = this; - if (m_renderViewport) - { - auto viewportContext = m_renderViewport->GetViewportContext(); - if (viewportContext) - { - // Push our camera onto the default viewport's view stack to preserve camera state continuity - // Other views can still be pushed on top of our view for e.g. game mode - viewportContextManager->PushView(defaultContextName, viewportContext->GetDefaultView()); - viewportContextManager->RenameViewportContext(viewportContext, defaultContextName); - } - } -} - -#include From e67b8c91db4eed7f68dbdd34893c70039cf6c640 Mon Sep 17 00:00:00 2001 From: spham Date: Thu, 22 Apr 2021 17:04:35 -0700 Subject: [PATCH 10/32] Enable Vulkan RHI to build on Linux - Enable to use xcb platform for glad - Add missing precompiled header for linux on Vulkan RHI - Create implementation of BuildNativeSurface using XCB related structures and functions --- .../Platform/Linux/glad_vulkan_linux.cmake | 14 ++++++++ .../Atom/RHI.Loader/Glad/Vulkan_Platform.h | 3 ++ .../Linux/Atom_RHI_Vulkan_precompiled_Linux.h | 21 +++++++++++ .../Atom_RHI_Vulkan_precompiled_Platform.h | 1 + .../Source/Platform/Linux/PAL_linux.cmake | 2 +- .../Platform/Linux/RHI/WSISurface_Linux.cpp | 36 +++++++++++++++++++ .../Linux/platform_private_linux_files.cmake | 2 +- 7 files changed, 77 insertions(+), 2 deletions(-) create mode 100644 Gems/Atom/RHI/Vulkan/3rdParty/Platform/Linux/glad_vulkan_linux.cmake create mode 100644 Gems/Atom/RHI/Vulkan/Code/Include/Platform/Linux/Atom_RHI_Vulkan_precompiled_Linux.h create mode 100644 Gems/Atom/RHI/Vulkan/Code/Source/Platform/Linux/RHI/WSISurface_Linux.cpp diff --git a/Gems/Atom/RHI/Vulkan/3rdParty/Platform/Linux/glad_vulkan_linux.cmake b/Gems/Atom/RHI/Vulkan/3rdParty/Platform/Linux/glad_vulkan_linux.cmake new file mode 100644 index 0000000000..82985b3188 --- /dev/null +++ b/Gems/Atom/RHI/Vulkan/3rdParty/Platform/Linux/glad_vulkan_linux.cmake @@ -0,0 +1,14 @@ +# +# 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(GLAD_VULKAN_COMPILE_DEFINITIONS + VK_USE_PLATFORM_XCB_KHR +) diff --git a/Gems/Atom/RHI/Vulkan/Code/Include/Platform/Linux/Atom/RHI.Loader/Glad/Vulkan_Platform.h b/Gems/Atom/RHI/Vulkan/Code/Include/Platform/Linux/Atom/RHI.Loader/Glad/Vulkan_Platform.h index 7d9a58a823..a987061daf 100644 --- a/Gems/Atom/RHI/Vulkan/Code/Include/Platform/Linux/Atom/RHI.Loader/Glad/Vulkan_Platform.h +++ b/Gems/Atom/RHI/Vulkan/Code/Include/Platform/Linux/Atom/RHI.Loader/Glad/Vulkan_Platform.h @@ -10,3 +10,6 @@ * */ #pragma once + +#include +#include diff --git a/Gems/Atom/RHI/Vulkan/Code/Include/Platform/Linux/Atom_RHI_Vulkan_precompiled_Linux.h b/Gems/Atom/RHI/Vulkan/Code/Include/Platform/Linux/Atom_RHI_Vulkan_precompiled_Linux.h new file mode 100644 index 0000000000..d41a8bb0c7 --- /dev/null +++ b/Gems/Atom/RHI/Vulkan/Code/Include/Platform/Linux/Atom_RHI_Vulkan_precompiled_Linux.h @@ -0,0 +1,21 @@ +/* +* 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 + +#define AZ_VULKAN_SURFACE_EXTENSION_NAME VK_KHR_XCB_SURFACE_EXTENSION_NAME diff --git a/Gems/Atom/RHI/Vulkan/Code/Include/Platform/Linux/Atom_RHI_Vulkan_precompiled_Platform.h b/Gems/Atom/RHI/Vulkan/Code/Include/Platform/Linux/Atom_RHI_Vulkan_precompiled_Platform.h index f42f05ee79..16ff9fdd88 100644 --- a/Gems/Atom/RHI/Vulkan/Code/Include/Platform/Linux/Atom_RHI_Vulkan_precompiled_Platform.h +++ b/Gems/Atom/RHI/Vulkan/Code/Include/Platform/Linux/Atom_RHI_Vulkan_precompiled_Platform.h @@ -11,4 +11,5 @@ */ #pragma once +#include diff --git a/Gems/Atom/RHI/Vulkan/Code/Source/Platform/Linux/PAL_linux.cmake b/Gems/Atom/RHI/Vulkan/Code/Source/Platform/Linux/PAL_linux.cmake index 57bf0561d9..d6b3f6c001 100644 --- a/Gems/Atom/RHI/Vulkan/Code/Source/Platform/Linux/PAL_linux.cmake +++ b/Gems/Atom/RHI/Vulkan/Code/Source/Platform/Linux/PAL_linux.cmake @@ -9,4 +9,4 @@ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # -set(PAL_TRAIT_ATOM_RHI_VULKAN_SUPPORTED FALSE) \ No newline at end of file +set(PAL_TRAIT_ATOM_RHI_VULKAN_SUPPORTED TRUE) \ No newline at end of file diff --git a/Gems/Atom/RHI/Vulkan/Code/Source/Platform/Linux/RHI/WSISurface_Linux.cpp b/Gems/Atom/RHI/Vulkan/Code/Source/Platform/Linux/RHI/WSISurface_Linux.cpp new file mode 100644 index 0000000000..8e2521325e --- /dev/null +++ b/Gems/Atom/RHI/Vulkan/Code/Source/Platform/Linux/RHI/WSISurface_Linux.cpp @@ -0,0 +1,36 @@ +/* +* 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 "Atom_RHI_Vulkan_precompiled.h" +#include +#include +#include + +namespace AZ +{ + namespace Vulkan + { + RHI::ResultCode WSISurface::BuildNativeSurface() + { + Instance& instance = Instance::GetInstance(); + + VkXcbSurfaceCreateInfoKHR createInfo{}; + createInfo.sType = VK_STRUCTURE_TYPE_XCB_SURFACE_CREATE_INFO_KHR; + createInfo.pNext = nullptr; + createInfo.flags = 0; + createInfo.window = static_cast(m_descriptor.m_windowHandle.GetIndex()); + const VkResult result = vkCreateXcbSurfaceKHR(instance.GetNativeInstance(), &createInfo, nullptr, &m_nativeSurface); + AssertSuccess(result); + + return ConvertResult(result); + } + } +} \ No newline at end of file diff --git a/Gems/Atom/RHI/Vulkan/Code/Source/Platform/Linux/platform_private_linux_files.cmake b/Gems/Atom/RHI/Vulkan/Code/Source/Platform/Linux/platform_private_linux_files.cmake index 04a399e16b..02902fd17d 100644 --- a/Gems/Atom/RHI/Vulkan/Code/Source/Platform/Linux/platform_private_linux_files.cmake +++ b/Gems/Atom/RHI/Vulkan/Code/Source/Platform/Linux/platform_private_linux_files.cmake @@ -10,7 +10,7 @@ # set(FILES - ../Common/Unimplemented/ModuleStub_Unimplemented.cpp + RHI/WSISurface_Linux.cpp Vulkan_Traits_Linux.h Vulkan_Traits_Platform.h ) From 7bd8827476b347c0fa5b62fbeabe64d61891c032 Mon Sep 17 00:00:00 2001 From: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com> Date: Thu, 22 Apr 2021 19:23:47 -0500 Subject: [PATCH 11/32] Adding newline to the end of PAL_linux.cmake --- Gems/Atom/RHI/Vulkan/Code/Source/Platform/Linux/PAL_linux.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gems/Atom/RHI/Vulkan/Code/Source/Platform/Linux/PAL_linux.cmake b/Gems/Atom/RHI/Vulkan/Code/Source/Platform/Linux/PAL_linux.cmake index d6b3f6c001..9f03acf069 100644 --- a/Gems/Atom/RHI/Vulkan/Code/Source/Platform/Linux/PAL_linux.cmake +++ b/Gems/Atom/RHI/Vulkan/Code/Source/Platform/Linux/PAL_linux.cmake @@ -9,4 +9,4 @@ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # -set(PAL_TRAIT_ATOM_RHI_VULKAN_SUPPORTED TRUE) \ No newline at end of file +set(PAL_TRAIT_ATOM_RHI_VULKAN_SUPPORTED TRUE) From b492f59512560c64b519f26ba054394414b1b604 Mon Sep 17 00:00:00 2001 From: lumberyard-employee-dm <56135373+lumberyard-employee-dm@users.noreply.github.com> Date: Thu, 22 Apr 2021 19:24:26 -0500 Subject: [PATCH 12/32] Adding newline to the end of WSISurface_Linux.cpp --- .../Vulkan/Code/Source/Platform/Linux/RHI/WSISurface_Linux.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gems/Atom/RHI/Vulkan/Code/Source/Platform/Linux/RHI/WSISurface_Linux.cpp b/Gems/Atom/RHI/Vulkan/Code/Source/Platform/Linux/RHI/WSISurface_Linux.cpp index 8e2521325e..f6cbfa813b 100644 --- a/Gems/Atom/RHI/Vulkan/Code/Source/Platform/Linux/RHI/WSISurface_Linux.cpp +++ b/Gems/Atom/RHI/Vulkan/Code/Source/Platform/Linux/RHI/WSISurface_Linux.cpp @@ -33,4 +33,4 @@ namespace AZ return ConvertResult(result); } } -} \ No newline at end of file +} From a9913cc079ac22e97ce50c3ffa512211420c3b6b Mon Sep 17 00:00:00 2001 From: jromnoa Date: Thu, 22 Apr 2021 17:34:18 -0700 Subject: [PATCH 13/32] remove shadowtest level, swap test to components test instead --- .../hydra_AllLevels_OpenClose.py | 103 ----- ...ydra_AtomEditorComponents_AddedToEntity.py | 297 +++++++++++++++ .../atom_renderer/test_Atom_MainSuite.py | 181 ++++++++- .../ShadowTest/LevelData/Environment.xml | 14 - .../ShadowTest/LevelData/Heightmap.dat | 3 - .../ShadowTest/LevelData/TerrainTexture.xml | 7 - .../ShadowTest/LevelData/TimeOfDay.xml | 356 ------------------ .../ShadowTest/LevelData/VegetationMap.dat | 3 - .../AtomLevels/ShadowTest/ShadowTest.ly | 3 - .../AtomLevels/ShadowTest/TerrainTexture.pak | 3 - .../Levels/AtomLevels/ShadowTest/filelist.xml | 6 - .../Levels/AtomLevels/ShadowTest/level.pak | 3 - .../Levels/AtomLevels/ShadowTest/tags.txt | 12 - .../AtomLevels/ShadowTest/terrain/cover.ctc | 3 - 14 files changed, 459 insertions(+), 535 deletions(-) delete mode 100644 AutomatedTesting/Gem/PythonTests/atom_renderer/atom_hydra_scripts/hydra_AllLevels_OpenClose.py create mode 100644 AutomatedTesting/Gem/PythonTests/atom_renderer/atom_hydra_scripts/hydra_AtomEditorComponents_AddedToEntity.py delete mode 100644 AutomatedTesting/Levels/AtomLevels/ShadowTest/LevelData/Environment.xml delete mode 100644 AutomatedTesting/Levels/AtomLevels/ShadowTest/LevelData/Heightmap.dat delete mode 100644 AutomatedTesting/Levels/AtomLevels/ShadowTest/LevelData/TerrainTexture.xml delete mode 100644 AutomatedTesting/Levels/AtomLevels/ShadowTest/LevelData/TimeOfDay.xml delete mode 100644 AutomatedTesting/Levels/AtomLevels/ShadowTest/LevelData/VegetationMap.dat delete mode 100644 AutomatedTesting/Levels/AtomLevels/ShadowTest/ShadowTest.ly delete mode 100644 AutomatedTesting/Levels/AtomLevels/ShadowTest/TerrainTexture.pak delete mode 100644 AutomatedTesting/Levels/AtomLevels/ShadowTest/filelist.xml delete mode 100644 AutomatedTesting/Levels/AtomLevels/ShadowTest/level.pak delete mode 100644 AutomatedTesting/Levels/AtomLevels/ShadowTest/tags.txt delete mode 100644 AutomatedTesting/Levels/AtomLevels/ShadowTest/terrain/cover.ctc diff --git a/AutomatedTesting/Gem/PythonTests/atom_renderer/atom_hydra_scripts/hydra_AllLevels_OpenClose.py b/AutomatedTesting/Gem/PythonTests/atom_renderer/atom_hydra_scripts/hydra_AllLevels_OpenClose.py deleted file mode 100644 index 81075657f4..0000000000 --- a/AutomatedTesting/Gem/PythonTests/atom_renderer/atom_hydra_scripts/hydra_AllLevels_OpenClose.py +++ /dev/null @@ -1,103 +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. - -This hydra/EPB script opens and closes every possible Atom level. -""" -import os -import sys - -import azlmbr.legacy.general as general -import azlmbr.paths - -sys.path.append(os.path.join(azlmbr.paths.devroot, 'AutomatedTesting', 'Gem', 'PythonTests')) - -from automatedtesting_shared.editor_test_helper import EditorTestHelper - -levels = os.listdir(os.path.join(azlmbr.paths.devroot, "AutomatedTesting", "Levels", "AtomLevels")) -helper = EditorTestHelper(log_prefix="HydraAtomLevels") - - -def run(): - """ - 1. Open & close all valid test levels in the Editor. - 2. Every time a level is opened, verify it loads correctly and the Editor remains stable. - """ - - # Create a new level. - level_name = "tmp_level" # Defined in test_Atom_MainSuite.py - heightmap_resolution = 512 - heightmap_meters_per_pixel = 1 - terrain_texture_resolution = 412 - use_terrain = False - - # Return codes are ECreateLevelResult defined in CryEdit.h - return_code = general.create_level_no_prompt( - f"AtomLevels/{level_name}", - heightmap_resolution, - heightmap_meters_per_pixel, - terrain_texture_resolution, - use_terrain - ) - if return_code == 1: - general.log(f"AtomLevels/{level_name} level already exists") - elif return_code == 2: - general.log("Failed to create directory") - elif return_code == 3: - general.log("Directory length is too long") - elif return_code != 0: - general.log("Unknown error, failed to create level") - else: - general.log(f"AtomLevels/{level_name} level created successfully") - after_level_load() - - # Open all valid AtomLevels. - failed_to_open = [] - levels.append(level_name) - for level in levels: - if general.is_idle_enabled() and (general.get_current_level_name() == level): - general.log(f"Level {level} already open.") - else: - general.log(f"Opening level {level}") - general.open_level_no_prompt(f"AtomLevels/{level}") - helper.wait_for_condition(function=lambda: general.get_current_level_name() == level, - timeout_in_seconds=4.0) - result = (general.get_current_level_name() == level) and after_level_load() - if result: - general.log(f"Successfully opened {level}") - else: - general.log(f"{level} failed to open") - failed_to_open.append(level) - - if failed_to_open: - general.log(f"The following levels failed to open: {failed_to_open}") - - -def after_level_load(): - """Function to call after creating/opening a level to ensure it loads.""" - # Give everything a second to initialize. - general.idle_enable(True) - general.update_viewport() - general.idle_wait(0.5) # half a second is more than enough for updating the viewport. - - # Close out problematic windows, FPS meters, and anti-aliasing. - if general.is_helpers_shown(): # Turn off the helper gizmos if visible - general.toggle_helpers() - if general.is_pane_visible("Error Report"): # Close Error Report windows that block focus. - general.close_pane("Error Report") - if general.is_pane_visible("Error Log"): # Close Error Log windows that block focus. - general.close_pane("Error Log") - general.run_console("r_displayInfo=0") - general.run_console("r_antialiasingmode=0") - - return True - - -if __name__ == "__main__": - run() diff --git a/AutomatedTesting/Gem/PythonTests/atom_renderer/atom_hydra_scripts/hydra_AtomEditorComponents_AddedToEntity.py b/AutomatedTesting/Gem/PythonTests/atom_renderer/atom_hydra_scripts/hydra_AtomEditorComponents_AddedToEntity.py new file mode 100644 index 0000000000..848deeb522 --- /dev/null +++ b/AutomatedTesting/Gem/PythonTests/atom_renderer/atom_hydra_scripts/hydra_AtomEditorComponents_AddedToEntity.py @@ -0,0 +1,297 @@ +""" +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 module does a bulk test and update of many components at once. +# Each test case is listed below in the format: +# "Test Case ID: Test Case Title (URL)" + +# C32078130: Tone Mapper (https://testrail.agscollab.com/index.php?/cases/view/32078130) +# C32078129: Light (https://testrail.agscollab.com/index.php?/cases/view/32078129) +# C32078131: Radius Weight Modifier (https://testrail.agscollab.com/index.php?/cases/view/32078131) +# C32078127: PostFX Layer (https://testrail.agscollab.com/index.php?/cases/view/32078127) +# C32078126: Point Light (https://testrail.agscollab.com/index.php?/cases/view/32078126) +# C32078125: Physical Sky (https://testrail.agscollab.com/index.php?/cases/view/32078125) +# C32078115: Global Skylight (IBL) (https://testrail.agscollab.com/index.php?/cases/view/32078115) +# C32078121: Exposure Control (https://testrail.agscollab.com/index.php?/cases/view/32078121) +# C32078120: Directional Light (https://testrail.agscollab.com/index.php?/cases/view/32078120) +# C32078119: DepthOfField (https://testrail.agscollab.com/index.php?/cases/view/32078119) +# C32078118: Decal (https://testrail.agscollab.com/index.php?/cases/view/32078118) +# C32078117: Area Light (https://testrail.agscollab.com/index.php?/cases/view/32078117) + +import os +import sys + +import azlmbr.math as math +import azlmbr.bus as bus +import azlmbr.paths +import azlmbr.asset as asset +import azlmbr.entity as entity +import azlmbr.legacy.general as general +import azlmbr.editor as editor +import azlmbr.render as render + +sys.path.append(os.path.join(azlmbr.paths.devroot, "AutomatedTesting", "Gem", "PythonTests")) + +import automatedtesting_shared.hydra_editor_utils as hydra +from automatedtesting_shared.utils import TestHelper as helper + + +class TestAllComponentsBasicTests(object): + """ + Holds shared hydra test functions for this set of tests. + """ + + +def run(): + """ + Summary: + The below common tests are done for each of the components. + 1) Addition of component to the entity + 2) UNDO/REDO of addition of component + 3) Enter/Exit game mode + 4) Hide/Show entity containing component + 5) Deletion of component + 6) UNDO/REDO of deletion of component + Some additional tests for specific components include + 1) Assigning value to some properties of each component + 2) Verifying if the component is activated only when the required components are added + + Expected Result: + 1) Component can be added to an entity. + 2) The addition of component can be undone and redone. + 3) Game mode can be entered/exited without issue. + 4) Entity with component can be hidden/shown. + 5) Component can be deleted. + 6) The deletion of component can be undone and redone. + 7) Component is activated only when the required components are added + 8) Values can be assigned to the properties of the component + + :return: None + """ + + def after_level_load(): + """Function to call after creating/opening a level to ensure it loads.""" + # Give everything a second to initialize. + general.idle_enable(True) + general.idle_wait(1.0) + general.update_viewport() + general.idle_wait(0.5) # half a second is more than enough for updating the viewport. + + # Close out problematic windows, FPS meters, and anti-aliasing. + if general.is_helpers_shown(): # Turn off the helper gizmos if visible + general.toggle_helpers() + general.idle_wait(1.0) + if general.is_pane_visible("Error Report"): # Close Error Report windows that block focus. + general.close_pane("Error Report") + if general.is_pane_visible("Error Log"): # Close Error Log windows that block focus. + general.close_pane("Error Log") + general.idle_wait(1.0) + general.run_console("r_displayInfo=0") + general.run_console("r_antialiasingmode=0") + general.idle_wait(1.0) + + return True + + def create_entity_undo_redo_component_addition(component_name): + new_entity = hydra.Entity(f"{component_name}") + new_entity.create_entity(math.Vector3(512.0, 512.0, 34.0), [component_name]) + general.log(f"{component_name}_test: Component added to the entity: " + f"{hydra.has_components(new_entity.id, [component_name])}") + + # undo component addition + general.undo() + helper.wait_for_condition(lambda: not hydra.has_components(new_entity.id, [component_name]), 2.0) + general.log(f"{component_name}_test: Component removed after UNDO: " + f"{not hydra.has_components(new_entity.id, [component_name])}") + + # redo component addition + general.redo() + helper.wait_for_condition(lambda: hydra.has_components(new_entity.id, [component_name]), 2.0) + general.log(f"{component_name}_test: Component added after REDO: " + f"{hydra.has_components(new_entity.id, [component_name])}") + + return new_entity + + def verify_enter_exit_game_mode(component_name): + general.enter_game_mode() + helper.wait_for_condition(lambda: general.is_in_game_mode(), 1.0) + general.log(f"{component_name}_test: Entered game mode: {general.is_in_game_mode()}") + general.exit_game_mode() + helper.wait_for_condition(lambda: not general.is_in_game_mode(), 1.0) + general.log(f"{component_name}_test: Exit game mode: {not general.is_in_game_mode()}") + + def verify_hide_unhide_entity(component_name, entity_obj): + + def is_entity_hidden(entity_id): + return editor.EditorEntityInfoRequestBus(bus.Event, "IsHidden", entity_id) + + editor.EditorEntityAPIBus(bus.Event, "SetVisibilityState", entity_obj.id, False) + general.idle_wait_frames(1) + general.log(f"{component_name}_test: Entity is hidden: {is_entity_hidden(entity_obj.id)}") + editor.EditorEntityAPIBus(bus.Event, "SetVisibilityState", entity_obj.id, True) + general.idle_wait_frames(1) + general.log(f"{component_name}_test: Entity is shown: {not is_entity_hidden(entity_obj.id)}") + + def verify_deletion_undo_redo(component_name, entity_obj): + editor.ToolsApplicationRequestBus(bus.Broadcast, "DeleteEntityById", entity_obj.id) + helper.wait_for_condition(lambda: not hydra.find_entity_by_name(entity_obj.name), 1.0) + general.log(f"{component_name}_test: Entity deleted: {not hydra.find_entity_by_name(entity_obj.name)}") + + general.undo() + helper.wait_for_condition(lambda: hydra.find_entity_by_name(entity_obj.name) is not None, 1.0) + general.log(f"{component_name}_test: UNDO entity deletion works: " + f"{hydra.find_entity_by_name(entity_obj.name) is not None}") + + general.redo() + helper.wait_for_condition(lambda: not hydra.find_entity_by_name(entity_obj.name), 1.0) + general.log(f"{component_name}_test: REDO entity deletion works: " + f"{not hydra.find_entity_by_name(entity_obj.name)}") + + def verify_required_component_addition(entity_obj, components_to_add, component_name): + + def is_component_enabled(entity_componentid_pair): + return editor.EditorComponentAPIBus(bus.Broadcast, "IsComponentEnabled", entity_componentid_pair) + + general.log( + f"{component_name}_test: Entity disabled initially: " + f"{not is_component_enabled(entity_obj.components[0])}") + for component in components_to_add: + entity_obj.add_component(component) + helper.wait_for_condition(lambda: is_component_enabled(entity_obj.components[0]), 1.0) + general.log( + f"{component_name}_test: Entity enabled after adding " + f"required components: {is_component_enabled(entity_obj.components[0])}" + ) + + def verify_set_property(entity_obj, path, value): + entity_obj.get_set_test(0, path, value) + + # Wait for Editor idle loop before executing Python hydra scripts. + helper.init_idle() + + # Create a new level. + new_level_name = "tmp_level" # Specified in TestAllComponentsBasicTests.py + heightmap_resolution = 512 + heightmap_meters_per_pixel = 1 + terrain_texture_resolution = 412 + use_terrain = False + + # Return codes are ECreateLevelResult defined in CryEdit.h + return_code = general.create_level_no_prompt( + new_level_name, heightmap_resolution, heightmap_meters_per_pixel, terrain_texture_resolution, use_terrain) + if return_code == 1: + general.log(f"{new_level_name} level already exists") + elif return_code == 2: + general.log("Failed to create directory") + elif return_code == 3: + general.log("Directory length is too long") + elif return_code != 0: + general.log("Unknown error, failed to create level") + else: + general.log(f"{new_level_name} level created successfully") + after_level_load() + + # Delete all existing entities initially + search_filter = azlmbr.entity.SearchFilter() + all_entities = entity.SearchBus(azlmbr.bus.Broadcast, "SearchEntities", search_filter) + editor.ToolsApplicationRequestBus(bus.Broadcast, "DeleteEntities", all_entities) + + class ComponentTests: + """Test launcher for each component.""" + def __init__(self, component_name, *additional_tests): + self.component_name = component_name + self.additional_tests = additional_tests + self.run_component_tests() + + def run_component_tests(self): + # Run common and additional tests + entity_obj = create_entity_undo_redo_component_addition(self.component_name) + + # Enter/Exit game mode test + verify_enter_exit_game_mode(self.component_name) + + # Any additional tests are executed here + for test in self.additional_tests: + test(entity_obj) + + # Hide/Unhide entity test + verify_hide_unhide_entity(self.component_name, entity_obj) + + # Deletion/Undo/Redo test + verify_deletion_undo_redo(self.component_name, entity_obj) + + # Area Light Component + area_light = "Area Light" + ComponentTests( + area_light, lambda entity_obj: verify_required_component_addition( + entity_obj, ["Capsule Shape"], area_light)) + + # Decal Component + material_asset_path = os.path.join("Materials", "decal", "aiirship_nose_number_decal.material") + material_asset = asset.AssetCatalogRequestBus( + bus.Broadcast, "GetAssetIdByPath", material_asset_path, math.Uuid(), False) + ComponentTests( + "Decal", lambda entity_obj: verify_set_property( + entity_obj, "Settings|Decal Settings|Material", material_asset)) + + # DepthOfField Component + camera_entity = hydra.Entity("camera_entity") + camera_entity.create_entity(math.Vector3(512.0, 512.0, 34.0), ["Camera"]) + depth_of_field = "DepthOfField" + ComponentTests( + depth_of_field, + lambda entity_obj: verify_required_component_addition(entity_obj, ["PostFX Layer"], depth_of_field), + lambda entity_obj: verify_set_property( + entity_obj, "Controller|Configuration|Camera Entity", camera_entity.id)) + + # Directional Light Component + ComponentTests( + "Directional Light", + lambda entity_obj: verify_set_property( + entity_obj, "Controller|Configuration|Shadow|Camera", camera_entity.id)) + + # Exposure Control Component + ComponentTests( + "Exposure Control", lambda entity_obj: verify_required_component_addition( + entity_obj, ["PostFX Layer"], "Exposure Control")) + + # Global Skylight (IBL) Component + diffuse_image_path = os.path.join("LightingPresets", "greenwich_park_02_4k_iblskyboxcm.exr.streamingimage") + diffuse_image_asset = asset.AssetCatalogRequestBus( + bus.Broadcast, "GetAssetIdByPath", diffuse_image_path, math.Uuid(), False) + specular_image_path = os.path.join("LightingPresets", "greenwich_park_02_4k_iblskyboxcm.exr.streamingimage") + specular_image_asset = asset.AssetCatalogRequestBus( + bus.Broadcast, "GetAssetIdByPath", specular_image_path, math.Uuid(), False) + ComponentTests( + "Global Skylight (IBL)", + lambda entity_obj: verify_set_property( + entity_obj, "Controller|Configuration|Diffuse Image", diffuse_image_asset), + lambda entity_obj: verify_set_property( + entity_obj, "Controller|Configuration|Specular Image", specular_image_asset)) + + # Physical Sky Component + ComponentTests("Physical Sky") + + # Point Light Component + ComponentTests("Point Light") + + # PostFX Layer Component + ComponentTests("PostFX Layer") + + # Radius Weight Modifier Component + ComponentTests("Radius Weight Modifier") + + # Spot Light Component + ComponentTests("Light") + + +if __name__ == "__main__": + run() diff --git a/AutomatedTesting/Gem/PythonTests/atom_renderer/test_Atom_MainSuite.py b/AutomatedTesting/Gem/PythonTests/atom_renderer/test_Atom_MainSuite.py index fe23f108bd..eb207c2f90 100644 --- a/AutomatedTesting/Gem/PythonTests/atom_renderer/test_Atom_MainSuite.py +++ b/AutomatedTesting/Gem/PythonTests/atom_renderer/test_Atom_MainSuite.py @@ -11,11 +11,8 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. import logging import os -from pathlib import PurePath import pytest -# Bail on the test if ly_test_tools doesn't exist. -pytest.importorskip("ly_test_tools") import ly_test_tools.environment.file_system as file_system import automatedtesting_shared.hydra_test_utils as hydra @@ -24,17 +21,11 @@ logger = logging.getLogger(__name__) EDITOR_TIMEOUT = 60 TEST_DIRECTORY = os.path.join(os.path.dirname(__file__), "atom_hydra_scripts") -# Go to the project root directory -PROJECT_DIRECTORY = PurePath(TEST_DIRECTORY) -if len(PROJECT_DIRECTORY.parents) > 5: - for _ in range(5): - PROJECT_DIRECTORY = PROJECT_DIRECTORY.parent - @pytest.mark.parametrize("project", ["AutomatedTesting"]) @pytest.mark.parametrize("launcher_platform", ['windows_editor']) @pytest.mark.parametrize("level", ["tmp_level"]) -class TestAtomLevels(object): +class TestAtomEditorComponents(object): @pytest.fixture(autouse=True) def setup_teardown(self, request, workspace, project, level): # Cleanup our temp level @@ -48,16 +39,167 @@ class TestAtomLevels(object): request.addfinalizer(teardown) - @pytest.mark.test_case_id("C34428174") # Level: ShadowTest - def test_AllLevels_OpenClose(self, request, editor, level, workspace, project, launcher_platform): - + @pytest.mark.test_case_id("C32078130") # Tone Mapper + @pytest.mark.test_case_id("C32078129") # Light + @pytest.mark.test_case_id("C32078131") # Radius Weight Modifier + @pytest.mark.test_case_id("C32078127") # PostFX Layer + @pytest.mark.test_case_id("C32078126") # Point Light + @pytest.mark.test_case_id("C32078125") # Physical Sky + @pytest.mark.test_case_id("C32078115") # Global Skylight (IBL) + @pytest.mark.test_case_id("C32078121") # Exposure Control + @pytest.mark.test_case_id("C32078120") # Directional Light + @pytest.mark.test_case_id("C32078119") # DepthOfField + @pytest.mark.test_case_id("C32078118") # Decal + def test_AtomEditorComponents_AddedToEntity(self, request, editor, level, workspace, project, launcher_platform): cfg_args = [level] - test_levels = os.listdir(os.path.join(str(PROJECT_DIRECTORY), project, "Levels", "AtomLevels")) - test_levels.append(level) - expected_lines = [] - for level in test_levels: - expected_lines.append(f"Successfully opened {level}") + expected_lines = [ + # Area Light Component + "Area Light Entity successfully created", + "Area Light_test: Component added to the entity: True", + "Area Light_test: Component removed after UNDO: True", + "Area Light_test: Component added after REDO: True", + "Area Light_test: Entered game mode: True", + # Disabled, see ATOM-: "Area Light_test: Exit game mode: True", + "Area Light_test: Entity disabled initially: True", + "Area Light_test: Entity enabled after adding required components: True", + "Area Light_test: Entity is hidden: True", + "Area Light_test: Entity is shown: True", + "Area Light_test: Entity deleted: True", + "Area Light_test: UNDO entity deletion works: True", + "Area Light_test: REDO entity deletion works: True", + # Decal Component + "Decal Entity successfully created", + "Decal_test: Component added to the entity: True", + "Decal_test: Component removed after UNDO: True", + "Decal_test: Component added after REDO: True", + "Decal_test: Entered game mode: True", + "Decal_test: Exit game mode: True", + "Decal Settings|Decal Settings|Material: SUCCESS", + "Decal_test: Entity is hidden: True", + "Decal_test: Entity is shown: True", + "Decal_test: Entity deleted: True", + "Decal_test: UNDO entity deletion works: True", + "Decal_test: REDO entity deletion works: True", + # DepthOfField Component + "DepthOfField Entity successfully created", + "DepthOfField_test: Component added to the entity: True", + "DepthOfField_test: Component removed after UNDO: True", + "DepthOfField_test: Component added after REDO: True", + "DepthOfField_test: Entered game mode: True", + "DepthOfField_test: Exit game mode: True", + "DepthOfField_test: Entity disabled initially: True", + "DepthOfField_test: Entity enabled after adding required components: True", + "DepthOfField Controller|Configuration|Camera Entity: SUCCESS", + "DepthOfField_test: Entity is hidden: True", + "DepthOfField_test: Entity is shown: True", + "DepthOfField_test: Entity deleted: True", + "DepthOfField_test: UNDO entity deletion works: True", + "DepthOfField_test: REDO entity deletion works: True", + # Directional Light Component + "Directional Light Entity successfully created", + "Directional Light_test: Component added to the entity: True", + "Directional Light_test: Component removed after UNDO: True", + "Directional Light_test: Component added after REDO: True", + "Directional Light_test: Entered game mode: True", + "Directional Light_test: Exit game mode: True", + "Directional Light Controller|Configuration|Shadow|Camera: SUCCESS", + "Directional Light_test: Entity is hidden: True", + "Directional Light_test: Entity is shown: True", + "Directional Light_test: Entity deleted: True", + "Directional Light_test: UNDO entity deletion works: True", + "Directional Light_test: REDO entity deletion works: True", + # Exposure Control Component + "Exposure Control Entity successfully created", + "Exposure Control_test: Component added to the entity: True", + "Exposure Control_test: Component removed after UNDO: True", + "Exposure Control_test: Component added after REDO: True", + "Exposure Control_test: Entered game mode: True", + "Exposure Control_test: Exit game mode: True", + "Exposure Control_test: Entity disabled initially: True", + "Exposure Control_test: Entity enabled after adding required components: True", + "Exposure Control_test: Entity is hidden: True", + "Exposure Control_test: Entity is shown: True", + "Exposure Control_test: Entity deleted: True", + "Exposure Control_test: UNDO entity deletion works: True", + "Exposure Control_test: REDO entity deletion works: True", + # Global Skylight (IBL) Component + "Global Skylight (IBL) Entity successfully created", + "Global Skylight (IBL)_test: Component added to the entity: True", + "Global Skylight (IBL)_test: Component removed after UNDO: True", + "Global Skylight (IBL)_test: Component added after REDO: True", + "Global Skylight (IBL)_test: Entered game mode: True", + "Global Skylight (IBL)_test: Exit game mode: True", + "Global Skylight (IBL) Controller|Configuration|Diffuse Image: SUCCESS", + "Global Skylight (IBL) Controller|Configuration|Specular Image: SUCCESS", + "Global Skylight (IBL)_test: Entity is hidden: True", + "Global Skylight (IBL)_test: Entity is shown: True", + "Global Skylight (IBL)_test: Entity deleted: True", + "Global Skylight (IBL)_test: UNDO entity deletion works: True", + "Global Skylight (IBL)_test: REDO entity deletion works: True", + # Physical Sky Component + "Physical Sky Entity successfully created", + "Physical Sky component was added to entity", + "Entity has a Physical Sky component", + "Physical Sky_test: Component added to the entity: True", + "Physical Sky_test: Component removed after UNDO: True", + "Physical Sky_test: Component added after REDO: True", + "Physical Sky_test: Entered game mode: True", + "Physical Sky_test: Exit game mode: True", + "Physical Sky_test: Entity is hidden: True", + "Physical Sky_test: Entity is shown: True", + "Physical Sky_test: Entity deleted: True", + "Physical Sky_test: UNDO entity deletion works: True", + "Physical Sky_test: REDO entity deletion works: True", + # Point Light Component + "Point Light Entity successfully created", + "Point Light_test: Component added to the entity: True", + "Point Light_test: Component removed after UNDO: True", + "Point Light_test: Component added after REDO: True", + "Point Light_test: Entered game mode: True", + "Point Light_test: Exit game mode: True", + "Point Light_test: Entity is hidden: True", + "Point Light_test: Entity is shown: True", + "Point Light_test: Entity deleted: True", + "Point Light_test: UNDO entity deletion works: True", + "Point Light_test: REDO entity deletion works: True", + # PostFX Layer Component + "PostFX Layer Entity successfully created", + "PostFX Layer_test: Component added to the entity: True", + "PostFX Layer_test: Component removed after UNDO: True", + "PostFX Layer_test: Component added after REDO: True", + "PostFX Layer_test: Entered game mode: True", + "PostFX Layer_test: Exit game mode: True", + "PostFX Layer_test: Entity is hidden: True", + "PostFX Layer_test: Entity is shown: True", + "PostFX Layer_test: Entity deleted: True", + "PostFX Layer_test: UNDO entity deletion works: True", + "PostFX Layer_test: REDO entity deletion works: True", + # Radius Weight Modifier Component + "Radius Weight Modifier Entity successfully created", + "Radius Weight Modifier_test: Component added to the entity: True", + "Radius Weight Modifier_test: Component removed after UNDO: True", + "Radius Weight Modifier_test: Component added after REDO: True", + "Radius Weight Modifier_test: Entered game mode: True", + "Radius Weight Modifier_test: Exit game mode: True", + "Radius Weight Modifier_test: Entity is hidden: True", + "Radius Weight Modifier_test: Entity is shown: True", + "Radius Weight Modifier_test: Entity deleted: True", + "Radius Weight Modifier_test: UNDO entity deletion works: True", + "Radius Weight Modifier_test: REDO entity deletion works: True", + # Light Component + "Light Entity successfully created", + "Light_test: Component added to the entity: True", + "Light_test: Component removed after UNDO: True", + "Light_test: Component added after REDO: True", + "Light_test: Entered game mode: True", + "Light_test: Exit game mode: True", + "Light_test: Entity is hidden: True", + "Light_test: Entity is shown: True", + "Light_test: Entity deleted: True", + "Light_test: UNDO entity deletion works: True", + "Light_test: REDO entity deletion works: True", + ] unexpected_lines = [ "failed to open", @@ -68,10 +210,11 @@ class TestAtomLevels(object): request, TEST_DIRECTORY, editor, - "hydra_AllLevels_OpenClose.py", + "hydra_AtomEditorComponentsTest_AddedToEntity.py", timeout=EDITOR_TIMEOUT, expected_lines=expected_lines, unexpected_lines=unexpected_lines, halt_on_unexpected=True, + null_renderer=True, cfg_args=cfg_args, ) diff --git a/AutomatedTesting/Levels/AtomLevels/ShadowTest/LevelData/Environment.xml b/AutomatedTesting/Levels/AtomLevels/ShadowTest/LevelData/Environment.xml deleted file mode 100644 index c8398b6257..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/ShadowTest/LevelData/Environment.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - - - - diff --git a/AutomatedTesting/Levels/AtomLevels/ShadowTest/LevelData/Heightmap.dat b/AutomatedTesting/Levels/AtomLevels/ShadowTest/LevelData/Heightmap.dat deleted file mode 100644 index 2bb3c003f3..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/ShadowTest/LevelData/Heightmap.dat +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:a8859eeafde418ffe71a29da14f5419439f9cdd598517b0de51bf1049770de44 -size 8389396 diff --git a/AutomatedTesting/Levels/AtomLevels/ShadowTest/LevelData/TerrainTexture.xml b/AutomatedTesting/Levels/AtomLevels/ShadowTest/LevelData/TerrainTexture.xml deleted file mode 100644 index f43df05b22..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/ShadowTest/LevelData/TerrainTexture.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/AutomatedTesting/Levels/AtomLevels/ShadowTest/LevelData/TimeOfDay.xml b/AutomatedTesting/Levels/AtomLevels/ShadowTest/LevelData/TimeOfDay.xml deleted file mode 100644 index e4106ce437..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/ShadowTest/LevelData/TimeOfDay.xml +++ /dev/null @@ -1,356 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/AutomatedTesting/Levels/AtomLevels/ShadowTest/LevelData/VegetationMap.dat b/AutomatedTesting/Levels/AtomLevels/ShadowTest/LevelData/VegetationMap.dat deleted file mode 100644 index dce5631cd0..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/ShadowTest/LevelData/VegetationMap.dat +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:0e6a5435c928079b27796f6b202bbc2623e7e454244ddc099a3cadf33b7cb9e9 -size 63 diff --git a/AutomatedTesting/Levels/AtomLevels/ShadowTest/ShadowTest.ly b/AutomatedTesting/Levels/AtomLevels/ShadowTest/ShadowTest.ly deleted file mode 100644 index 34d7254d5e..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/ShadowTest/ShadowTest.ly +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:c19dc62e3349a435a6760fd532b28c9a86c626e800687bb585038adf48a16397 -size 9146 diff --git a/AutomatedTesting/Levels/AtomLevels/ShadowTest/TerrainTexture.pak b/AutomatedTesting/Levels/AtomLevels/ShadowTest/TerrainTexture.pak deleted file mode 100644 index fe3604a050..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/ShadowTest/TerrainTexture.pak +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:8739c76e681f900923b900c9df0ef75cf421d39cabb54650c4b9ad19b6a76d85 -size 22 diff --git a/AutomatedTesting/Levels/AtomLevels/ShadowTest/filelist.xml b/AutomatedTesting/Levels/AtomLevels/ShadowTest/filelist.xml deleted file mode 100644 index 502f2b5af5..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/ShadowTest/filelist.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/AutomatedTesting/Levels/AtomLevels/ShadowTest/level.pak b/AutomatedTesting/Levels/AtomLevels/ShadowTest/level.pak deleted file mode 100644 index 34ec3a3cb3..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/ShadowTest/level.pak +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:3fc101d03df12328e2a1ddf817628963c60d3999dfd08aceb843c5e2bd0c16f7 -size 41574 diff --git a/AutomatedTesting/Levels/AtomLevels/ShadowTest/tags.txt b/AutomatedTesting/Levels/AtomLevels/ShadowTest/tags.txt deleted file mode 100644 index 0d6c1880e7..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/ShadowTest/tags.txt +++ /dev/null @@ -1,12 +0,0 @@ -0,0,0,0,0,0 -0,0,0,0,0,0 -0,0,0,0,0,0 -0,0,0,0,0,0 -0,0,0,0,0,0 -0,0,0,0,0,0 -0,0,0,0,0,0 -0,0,0,0,0,0 -0,0,0,0,0,0 -0,0,0,0,0,0 -0,0,0,0,0,0 -0,0,0,0,0,0 diff --git a/AutomatedTesting/Levels/AtomLevels/ShadowTest/terrain/cover.ctc b/AutomatedTesting/Levels/AtomLevels/ShadowTest/terrain/cover.ctc deleted file mode 100644 index 5c869c6533..0000000000 --- a/AutomatedTesting/Levels/AtomLevels/ShadowTest/terrain/cover.ctc +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:fdab340ad6c6dc6c1167e31afa061684be083360fc4108fa9f1fa4b15fe95d8c -size 1310792 From 32d643fe95ada5710eea8506b0da944fa776cdba Mon Sep 17 00:00:00 2001 From: jromnoa Date: Thu, 22 Apr 2021 18:17:09 -0700 Subject: [PATCH 14/32] enable NullRenderer for test, clean-up some test verifications --- .../editor_python_test_tools/hydra_test_utils.py | 2 +- .../hydra_AtomEditorComponents_AddedToEntity.py | 4 ++-- .../Gem/PythonTests/atom_renderer/test_Atom_MainSuite.py | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/AutomatedTesting/Gem/PythonTests/EditorPythonTestTools/editor_python_test_tools/hydra_test_utils.py b/AutomatedTesting/Gem/PythonTests/EditorPythonTestTools/editor_python_test_tools/hydra_test_utils.py index ee352f8a73..ba5bb8ffa4 100644 --- a/AutomatedTesting/Gem/PythonTests/EditorPythonTestTools/editor_python_test_tools/hydra_test_utils.py +++ b/AutomatedTesting/Gem/PythonTests/EditorPythonTestTools/editor_python_test_tools/hydra_test_utils.py @@ -58,7 +58,7 @@ def launch_and_validate_results(request, test_directory, editor, editor_script, if auto_test_mode: editor.args.extend(["--autotest_mode"]) if null_renderer: - editor.args.extend(["-NullRenderer"]) + editor.args.extend(["-rhi=null"]) with editor.start(): diff --git a/AutomatedTesting/Gem/PythonTests/atom_renderer/atom_hydra_scripts/hydra_AtomEditorComponents_AddedToEntity.py b/AutomatedTesting/Gem/PythonTests/atom_renderer/atom_hydra_scripts/hydra_AtomEditorComponents_AddedToEntity.py index 848deeb522..e914f5e523 100644 --- a/AutomatedTesting/Gem/PythonTests/atom_renderer/atom_hydra_scripts/hydra_AtomEditorComponents_AddedToEntity.py +++ b/AutomatedTesting/Gem/PythonTests/atom_renderer/atom_hydra_scripts/hydra_AtomEditorComponents_AddedToEntity.py @@ -40,8 +40,8 @@ import azlmbr.render as render sys.path.append(os.path.join(azlmbr.paths.devroot, "AutomatedTesting", "Gem", "PythonTests")) -import automatedtesting_shared.hydra_editor_utils as hydra -from automatedtesting_shared.utils import TestHelper as helper +import editor_python_test_tools.hydra_editor_utils as hydra +from editor_python_test_tools.utils import TestHelper as helper class TestAllComponentsBasicTests(object): diff --git a/AutomatedTesting/Gem/PythonTests/atom_renderer/test_Atom_MainSuite.py b/AutomatedTesting/Gem/PythonTests/atom_renderer/test_Atom_MainSuite.py index eb207c2f90..604e87e8a4 100644 --- a/AutomatedTesting/Gem/PythonTests/atom_renderer/test_Atom_MainSuite.py +++ b/AutomatedTesting/Gem/PythonTests/atom_renderer/test_Atom_MainSuite.py @@ -15,7 +15,7 @@ import pytest import ly_test_tools.environment.file_system as file_system -import automatedtesting_shared.hydra_test_utils as hydra +import editor_python_test_tools.hydra_test_utils as hydra logger = logging.getLogger(__name__) EDITOR_TIMEOUT = 60 @@ -210,7 +210,7 @@ class TestAtomEditorComponents(object): request, TEST_DIRECTORY, editor, - "hydra_AtomEditorComponentsTest_AddedToEntity.py", + "hydra_AtomEditorComponents_AddedToEntity.py", timeout=EDITOR_TIMEOUT, expected_lines=expected_lines, unexpected_lines=unexpected_lines, From fef8a83d8db1957f3bd59f4e4910150ce33564a7 Mon Sep 17 00:00:00 2001 From: jromnoa Date: Thu, 22 Apr 2021 18:26:51 -0700 Subject: [PATCH 15/32] remove unused fbx models from test --- AutomatedTesting/Objects/bunny.fbx | 3 --- AutomatedTesting/Objects/cube.fbx | 3 --- AutomatedTesting/Objects/plane.fbx | 3 --- 3 files changed, 9 deletions(-) delete mode 100644 AutomatedTesting/Objects/bunny.fbx delete mode 100644 AutomatedTesting/Objects/cube.fbx delete mode 100644 AutomatedTesting/Objects/plane.fbx diff --git a/AutomatedTesting/Objects/bunny.fbx b/AutomatedTesting/Objects/bunny.fbx deleted file mode 100644 index 586062ebba..0000000000 --- a/AutomatedTesting/Objects/bunny.fbx +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:ee81db4d3aa5c76316cb51c700d6b35f500bc599d91b9f62d057df16ed9be929 -size 3266108 diff --git a/AutomatedTesting/Objects/cube.fbx b/AutomatedTesting/Objects/cube.fbx deleted file mode 100644 index 616c7b4ff3..0000000000 --- a/AutomatedTesting/Objects/cube.fbx +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:e32877eab35459499c73ff093df898f93bf3e7379de25eef6875d693be9bec81 -size 18015 diff --git a/AutomatedTesting/Objects/plane.fbx b/AutomatedTesting/Objects/plane.fbx deleted file mode 100644 index b274bfa282..0000000000 --- a/AutomatedTesting/Objects/plane.fbx +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:0a1f8d75dcd85e8b4aa57f6c0c81af0300ff96915ba3c2b591095c215d5e1d8c -size 12072 From f2a2286a2cbd5e2a0a406d5f65560e71e7ed39c5 Mon Sep 17 00:00:00 2001 From: jromnoa Date: Thu, 22 Apr 2021 19:16:00 -0700 Subject: [PATCH 16/32] remove GPU requirements, clean up test verification --- AutomatedTesting/Gem/PythonTests/atom_renderer/CMakeLists.txt | 1 - .../hydra_AtomEditorComponents_AddedToEntity.py | 1 - .../Gem/PythonTests/atom_renderer/test_Atom_MainSuite.py | 2 -- 3 files changed, 4 deletions(-) diff --git a/AutomatedTesting/Gem/PythonTests/atom_renderer/CMakeLists.txt b/AutomatedTesting/Gem/PythonTests/atom_renderer/CMakeLists.txt index 7a1f59105e..5ad6c425a2 100644 --- a/AutomatedTesting/Gem/PythonTests/atom_renderer/CMakeLists.txt +++ b/AutomatedTesting/Gem/PythonTests/atom_renderer/CMakeLists.txt @@ -18,7 +18,6 @@ if(PAL_TRAIT_BUILD_HOST_TOOLS AND PAL_TRAIT_BUILD_TESTS_SUPPORTED AND AutomatedTesting IN_LIST LY_PROJECTS) ly_add_pytest( NAME AtomRenderer::HydraTestsMain - TEST_REQUIRES gpu TEST_SUITE main PATH ${CMAKE_CURRENT_LIST_DIR}/test_Atom_MainSuite.py TEST_SERIAL diff --git a/AutomatedTesting/Gem/PythonTests/atom_renderer/atom_hydra_scripts/hydra_AtomEditorComponents_AddedToEntity.py b/AutomatedTesting/Gem/PythonTests/atom_renderer/atom_hydra_scripts/hydra_AtomEditorComponents_AddedToEntity.py index e914f5e523..fb53086d14 100644 --- a/AutomatedTesting/Gem/PythonTests/atom_renderer/atom_hydra_scripts/hydra_AtomEditorComponents_AddedToEntity.py +++ b/AutomatedTesting/Gem/PythonTests/atom_renderer/atom_hydra_scripts/hydra_AtomEditorComponents_AddedToEntity.py @@ -36,7 +36,6 @@ import azlmbr.asset as asset import azlmbr.entity as entity import azlmbr.legacy.general as general import azlmbr.editor as editor -import azlmbr.render as render sys.path.append(os.path.join(azlmbr.paths.devroot, "AutomatedTesting", "Gem", "PythonTests")) diff --git a/AutomatedTesting/Gem/PythonTests/atom_renderer/test_Atom_MainSuite.py b/AutomatedTesting/Gem/PythonTests/atom_renderer/test_Atom_MainSuite.py index 604e87e8a4..738bfd9925 100644 --- a/AutomatedTesting/Gem/PythonTests/atom_renderer/test_Atom_MainSuite.py +++ b/AutomatedTesting/Gem/PythonTests/atom_renderer/test_Atom_MainSuite.py @@ -60,8 +60,6 @@ class TestAtomEditorComponents(object): "Area Light_test: Component removed after UNDO: True", "Area Light_test: Component added after REDO: True", "Area Light_test: Entered game mode: True", - # Disabled, see ATOM-: "Area Light_test: Exit game mode: True", - "Area Light_test: Entity disabled initially: True", "Area Light_test: Entity enabled after adding required components: True", "Area Light_test: Entity is hidden: True", "Area Light_test: Entity is shown: True", From c0ad079f879b5d12c2d4040663048dd0715653de Mon Sep 17 00:00:00 2001 From: spham Date: Fri, 23 Apr 2021 10:06:15 -0700 Subject: [PATCH 17/32] Create a package file for packages to install on Linux and updated script to use it --- .../Linux/install-ubuntu-build-libraries.sh | 103 -------------- .../Linux/install-ubuntu-build-tools.sh | 134 +++++++++++++++--- .../Linux/package-list.ubuntu-bionic.txt | 17 +++ .../Linux/package-list.ubuntu-focal.txt | 17 +++ 4 files changed, 145 insertions(+), 126 deletions(-) delete mode 100755 scripts/build/build_node/Platform/Linux/install-ubuntu-build-libraries.sh create mode 100644 scripts/build/build_node/Platform/Linux/package-list.ubuntu-bionic.txt create mode 100644 scripts/build/build_node/Platform/Linux/package-list.ubuntu-focal.txt 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 deleted file mode 100755 index 90786a675a..0000000000 --- a/scripts/build/build_node/Platform/Linux/install-ubuntu-build-libraries.sh +++ /dev/null @@ -1,103 +0,0 @@ -#!/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 [[ $EUID -ne 0 ]] -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 index 0c65610cf5..5fc04e0e2d 100755 --- a/scripts/build/build_node/Platform/Linux/install-ubuntu-build-tools.sh +++ b/scripts/build/build_node/Platform/Linux/install-ubuntu-build-tools.sh @@ -39,36 +39,124 @@ else fi # -# Always install the latest version of cmake (from kitware) +# Install curl if its not installed # -echo Installing CMake package $CMAKE_DISTRO_VERSION - -# 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" ] +curl --version >/dev/null 2>&1 +if [ $? -ne 0 ] then - CMAKE_DISTRO_VERSION=3.20.1-0kitware1ubuntu18.04.1 - apt-add-repository 'deb https://apt.kitware.com/ubuntu/ bionic main' -elif [ "$UBUNTU_DISTRO" == "focal" ] -then - CMAKE_DISTRO_VERSION=3.20.1-0kitware1ubuntu20.04.1 - apt-add-repository 'deb https://apt.kitware.com/ubuntu/ focal main' + echo "Installing curl" + apt-get install curl -y fi -apt-get update -# Install cmake -apt-get install cmake=$CMAKE_DISTRO_VERSION -y +# +# 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 # -# Make sure that Ninja is installed +# Add the kitware repository for cmake if necessary # -echo Installing Ninja -apt-get install ninja-build -y + +KITWARE_REPO_COUNT=`cat /etc/apt/sources.list | grep ^deb | grep https://apt.kitware.com/ubuntu/ | wc -l` + +if [ $KITWARE_REPO_COUNT -eq 0 ] +then + echo Adding Kitware Repository for the cmake + + 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 + CMAKE_DISTRO_VERSION=3.20.1-0kitware1ubuntu18.04.1 + apt-add-repository 'deb https://apt.kitware.com/ubuntu/ bionic main' + elif [ "$UBUNTU_DISTRO" == "focal" ] + then + CMAKE_DISTRO_VERSION=3.20.1-0kitware1ubuntu20.04.1 + apt-add-repository 'deb https://apt.kitware.com/ubuntu/ focal main' + fi + apt-get update +else + echo Kitware Repository repo already set +fi -echo Build Tools Setup Complete +# Read from the package list and process each package +PACKAGE_FILE_LIST=package-list.ubuntu-$UBUNTU_DISTRO.txt + +echo Reading package list $PACKAGE_FILE_LIST + +# Read each line (strip out comment tags) +for LINE in `cat package-list.ubuntu-focal.txt | sed 's/#.*$//g'` +do + PACKAGE=`echo $LINE | awk -F / '{print $1}'` + if [ "$PACKAGE" != "" ] # Skip blank lines + then + PACKAGE_VER=`echo $LINE | awk -F / '{print $2}'` + if [ "$PACKAGE_VER" == "" ] + then + # Process non-versioned packages + INSTALLED_COUNT=`apt list --installed 2>/dev/null | grep ^$PACKAGE/ | wc -l` + if [ $INSTALLED_COUNT -eq 0 ] + then + echo Installing $PACKAGE + apt-get install $PACKAGE -y + else + INSTALLED_VERSION=`apt list --installed 2>/dev/null | grep ^$PACKAGE/ | awk '{print $2}'` + echo $PACKAGE already installed \(version $INSTALLED_VERSION\) + fi + else + # Process versioned packages + INSTALLED_COUNT=`apt list --installed 2>/dev/null | grep ^$PACKAGE/ | wc -l` + if [ $INSTALLED_COUNT -eq 0 ] + then + echo Installing $PACKAGE \( $PACKAGE_VER \) + apt-get install $PACKAGE=$PACKAGE_VER -y + else + INSTALLED_VERSION=`apt list --installed 2>/dev/null | grep ^$PACKAGE/ | awk '{print $2}'` + if [ "$INSTALLED_VERSION" != "$PACKAGE_VER" ] + then + echo $PACKAGE already installed but with the wrong version. Purging the package + apt purge --auto-remove $PACKAGE -y + fi + echo $PACKAGE already installed \(version $INSTALLED_VERSION\) + fi + fi + fi + +done + diff --git a/scripts/build/build_node/Platform/Linux/package-list.ubuntu-bionic.txt b/scripts/build/build_node/Platform/Linux/package-list.ubuntu-bionic.txt new file mode 100644 index 0000000000..3469a6f22b --- /dev/null +++ b/scripts/build/build_node/Platform/Linux/package-list.ubuntu-bionic.txt @@ -0,0 +1,17 @@ +# Package list for Ubuntu 18.04 + +# Build Tools Packages +cmake/3.20.1-0kitware1ubuntu18.04.1 # For cmake +clang-6.0 # For Ninja Build System +ninja-build # For the compiler and its dependencies + +# Build Libraries +libglu1-mesa-dev # For Qt (GL dependency) +libxcb-xinerama0 # For Qt plugins at runtime +libxcb-xinput0 # For Qt plugins at runtime +libcurl4-openssl-dev # For HttpRequestor +libsdl2-dev # for WWise/Audio +zlib1g-dev +mesa-common-dev + + diff --git a/scripts/build/build_node/Platform/Linux/package-list.ubuntu-focal.txt b/scripts/build/build_node/Platform/Linux/package-list.ubuntu-focal.txt new file mode 100644 index 0000000000..e3e6c5396b --- /dev/null +++ b/scripts/build/build_node/Platform/Linux/package-list.ubuntu-focal.txt @@ -0,0 +1,17 @@ +# Package list for Ubuntu 20.04 + +# Build Tools Packages +cmake/3.20.1-0kitware1ubuntu20.04.1 # For cmake +clang-6.0 # For Ninja Build System +ninja-build # For the compiler and its dependencies + +# Build Libraries +libglu1-mesa-dev # For Qt (GL dependency) +libxcb-xinerama0 # For Qt plugins at runtime +libxcb-xinput0 # For Qt plugins at runtime +libcurl4-openssl-dev # For HttpRequestor +libsdl2-dev # for WWise/Audio +zlib1g-dev +mesa-common-dev + + From f68ed1cd4bf479f382fc723c0c899c541b10474a Mon Sep 17 00:00:00 2001 From: spham Date: Fri, 23 Apr 2021 10:14:27 -0700 Subject: [PATCH 18/32] Fix tabs->space issues --- .../Linux/package-list.ubuntu-bionic.txt | 16 ++++++++-------- .../Platform/Linux/package-list.ubuntu-focal.txt | 16 ++++++++-------- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/scripts/build/build_node/Platform/Linux/package-list.ubuntu-bionic.txt b/scripts/build/build_node/Platform/Linux/package-list.ubuntu-bionic.txt index 3469a6f22b..201e4e8424 100644 --- a/scripts/build/build_node/Platform/Linux/package-list.ubuntu-bionic.txt +++ b/scripts/build/build_node/Platform/Linux/package-list.ubuntu-bionic.txt @@ -1,16 +1,16 @@ # Package list for Ubuntu 18.04 # Build Tools Packages -cmake/3.20.1-0kitware1ubuntu18.04.1 # For cmake -clang-6.0 # For Ninja Build System -ninja-build # For the compiler and its dependencies +cmake/3.20.1-0kitware1ubuntu18.04.1 # For cmake +clang-6.0 # For Ninja Build System +ninja-build # For the compiler and its dependencies # Build Libraries -libglu1-mesa-dev # For Qt (GL dependency) -libxcb-xinerama0 # For Qt plugins at runtime -libxcb-xinput0 # For Qt plugins at runtime -libcurl4-openssl-dev # For HttpRequestor -libsdl2-dev # for WWise/Audio +libglu1-mesa-dev # For Qt (GL dependency) +libxcb-xinerama0 # For Qt plugins at runtime +libxcb-xinput0 # For Qt plugins at runtime +libcurl4-openssl-dev # For HttpRequestor +libsdl2-dev # for WWise/Audio zlib1g-dev mesa-common-dev diff --git a/scripts/build/build_node/Platform/Linux/package-list.ubuntu-focal.txt b/scripts/build/build_node/Platform/Linux/package-list.ubuntu-focal.txt index e3e6c5396b..13b6376911 100644 --- a/scripts/build/build_node/Platform/Linux/package-list.ubuntu-focal.txt +++ b/scripts/build/build_node/Platform/Linux/package-list.ubuntu-focal.txt @@ -1,16 +1,16 @@ # Package list for Ubuntu 20.04 # Build Tools Packages -cmake/3.20.1-0kitware1ubuntu20.04.1 # For cmake -clang-6.0 # For Ninja Build System -ninja-build # For the compiler and its dependencies +cmake/3.20.1-0kitware1ubuntu20.04.1 # For cmake +clang-6.0 # For Ninja Build System +ninja-build # For the compiler and its dependencies # Build Libraries -libglu1-mesa-dev # For Qt (GL dependency) -libxcb-xinerama0 # For Qt plugins at runtime -libxcb-xinput0 # For Qt plugins at runtime -libcurl4-openssl-dev # For HttpRequestor -libsdl2-dev # for WWise/Audio +libglu1-mesa-dev # For Qt (GL dependency) +libxcb-xinerama0 # For Qt plugins at runtime +libxcb-xinput0 # For Qt plugins at runtime +libcurl4-openssl-dev # For HttpRequestor +libsdl2-dev # for WWise/Audio zlib1g-dev mesa-common-dev From 811dc9c4466a5c9e13ea5d86f30851a85d734241 Mon Sep 17 00:00:00 2001 From: jromnoa Date: Fri, 23 Apr 2021 10:42:03 -0700 Subject: [PATCH 19/32] remove unused TestAllComponentsBasicTests class, fix test_case_id markers to be comma separated, lowered CMake timeout to 5 minutes, use existing after_level_load() utility function, remove redundant comments --- ...ydra_AtomEditorComponents_AddedToEntity.py | 51 +++++-------------- .../atom_renderer/test_Atom_MainSuite.py | 23 +++++---- 2 files changed, 25 insertions(+), 49 deletions(-) diff --git a/AutomatedTesting/Gem/PythonTests/atom_renderer/atom_hydra_scripts/hydra_AtomEditorComponents_AddedToEntity.py b/AutomatedTesting/Gem/PythonTests/atom_renderer/atom_hydra_scripts/hydra_AtomEditorComponents_AddedToEntity.py index fb53086d14..8701d2f211 100644 --- a/AutomatedTesting/Gem/PythonTests/atom_renderer/atom_hydra_scripts/hydra_AtomEditorComponents_AddedToEntity.py +++ b/AutomatedTesting/Gem/PythonTests/atom_renderer/atom_hydra_scripts/hydra_AtomEditorComponents_AddedToEntity.py @@ -40,13 +40,11 @@ import azlmbr.editor as editor sys.path.append(os.path.join(azlmbr.paths.devroot, "AutomatedTesting", "Gem", "PythonTests")) import editor_python_test_tools.hydra_editor_utils as hydra -from editor_python_test_tools.utils import TestHelper as helper +from editor_python_test_tools.utils import TestHelper +from editor_python_test_tools.editor_test_helper import EditorTestHelper -class TestAllComponentsBasicTests(object): - """ - Holds shared hydra test functions for this set of tests. - """ +EditorTestHelper = EditorTestHelper(log_prefix="AtomEditorComponents") def run(): @@ -76,29 +74,6 @@ def run(): :return: None """ - def after_level_load(): - """Function to call after creating/opening a level to ensure it loads.""" - # Give everything a second to initialize. - general.idle_enable(True) - general.idle_wait(1.0) - general.update_viewport() - general.idle_wait(0.5) # half a second is more than enough for updating the viewport. - - # Close out problematic windows, FPS meters, and anti-aliasing. - if general.is_helpers_shown(): # Turn off the helper gizmos if visible - general.toggle_helpers() - general.idle_wait(1.0) - if general.is_pane_visible("Error Report"): # Close Error Report windows that block focus. - general.close_pane("Error Report") - if general.is_pane_visible("Error Log"): # Close Error Log windows that block focus. - general.close_pane("Error Log") - general.idle_wait(1.0) - general.run_console("r_displayInfo=0") - general.run_console("r_antialiasingmode=0") - general.idle_wait(1.0) - - return True - def create_entity_undo_redo_component_addition(component_name): new_entity = hydra.Entity(f"{component_name}") new_entity.create_entity(math.Vector3(512.0, 512.0, 34.0), [component_name]) @@ -107,13 +82,13 @@ def run(): # undo component addition general.undo() - helper.wait_for_condition(lambda: not hydra.has_components(new_entity.id, [component_name]), 2.0) + TestHelper.wait_for_condition(lambda: not hydra.has_components(new_entity.id, [component_name]), 2.0) general.log(f"{component_name}_test: Component removed after UNDO: " f"{not hydra.has_components(new_entity.id, [component_name])}") # redo component addition general.redo() - helper.wait_for_condition(lambda: hydra.has_components(new_entity.id, [component_name]), 2.0) + TestHelper.wait_for_condition(lambda: hydra.has_components(new_entity.id, [component_name]), 2.0) general.log(f"{component_name}_test: Component added after REDO: " f"{hydra.has_components(new_entity.id, [component_name])}") @@ -121,10 +96,10 @@ def run(): def verify_enter_exit_game_mode(component_name): general.enter_game_mode() - helper.wait_for_condition(lambda: general.is_in_game_mode(), 1.0) + TestHelper.wait_for_condition(lambda: general.is_in_game_mode(), 1.0) general.log(f"{component_name}_test: Entered game mode: {general.is_in_game_mode()}") general.exit_game_mode() - helper.wait_for_condition(lambda: not general.is_in_game_mode(), 1.0) + TestHelper.wait_for_condition(lambda: not general.is_in_game_mode(), 1.0) general.log(f"{component_name}_test: Exit game mode: {not general.is_in_game_mode()}") def verify_hide_unhide_entity(component_name, entity_obj): @@ -141,16 +116,16 @@ def run(): def verify_deletion_undo_redo(component_name, entity_obj): editor.ToolsApplicationRequestBus(bus.Broadcast, "DeleteEntityById", entity_obj.id) - helper.wait_for_condition(lambda: not hydra.find_entity_by_name(entity_obj.name), 1.0) + TestHelper.wait_for_condition(lambda: not hydra.find_entity_by_name(entity_obj.name), 1.0) general.log(f"{component_name}_test: Entity deleted: {not hydra.find_entity_by_name(entity_obj.name)}") general.undo() - helper.wait_for_condition(lambda: hydra.find_entity_by_name(entity_obj.name) is not None, 1.0) + TestHelper.wait_for_condition(lambda: hydra.find_entity_by_name(entity_obj.name) is not None, 1.0) general.log(f"{component_name}_test: UNDO entity deletion works: " f"{hydra.find_entity_by_name(entity_obj.name) is not None}") general.redo() - helper.wait_for_condition(lambda: not hydra.find_entity_by_name(entity_obj.name), 1.0) + TestHelper.wait_for_condition(lambda: not hydra.find_entity_by_name(entity_obj.name), 1.0) general.log(f"{component_name}_test: REDO entity deletion works: " f"{not hydra.find_entity_by_name(entity_obj.name)}") @@ -164,7 +139,7 @@ def run(): f"{not is_component_enabled(entity_obj.components[0])}") for component in components_to_add: entity_obj.add_component(component) - helper.wait_for_condition(lambda: is_component_enabled(entity_obj.components[0]), 1.0) + TestHelper.wait_for_condition(lambda: is_component_enabled(entity_obj.components[0]), 1.0) general.log( f"{component_name}_test: Entity enabled after adding " f"required components: {is_component_enabled(entity_obj.components[0])}" @@ -174,7 +149,7 @@ def run(): entity_obj.get_set_test(0, path, value) # Wait for Editor idle loop before executing Python hydra scripts. - helper.init_idle() + TestHelper.init_idle() # Create a new level. new_level_name = "tmp_level" # Specified in TestAllComponentsBasicTests.py @@ -196,7 +171,7 @@ def run(): general.log("Unknown error, failed to create level") else: general.log(f"{new_level_name} level created successfully") - after_level_load() + EditorTestHelper.after_level_load(bypass_viewport_resize=True) # Delete all existing entities initially search_filter = azlmbr.entity.SearchFilter() diff --git a/AutomatedTesting/Gem/PythonTests/atom_renderer/test_Atom_MainSuite.py b/AutomatedTesting/Gem/PythonTests/atom_renderer/test_Atom_MainSuite.py index 738bfd9925..a82d5c5fd4 100644 --- a/AutomatedTesting/Gem/PythonTests/atom_renderer/test_Atom_MainSuite.py +++ b/AutomatedTesting/Gem/PythonTests/atom_renderer/test_Atom_MainSuite.py @@ -39,17 +39,18 @@ class TestAtomEditorComponents(object): request.addfinalizer(teardown) - @pytest.mark.test_case_id("C32078130") # Tone Mapper - @pytest.mark.test_case_id("C32078129") # Light - @pytest.mark.test_case_id("C32078131") # Radius Weight Modifier - @pytest.mark.test_case_id("C32078127") # PostFX Layer - @pytest.mark.test_case_id("C32078126") # Point Light - @pytest.mark.test_case_id("C32078125") # Physical Sky - @pytest.mark.test_case_id("C32078115") # Global Skylight (IBL) - @pytest.mark.test_case_id("C32078121") # Exposure Control - @pytest.mark.test_case_id("C32078120") # Directional Light - @pytest.mark.test_case_id("C32078119") # DepthOfField - @pytest.mark.test_case_id("C32078118") # Decal + @pytest.mark.test_case_id( + "C32078130", # Tone Mapper + "C32078129", # Light + "C32078131", # Radius Weight Modifier + "C32078127", # PostFX Layer + "C32078126", # Point Light + "C32078125", # Physical Sky + "C32078115", # Global Skylight (IBL) + "C32078121", # Exposure Control + "C32078120", # Directional Light + "C32078119", # DepthOfField + "C32078118") # Decal def test_AtomEditorComponents_AddedToEntity(self, request, editor, level, workspace, project, launcher_platform): cfg_args = [level] From 91ec9b4f7ed509a6958344b33b0e79b0df22ec6c Mon Sep 17 00:00:00 2001 From: jromnoa Date: Fri, 23 Apr 2021 10:46:35 -0700 Subject: [PATCH 20/32] add CMakeLists.txt comment removal (was missed in last commit) --- AutomatedTesting/Gem/PythonTests/atom_renderer/CMakeLists.txt | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/AutomatedTesting/Gem/PythonTests/atom_renderer/CMakeLists.txt b/AutomatedTesting/Gem/PythonTests/atom_renderer/CMakeLists.txt index 5ad6c425a2..34b504b2d3 100644 --- a/AutomatedTesting/Gem/PythonTests/atom_renderer/CMakeLists.txt +++ b/AutomatedTesting/Gem/PythonTests/atom_renderer/CMakeLists.txt @@ -12,7 +12,6 @@ ################################################################################ # Atom Renderer: Automated Tests # Runs EditorPythonBindings (hydra) scripts inside the Editor to verify test results for the Atom renderer. -# Utilizes a combination of screenshot comparisons and log files to verify test results. ################################################################################ if(PAL_TRAIT_BUILD_HOST_TOOLS AND PAL_TRAIT_BUILD_TESTS_SUPPORTED AND AutomatedTesting IN_LIST LY_PROJECTS) @@ -21,7 +20,7 @@ if(PAL_TRAIT_BUILD_HOST_TOOLS AND PAL_TRAIT_BUILD_TESTS_SUPPORTED AND AutomatedT TEST_SUITE main PATH ${CMAKE_CURRENT_LIST_DIR}/test_Atom_MainSuite.py TEST_SERIAL - TIMEOUT 1200 + TIMEOUT 300 RUNTIME_DEPENDENCIES AssetProcessor AutomatedTesting.Assets From 923f234d71c47217b9246bd916b9b37c92b64750 Mon Sep 17 00:00:00 2001 From: guthadam Date: Fri, 23 Apr 2021 13:07:20 -0500 Subject: [PATCH 21/32] ATOM-15326 support for image thumbnails in asset browser and thumbnail widget This change adds support for streaming image thumbnails in the asset browser tree and thumbnail widget. This is a prerequisite for displaying image previews inside of the material inspector. https://jira.agscollab.com/browse/ATOM-15326 https://jira.agscollab.com/browse/ATOM-14003 --- .../AssetBrowser/Views/EntryDelegate.cpp | 7 +- .../Thumbnails/ThumbnailWidget.cpp | 20 +- .../Code/Source/ImageProcessingModule.cpp | 7 +- .../Code/Source/Previewer/ImagePreviewer.cpp | 8 +- .../Code/Source/Thumbnail/ImageThumbnail.cpp | 140 ++++++++++++++ .../Code/Source/Thumbnail/ImageThumbnail.h | 74 +++++++ .../ImageThumbnailSystemComponent.cpp | 180 ++++++++++++++++++ .../Thumbnail/ImageThumbnailSystemComponent.h | 59 ++++++ .../Code/imageprocessing_files.cmake | 4 + 9 files changed, 476 insertions(+), 23 deletions(-) create mode 100644 Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Thumbnail/ImageThumbnail.cpp create mode 100644 Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Thumbnail/ImageThumbnail.h create mode 100644 Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Thumbnail/ImageThumbnailSystemComponent.cpp create mode 100644 Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Thumbnail/ImageThumbnailSystemComponent.h diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/AssetBrowser/Views/EntryDelegate.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/AssetBrowser/Views/EntryDelegate.cpp index abc290a406..c1ba5ae9ce 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/AssetBrowser/Views/EntryDelegate.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/AssetBrowser/Views/EntryDelegate.cpp @@ -139,8 +139,11 @@ namespace AzToolsFramework } else { - QPixmap pixmap = thumbnail->GetPixmap(size); - painter->drawPixmap(point, pixmap.scaled(size, Qt::IgnoreAspectRatio, Qt::SmoothTransformation)); + // Scaling and centering pixmap within bounds to preserve aspect ratio + const QPixmap pixmap = thumbnail->GetPixmap(size).scaled(size, Qt::KeepAspectRatio, Qt::SmoothTransformation); + const QSize sizeDelta = size - pixmap.size(); + const QPoint pointDelta = QPoint(sizeDelta.width() / 2, sizeDelta.height() / 2); + painter->drawPixmap(point + pointDelta, pixmap); } return m_iconSize; } diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Thumbnails/ThumbnailWidget.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/Thumbnails/ThumbnailWidget.cpp index 038bfd5da5..85c8291518 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Thumbnails/ThumbnailWidget.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Thumbnails/ThumbnailWidget.cpp @@ -71,20 +71,12 @@ namespace AzToolsFramework SharedThumbnail thumbnail; ThumbnailerRequestsBus::BroadcastResult(thumbnail, &ThumbnailerRequests::GetThumbnail, m_key, m_contextName.c_str()); QPainter painter(this); - QPixmap pixmap = thumbnail->GetPixmap(); - // preserve thumbnail image's ratio, if the widget is wider than the image, center the image hotizontally - float aspectRatio = aznumeric_cast(pixmap.width()) / pixmap.height(); - int originalWidth = width(); - int originalHeight = height(); - int realHeight = qMin(aznumeric_cast(originalWidth /aspectRatio), originalHeight); - int realWidth = aznumeric_cast(realHeight * aspectRatio); - int x = (originalWidth - realWidth) / 2; - // pixmap needs to be manually scaled to produce smoother result and avoid looking pixelated - // using painter.setRenderHint(QPainter::SmoothPixmapTransform); does not seem to work - // Note: there is a potential issue with pixmap.scaled: - // it is multithreaded (using global threadPool) and blocking until finished. - // A deadlock will happen if global threadPool has no free threads available. - painter.drawPixmap(QPoint(x, 0), pixmap.scaled(realWidth, realHeight, Qt::IgnoreAspectRatio, Qt::SmoothTransformation)); + + // Scaling and centering pixmap within bounds to preserve aspect ratio + const QPixmap pixmap = thumbnail->GetPixmap().scaled(size(), Qt::KeepAspectRatio, Qt::SmoothTransformation); + const QSize sizeDelta = size() - pixmap.size(); + const QPoint pointDelta = QPoint(sizeDelta.width() / 2, sizeDelta.height() / 2); + painter.drawPixmap(pointDelta, pixmap); } QWidget::paintEvent(event); } diff --git a/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/ImageProcessingModule.cpp b/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/ImageProcessingModule.cpp index 5df9ac68c9..84d69ed2dc 100644 --- a/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/ImageProcessingModule.cpp +++ b/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/ImageProcessingModule.cpp @@ -14,6 +14,7 @@ #include #include "ImageProcessingSystemComponent.h" #include "ImageBuilderComponent.h" +#include "Thumbnail/ImageThumbnailSystemComponent.h" namespace ImageProcessingAtom { @@ -28,8 +29,9 @@ namespace ImageProcessingAtom { // Push results of the components' ::CreateDescriptor() into m_descriptors here. m_descriptors.insert(m_descriptors.end(), { - ImageProcessingSystemComponent::CreateDescriptor(), //system component for editor - BuilderPluginComponent::CreateDescriptor(), //builder component for AP + Thumbnails::ImageThumbnailSystemComponent::CreateDescriptor(), + ImageProcessingSystemComponent::CreateDescriptor(), // system component for editor + BuilderPluginComponent::CreateDescriptor(), // builder component for AP }); } @@ -40,6 +42,7 @@ namespace ImageProcessingAtom { return AZ::ComponentTypeList{ azrtti_typeid(), + azrtti_typeid(), }; } }; diff --git a/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Previewer/ImagePreviewer.cpp b/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Previewer/ImagePreviewer.cpp index 1e481c56ef..fcdc9cd0d3 100644 --- a/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Previewer/ImagePreviewer.cpp +++ b/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Previewer/ImagePreviewer.cpp @@ -218,12 +218,10 @@ namespace ImageProcessingAtom AZ::Data::Asset imageAsset = Utils::LoadImageAsset(product->GetAssetId()); IImageObjectPtr image = Utils::LoadImageFromImageAsset(imageAsset); - AZStd::string productInfo; - - QImage previewImage; if (image) { // Add product image info + AZStd::string productInfo; GetImageInfoString(imageAsset, productInfo); m_fileinfo += QStringLiteral("\r\n"); @@ -242,11 +240,11 @@ namespace ImageProcessingAtom m_fileinfo += GetFileSize(source->GetFullPath().c_str()); IImageObjectPtr image = IImageObjectPtr(LoadImageFromFile(source->GetFullPath())); - AZStd::string sourceInfo; - QImage previewImage; + if (image) { // Add source image info + AZStd::string sourceInfo; GetImageInfoString(image, sourceInfo); m_fileinfo += QStringLiteral("\r\n"); diff --git a/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Thumbnail/ImageThumbnail.cpp b/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Thumbnail/ImageThumbnail.cpp new file mode 100644 index 0000000000..a586de9724 --- /dev/null +++ b/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Thumbnail/ImageThumbnail.cpp @@ -0,0 +1,140 @@ +/* + * 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 + +namespace ImageProcessingAtom +{ + namespace Thumbnails + { + const int ImageThumbnailSize = 200; + + ////////////////////////////////////////////////////////////////////////// + // ImageThumbnail + ////////////////////////////////////////////////////////////////////////// + ImageThumbnail::ImageThumbnail(AzToolsFramework::Thumbnailer::SharedThumbnailKey key, int thumbnailSize) + : Thumbnail(key, thumbnailSize) + { + auto sourceKey = azrtti_cast(key.data()); + if (sourceKey) + { + bool foundIt = false; + AZStd::vector productAssetInfo; + AzToolsFramework::AssetSystemRequestBus::BroadcastResult( + foundIt, &AzToolsFramework::AssetSystemRequestBus::Events::GetAssetsProducedBySourceUUID, sourceKey->GetSourceUuid(), + productAssetInfo); + + for (const auto& assetInfo : productAssetInfo) + { + m_assetIds.insert(assetInfo.m_assetId); + } + } + + auto productKey = azrtti_cast(key.data()); + if (productKey && productKey->GetAssetType() == AZ::RPI::StreamingImageAsset::RTTI_Type()) + { + m_assetIds.insert(productKey->GetAssetId()); + } + + AzToolsFramework::Thumbnailer::ThumbnailerRendererNotificationBus::Handler::BusConnect(key); + AzFramework::AssetCatalogEventBus::Handler::BusConnect(); + } + + ImageThumbnail::~ImageThumbnail() + { + AzToolsFramework::Thumbnailer::ThumbnailerRendererNotificationBus::Handler::BusDisconnect(); + AzFramework::AssetCatalogEventBus::Handler::BusDisconnect(); + } + + void ImageThumbnail::LoadThread() + { + AzToolsFramework::Thumbnailer::ThumbnailerRendererRequestBus::QueueEvent( + AZ::RPI::StreamingImageAsset::RTTI_Type(), &AzToolsFramework::Thumbnailer::ThumbnailerRendererRequests::RenderThumbnail, + m_key, + m_thumbnailSize); + // wait for response from thumbnail renderer + m_renderWait.acquire(); + } + + void ImageThumbnail::ThumbnailRendered(QPixmap& thumbnailImage) + { + m_pixmap = thumbnailImage; + m_renderWait.release(); + } + + void ImageThumbnail::ThumbnailFailedToRender() + { + m_state = State::Failed; + m_renderWait.release(); + } + + void ImageThumbnail::OnCatalogAssetChanged([[maybe_unused]] const AZ::Data::AssetId& assetId) + { + if (m_state == State::Ready && m_assetIds.find(assetId) != m_assetIds.end()) + { + m_state = State::Unloaded; + Load(); + } + } + + ////////////////////////////////////////////////////////////////////////// + // ImageThumbnailCache + ////////////////////////////////////////////////////////////////////////// + ImageThumbnailCache::ImageThumbnailCache() + : ThumbnailCache() + { + } + + ImageThumbnailCache::~ImageThumbnailCache() = default; + + int ImageThumbnailCache::GetPriority() const + { + // Image thumbnails override default source thumbnails, so carry higher priority + return 1; + } + + const char* ImageThumbnailCache::GetProviderName() const + { + return ProviderName; + } + + bool ImageThumbnailCache::IsSupportedThumbnail(AzToolsFramework::Thumbnailer::SharedThumbnailKey key) const + { + auto sourceKey = azrtti_cast(key.data()); + if (sourceKey) + { + bool foundIt = false; + AZ::Data::AssetInfo assetInfo; + AZStd::string watchFolder; + AzToolsFramework::AssetSystemRequestBus::BroadcastResult( + foundIt, &AzToolsFramework::AssetSystemRequestBus::Events::GetSourceInfoBySourceUUID, sourceKey->GetSourceUuid(), + assetInfo, watchFolder); + + if (foundIt) + { + AZStd::string ext; + AZ::StringFunc::Path::GetExtension(assetInfo.m_relativePath.c_str(), ext, false); + return IsExtensionSupported(ext.c_str()); + } + } + + auto productKey = azrtti_cast(key.data()); + return productKey && productKey->GetAssetType() == AZ::RPI::StreamingImageAsset::RTTI_Type(); + } + } // namespace Thumbnails +} // namespace ImageProcessingAtom diff --git a/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Thumbnail/ImageThumbnail.h b/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Thumbnail/ImageThumbnail.h new file mode 100644 index 0000000000..85ce9d59e6 --- /dev/null +++ b/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Thumbnail/ImageThumbnail.h @@ -0,0 +1,74 @@ +/* + * 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 + +#if !defined(Q_MOC_RUN) +#include +#include +#include +#include +#include +#endif + +namespace ImageProcessingAtom +{ + namespace Thumbnails + { + /** + * Custom image thumbnail that detects when an asset changes and updates the thumbnail + */ + class ImageThumbnail + : public AzToolsFramework::Thumbnailer::Thumbnail + , public AzToolsFramework::Thumbnailer::ThumbnailerRendererNotificationBus::Handler + , public AzFramework::AssetCatalogEventBus::Handler + { + Q_OBJECT + public: + ImageThumbnail(AzToolsFramework::Thumbnailer::SharedThumbnailKey key, int thumbnailSize); + ~ImageThumbnail() override; + + //! AzToolsFramework::ThumbnailerRendererNotificationBus::Handler overrides... + void ThumbnailRendered(QPixmap& thumbnailImage) override; + void ThumbnailFailedToRender() override; + + protected: + void LoadThread() override; + + private: + // AzFramework::AssetCatalogEventBus::Handler interface overrides... + void OnCatalogAssetChanged(const AZ::Data::AssetId& assetId) override; + + AZStd::binary_semaphore m_renderWait; + AZStd::unordered_set m_assetIds; + }; + + /** + * Cache configuration for large image thumbnails + */ + class ImageThumbnailCache + : public AzToolsFramework::Thumbnailer::ThumbnailCache + { + public: + ImageThumbnailCache(); + ~ImageThumbnailCache() override; + + int GetPriority() const override; + const char* GetProviderName() const override; + + static constexpr const char* ProviderName = "Image Thumbnails"; + + protected: + bool IsSupportedThumbnail(AzToolsFramework::Thumbnailer::SharedThumbnailKey key) const override; + }; + } // namespace Thumbnails +} // namespace ImageProcessingAtom diff --git a/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Thumbnail/ImageThumbnailSystemComponent.cpp b/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Thumbnail/ImageThumbnailSystemComponent.cpp new file mode 100644 index 0000000000..14f125c283 --- /dev/null +++ b/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Thumbnail/ImageThumbnailSystemComponent.cpp @@ -0,0 +1,180 @@ +/* + * 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 "ImageProcessing_precompiled.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace ImageProcessingAtom +{ + namespace Thumbnails + { + void ImageThumbnailSystemComponent::Reflect(AZ::ReflectContext* context) + { + if (AZ::SerializeContext* serialize = azrtti_cast(context)) + { + serialize->Class() + ->Version(0); + + if (AZ::EditContext* ec = serialize->GetEditContext()) + { + ec->Class("ImageThumbnailSystemComponent", "System component for image thumbnails.") + ->ClassElement(AZ::Edit::ClassElements::EditorData, "") + ->Attribute(AZ::Edit::Attributes::AppearsInAddComponentMenu, AZ_CRC_CE("System")) + ->Attribute(AZ::Edit::Attributes::AutoExpand, true); + } + } + } + + void ImageThumbnailSystemComponent::GetProvidedServices(AZ::ComponentDescriptor::DependencyArrayType& provided) + { + provided.push_back(AZ_CRC_CE("ImageThumbnailSystem")); + } + + void ImageThumbnailSystemComponent::GetIncompatibleServices(AZ::ComponentDescriptor::DependencyArrayType& incompatible) + { + incompatible.push_back(AZ_CRC_CE("ImageThumbnailSystem")); + } + + void ImageThumbnailSystemComponent::GetRequiredServices(AZ::ComponentDescriptor::DependencyArrayType& required) + { + required.push_back(AZ_CRC_CE("ThumbnailerService")); + } + + void ImageThumbnailSystemComponent::GetDependentServices(AZ::ComponentDescriptor::DependencyArrayType& dependent) + { + AZ_UNUSED(dependent); + } + + void ImageThumbnailSystemComponent::Activate() + { + AzFramework::ApplicationLifecycleEvents::Bus::Handler::BusConnect(); + AzToolsFramework::Thumbnailer::ThumbnailerRendererRequestBus::Handler::BusConnect(AZ::RPI::StreamingImageAsset::RTTI_Type()); + SetupThumbnails(); + } + + void ImageThumbnailSystemComponent::Deactivate() + { + TeardownThumbnails(); + AzToolsFramework::Thumbnailer::ThumbnailerRendererRequestBus::Handler::BusDisconnect(); + AzFramework::ApplicationLifecycleEvents::Bus::Handler::BusDisconnect(); + } + + void ImageThumbnailSystemComponent::SetupThumbnails() + { + using namespace AzToolsFramework::Thumbnailer; + + ThumbnailerRequestsBus::Broadcast( + &ThumbnailerRequests::RegisterThumbnailProvider, MAKE_TCACHE(Thumbnails::ImageThumbnailCache), + ThumbnailContext::DefaultContext); + } + + void ImageThumbnailSystemComponent::TeardownThumbnails() + { + using namespace AzToolsFramework::Thumbnailer; + + ThumbnailerRequestsBus::Broadcast( + &ThumbnailerRequests::UnregisterThumbnailProvider, Thumbnails::ImageThumbnailCache::ProviderName, + ThumbnailContext::DefaultContext); + } + + void ImageThumbnailSystemComponent::OnApplicationAboutToStop() + { + TeardownThumbnails(); + } + + bool ImageThumbnailSystemComponent::Installed() const + { + return true; + } + + void ImageThumbnailSystemComponent::RenderThumbnail( + AzToolsFramework::Thumbnailer::SharedThumbnailKey thumbnailKey, int thumbnailSize) + { + auto sourceKey = azrtti_cast(thumbnailKey.data()); + if (sourceKey) + { + bool foundIt = false; + AZ::Data::AssetInfo assetInfo; + AZStd::string watchFolder; + AzToolsFramework::AssetSystemRequestBus::BroadcastResult( + foundIt, &AzToolsFramework::AssetSystemRequestBus::Events::GetSourceInfoBySourceUUID, sourceKey->GetSourceUuid(), + assetInfo, watchFolder); + + if (foundIt) + { + AZStd::string fullPath; + AZ::StringFunc::Path::Join(watchFolder.c_str(), assetInfo.m_relativePath.c_str(), fullPath); + if (RenerThumbnailFromImage(thumbnailKey, thumbnailSize, IImageObjectPtr(LoadImageFromFile(fullPath)))) + { + return; + } + } + } + + auto productKey = azrtti_cast(thumbnailKey.data()); + if (productKey) + { + if (RenerThumbnailFromImage(thumbnailKey, thumbnailSize, Utils::LoadImageFromImageAsset(productKey->GetAssetId()))) + { + return; + } + } + + AzToolsFramework::Thumbnailer::ThumbnailerRendererNotificationBus::Event( + thumbnailKey, &AzToolsFramework::Thumbnailer::ThumbnailerRendererNotifications::ThumbnailFailedToRender); + } + + bool ImageThumbnailSystemComponent::RenerThumbnailFromImage( + AzToolsFramework::Thumbnailer::SharedThumbnailKey thumbnailKey, int thumbnailSize, IImageObjectPtr previewImage) const + { + if (!previewImage) + { + return false; + } + + ImageToProcess imageToProcess(previewImage); + imageToProcess.ConvertFormat(ePixelFormat_R8G8B8A8); + previewImage = imageToProcess.Get(); + + AZ::u8* imageBuf = nullptr; + AZ::u32 mip = 0; + AZ::u32 pitch = 0; + previewImage->GetImagePointer(mip, imageBuf, pitch); + const AZ::u32 width = previewImage->GetWidth(mip); + const AZ::u32 height = previewImage->GetHeight(mip); + + QImage image(imageBuf, width, height, pitch, QImage::Format_RGBA8888); + + AzToolsFramework::Thumbnailer::ThumbnailerRendererNotificationBus::Event( + thumbnailKey, &AzToolsFramework::Thumbnailer::ThumbnailerRendererNotifications::ThumbnailRendered, + QPixmap::fromImage(image.scaled(QSize(thumbnailSize, thumbnailSize), Qt::KeepAspectRatio, Qt::SmoothTransformation))); + + return true; + } + } // namespace Thumbnails +} // namespace ImageProcessingAtom diff --git a/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Thumbnail/ImageThumbnailSystemComponent.h b/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Thumbnail/ImageThumbnailSystemComponent.h new file mode 100644 index 0000000000..943857fd35 --- /dev/null +++ b/Gems/Atom/Asset/ImageProcessingAtom/Code/Source/Thumbnail/ImageThumbnailSystemComponent.h @@ -0,0 +1,59 @@ +/* + * 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 + +namespace ImageProcessingAtom +{ + namespace Thumbnails + { + //! System component for image thumbnails. + class ImageThumbnailSystemComponent + : public AZ::Component + , public AzFramework::ApplicationLifecycleEvents::Bus::Handler + , public AzToolsFramework::Thumbnailer::ThumbnailerRendererRequestBus::Handler + { + public: + AZ_COMPONENT(ImageThumbnailSystemComponent, "{C45D69BB-4A3B-49CF-916B-580F05CAA755}"); + + static void Reflect(AZ::ReflectContext* context); + + static void GetProvidedServices(AZ::ComponentDescriptor::DependencyArrayType& provided); + static void GetIncompatibleServices(AZ::ComponentDescriptor::DependencyArrayType& incompatible); + static void GetRequiredServices(AZ::ComponentDescriptor::DependencyArrayType& required); + static void GetDependentServices(AZ::ComponentDescriptor::DependencyArrayType& dependent); + + protected: + // AZ::Component interface overrides... + void Activate() override; + void Deactivate() override; + + private: + void SetupThumbnails(); + void TeardownThumbnails(); + + // AzFramework::ApplicationLifecycleEvents overrides... + void OnApplicationAboutToStop() override; + + // ThumbnailerRendererRequestsBus::Handler interface overrides... + bool Installed() const override; + void RenderThumbnail(AzToolsFramework::Thumbnailer::SharedThumbnailKey thumbnailKey, int thumbnailSize) override; + + bool RenerThumbnailFromImage( + AzToolsFramework::Thumbnailer::SharedThumbnailKey thumbnailKey, int thumbnailSize, IImageObjectPtr previewImage) const; + }; + } // namespace Thumbnails +} // namespace ImageProcessingAtom diff --git a/Gems/Atom/Asset/ImageProcessingAtom/Code/imageprocessing_files.cmake b/Gems/Atom/Asset/ImageProcessingAtom/Code/imageprocessing_files.cmake index 0392e667ef..dfcfdfc319 100644 --- a/Gems/Atom/Asset/ImageProcessingAtom/Code/imageprocessing_files.cmake +++ b/Gems/Atom/Asset/ImageProcessingAtom/Code/imageprocessing_files.cmake @@ -133,4 +133,8 @@ set(FILES Source/Compressors/CryTextureSquisher/ColorBlockRGBA4x4s.h Source/Compressors/CryTextureSquisher/ColorBlockRGBA4x4c.h Source/Compressors/CryTextureSquisher/ColorTypes.h + Source/Thumbnail/ImageThumbnail.cpp + Source/Thumbnail/ImageThumbnail.h + Source/Thumbnail/ImageThumbnailSystemComponent.cpp + Source/Thumbnail/ImageThumbnailSystemComponent.h ) From db427609744269071f60c37bf3665e237aa85fc0 Mon Sep 17 00:00:00 2001 From: Steve Pham <82231385+spham-amzn@users.noreply.github.com> Date: Fri, 23 Apr 2021 11:13:59 -0700 Subject: [PATCH 22/32] Update install-ubuntu-build-tools.sh --- .../build_node/Platform/Linux/install-ubuntu-build-tools.sh | 2 +- 1 file changed, 1 insertion(+), 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 5fc04e0e2d..fd7b59592a 100755 --- a/scripts/build/build_node/Platform/Linux/install-ubuntu-build-tools.sh +++ b/scripts/build/build_node/Platform/Linux/install-ubuntu-build-tools.sh @@ -121,7 +121,7 @@ PACKAGE_FILE_LIST=package-list.ubuntu-$UBUNTU_DISTRO.txt echo Reading package list $PACKAGE_FILE_LIST # Read each line (strip out comment tags) -for LINE in `cat package-list.ubuntu-focal.txt | sed 's/#.*$//g'` +for LINE in `cat $PACKAGE_FILE_LIST | sed 's/#.*$//g'` do PACKAGE=`echo $LINE | awk -F / '{print $1}'` if [ "$PACKAGE" != "" ] # Skip blank lines From 4d88cab139c76571eeba35e8a74b5c818b4296e1 Mon Sep 17 00:00:00 2001 From: evanchia Date: Fri, 23 Apr 2021 11:32:44 -0700 Subject: [PATCH 23/32] Adding test metrics field to build config file --- scripts/build/Jenkins/Jenkinsfile | 2 +- .../build/Platform/Windows/build_config.json | 18 ++++++++++++------ 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/scripts/build/Jenkins/Jenkinsfile b/scripts/build/Jenkins/Jenkinsfile index 8d0c8d670d..57c4634caa 100644 --- a/scripts/build/Jenkins/Jenkinsfile +++ b/scripts/build/Jenkins/Jenkinsfile @@ -518,7 +518,7 @@ try { CreateBuildStage(pipelineConfig, platform.key, build_job.key, envVars).call() } - if (env.MARS_REPO && platform.key == 'Windows' && build_job_name.startsWith('test')) { + if (env.MARS_REPO && platform.value.build_types[build_job_name].PARAMETERS.contains('TEST_METRICS') && platform.value.build_types[build_job_name].PARAMETERS.TEST_METRICS) { def output_directory = platform.value.build_types[build_job_name].PARAMETERS.OUTPUT_DIRECTORY def configuration = platform.value.build_types[build_job_name].PARAMETERS.CONFIGURATION CreateTestMetricsStage(pipelineConfig, branchName, envVars, build_job_name, output_directory, configuration).call() diff --git a/scripts/build/Platform/Windows/build_config.json b/scripts/build/Platform/Windows/build_config.json index a4a5a52c4d..11213f11b2 100644 --- a/scripts/build/Platform/Windows/build_config.json +++ b/scripts/build/Platform/Windows/build_config.json @@ -104,7 +104,8 @@ "CMAKE_LY_PROJECTS": "AutomatedTesting", "CMAKE_TARGET": "TEST_SUITE_smoke TEST_SUITE_main", "CMAKE_NATIVE_BUILD_ARGS": "/m /nologo", - "CTEST_OPTIONS": "-L \"(SUITE_smoke|SUITE_main)\" -LE \"(REQUIRES_gpu)\" -T Test" + "CTEST_OPTIONS": "-L \"(SUITE_smoke|SUITE_main)\" -LE \"(REQUIRES_gpu)\" -T Test", + "TEST_METRICS": true } }, "profile_vs2019": { @@ -151,7 +152,8 @@ "CMAKE_LY_PROJECTS": "AutomatedTesting", "CMAKE_TARGET": "TEST_SUITE_smoke TEST_SUITE_main", "CMAKE_NATIVE_BUILD_ARGS": "/m /nologo", - "CTEST_OPTIONS": "-L \"(SUITE_smoke|SUITE_main)\" -LE \"(REQUIRES_gpu)\" -T Test" + "CTEST_OPTIONS": "-L \"(SUITE_smoke|SUITE_main)\" -LE \"(REQUIRES_gpu)\" -T Test", + "TEST_METRICS": true } }, "test_gpu_profile_vs2019": { @@ -169,7 +171,8 @@ "CMAKE_LY_PROJECTS": "AutomatedTesting", "CMAKE_TARGET": "TEST_SUITE_smoke TEST_SUITE_main", "CMAKE_NATIVE_BUILD_ARGS": "/m /nologo", - "CTEST_OPTIONS": "-L \"(SUITE_smoke_REQUIRES_gpu|SUITE_main_REQUIRES_gpu)\" -T Test" + "CTEST_OPTIONS": "-L \"(SUITE_smoke_REQUIRES_gpu|SUITE_main_REQUIRES_gpu)\" -T Test", + "TEST_METRICS": true } }, "asset_profile_vs2019": { @@ -214,7 +217,8 @@ "CMAKE_LY_PROJECTS": "AutomatedTesting", "CMAKE_TARGET": "TEST_SUITE_periodic", "CMAKE_NATIVE_BUILD_ARGS": "/m /nologo", - "CTEST_OPTIONS": "-L \"(SUITE_periodic)\" -T Test" + "CTEST_OPTIONS": "-L \"(SUITE_periodic)\" -T Test", + "TEST_METRICS": true } }, "sandbox_test_profile_vs2019": { @@ -233,7 +237,8 @@ "CMAKE_LY_PROJECTS": "AutomatedTesting", "CMAKE_TARGET": "TEST_SUITE_sandbox", "CMAKE_NATIVE_BUILD_ARGS": "/m /nologo", - "CTEST_OPTIONS": "-L \"(SUITE_sandbox)\" -T Test" + "CTEST_OPTIONS": "-L \"(SUITE_sandbox)\" -T Test", + "TEST_METRICS": true } }, "benchmark_test_profile_vs2019": { @@ -249,7 +254,8 @@ "CMAKE_LY_PROJECTS": "AutomatedTesting", "CMAKE_TARGET": "TEST_SUITE_benchmark", "CMAKE_NATIVE_BUILD_ARGS": "/m /nologo", - "CTEST_OPTIONS": "-L \"(SUITE_benchmark)\" -T Test" + "CTEST_OPTIONS": "-L \"(SUITE_benchmark)\" -T Test", + "TEST_METRICS": true } }, "release_vs2019": { From 9abd112a7e6770f4dbfd0bd42f188f2e73567c35 Mon Sep 17 00:00:00 2001 From: evanchia Date: Fri, 23 Apr 2021 13:42:55 -0700 Subject: [PATCH 24/32] chaged boolean type to string --- scripts/build/Platform/Windows/build_config.json | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/scripts/build/Platform/Windows/build_config.json b/scripts/build/Platform/Windows/build_config.json index 11213f11b2..1eb0a73ee0 100644 --- a/scripts/build/Platform/Windows/build_config.json +++ b/scripts/build/Platform/Windows/build_config.json @@ -105,7 +105,7 @@ "CMAKE_TARGET": "TEST_SUITE_smoke TEST_SUITE_main", "CMAKE_NATIVE_BUILD_ARGS": "/m /nologo", "CTEST_OPTIONS": "-L \"(SUITE_smoke|SUITE_main)\" -LE \"(REQUIRES_gpu)\" -T Test", - "TEST_METRICS": true + "TEST_METRICS": "True" } }, "profile_vs2019": { @@ -153,7 +153,7 @@ "CMAKE_TARGET": "TEST_SUITE_smoke TEST_SUITE_main", "CMAKE_NATIVE_BUILD_ARGS": "/m /nologo", "CTEST_OPTIONS": "-L \"(SUITE_smoke|SUITE_main)\" -LE \"(REQUIRES_gpu)\" -T Test", - "TEST_METRICS": true + "TEST_METRICS": "True" } }, "test_gpu_profile_vs2019": { @@ -172,7 +172,7 @@ "CMAKE_TARGET": "TEST_SUITE_smoke TEST_SUITE_main", "CMAKE_NATIVE_BUILD_ARGS": "/m /nologo", "CTEST_OPTIONS": "-L \"(SUITE_smoke_REQUIRES_gpu|SUITE_main_REQUIRES_gpu)\" -T Test", - "TEST_METRICS": true + "TEST_METRICS": "True" } }, "asset_profile_vs2019": { @@ -218,7 +218,7 @@ "CMAKE_TARGET": "TEST_SUITE_periodic", "CMAKE_NATIVE_BUILD_ARGS": "/m /nologo", "CTEST_OPTIONS": "-L \"(SUITE_periodic)\" -T Test", - "TEST_METRICS": true + "TEST_METRICS": "True" } }, "sandbox_test_profile_vs2019": { @@ -238,7 +238,7 @@ "CMAKE_TARGET": "TEST_SUITE_sandbox", "CMAKE_NATIVE_BUILD_ARGS": "/m /nologo", "CTEST_OPTIONS": "-L \"(SUITE_sandbox)\" -T Test", - "TEST_METRICS": true + "TEST_METRICS": "True" } }, "benchmark_test_profile_vs2019": { @@ -255,7 +255,7 @@ "CMAKE_TARGET": "TEST_SUITE_benchmark", "CMAKE_NATIVE_BUILD_ARGS": "/m /nologo", "CTEST_OPTIONS": "-L \"(SUITE_benchmark)\" -T Test", - "TEST_METRICS": true + "TEST_METRICS": "True" } }, "release_vs2019": { From 3ac0008bc26936068d256eb3911409c58a27e60c Mon Sep 17 00:00:00 2001 From: evanchia Date: Fri, 23 Apr 2021 13:59:11 -0700 Subject: [PATCH 25/32] fixing jenkinsfile to use containsKey() --- scripts/build/Jenkins/Jenkinsfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/build/Jenkins/Jenkinsfile b/scripts/build/Jenkins/Jenkinsfile index 57c4634caa..39d0ec5a08 100644 --- a/scripts/build/Jenkins/Jenkinsfile +++ b/scripts/build/Jenkins/Jenkinsfile @@ -518,7 +518,7 @@ try { CreateBuildStage(pipelineConfig, platform.key, build_job.key, envVars).call() } - if (env.MARS_REPO && platform.value.build_types[build_job_name].PARAMETERS.contains('TEST_METRICS') && platform.value.build_types[build_job_name].PARAMETERS.TEST_METRICS) { + if (env.MARS_REPO && platform.value.build_types[build_job_name].PARAMETERS.contains('TEST_METRICS') && platform.value.build_types[build_job_name].PARAMETERS.TEST_METRICS == 'True') { def output_directory = platform.value.build_types[build_job_name].PARAMETERS.OUTPUT_DIRECTORY def configuration = platform.value.build_types[build_job_name].PARAMETERS.CONFIGURATION CreateTestMetricsStage(pipelineConfig, branchName, envVars, build_job_name, output_directory, configuration).call() From 06dd4e93788593b261ec37222e23ddcb08f3c983 Mon Sep 17 00:00:00 2001 From: evanchia Date: Fri, 23 Apr 2021 14:01:18 -0700 Subject: [PATCH 26/32] adding containsKey() in jenkinsfile --- scripts/build/Jenkins/Jenkinsfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/build/Jenkins/Jenkinsfile b/scripts/build/Jenkins/Jenkinsfile index 39d0ec5a08..bb9bd4ff48 100644 --- a/scripts/build/Jenkins/Jenkinsfile +++ b/scripts/build/Jenkins/Jenkinsfile @@ -518,7 +518,7 @@ try { CreateBuildStage(pipelineConfig, platform.key, build_job.key, envVars).call() } - if (env.MARS_REPO && platform.value.build_types[build_job_name].PARAMETERS.contains('TEST_METRICS') && platform.value.build_types[build_job_name].PARAMETERS.TEST_METRICS == 'True') { + if (env.MARS_REPO && platform.value.build_types[build_job_name].PARAMETERS.containsKey('TEST_METRICS') && platform.value.build_types[build_job_name].PARAMETERS.TEST_METRICS == 'True') { def output_directory = platform.value.build_types[build_job_name].PARAMETERS.OUTPUT_DIRECTORY def configuration = platform.value.build_types[build_job_name].PARAMETERS.CONFIGURATION CreateTestMetricsStage(pipelineConfig, branchName, envVars, build_job_name, output_directory, configuration).call() From 6dc0d846d6793de90ec320637bd374487db60853 Mon Sep 17 00:00:00 2001 From: spham Date: Fri, 23 Apr 2021 15:43:48 -0700 Subject: [PATCH 27/32] - Adding missing Module code for RHI Vulkan Builder (Fix error related to DynamicModuleHandle not being discovered during Gem Load) - Re-ordered build dependencies for Atom_RHI_Vulkan builder to resolve linker undefined references in Linux --- Gems/Atom/RHI/Vulkan/Code/CMakeLists.txt | 2 +- .../RHI.Builders/BuilderModule_Linux.cpp | 51 +++++++++++++++++++ .../Platform/Linux/Vulkan_Traits_Linux.h | 2 +- .../Linux/platform_builders_linux_files.cmake | 1 + .../Linux/platform_glad_linux_files.cmake | 1 - .../Linux/platform_reflect_linux_files.cmake | 1 - 6 files changed, 54 insertions(+), 4 deletions(-) create mode 100644 Gems/Atom/RHI/Vulkan/Code/Source/Platform/Linux/RHI.Builders/BuilderModule_Linux.cpp diff --git a/Gems/Atom/RHI/Vulkan/Code/CMakeLists.txt b/Gems/Atom/RHI/Vulkan/Code/CMakeLists.txt index f433c24fd3..497568df52 100644 --- a/Gems/Atom/RHI/Vulkan/Code/CMakeLists.txt +++ b/Gems/Atom/RHI/Vulkan/Code/CMakeLists.txt @@ -188,11 +188,11 @@ if(PAL_TRAIT_BUILD_HOST_TOOLS) BUILD_DEPENDENCIES PRIVATE AZ::AzCore - Gem::Atom_RHI.Edit Gem::Atom_RHI.Reflect Gem::Atom_RHI.Public Gem::Atom_RHI_Vulkan.Reflect Gem::Atom_RHI_Vulkan.Builders.Static + Gem::Atom_RHI.Edit ) endif() diff --git a/Gems/Atom/RHI/Vulkan/Code/Source/Platform/Linux/RHI.Builders/BuilderModule_Linux.cpp b/Gems/Atom/RHI/Vulkan/Code/Source/Platform/Linux/RHI.Builders/BuilderModule_Linux.cpp new file mode 100644 index 0000000000..84347cd5ea --- /dev/null +++ b/Gems/Atom/RHI/Vulkan/Code/Source/Platform/Linux/RHI.Builders/BuilderModule_Linux.cpp @@ -0,0 +1,51 @@ +/* + * 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 + +namespace AZ +{ + namespace Vulkan + { + + //! Exposes Vulkan RHI Building components to the Asset Processor. + class BuilderModule final + : public AZ::Module + { + public: + AZ_RTTI(BuilderModule, "{C22CF1CB-59AA-4247-A983-BC371A7B0513}", AZ::Module); + + BuilderModule() + { + m_descriptors.insert(m_descriptors.end(), { + ShaderPlatformInterfaceSystemComponent::CreateDescriptor() + }); + } + + AZ::ComponentTypeList GetRequiredSystemComponents() const override + { + return + { + azrtti_typeid(), + }; + } + }; + } // namespace Vulkan +} // namespace AZ + +// DO NOT MODIFY THIS LINE UNLESS YOU RENAME THE GEM +// The first parameter should be GemName_GemIdLower +// The second should be the fully qualified name of the class above +AZ_DECLARE_MODULE_CLASS(Gem_Atom_RHI_Vulkan_Builders, AZ::Vulkan::BuilderModule); diff --git a/Gems/Atom/RHI/Vulkan/Code/Source/Platform/Linux/Vulkan_Traits_Linux.h b/Gems/Atom/RHI/Vulkan/Code/Source/Platform/Linux/Vulkan_Traits_Linux.h index 375b9b2f66..3c2162ef45 100644 --- a/Gems/Atom/RHI/Vulkan/Code/Source/Platform/Linux/Vulkan_Traits_Linux.h +++ b/Gems/Atom/RHI/Vulkan/Code/Source/Platform/Linux/Vulkan_Traits_Linux.h @@ -11,7 +11,7 @@ */ #pragma once -#define AZ_TRAIT_ATOM_SHADERBUILDER_DXC "Builders/DirectXShaderCompilerAz/dxc.exe" +#define AZ_TRAIT_ATOM_SHADERBUILDER_DXC "Builders/DirectXShaderCompilerAz/bin/dxc" #define AZ_TRAIT_ATOM_VULKAN_DISABLE_DUAL_SOURCE_BLENDING 0 #define AZ_TRAIT_ATOM_VULKAN_DLL "" #define AZ_TRAIT_ATOM_VULKAN_DLL_1 "" diff --git a/Gems/Atom/RHI/Vulkan/Code/Source/Platform/Linux/platform_builders_linux_files.cmake b/Gems/Atom/RHI/Vulkan/Code/Source/Platform/Linux/platform_builders_linux_files.cmake index 5714be5dfb..119f8ac1b3 100644 --- a/Gems/Atom/RHI/Vulkan/Code/Source/Platform/Linux/platform_builders_linux_files.cmake +++ b/Gems/Atom/RHI/Vulkan/Code/Source/Platform/Linux/platform_builders_linux_files.cmake @@ -10,4 +10,5 @@ # set(FILES + RHI.Builders/BuilderModule_Linux.cpp ) diff --git a/Gems/Atom/RHI/Vulkan/Code/Source/Platform/Linux/platform_glad_linux_files.cmake b/Gems/Atom/RHI/Vulkan/Code/Source/Platform/Linux/platform_glad_linux_files.cmake index bb71412c73..5714be5dfb 100644 --- a/Gems/Atom/RHI/Vulkan/Code/Source/Platform/Linux/platform_glad_linux_files.cmake +++ b/Gems/Atom/RHI/Vulkan/Code/Source/Platform/Linux/platform_glad_linux_files.cmake @@ -10,5 +10,4 @@ # set(FILES - ../Common/Unimplemented/Empty_Unimplemented.cpp ) diff --git a/Gems/Atom/RHI/Vulkan/Code/Source/Platform/Linux/platform_reflect_linux_files.cmake b/Gems/Atom/RHI/Vulkan/Code/Source/Platform/Linux/platform_reflect_linux_files.cmake index bb71412c73..5714be5dfb 100644 --- a/Gems/Atom/RHI/Vulkan/Code/Source/Platform/Linux/platform_reflect_linux_files.cmake +++ b/Gems/Atom/RHI/Vulkan/Code/Source/Platform/Linux/platform_reflect_linux_files.cmake @@ -10,5 +10,4 @@ # set(FILES - ../Common/Unimplemented/Empty_Unimplemented.cpp ) From bc11711ab94f886bcef16734187020736c168cad Mon Sep 17 00:00:00 2001 From: chcurran Date: Fri, 23 Apr 2021 15:52:29 -0700 Subject: [PATCH 28/32] Fix and test for LYN-2817, container input in user functions --- .../VariablePanel/SlotTypeSelectorWidget.cpp | 7 + .../ScriptCanvas/Core/SubgraphInterface.cpp | 2 +- ...unctionContainerInputFunction.scriptcanvas | 2370 +++++++++++++++++ ...st_FunctionContainerInputTest.scriptcanvas | 567 ++++ .../Tests/ScriptCanvas_RuntimeInterpreted.cpp | 5 + 5 files changed, 2950 insertions(+), 1 deletion(-) create mode 100644 Gems/ScriptCanvasTesting/Assets/ScriptCanvas/UnitTests/LY_SC_UnitTest_FunctionContainerInputFunction.scriptcanvas create mode 100644 Gems/ScriptCanvasTesting/Assets/ScriptCanvas/UnitTests/LY_SC_UnitTest_FunctionContainerInputTest.scriptcanvas diff --git a/Gems/ScriptCanvas/Code/Editor/View/Widgets/VariablePanel/SlotTypeSelectorWidget.cpp b/Gems/ScriptCanvas/Code/Editor/View/Widgets/VariablePanel/SlotTypeSelectorWidget.cpp index d345778f71..e7090ea4a6 100644 --- a/Gems/ScriptCanvas/Code/Editor/View/Widgets/VariablePanel/SlotTypeSelectorWidget.cpp +++ b/Gems/ScriptCanvas/Code/Editor/View/Widgets/VariablePanel/SlotTypeSelectorWidget.cpp @@ -80,6 +80,13 @@ namespace ScriptCanvasEditor QObject::connect(ui->slotName, &QLineEdit::returnPressed, this, &SlotTypeSelectorWidget::OnReturnPressed); QObject::connect(ui->slotName, &QLineEdit::textChanged, this, &SlotTypeSelectorWidget::OnNameChanged); QObject::connect(ui->variablePalette, &QTableView::clicked, this, [this]() { ui->buttonBox->button(QDialogButtonBox::Ok)->setEnabled(true); }); + QObject::connect(ui->variablePalette, &VariablePaletteTableView::CreateNamedVariable, this, [this](const AZStd::string& variableName, const ScriptCanvas::Data::Type& variableType) + { + // only emitted on container types + OnCreateVariable(variableType); + OnNameChanged(variableName.c_str()); + accept(); + }); // Tell the widget to auto create our context menu, for now setContextMenuPolicy(Qt::ActionsContextMenu); diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Core/SubgraphInterface.cpp b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Core/SubgraphInterface.cpp index 957b8c64d1..2b063a8b22 100644 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Core/SubgraphInterface.cpp +++ b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Core/SubgraphInterface.cpp @@ -127,7 +127,7 @@ namespace ScriptCanvas return false; } - if (!(datum == rhs.datum)) + if (!(datum.GetType() == rhs.datum.GetType())) { return false; } diff --git a/Gems/ScriptCanvasTesting/Assets/ScriptCanvas/UnitTests/LY_SC_UnitTest_FunctionContainerInputFunction.scriptcanvas b/Gems/ScriptCanvasTesting/Assets/ScriptCanvas/UnitTests/LY_SC_UnitTest_FunctionContainerInputFunction.scriptcanvas new file mode 100644 index 0000000000..b09c192e66 --- /dev/null +++ b/Gems/ScriptCanvasTesting/Assets/ScriptCanvas/UnitTests/LY_SC_UnitTest_FunctionContainerInputFunction.scriptcanvas @@ -0,0 +1,2370 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Gems/ScriptCanvasTesting/Assets/ScriptCanvas/UnitTests/LY_SC_UnitTest_FunctionContainerInputTest.scriptcanvas b/Gems/ScriptCanvasTesting/Assets/ScriptCanvas/UnitTests/LY_SC_UnitTest_FunctionContainerInputTest.scriptcanvas new file mode 100644 index 0000000000..55605f684f --- /dev/null +++ b/Gems/ScriptCanvasTesting/Assets/ScriptCanvas/UnitTests/LY_SC_UnitTest_FunctionContainerInputTest.scriptcanvas @@ -0,0 +1,567 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Gems/ScriptCanvasTesting/Code/Tests/ScriptCanvas_RuntimeInterpreted.cpp b/Gems/ScriptCanvasTesting/Code/Tests/ScriptCanvas_RuntimeInterpreted.cpp index 53f124476f..3e02e90ae9 100644 --- a/Gems/ScriptCanvasTesting/Code/Tests/ScriptCanvas_RuntimeInterpreted.cpp +++ b/Gems/ScriptCanvasTesting/Code/Tests/ScriptCanvas_RuntimeInterpreted.cpp @@ -130,6 +130,11 @@ TEST_F(ScriptCanvasTestFixture, InterpretedEventHandlerDisconnect) RunUnitTestGraph("LY_SC_UnitTest_EventHandlerDisconnect", runSpec); } +TEST_F(ScriptCanvasTestFixture, FunctionContainerInputTest) +{ + RunUnitTestGraph("LY_SC_UnitTest_FunctionContainerInputTest"); +} + TEST_F(ScriptCanvasTestFixture, InterpretedFixBoundMultipleResults) { RunUnitTestGraph("LY_SC_UnitTest_FixBoundMultipleResults"); From 29bf58cffc75bf3f5564ff5cc8d79f35e5d3befd Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Fri, 23 Apr 2021 17:11:28 -0700 Subject: [PATCH 29/32] SPEC-6517 RedCode: some more folders identified for removal 1 (#290) --- Code/Tools/.p4ignore | 2 -- .../XML/Expat/COPYING.txt | 22 ------------------- Code/Tools/MBCryExport/README.txt | 1 - Tools/sed/libiconv2.dll | 3 --- Tools/sed/libintl3.dll | 3 --- Tools/sed/sed.exe | 3 --- 6 files changed, 34 deletions(-) delete mode 100644 Code/Tools/.p4ignore delete mode 100644 Code/Tools/LoadingProfilerViewer/XML/Expat/COPYING.txt delete mode 100644 Code/Tools/MBCryExport/README.txt delete mode 100644 Tools/sed/libiconv2.dll delete mode 100644 Tools/sed/libintl3.dll delete mode 100644 Tools/sed/sed.exe diff --git a/Code/Tools/.p4ignore b/Code/Tools/.p4ignore deleted file mode 100644 index 3689617d02..0000000000 --- a/Code/Tools/.p4ignore +++ /dev/null @@ -1,2 +0,0 @@ -#Ignore these directories -SDKs diff --git a/Code/Tools/LoadingProfilerViewer/XML/Expat/COPYING.txt b/Code/Tools/LoadingProfilerViewer/XML/Expat/COPYING.txt deleted file mode 100644 index dcb4506429..0000000000 --- a/Code/Tools/LoadingProfilerViewer/XML/Expat/COPYING.txt +++ /dev/null @@ -1,22 +0,0 @@ -Copyright (c) 1998, 1999, 2000 Thai Open Source Software Center Ltd - and Clark Cooper -Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006 Expat maintainers. - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be included -in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/Code/Tools/MBCryExport/README.txt b/Code/Tools/MBCryExport/README.txt deleted file mode 100644 index fc204cbcd9..0000000000 --- a/Code/Tools/MBCryExport/README.txt +++ /dev/null @@ -1 +0,0 @@ -MotionBuilder support was removed in CL 88235, please back it out if this decision is reversed. This was for bug LMBR-9220 diff --git a/Tools/sed/libiconv2.dll b/Tools/sed/libiconv2.dll deleted file mode 100644 index 5d24ac9b71..0000000000 --- a/Tools/sed/libiconv2.dll +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:3ec2d1a924ef6f19f2db45e48b9cf4b74a904af5720100e3da02182eee3bcf02 -size 898048 diff --git a/Tools/sed/libintl3.dll b/Tools/sed/libintl3.dll deleted file mode 100644 index d12401dccd..0000000000 --- a/Tools/sed/libintl3.dll +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:b92377f1ecb1288467e81abe286d1fd12946d017e74bd1ab5fb2f11e46955154 -size 101888 diff --git a/Tools/sed/sed.exe b/Tools/sed/sed.exe deleted file mode 100644 index cb201c4a91..0000000000 --- a/Tools/sed/sed.exe +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:4451a8bf312f277291e433770c1eed0fbf8491a17ab6f957942cba3df4840953 -size 209920 From b48fd12435900dff51096e6502e60aaa8155e7de Mon Sep 17 00:00:00 2001 From: rgba16f <82187279+rgba16f@users.noreply.github.com> Date: Fri, 23 Apr 2021 20:32:42 -0500 Subject: [PATCH 30/32] Delete CryRenderAtomShim from the Gems/AtomLyIntegration/CMakeLists.txt file --- Gems/AtomLyIntegration/CMakeLists.txt | 1 - 1 file changed, 1 deletion(-) diff --git a/Gems/AtomLyIntegration/CMakeLists.txt b/Gems/AtomLyIntegration/CMakeLists.txt index e313015b46..57bb860a9e 100644 --- a/Gems/AtomLyIntegration/CMakeLists.txt +++ b/Gems/AtomLyIntegration/CMakeLists.txt @@ -15,5 +15,4 @@ add_subdirectory(AtomImGuiTools) add_subdirectory(EMotionFXAtom) add_subdirectory(AtomFont) add_subdirectory(TechnicalArt) -#add_subdirectory(CryRenderAtomShim) add_subdirectory(AtomBridge) From 23dba55c21992b20739f37fe8e229542454bbec5 Mon Sep 17 00:00:00 2001 From: Aaron Ruiz Mora Date: Mon, 26 Apr 2021 14:58:03 +0100 Subject: [PATCH 31/32] Move flaky atom renderer test from main to sandbox test suite --- .../PythonTests/atom_renderer/CMakeLists.txt | 13 +- .../atom_renderer/test_Atom_MainSuite.py | 181 +-------------- .../atom_renderer/test_Atom_SandboxSuite.py | 219 ++++++++++++++++++ 3 files changed, 234 insertions(+), 179 deletions(-) create mode 100644 AutomatedTesting/Gem/PythonTests/atom_renderer/test_Atom_SandboxSuite.py diff --git a/AutomatedTesting/Gem/PythonTests/atom_renderer/CMakeLists.txt b/AutomatedTesting/Gem/PythonTests/atom_renderer/CMakeLists.txt index 34b504b2d3..7ffc2072f1 100644 --- a/AutomatedTesting/Gem/PythonTests/atom_renderer/CMakeLists.txt +++ b/AutomatedTesting/Gem/PythonTests/atom_renderer/CMakeLists.txt @@ -16,7 +16,7 @@ if(PAL_TRAIT_BUILD_HOST_TOOLS AND PAL_TRAIT_BUILD_TESTS_SUPPORTED AND AutomatedTesting IN_LIST LY_PROJECTS) ly_add_pytest( - NAME AtomRenderer::HydraTestsMain + NAME AutomatedTesting::AtomRenderer_HydraTests_Main TEST_SUITE main PATH ${CMAKE_CURRENT_LIST_DIR}/test_Atom_MainSuite.py TEST_SERIAL @@ -26,4 +26,15 @@ if(PAL_TRAIT_BUILD_HOST_TOOLS AND PAL_TRAIT_BUILD_TESTS_SUPPORTED AND AutomatedT AutomatedTesting.Assets Editor ) + ly_add_pytest( + NAME AutomatedTesting::AtomRenderer_HydraTests_Sandbox + TEST_SUITE sandbox + PATH ${CMAKE_CURRENT_LIST_DIR}/test_Atom_SandboxSuite.py + TEST_SERIAL + TIMEOUT 300 + RUNTIME_DEPENDENCIES + AssetProcessor + AutomatedTesting.Assets + Editor + ) endif() diff --git a/AutomatedTesting/Gem/PythonTests/atom_renderer/test_Atom_MainSuite.py b/AutomatedTesting/Gem/PythonTests/atom_renderer/test_Atom_MainSuite.py index a82d5c5fd4..8031d7e65d 100644 --- a/AutomatedTesting/Gem/PythonTests/atom_renderer/test_Atom_MainSuite.py +++ b/AutomatedTesting/Gem/PythonTests/atom_renderer/test_Atom_MainSuite.py @@ -39,181 +39,6 @@ class TestAtomEditorComponents(object): request.addfinalizer(teardown) - @pytest.mark.test_case_id( - "C32078130", # Tone Mapper - "C32078129", # Light - "C32078131", # Radius Weight Modifier - "C32078127", # PostFX Layer - "C32078126", # Point Light - "C32078125", # Physical Sky - "C32078115", # Global Skylight (IBL) - "C32078121", # Exposure Control - "C32078120", # Directional Light - "C32078119", # DepthOfField - "C32078118") # Decal - def test_AtomEditorComponents_AddedToEntity(self, request, editor, level, workspace, project, launcher_platform): - cfg_args = [level] - - expected_lines = [ - # Area Light Component - "Area Light Entity successfully created", - "Area Light_test: Component added to the entity: True", - "Area Light_test: Component removed after UNDO: True", - "Area Light_test: Component added after REDO: True", - "Area Light_test: Entered game mode: True", - "Area Light_test: Entity enabled after adding required components: True", - "Area Light_test: Entity is hidden: True", - "Area Light_test: Entity is shown: True", - "Area Light_test: Entity deleted: True", - "Area Light_test: UNDO entity deletion works: True", - "Area Light_test: REDO entity deletion works: True", - # Decal Component - "Decal Entity successfully created", - "Decal_test: Component added to the entity: True", - "Decal_test: Component removed after UNDO: True", - "Decal_test: Component added after REDO: True", - "Decal_test: Entered game mode: True", - "Decal_test: Exit game mode: True", - "Decal Settings|Decal Settings|Material: SUCCESS", - "Decal_test: Entity is hidden: True", - "Decal_test: Entity is shown: True", - "Decal_test: Entity deleted: True", - "Decal_test: UNDO entity deletion works: True", - "Decal_test: REDO entity deletion works: True", - # DepthOfField Component - "DepthOfField Entity successfully created", - "DepthOfField_test: Component added to the entity: True", - "DepthOfField_test: Component removed after UNDO: True", - "DepthOfField_test: Component added after REDO: True", - "DepthOfField_test: Entered game mode: True", - "DepthOfField_test: Exit game mode: True", - "DepthOfField_test: Entity disabled initially: True", - "DepthOfField_test: Entity enabled after adding required components: True", - "DepthOfField Controller|Configuration|Camera Entity: SUCCESS", - "DepthOfField_test: Entity is hidden: True", - "DepthOfField_test: Entity is shown: True", - "DepthOfField_test: Entity deleted: True", - "DepthOfField_test: UNDO entity deletion works: True", - "DepthOfField_test: REDO entity deletion works: True", - # Directional Light Component - "Directional Light Entity successfully created", - "Directional Light_test: Component added to the entity: True", - "Directional Light_test: Component removed after UNDO: True", - "Directional Light_test: Component added after REDO: True", - "Directional Light_test: Entered game mode: True", - "Directional Light_test: Exit game mode: True", - "Directional Light Controller|Configuration|Shadow|Camera: SUCCESS", - "Directional Light_test: Entity is hidden: True", - "Directional Light_test: Entity is shown: True", - "Directional Light_test: Entity deleted: True", - "Directional Light_test: UNDO entity deletion works: True", - "Directional Light_test: REDO entity deletion works: True", - # Exposure Control Component - "Exposure Control Entity successfully created", - "Exposure Control_test: Component added to the entity: True", - "Exposure Control_test: Component removed after UNDO: True", - "Exposure Control_test: Component added after REDO: True", - "Exposure Control_test: Entered game mode: True", - "Exposure Control_test: Exit game mode: True", - "Exposure Control_test: Entity disabled initially: True", - "Exposure Control_test: Entity enabled after adding required components: True", - "Exposure Control_test: Entity is hidden: True", - "Exposure Control_test: Entity is shown: True", - "Exposure Control_test: Entity deleted: True", - "Exposure Control_test: UNDO entity deletion works: True", - "Exposure Control_test: REDO entity deletion works: True", - # Global Skylight (IBL) Component - "Global Skylight (IBL) Entity successfully created", - "Global Skylight (IBL)_test: Component added to the entity: True", - "Global Skylight (IBL)_test: Component removed after UNDO: True", - "Global Skylight (IBL)_test: Component added after REDO: True", - "Global Skylight (IBL)_test: Entered game mode: True", - "Global Skylight (IBL)_test: Exit game mode: True", - "Global Skylight (IBL) Controller|Configuration|Diffuse Image: SUCCESS", - "Global Skylight (IBL) Controller|Configuration|Specular Image: SUCCESS", - "Global Skylight (IBL)_test: Entity is hidden: True", - "Global Skylight (IBL)_test: Entity is shown: True", - "Global Skylight (IBL)_test: Entity deleted: True", - "Global Skylight (IBL)_test: UNDO entity deletion works: True", - "Global Skylight (IBL)_test: REDO entity deletion works: True", - # Physical Sky Component - "Physical Sky Entity successfully created", - "Physical Sky component was added to entity", - "Entity has a Physical Sky component", - "Physical Sky_test: Component added to the entity: True", - "Physical Sky_test: Component removed after UNDO: True", - "Physical Sky_test: Component added after REDO: True", - "Physical Sky_test: Entered game mode: True", - "Physical Sky_test: Exit game mode: True", - "Physical Sky_test: Entity is hidden: True", - "Physical Sky_test: Entity is shown: True", - "Physical Sky_test: Entity deleted: True", - "Physical Sky_test: UNDO entity deletion works: True", - "Physical Sky_test: REDO entity deletion works: True", - # Point Light Component - "Point Light Entity successfully created", - "Point Light_test: Component added to the entity: True", - "Point Light_test: Component removed after UNDO: True", - "Point Light_test: Component added after REDO: True", - "Point Light_test: Entered game mode: True", - "Point Light_test: Exit game mode: True", - "Point Light_test: Entity is hidden: True", - "Point Light_test: Entity is shown: True", - "Point Light_test: Entity deleted: True", - "Point Light_test: UNDO entity deletion works: True", - "Point Light_test: REDO entity deletion works: True", - # PostFX Layer Component - "PostFX Layer Entity successfully created", - "PostFX Layer_test: Component added to the entity: True", - "PostFX Layer_test: Component removed after UNDO: True", - "PostFX Layer_test: Component added after REDO: True", - "PostFX Layer_test: Entered game mode: True", - "PostFX Layer_test: Exit game mode: True", - "PostFX Layer_test: Entity is hidden: True", - "PostFX Layer_test: Entity is shown: True", - "PostFX Layer_test: Entity deleted: True", - "PostFX Layer_test: UNDO entity deletion works: True", - "PostFX Layer_test: REDO entity deletion works: True", - # Radius Weight Modifier Component - "Radius Weight Modifier Entity successfully created", - "Radius Weight Modifier_test: Component added to the entity: True", - "Radius Weight Modifier_test: Component removed after UNDO: True", - "Radius Weight Modifier_test: Component added after REDO: True", - "Radius Weight Modifier_test: Entered game mode: True", - "Radius Weight Modifier_test: Exit game mode: True", - "Radius Weight Modifier_test: Entity is hidden: True", - "Radius Weight Modifier_test: Entity is shown: True", - "Radius Weight Modifier_test: Entity deleted: True", - "Radius Weight Modifier_test: UNDO entity deletion works: True", - "Radius Weight Modifier_test: REDO entity deletion works: True", - # Light Component - "Light Entity successfully created", - "Light_test: Component added to the entity: True", - "Light_test: Component removed after UNDO: True", - "Light_test: Component added after REDO: True", - "Light_test: Entered game mode: True", - "Light_test: Exit game mode: True", - "Light_test: Entity is hidden: True", - "Light_test: Entity is shown: True", - "Light_test: Entity deleted: True", - "Light_test: UNDO entity deletion works: True", - "Light_test: REDO entity deletion works: True", - ] - - unexpected_lines = [ - "failed to open", - "Traceback (most recent call last):", - ] - - hydra.launch_and_validate_results( - request, - TEST_DIRECTORY, - editor, - "hydra_AtomEditorComponents_AddedToEntity.py", - timeout=EDITOR_TIMEOUT, - expected_lines=expected_lines, - unexpected_lines=unexpected_lines, - halt_on_unexpected=True, - null_renderer=True, - cfg_args=cfg_args, - ) + # It requires at least one test + def test_Dummy(self, request, editor, level, workspace, project, launcher_platform): + pass diff --git a/AutomatedTesting/Gem/PythonTests/atom_renderer/test_Atom_SandboxSuite.py b/AutomatedTesting/Gem/PythonTests/atom_renderer/test_Atom_SandboxSuite.py new file mode 100644 index 0000000000..a82d5c5fd4 --- /dev/null +++ b/AutomatedTesting/Gem/PythonTests/atom_renderer/test_Atom_SandboxSuite.py @@ -0,0 +1,219 @@ +""" +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 logging +import os +import pytest + +import ly_test_tools.environment.file_system as file_system + +import editor_python_test_tools.hydra_test_utils as hydra + +logger = logging.getLogger(__name__) +EDITOR_TIMEOUT = 60 +TEST_DIRECTORY = os.path.join(os.path.dirname(__file__), "atom_hydra_scripts") + + +@pytest.mark.parametrize("project", ["AutomatedTesting"]) +@pytest.mark.parametrize("launcher_platform", ['windows_editor']) +@pytest.mark.parametrize("level", ["tmp_level"]) +class TestAtomEditorComponents(object): + @pytest.fixture(autouse=True) + def setup_teardown(self, request, workspace, project, level): + # Cleanup our temp level + file_system.delete( + [os.path.join(workspace.paths.engine_root(), project, "Levels", "AtomLevels", level)], True, True) + + def teardown(): + # Cleanup our temp level + file_system.delete( + [os.path.join(workspace.paths.engine_root(), project, "Levels", "AtomLevels", level)], True, True) + + request.addfinalizer(teardown) + + @pytest.mark.test_case_id( + "C32078130", # Tone Mapper + "C32078129", # Light + "C32078131", # Radius Weight Modifier + "C32078127", # PostFX Layer + "C32078126", # Point Light + "C32078125", # Physical Sky + "C32078115", # Global Skylight (IBL) + "C32078121", # Exposure Control + "C32078120", # Directional Light + "C32078119", # DepthOfField + "C32078118") # Decal + def test_AtomEditorComponents_AddedToEntity(self, request, editor, level, workspace, project, launcher_platform): + cfg_args = [level] + + expected_lines = [ + # Area Light Component + "Area Light Entity successfully created", + "Area Light_test: Component added to the entity: True", + "Area Light_test: Component removed after UNDO: True", + "Area Light_test: Component added after REDO: True", + "Area Light_test: Entered game mode: True", + "Area Light_test: Entity enabled after adding required components: True", + "Area Light_test: Entity is hidden: True", + "Area Light_test: Entity is shown: True", + "Area Light_test: Entity deleted: True", + "Area Light_test: UNDO entity deletion works: True", + "Area Light_test: REDO entity deletion works: True", + # Decal Component + "Decal Entity successfully created", + "Decal_test: Component added to the entity: True", + "Decal_test: Component removed after UNDO: True", + "Decal_test: Component added after REDO: True", + "Decal_test: Entered game mode: True", + "Decal_test: Exit game mode: True", + "Decal Settings|Decal Settings|Material: SUCCESS", + "Decal_test: Entity is hidden: True", + "Decal_test: Entity is shown: True", + "Decal_test: Entity deleted: True", + "Decal_test: UNDO entity deletion works: True", + "Decal_test: REDO entity deletion works: True", + # DepthOfField Component + "DepthOfField Entity successfully created", + "DepthOfField_test: Component added to the entity: True", + "DepthOfField_test: Component removed after UNDO: True", + "DepthOfField_test: Component added after REDO: True", + "DepthOfField_test: Entered game mode: True", + "DepthOfField_test: Exit game mode: True", + "DepthOfField_test: Entity disabled initially: True", + "DepthOfField_test: Entity enabled after adding required components: True", + "DepthOfField Controller|Configuration|Camera Entity: SUCCESS", + "DepthOfField_test: Entity is hidden: True", + "DepthOfField_test: Entity is shown: True", + "DepthOfField_test: Entity deleted: True", + "DepthOfField_test: UNDO entity deletion works: True", + "DepthOfField_test: REDO entity deletion works: True", + # Directional Light Component + "Directional Light Entity successfully created", + "Directional Light_test: Component added to the entity: True", + "Directional Light_test: Component removed after UNDO: True", + "Directional Light_test: Component added after REDO: True", + "Directional Light_test: Entered game mode: True", + "Directional Light_test: Exit game mode: True", + "Directional Light Controller|Configuration|Shadow|Camera: SUCCESS", + "Directional Light_test: Entity is hidden: True", + "Directional Light_test: Entity is shown: True", + "Directional Light_test: Entity deleted: True", + "Directional Light_test: UNDO entity deletion works: True", + "Directional Light_test: REDO entity deletion works: True", + # Exposure Control Component + "Exposure Control Entity successfully created", + "Exposure Control_test: Component added to the entity: True", + "Exposure Control_test: Component removed after UNDO: True", + "Exposure Control_test: Component added after REDO: True", + "Exposure Control_test: Entered game mode: True", + "Exposure Control_test: Exit game mode: True", + "Exposure Control_test: Entity disabled initially: True", + "Exposure Control_test: Entity enabled after adding required components: True", + "Exposure Control_test: Entity is hidden: True", + "Exposure Control_test: Entity is shown: True", + "Exposure Control_test: Entity deleted: True", + "Exposure Control_test: UNDO entity deletion works: True", + "Exposure Control_test: REDO entity deletion works: True", + # Global Skylight (IBL) Component + "Global Skylight (IBL) Entity successfully created", + "Global Skylight (IBL)_test: Component added to the entity: True", + "Global Skylight (IBL)_test: Component removed after UNDO: True", + "Global Skylight (IBL)_test: Component added after REDO: True", + "Global Skylight (IBL)_test: Entered game mode: True", + "Global Skylight (IBL)_test: Exit game mode: True", + "Global Skylight (IBL) Controller|Configuration|Diffuse Image: SUCCESS", + "Global Skylight (IBL) Controller|Configuration|Specular Image: SUCCESS", + "Global Skylight (IBL)_test: Entity is hidden: True", + "Global Skylight (IBL)_test: Entity is shown: True", + "Global Skylight (IBL)_test: Entity deleted: True", + "Global Skylight (IBL)_test: UNDO entity deletion works: True", + "Global Skylight (IBL)_test: REDO entity deletion works: True", + # Physical Sky Component + "Physical Sky Entity successfully created", + "Physical Sky component was added to entity", + "Entity has a Physical Sky component", + "Physical Sky_test: Component added to the entity: True", + "Physical Sky_test: Component removed after UNDO: True", + "Physical Sky_test: Component added after REDO: True", + "Physical Sky_test: Entered game mode: True", + "Physical Sky_test: Exit game mode: True", + "Physical Sky_test: Entity is hidden: True", + "Physical Sky_test: Entity is shown: True", + "Physical Sky_test: Entity deleted: True", + "Physical Sky_test: UNDO entity deletion works: True", + "Physical Sky_test: REDO entity deletion works: True", + # Point Light Component + "Point Light Entity successfully created", + "Point Light_test: Component added to the entity: True", + "Point Light_test: Component removed after UNDO: True", + "Point Light_test: Component added after REDO: True", + "Point Light_test: Entered game mode: True", + "Point Light_test: Exit game mode: True", + "Point Light_test: Entity is hidden: True", + "Point Light_test: Entity is shown: True", + "Point Light_test: Entity deleted: True", + "Point Light_test: UNDO entity deletion works: True", + "Point Light_test: REDO entity deletion works: True", + # PostFX Layer Component + "PostFX Layer Entity successfully created", + "PostFX Layer_test: Component added to the entity: True", + "PostFX Layer_test: Component removed after UNDO: True", + "PostFX Layer_test: Component added after REDO: True", + "PostFX Layer_test: Entered game mode: True", + "PostFX Layer_test: Exit game mode: True", + "PostFX Layer_test: Entity is hidden: True", + "PostFX Layer_test: Entity is shown: True", + "PostFX Layer_test: Entity deleted: True", + "PostFX Layer_test: UNDO entity deletion works: True", + "PostFX Layer_test: REDO entity deletion works: True", + # Radius Weight Modifier Component + "Radius Weight Modifier Entity successfully created", + "Radius Weight Modifier_test: Component added to the entity: True", + "Radius Weight Modifier_test: Component removed after UNDO: True", + "Radius Weight Modifier_test: Component added after REDO: True", + "Radius Weight Modifier_test: Entered game mode: True", + "Radius Weight Modifier_test: Exit game mode: True", + "Radius Weight Modifier_test: Entity is hidden: True", + "Radius Weight Modifier_test: Entity is shown: True", + "Radius Weight Modifier_test: Entity deleted: True", + "Radius Weight Modifier_test: UNDO entity deletion works: True", + "Radius Weight Modifier_test: REDO entity deletion works: True", + # Light Component + "Light Entity successfully created", + "Light_test: Component added to the entity: True", + "Light_test: Component removed after UNDO: True", + "Light_test: Component added after REDO: True", + "Light_test: Entered game mode: True", + "Light_test: Exit game mode: True", + "Light_test: Entity is hidden: True", + "Light_test: Entity is shown: True", + "Light_test: Entity deleted: True", + "Light_test: UNDO entity deletion works: True", + "Light_test: REDO entity deletion works: True", + ] + + unexpected_lines = [ + "failed to open", + "Traceback (most recent call last):", + ] + + hydra.launch_and_validate_results( + request, + TEST_DIRECTORY, + editor, + "hydra_AtomEditorComponents_AddedToEntity.py", + timeout=EDITOR_TIMEOUT, + expected_lines=expected_lines, + unexpected_lines=unexpected_lines, + halt_on_unexpected=True, + null_renderer=True, + cfg_args=cfg_args, + ) From 3f32cc929cafca4f1d2138f0f04a0e78bddfbb72 Mon Sep 17 00:00:00 2001 From: AMZN-AlexOteiza <82234181+AMZN-AlexOteiza@users.noreply.github.com> Date: Mon, 26 Apr 2021 15:25:34 +0100 Subject: [PATCH 32/32] Fixed All Physics automated tests (#129) * Fixed all Tests. * Fixed tests stdout redirection * Changed return code for failed tests to be 0xF * Small improvements on automated testing code * Created Periodic test suite and moved tests * Made physics main to only have one test for now * Renamed all tests to have leading AutomatedTesting:: --- .../Gem/PythonTests/CMakeLists.txt | 91 +++-- .../editor_python_test_tools/utils.py | 18 + .../automatedtesting_shared/base.py | 12 +- ...01_PhysXCollider_RenderMeshAutoAssigned.py | 14 +- ...4861502_PhysXCollider_AssetAutoAssigned.py | 4 +- ...C14861504_RenderMeshAsset_WithNoPxAsset.py | 6 +- ...695_PhysXCollider_AddMultipleSurfaceFbx.py | 21 +- .../C4976236_AddPhysxColliderComponent.py | 32 +- .../Gem/PythonTests/physics/TestSuite_Main.py | 37 ++ ...tSuite_Active.py => TestSuite_Periodic.py} | 20 +- AutomatedTesting/Levels/Physics/Base/Base.ly | 4 +- .../Physics/Base/leveldata/TimeOfDay.xml | 350 +++++++++--------- AutomatedTesting/game.cfg | 2 +- .../Physics/ShapeConfiguration.cpp | 16 + Code/Sandbox/Editor/CryEdit.cpp | 14 +- .../Code/Source/PythonSystemComponent.cpp | 4 +- .../Code/Source/EditorColliderComponent.cpp | 40 +- .../failed_test_rerun_command.py | 2 +- 18 files changed, 374 insertions(+), 313 deletions(-) create mode 100644 AutomatedTesting/Gem/PythonTests/physics/TestSuite_Main.py rename AutomatedTesting/Gem/PythonTests/physics/{TestSuite_Active.py => TestSuite_Periodic.py} (96%) diff --git a/AutomatedTesting/Gem/PythonTests/CMakeLists.txt b/AutomatedTesting/Gem/PythonTests/CMakeLists.txt index d987833862..d421ba3cb7 100644 --- a/AutomatedTesting/Gem/PythonTests/CMakeLists.txt +++ b/AutomatedTesting/Gem/PythonTests/CMakeLists.txt @@ -19,37 +19,50 @@ add_subdirectory(assetpipeline) add_subdirectory(atom_renderer) ## Physics ## -# DISABLED - see LYN-2536 -#if(PAL_TRAIT_BUILD_TESTS_SUPPORTED AND PAL_TRAIT_BUILD_HOST_TOOLS) -# ly_add_pytest( -# NAME AutomatedTesting::PhysicsTests -# TEST_SUITE main -# TEST_SERIAL -# PATH ${CMAKE_CURRENT_LIST_DIR}/physics/TestSuite_Active.py -# TIMEOUT 3600 -# RUNTIME_DEPENDENCIES -# Legacy::Editor -# Legacy::CryRenderNULL -# AZ::AssetProcessor -# AutomatedTesting.Assets -# COMPONENT -# Physics -# ) -# ly_add_pytest( -# NAME AutomatedTesting::PhysicsTests_Sandbox -# TEST_SUITE sandbox -# TEST_SERIAL -# PATH ${CMAKE_CURRENT_LIST_DIR}/physics/TestSuite_Sandbox.py -# TIMEOUT 3600 -# RUNTIME_DEPENDENCIES -# Legacy::Editor -# Legacy::CryRenderNULL -# AZ::AssetProcessor -# AutomatedTesting.Assets -# COMPONENT -# Physics -# ) -#endif() +if(PAL_TRAIT_BUILD_TESTS_SUPPORTED AND PAL_TRAIT_BUILD_HOST_TOOLS) + ly_add_pytest( + NAME AutomatedTesting::PhysicsTests_Main + TEST_SUITE main + TEST_SERIAL + PATH ${CMAKE_CURRENT_LIST_DIR}/physics/TestSuite_Main.py + TIMEOUT 3600 + RUNTIME_DEPENDENCIES + Legacy::Editor + Legacy::CryRenderNULL + AZ::AssetProcessor + AutomatedTesting.Assets + COMPONENT + Physics + ) + ly_add_pytest( + NAME AutomatedTesting::PhysicsTests_Periodic + TEST_SUITE periodic + TEST_SERIAL + PATH ${CMAKE_CURRENT_LIST_DIR}/physics/TestSuite_Periodic.py + TIMEOUT 3600 + RUNTIME_DEPENDENCIES + Legacy::Editor + Legacy::CryRenderNULL + AZ::AssetProcessor + AutomatedTesting.Assets + COMPONENT + Physics + ) + ly_add_pytest( + NAME AutomatedTesting::PhysicsTests_Sandbox + TEST_SUITE sandbox + TEST_SERIAL + PATH ${CMAKE_CURRENT_LIST_DIR}/physics/TestSuite_Sandbox.py + TIMEOUT 3600 + RUNTIME_DEPENDENCIES + Legacy::Editor + Legacy::CryRenderNULL + AZ::AssetProcessor + AutomatedTesting.Assets + COMPONENT + Physics + ) +endif() ## ScriptCanvas ## if(PAL_TRAIT_BUILD_TESTS_SUPPORTED AND PAL_TRAIT_BUILD_HOST_TOOLS) @@ -178,7 +191,7 @@ if(PAL_TRAIT_BUILD_TESTS_SUPPORTED AND PAL_TRAIT_BUILD_HOST_TOOLS AND PAL_TRAIT_ ## DynVeg ## ly_add_pytest( - NAME DynamicVegetationTests_Main_GPU + NAME AutomatedTesting::DynamicVegetationTests_Main_GPU TEST_REQUIRES gpu TEST_SERIAL TEST_SUITE main @@ -195,7 +208,7 @@ if(PAL_TRAIT_BUILD_TESTS_SUPPORTED AND PAL_TRAIT_BUILD_HOST_TOOLS AND PAL_TRAIT_ ) ly_add_pytest( - NAME DynamicVegetationTests_Sandbox_GPU + NAME AutomatedTesting::DynamicVegetationTests_Sandbox_GPU TEST_REQUIRES gpu TEST_SERIAL TEST_SUITE sandbox @@ -212,7 +225,7 @@ if(PAL_TRAIT_BUILD_TESTS_SUPPORTED AND PAL_TRAIT_BUILD_HOST_TOOLS AND PAL_TRAIT_ ) ly_add_pytest( - NAME DynamicVegetationTests_Periodic_GPU + NAME AutomatedTesting::DynamicVegetationTests_Periodic_GPU TEST_REQUIRES gpu TEST_SERIAL TEST_SUITE periodic @@ -229,7 +242,7 @@ if(PAL_TRAIT_BUILD_TESTS_SUPPORTED AND PAL_TRAIT_BUILD_HOST_TOOLS AND PAL_TRAIT_ ## LandscapeCanvas ## ly_add_pytest( - NAME LandscapeCanvasTests_Main + NAME AutomatedTesting::LandscapeCanvasTests_Main TEST_REQUIRES gpu TEST_SERIAL TEST_SUITE main @@ -245,7 +258,7 @@ if(PAL_TRAIT_BUILD_TESTS_SUPPORTED AND PAL_TRAIT_BUILD_HOST_TOOLS AND PAL_TRAIT_ ) ly_add_pytest( - NAME LandscapeCanvasTests_Periodic + NAME AutomatedTesting::LandscapeCanvasTests_Periodic TEST_REQUIRES gpu TEST_SERIAL TEST_SUITE periodic @@ -262,7 +275,7 @@ if(PAL_TRAIT_BUILD_TESTS_SUPPORTED AND PAL_TRAIT_BUILD_HOST_TOOLS AND PAL_TRAIT_ ## GradientSignal ## ly_add_pytest( - NAME GradientSignalTests_Periodic + NAME AutomatedTesting::GradientSignalTests_Periodic TEST_REQUIRES gpu TEST_SERIAL TEST_SUITE periodic @@ -281,7 +294,7 @@ endif() ## Editor ## if(PAL_TRAIT_BUILD_TESTS_SUPPORTED AND PAL_TRAIT_BUILD_HOST_TOOLS AND PAL_TRAIT_FOUNDATION_TEST_SUPPORTED) ly_add_pytest( - NAME EditorTests_Periodic + NAME AutomatedTesting::EditorTests_Periodic TEST_SUITE periodic TEST_SERIAL PATH ${CMAKE_CURRENT_LIST_DIR}/editor @@ -299,7 +312,7 @@ endif() if(PAL_TRAIT_BUILD_TESTS_SUPPORTED AND PAL_TRAIT_BUILD_HOST_TOOLS) # Unstable, SPEC-3838 will restore #ly_add_pytest( - # NAME asset_load_benchmark_test + # NAME AutomatedTesting::asset_load_benchmark_test # TEST_SERIAL # TEST_SUITE benchmark # PATH ${CMAKE_CURRENT_LIST_DIR}/streaming/benchmark/asset_load_benchmark_test.py diff --git a/AutomatedTesting/Gem/PythonTests/EditorPythonTestTools/editor_python_test_tools/utils.py b/AutomatedTesting/Gem/PythonTests/EditorPythonTestTools/editor_python_test_tools/utils.py index 6ca0ec16a7..a9f6d0aa02 100644 --- a/AutomatedTesting/Gem/PythonTests/EditorPythonTestTools/editor_python_test_tools/utils.py +++ b/AutomatedTesting/Gem/PythonTests/EditorPythonTestTools/editor_python_test_tools/utils.py @@ -278,6 +278,12 @@ class Tracer: self.function = args[3] self.message = args[4] + def __str__(self): + return f"Warning: [{self.filename}:{self.function}:{self.line}]: [{self.window}] {self.message}" + + def __repr__(self): + return f"[Warning: {self.message}]" + class ErrorInfo: def __init__(self, args): self.window = args[0] @@ -285,6 +291,12 @@ class Tracer: self.line = args[2] self.function = args[3] self.message = args[4] + + def __str__(self): + return f"Error: [{self.filename}:{self.function}:{self.line}]: [{self.window}] {self.message}" + + def __repr__(self): + return f"[Error: {self.message}]" class AssertInfo: def __init__(self, args): @@ -292,6 +304,12 @@ class Tracer: self.line = args[1] self.function = args[2] self.message = args[3] + + def __str__(self): + return f"Assert: [{self.filename}:{self.function}:{self.line}]: {self.message}" + + def __repr__(self): + return f"[Assert: {self.message}]" def _on_warning(self, args): warningInfo = Tracer.WarningInfo(args) diff --git a/AutomatedTesting/Gem/PythonTests/automatedtesting_shared/base.py b/AutomatedTesting/Gem/PythonTests/automatedtesting_shared/base.py index 1887d5736e..f00227c47f 100755 --- a/AutomatedTesting/Gem/PythonTests/automatedtesting_shared/base.py +++ b/AutomatedTesting/Gem/PythonTests/automatedtesting_shared/base.py @@ -94,13 +94,13 @@ class TestAutomationBase: editor_starttime = time.time() self.logger.debug("Running automated test") testcase_module_filepath = self._get_testcase_module_filepath(testcase_module) - pycmd = ["--runpythontest", testcase_module_filepath, "-BatchMode", "-autotest_mode", "-NullRenderer"] + extra_cmdline_args + pycmd = ["--runpythontest", testcase_module_filepath, "-BatchMode", "-autotest_mode", "-rhi=null"] + extra_cmdline_args editor.args.extend(pycmd) # args are added to the WinLauncher start command editor.start(backupFiles = False, launch_ap = False) try: editor.wait(TestAutomationBase.MAX_TIMEOUT) except WaitTimeoutError: - errors.append(TestRunError("TIMEOUT", "Editor did not close after {TestAutomationBase.MAX_TIMEOUT} seconds, verify the test is ending and the application didn't freeze")) + errors.append(TestRunError("TIMEOUT", f"Editor did not close after {TestAutomationBase.MAX_TIMEOUT} seconds, verify the test is ending and the application didn't freeze")) editor.kill() output = editor.get_output() @@ -118,16 +118,16 @@ class TestAutomationBase: else: error_str = "Test failed, no output available..\n" errors.append(TestRunError("FAILED TEST", error_str)) - if return_code != TestAutomationBase.TEST_FAIL_RETCODE: # Crashed + if return_code and return_code != TestAutomationBase.TEST_FAIL_RETCODE: # Crashed crash_info = "-- No crash log available --" - error_log = os.path.join(workspace.paths.project_log(), 'error.log') + crash_log = os.path.join(workspace.paths.project_log(), 'error.log') try: - waiter.wait_for(lambda: os.path.exists(error_log), timeout=TestAutomationBase.WAIT_FOR_CRASH_LOG) + waiter.wait_for(lambda: os.path.exists(crash_log), timeout=TestAutomationBase.WAIT_FOR_CRASH_LOG) except AssertionError: pass try: - with open(error_log) as f: + with open(crash_log) as f: crash_info = f.read() except Exception as ex: crash_info += f"\n{str(ex)}" diff --git a/AutomatedTesting/Gem/PythonTests/physics/C14861501_PhysXCollider_RenderMeshAutoAssigned.py b/AutomatedTesting/Gem/PythonTests/physics/C14861501_PhysXCollider_RenderMeshAutoAssigned.py index eae5ea547a..904b5b0189 100755 --- a/AutomatedTesting/Gem/PythonTests/physics/C14861501_PhysXCollider_RenderMeshAutoAssigned.py +++ b/AutomatedTesting/Gem/PythonTests/physics/C14861501_PhysXCollider_RenderMeshAutoAssigned.py @@ -24,7 +24,7 @@ class Tests(): # fmt: on -def run(): +def C14861501_PhysXCollider_RenderMeshAutoAssigned(): """ Summary: Create entity with Mesh component and assign a render mesh to the Mesh component. Add Physics Collider component @@ -61,7 +61,7 @@ def run(): from asset_utils import Asset # Asset paths - STATIC_MESH = os.path.join("assets", "c14861501_physxcollider_rendermeshautoassigned", "spherebot", "r0-b_body.cgf") + STATIC_MESH = os.path.join("assets", "c14861501_physxcollider_rendermeshautoassigned", "spherebot", "r0-b_body.azmodel") PHYSX_MESH = os.path.join( "assets", "c14861501_physxcollider_rendermeshautoassigned", "spherebot", "r0-b_body.pxmesh" ) @@ -80,8 +80,8 @@ def run(): # 4) Assign a render mesh asset to Mesh component (the fbx mesh having both Static mesh and PhysX collision Mesh) mesh_asset = Asset.find_asset_by_path(STATIC_MESH) - mesh_component.set_component_property_value("MeshComponentRenderNode|Mesh asset", mesh_asset.id) - mesh_asset.id = mesh_component.get_component_property_value("MeshComponentRenderNode|Mesh asset") + mesh_component.set_component_property_value("Controller|Configuration|Mesh Asset", mesh_asset.id) + mesh_asset.id = mesh_component.get_component_property_value("Controller|Configuration|Mesh Asset") Report.result(Tests.assign_mesh_asset, mesh_asset.get_path() == STATIC_MESH.replace(os.sep, "/")) # 5) Add PhysX Collider component @@ -95,4 +95,8 @@ def run(): if __name__ == "__main__": - run() + import ImportPathHelper as imports + imports.init() + + from utils import Report + Report.start_test(C14861501_PhysXCollider_RenderMeshAutoAssigned) diff --git a/AutomatedTesting/Gem/PythonTests/physics/C14861502_PhysXCollider_AssetAutoAssigned.py b/AutomatedTesting/Gem/PythonTests/physics/C14861502_PhysXCollider_AssetAutoAssigned.py index 6ea81ea2ff..075c3f5b61 100755 --- a/AutomatedTesting/Gem/PythonTests/physics/C14861502_PhysXCollider_AssetAutoAssigned.py +++ b/AutomatedTesting/Gem/PythonTests/physics/C14861502_PhysXCollider_AssetAutoAssigned.py @@ -62,8 +62,8 @@ def C14861502_PhysXCollider_AssetAutoAssigned(): # Open 3D Engine Imports import azlmbr.legacy.general as general - MESH_ASSET_PATH = os.path.join("Objects", "SphereBot", "r0-b_body.cgf") - MESH_PROPERTY_PATH = "MeshComponentRenderNode|Mesh asset" + MESH_ASSET_PATH = os.path.join("Objects", "SphereBot", "r0-b_body.azmodel") + MESH_PROPERTY_PATH = "Controller|Configuration|Mesh Asset" TESTED_PROPERTY_PATH = "Shape Configuration|Asset|PhysX Mesh" helper.init_idle() diff --git a/AutomatedTesting/Gem/PythonTests/physics/C14861504_RenderMeshAsset_WithNoPxAsset.py b/AutomatedTesting/Gem/PythonTests/physics/C14861504_RenderMeshAsset_WithNoPxAsset.py index abc79ba1b0..bbaabf67f6 100755 --- a/AutomatedTesting/Gem/PythonTests/physics/C14861504_RenderMeshAsset_WithNoPxAsset.py +++ b/AutomatedTesting/Gem/PythonTests/physics/C14861504_RenderMeshAsset_WithNoPxAsset.py @@ -69,7 +69,7 @@ def run(): import azlmbr.asset as azasset # Asset paths - STATIC_MESH = os.path.join("assets", "c14861504_rendermeshasset_withnopxasset", "test_asset.cgf") + STATIC_MESH = os.path.join("assets", "c14861504_rendermeshasset_withnopxasset", "test_asset.azmodel") helper.init_idle() # 1) Load the empty level @@ -85,8 +85,8 @@ def run(): # 4) Assign a render mesh asset to Mesh component (the fbx mesh having both Static mesh and PhysX collision Mesh) mesh_asset = Asset.find_asset_by_path(STATIC_MESH) - mesh_component.set_component_property_value("MeshComponentRenderNode|Mesh asset", mesh_asset.id) - mesh_asset.id = mesh_component.get_component_property_value("MeshComponentRenderNode|Mesh asset") + mesh_component.set_component_property_value("Controller|Configuration|Mesh Asset", mesh_asset.id) + mesh_asset.id = mesh_component.get_component_property_value("Controller|Configuration|Mesh Asset") Report.result(Tests.assign_mesh_asset, mesh_asset.get_path() == STATIC_MESH.replace(os.sep, "/")) # 5) Add PhysX Collider component diff --git a/AutomatedTesting/Gem/PythonTests/physics/C4044695_PhysXCollider_AddMultipleSurfaceFbx.py b/AutomatedTesting/Gem/PythonTests/physics/C4044695_PhysXCollider_AddMultipleSurfaceFbx.py index a92927a9db..858e778f07 100755 --- a/AutomatedTesting/Gem/PythonTests/physics/C4044695_PhysXCollider_AddMultipleSurfaceFbx.py +++ b/AutomatedTesting/Gem/PythonTests/physics/C4044695_PhysXCollider_AddMultipleSurfaceFbx.py @@ -27,7 +27,7 @@ class Tests(): # fmt: on -def run(): +def C4044695_PhysXCollider_AddMultipleSurfaceFbx(): """ Summary: Create entity with Mesh and PhysX Collider components and assign a fbx file in both the components. @@ -45,12 +45,7 @@ def run(): 4) Select the PhysicsAsset shape in the PhysX Collider component 5) Assign the fbx file in PhysX Mesh and Mesh component 6) Check if multiple material slots show up under Materials section in the PhysX Collider component - - Note: - - This test file must be called from the Open 3D Engine Editor command terminal - - Any passed and failed tests are written to the Editor.log file. - Parsing the file or running a log_monitor are required to observe the test results. - + :return: None """ # Builtins @@ -70,7 +65,7 @@ def run(): SURFACE_TAG_COUNT = 4 # Number of surface tags included in used asset # Asset paths - STATIC_MESH = os.path.join("assets", "c4044695_physxcollider_addmultiplesurfacefbx", "test.cgf") + STATIC_MESH = os.path.join("assets", "c4044695_physxcollider_addmultiplesurfacefbx", "test.azmodel") PHYSX_MESH = os.path.join("assets", "c4044695_physxcollider_addmultiplesurfacefbx", "test.pxmesh") helper.init_idle() @@ -100,8 +95,8 @@ def run(): Report.result(Tests.assign_px_mesh_asset, px_asset.get_path() == PHYSX_MESH.replace(os.sep, "/")) mesh_asset = Asset.find_asset_by_path(STATIC_MESH) - mesh_component.set_component_property_value("MeshComponentRenderNode|Mesh asset", mesh_asset.id) - mesh_asset.id = mesh_component.get_component_property_value("MeshComponentRenderNode|Mesh asset") + mesh_component.set_component_property_value("Controller|Configuration|Mesh Asset", mesh_asset.id) + mesh_asset.id = mesh_component.get_component_property_value("Controller|Configuration|Mesh Asset") Report.result(Tests.assign_mesh_asset, mesh_asset.get_path() == STATIC_MESH.replace(os.sep, "/")) # 6) Check if multiple material slots show up under Materials section in the PhysX Collider component @@ -116,4 +111,8 @@ def run(): if __name__ == "__main__": - run() + import ImportPathHelper as imports + imports.init() + + from utils import Report + Report.start_test(C4044695_PhysXCollider_AddMultipleSurfaceFbx) diff --git a/AutomatedTesting/Gem/PythonTests/physics/C4976236_AddPhysxColliderComponent.py b/AutomatedTesting/Gem/PythonTests/physics/C4976236_AddPhysxColliderComponent.py index 906c6db55b..72442601e4 100755 --- a/AutomatedTesting/Gem/PythonTests/physics/C4976236_AddPhysxColliderComponent.py +++ b/AutomatedTesting/Gem/PythonTests/physics/C4976236_AddPhysxColliderComponent.py @@ -27,7 +27,7 @@ class Tests(): def C4976236_AddPhysxColliderComponent(): """ Summary: - Load level with Entity having PhysX Collider component. Verify that editor remains stable in Game mode. + Opens an empty level and creates an Entity with PhysX Collider. Verify that editor remains stable in Game mode. Expected Behavior: The Editor is stable there are no warnings or errors. @@ -37,16 +37,10 @@ def C4976236_AddPhysxColliderComponent(): 2) Create test entity 3) Start the Tracer to catch any errors and warnings 4) Add the PhysX Collider component and change shape to box - 5) Add Mesh component and an asset - 6) Enter game mode - 7) Verify there are no errors and warnings in the logs - 8) Exit game mode - 9) Close the editor - - Note: - - This test file must be called from the Open 3D Engine Editor command terminal - - Any passed and failed tests are written to the Editor.log file. - Parsing the file or running a log_monitor are required to observe the test results. + 5) Enter game mode + 6) Verify there are no errors and warnings in the logs + 7) Exit game mode + 8) Close the editor :return: None """ @@ -60,7 +54,7 @@ def C4976236_AddPhysxColliderComponent(): from editor_python_test_tools.utils import TestHelper as helper from editor_python_test_tools.utils import Tracer from asset_utils import Asset - + helper.init_idle() # 1) Load the level helper.open_level("Physics", "Base") @@ -74,17 +68,12 @@ def C4976236_AddPhysxColliderComponent(): # 4) Add the PhysX Collider component and change shape to box collider_component = test_entity.add_component("PhysX Collider") Report.result(Tests.add_physx_collider, test_entity.has_component("PhysX Collider")) - collider_component.set_component_property_value('Shape Configuration|Shape', 1) + collider_component.set_component_property_value('Shape Configuration|Shape', azlmbr.physics.ShapeType_Box) - # 5) Add Mesh component and an asset - mesh_component = test_entity.add_component("Mesh") - asset = Asset.find_asset_by_path(r"Objects\default\primitive_cube.cgf") - mesh_component.set_component_property_value('MeshComponentRenderNode|Mesh asset', asset.id) - - # 6) Enter game mode + # 5) Enter game mode helper.enter_game_mode(Tests.enter_game_mode) - # 7) Verify there are no errors and warnings in the logs + # 6) Verify there are no errors and warnings in the logs success_condition = not (section_tracer.has_errors or section_tracer.has_warnings) Report.result(Tests.no_errors_and_warnings_found, success_condition) if not success_condition: @@ -92,9 +81,8 @@ def C4976236_AddPhysxColliderComponent(): Report.info(f"Warnings found: {section_tracer.warnings}") if section_tracer.has_errors: Report.info(f"Errors found: {section_tracer.errors}") - Report.failure(Tests.no_errors_and_warnings_found) - # 8) Exit game mode + # 7) Exit game mode helper.exit_game_mode(Tests.exit_game_mode) diff --git a/AutomatedTesting/Gem/PythonTests/physics/TestSuite_Main.py b/AutomatedTesting/Gem/PythonTests/physics/TestSuite_Main.py new file mode 100644 index 0000000000..67e855a00e --- /dev/null +++ b/AutomatedTesting/Gem/PythonTests/physics/TestSuite_Main.py @@ -0,0 +1,37 @@ +""" +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 suite consists of all test cases that are passing and have been verified. + +import pytest +import os +import sys + +from .FileManagement import FileManagement as fm +from ly_test_tools import LAUNCHERS + +sys.path.append(os.path.dirname(os.path.abspath(__file__)) + '/../automatedtesting_shared') + +from base import TestAutomationBase + + +revert_physics_config = fm.file_revert_list(['physxdebugconfiguration.setreg', 'physxdefaultsceneconfiguration.setreg', 'physxsystemconfiguration.setreg'], 'AutomatedTesting/Registry') + + +@pytest.mark.SUITE_main +@pytest.mark.parametrize("launcher_platform", ['windows_editor']) +@pytest.mark.parametrize("project", ["AutomatedTesting"]) +class TestAutomation(TestAutomationBase): + + def test_C111111_RigidBody_EnablingGravityWorksUsingNotificationsPoC(self, request, workspace, editor, launcher_platform): + from . import C111111_RigidBody_EnablingGravityWorksUsingNotificationsPoC as test_module + self._run_test(request, workspace, editor, test_module) \ No newline at end of file diff --git a/AutomatedTesting/Gem/PythonTests/physics/TestSuite_Active.py b/AutomatedTesting/Gem/PythonTests/physics/TestSuite_Periodic.py similarity index 96% rename from AutomatedTesting/Gem/PythonTests/physics/TestSuite_Active.py rename to AutomatedTesting/Gem/PythonTests/physics/TestSuite_Periodic.py index 805e4f7d79..ad8ae6481f 100755 --- a/AutomatedTesting/Gem/PythonTests/physics/TestSuite_Active.py +++ b/AutomatedTesting/Gem/PythonTests/physics/TestSuite_Periodic.py @@ -27,26 +27,16 @@ from base import TestAutomationBase revert_physics_config = fm.file_revert_list(['physxdebugconfiguration.setreg', 'physxdefaultsceneconfiguration.setreg', 'physxsystemconfiguration.setreg'], 'AutomatedTesting/Registry') -@pytest.mark.SUITE_main +@pytest.mark.SUITE_periodic @pytest.mark.parametrize("launcher_platform", ['windows_editor']) @pytest.mark.parametrize("project", ["AutomatedTesting"]) class TestAutomation(TestAutomationBase): - # Marking the test as an expected failure due to sporadic failure on Automated Review: SPEC-3146 - # The test still runs, but a failure of the test doesn't result in the test run failing - @pytest.mark.xfail( - reason="This test seems to fail sometimes due to it being the first test in the testsuite, we'll duplicate it temporarly." - "Need to figure out the reason why this is the case") - @revert_physics_config - def test_C000000_RigidBody_EnablingGravityWorksPoC_DUPLICATE(self, request, workspace, editor, launcher_platform): - from . import C100000_RigidBody_EnablingGravityWorksPoC as test_module - self._run_test(request, workspace, editor, test_module) - @revert_physics_config def test_C3510642_Terrain_NotCollideWithTerrain(self, request, workspace, editor, launcher_platform): from . import C3510642_Terrain_NotCollideWithTerrain as test_module self._run_test(request, workspace, editor, test_module) - + @revert_physics_config def test_C4976195_RigidBodies_InitialLinearVelocity(self, request, workspace, editor, launcher_platform): from . import C4976195_RigidBodies_InitialLinearVelocity as test_module @@ -530,8 +520,4 @@ class TestAutomation(TestAutomationBase): def test_C100000_RigidBody_EnablingGravityWorksPoC(self, request, workspace, editor, launcher_platform): from . import C100000_RigidBody_EnablingGravityWorksPoC as test_module - self._run_test(request, workspace, editor, test_module) - - def test_C111111_RigidBody_EnablingGravityWorksUsingNotificationsPoC(self, request, workspace, editor, launcher_platform): - from . import C111111_RigidBody_EnablingGravityWorksUsingNotificationsPoC as test_module - self._run_test(request, workspace, editor, test_module) + self._run_test(request, workspace, editor, test_module) \ No newline at end of file diff --git a/AutomatedTesting/Levels/Physics/Base/Base.ly b/AutomatedTesting/Levels/Physics/Base/Base.ly index 97546ff3a2..f99dc672b0 100644 --- a/AutomatedTesting/Levels/Physics/Base/Base.ly +++ b/AutomatedTesting/Levels/Physics/Base/Base.ly @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:75cb1c8454aafc3de81351450a9480f91cb98d926a6e47f87a5ffe91e1d5a7d5 -size 4745 +oid sha256:f63204a86af8bc0963a4823d047a2e222cc19aabd14570d0789dc90cdc82970c +size 2017 diff --git a/AutomatedTesting/Levels/Physics/Base/leveldata/TimeOfDay.xml b/AutomatedTesting/Levels/Physics/Base/leveldata/TimeOfDay.xml index 456d609b8a..6ea168cc6b 100644 --- a/AutomatedTesting/Levels/Physics/Base/leveldata/TimeOfDay.xml +++ b/AutomatedTesting/Levels/Physics/Base/leveldata/TimeOfDay.xml @@ -1,356 +1,356 @@ - - + + - - + + - + - - + + - - + + - + - + - - + + - - + + - - + + - + - + - - + + - - + + - - + + - - + + - + - + - - + + - - + + - - + + - - + + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - - + + - - + + - + - + - - + + - + - - + + - - + + - - + + - - + + - + - - + + - + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - + - - + + - - + + - - + + - + - - + + - - + + - + - - + + - - + + - + - + - + - - + + - - + + - + - + - - + + - + - - + + - + - - + + - + - + - + - - + + - - + + - + - + - - + + - - + + - - + + - + - - + + - + - - + + - + - - + + - + - - + + - + - + - + - - + + - + - - + + - + - - + + - + - + - - + + diff --git a/AutomatedTesting/game.cfg b/AutomatedTesting/game.cfg index d9d8461ea0..f50112436f 100644 --- a/AutomatedTesting/game.cfg +++ b/AutomatedTesting/game.cfg @@ -1,7 +1,7 @@ sys_game_name = "AutomatedTesting" sys_localization_folder = Localization ca_useIMG_CAF = 0 -sys_asserts=2 +sys_asserts=1 -- Enable warnings when asset loads take longer than the given millisecond threshold cl_assetLoadWarningEnable=true diff --git a/Code/Framework/AzFramework/AzFramework/Physics/ShapeConfiguration.cpp b/Code/Framework/AzFramework/AzFramework/Physics/ShapeConfiguration.cpp index f01e42a443..52eae22fee 100644 --- a/Code/Framework/AzFramework/AzFramework/Physics/ShapeConfiguration.cpp +++ b/Code/Framework/AzFramework/AzFramework/Physics/ShapeConfiguration.cpp @@ -26,6 +26,22 @@ namespace Physics ->Field("Scale", &ShapeConfiguration::m_scale) ; } + + if (auto behaviorContext = azrtti_cast(context)) + { + #define REFLECT_SHAPETYPE_ENUM_VALUE(EnumValue) \ + behaviorContext->EnumProperty<(int)Physics::ShapeType::EnumValue>("ShapeType_"#EnumValue) \ + ->Attribute(AZ::Script::Attributes::Scope, AZ::Script::Attributes::ScopeFlags::Automation) \ + ->Attribute(AZ::Script::Attributes::Module, "physics"); + + // Note: Here we only expose the types that are available to the user in the editor + REFLECT_SHAPETYPE_ENUM_VALUE(Box); + REFLECT_SHAPETYPE_ENUM_VALUE(Sphere); + REFLECT_SHAPETYPE_ENUM_VALUE(Cylinder); + REFLECT_SHAPETYPE_ENUM_VALUE(PhysicsAsset); + + #undef REFLECT_SHAPETYPE_ENUM_VALUE + } } void SphereShapeConfiguration::Reflect(AZ::ReflectContext* context) diff --git a/Code/Sandbox/Editor/CryEdit.cpp b/Code/Sandbox/Editor/CryEdit.cpp index a474706910..c6a2ece984 100644 --- a/Code/Sandbox/Editor/CryEdit.cpp +++ b/Code/Sandbox/Editor/CryEdit.cpp @@ -5232,6 +5232,13 @@ extern "C" int AZ_DLL_EXPORT CryEditMain(int argc, char* argv[]) AzQtComponents::Utilities::HandleDpiAwareness(AzQtComponents::Utilities::SystemDpiAware); Editor::EditorQtApplication app(argc, argv); + if (app.arguments().contains("-autotest_mode")) + { + // Nullroute all stdout to null for automated tests, this way we make sure + // that the test result output is not polluted with unrelated output data. + theApp->RedirectStdoutToNull(); + } + // Hook the trace bus to catch errors, boot the AZ app after the QApplication is up int ret = 0; @@ -5249,13 +5256,6 @@ extern "C" int AZ_DLL_EXPORT CryEditMain(int argc, char* argv[]) return -1; } - if (app.arguments().contains("-autotest_mode")) - { - // Nullroute all stdout to null for automated tests, this way we make sure - // that the test result output is not polluted with unrelated output data. - theApp->RedirectStdoutToNull(); - } - AzToolsFramework::EditorEvents::Bus::Broadcast(&AzToolsFramework::EditorEvents::NotifyQtApplicationAvailable, &app); #if defined(AZ_PLATFORM_MAC) diff --git a/Gems/EditorPythonBindings/Code/Source/PythonSystemComponent.cpp b/Gems/EditorPythonBindings/Code/Source/PythonSystemComponent.cpp index d2d119a02d..53f5be5bc4 100644 --- a/Gems/EditorPythonBindings/Code/Source/PythonSystemComponent.cpp +++ b/Gems/EditorPythonBindings/Code/Source/PythonSystemComponent.cpp @@ -653,8 +653,8 @@ namespace EditorPythonBindings } else { - // something when wrong with executing the test script - AZ::Debug::Trace::Terminate(1); + // something went wrong with executing the test script + AZ::Debug::Trace::Terminate(0xF); } } diff --git a/Gems/PhysX/Code/Source/EditorColliderComponent.cpp b/Gems/PhysX/Code/Source/EditorColliderComponent.cpp index c470c05c58..eb4235766c 100644 --- a/Gems/PhysX/Code/Source/EditorColliderComponent.cpp +++ b/Gems/PhysX/Code/Source/EditorColliderComponent.cpp @@ -88,33 +88,33 @@ namespace PhysX editContext->Class( "EditorProxyShapeConfig", "PhysX Base shape collider") ->DataElement(AZ::Edit::UIHandlers::ComboBox, &EditorProxyShapeConfig::m_shapeType, "Shape", "The shape of the collider") - ->EnumAttribute(Physics::ShapeType::Sphere, "Sphere") - ->EnumAttribute(Physics::ShapeType::Box, "Box") - ->EnumAttribute(Physics::ShapeType::Capsule, "Capsule") - ->EnumAttribute(Physics::ShapeType::PhysicsAsset, "PhysicsAsset") - ->Attribute(AZ::Edit::Attributes::ChangeNotify, AZ::Edit::PropertyRefreshLevels::EntireTree) - // note: we do not want the user to be able to change shape types while in ComponentMode (there will - // potentially be different ComponentModes for different shape types) - ->Attribute(AZ::Edit::Attributes::ReadOnly, &AzToolsFramework::ComponentModeFramework::InComponentMode) + ->EnumAttribute(Physics::ShapeType::Sphere, "Sphere") + ->EnumAttribute(Physics::ShapeType::Box, "Box") + ->EnumAttribute(Physics::ShapeType::Capsule, "Capsule") + ->EnumAttribute(Physics::ShapeType::PhysicsAsset, "PhysicsAsset") + ->Attribute(AZ::Edit::Attributes::ChangeNotify, AZ::Edit::PropertyRefreshLevels::EntireTree) + // note: we do not want the user to be able to change shape types while in ComponentMode (there will + // potentially be different ComponentModes for different shape types) + ->Attribute(AZ::Edit::Attributes::ReadOnly, &AzToolsFramework::ComponentModeFramework::InComponentMode) ->DataElement(AZ::Edit::UIHandlers::Default, &EditorProxyShapeConfig::m_sphere, "Sphere", "Configuration of sphere shape") - ->Attribute(AZ::Edit::Attributes::Visibility, &EditorProxyShapeConfig::IsSphereConfig) - ->Attribute(AZ::Edit::Attributes::ChangeNotify, &EditorProxyShapeConfig::OnConfigurationChanged) + ->Attribute(AZ::Edit::Attributes::Visibility, &EditorProxyShapeConfig::IsSphereConfig) + ->Attribute(AZ::Edit::Attributes::ChangeNotify, &EditorProxyShapeConfig::OnConfigurationChanged) ->DataElement(AZ::Edit::UIHandlers::Default, &EditorProxyShapeConfig::m_box, "Box", "Configuration of box shape") - ->Attribute(AZ::Edit::Attributes::Visibility, &EditorProxyShapeConfig::IsBoxConfig) - ->Attribute(AZ::Edit::Attributes::ChangeNotify, &EditorProxyShapeConfig::OnConfigurationChanged) + ->Attribute(AZ::Edit::Attributes::Visibility, &EditorProxyShapeConfig::IsBoxConfig) + ->Attribute(AZ::Edit::Attributes::ChangeNotify, &EditorProxyShapeConfig::OnConfigurationChanged) ->DataElement(AZ::Edit::UIHandlers::Default, &EditorProxyShapeConfig::m_capsule, "Capsule", "Configuration of capsule shape") - ->Attribute(AZ::Edit::Attributes::Visibility, &EditorProxyShapeConfig::IsCapsuleConfig) - ->Attribute(AZ::Edit::Attributes::ChangeNotify, &EditorProxyShapeConfig::OnConfigurationChanged) + ->Attribute(AZ::Edit::Attributes::Visibility, &EditorProxyShapeConfig::IsCapsuleConfig) + ->Attribute(AZ::Edit::Attributes::ChangeNotify, &EditorProxyShapeConfig::OnConfigurationChanged) ->DataElement(AZ::Edit::UIHandlers::Default, &EditorProxyShapeConfig::m_physicsAsset, "Asset", "Configuration of asset shape") - ->Attribute(AZ::Edit::Attributes::Visibility, &EditorProxyShapeConfig::IsAssetConfig) - ->Attribute(AZ::Edit::Attributes::ChangeNotify, &EditorProxyShapeConfig::OnConfigurationChanged) + ->Attribute(AZ::Edit::Attributes::Visibility, &EditorProxyShapeConfig::IsAssetConfig) + ->Attribute(AZ::Edit::Attributes::ChangeNotify, &EditorProxyShapeConfig::OnConfigurationChanged) ->DataElement(AZ::Edit::UIHandlers::Default, &EditorProxyShapeConfig::m_subdivisionLevel, "Subdivision level", "The level of subdivision if a primitive shape is replaced with a convex mesh due to scaling") - ->Attribute(AZ::Edit::Attributes::Min, Utils::MinCapsuleSubdivisionLevel) - ->Attribute(AZ::Edit::Attributes::Max, Utils::MaxCapsuleSubdivisionLevel) - ->Attribute(AZ::Edit::Attributes::Visibility, &EditorProxyShapeConfig::ShowingSubdivisionLevel) - ->Attribute(AZ::Edit::Attributes::ChangeNotify, &EditorProxyShapeConfig::OnConfigurationChanged) + ->Attribute(AZ::Edit::Attributes::Min, Utils::MinCapsuleSubdivisionLevel) + ->Attribute(AZ::Edit::Attributes::Max, Utils::MaxCapsuleSubdivisionLevel) + ->Attribute(AZ::Edit::Attributes::Visibility, &EditorProxyShapeConfig::ShowingSubdivisionLevel) + ->Attribute(AZ::Edit::Attributes::ChangeNotify, &EditorProxyShapeConfig::OnConfigurationChanged) ; } } diff --git a/Tools/LyTestTools/ly_test_tools/_internal/pytest_plugin/failed_test_rerun_command.py b/Tools/LyTestTools/ly_test_tools/_internal/pytest_plugin/failed_test_rerun_command.py index e8e0b02501..c67d6721cf 100755 --- a/Tools/LyTestTools/ly_test_tools/_internal/pytest_plugin/failed_test_rerun_command.py +++ b/Tools/LyTestTools/ly_test_tools/_internal/pytest_plugin/failed_test_rerun_command.py @@ -22,7 +22,7 @@ def _get_test_launcher_cmd(build_dir=None): """ build_arg = "" if build_dir: - build_arg = f"--build-directory {build_dir} " + build_arg = f" --build-directory {build_dir} " python_runner = "python.cmd" if not WINDOWS: