소스 검색

Merge pull request #576 from aws-lumberyard-dev/cgalvan/gitflow_231005_o3de-extras

Merged `stabilization/2310` to `main`
Chris Galvan 1 년 전
부모
커밋
6d79155f6d
100개의 변경된 파일544개의 추가작업 그리고 675개의 파일을 삭제
  1. 5 1
      .gitattributes
  2. 4 1
      Gems/AzQtComponentsForPython/gem.json
  3. 9 3
      Gems/OpenXRVk/Code/Include/OpenXRVk/OpenXRVkDevice.h
  4. 23 16
      Gems/OpenXRVk/Code/Include/OpenXRVk/OpenXRVkInstance.h
  5. 6 2
      Gems/OpenXRVk/Code/Include/OpenXRVk/OpenXRVkSystemComponent.h
  6. 0 3
      Gems/OpenXRVk/Code/Include/OpenXRVk/OpenXRVkUtils.h
  7. 13 92
      Gems/OpenXRVk/Code/Source/OpenXRVkDevice.cpp
  8. 101 108
      Gems/OpenXRVk/Code/Source/OpenXRVkInstance.cpp
  9. 5 5
      Gems/OpenXRVk/Code/Source/OpenXRVkSession.cpp
  10. 1 1
      Gems/OpenXRVk/Code/Source/OpenXRVkSwapChain.cpp
  11. 29 11
      Gems/OpenXRVk/Code/Source/OpenXRVkSystemComponent.cpp
  12. 0 10
      Gems/OpenXRVk/Code/Source/OpenXRVkUtils.cpp
  13. 4 3
      Gems/OpenXRVk/gem.json
  14. 17 14
      Gems/ProteusRobot/CMakeLists.txt
  15. 0 4
      Gems/ProteusRobot/Code/Platform/Android/PAL_android.cmake
  16. 0 3
      Gems/ProteusRobot/Code/Platform/Android/proteusrobot_api_files.cmake
  17. 0 8
      Gems/ProteusRobot/Code/Platform/Android/proteusrobot_private_files.cmake
  18. 0 8
      Gems/ProteusRobot/Code/Platform/Android/proteusrobot_shared_files.cmake
  19. 0 4
      Gems/ProteusRobot/Code/Platform/Linux/PAL_linux.cmake
  20. 0 3
      Gems/ProteusRobot/Code/Platform/Linux/proteusrobot_api_files.cmake
  21. 0 3
      Gems/ProteusRobot/Code/Platform/Linux/proteusrobot_editor_api_files.cmake
  22. 0 8
      Gems/ProteusRobot/Code/Platform/Linux/proteusrobot_private_files.cmake
  23. 0 8
      Gems/ProteusRobot/Code/Platform/Linux/proteusrobot_shared_files.cmake
  24. 0 4
      Gems/ProteusRobot/Code/Platform/Mac/PAL_mac.cmake
  25. 0 3
      Gems/ProteusRobot/Code/Platform/Mac/proteusrobot_api_files.cmake
  26. 0 3
      Gems/ProteusRobot/Code/Platform/Mac/proteusrobot_editor_api_files.cmake
  27. 0 8
      Gems/ProteusRobot/Code/Platform/Mac/proteusrobot_private_files.cmake
  28. 0 8
      Gems/ProteusRobot/Code/Platform/Mac/proteusrobot_shared_files.cmake
  29. 0 4
      Gems/ProteusRobot/Code/Platform/Windows/PAL_windows.cmake
  30. 0 3
      Gems/ProteusRobot/Code/Platform/Windows/proteusrobot_api_files.cmake
  31. 0 3
      Gems/ProteusRobot/Code/Platform/Windows/proteusrobot_editor_api_files.cmake
  32. 0 8
      Gems/ProteusRobot/Code/Platform/Windows/proteusrobot_private_files.cmake
  33. 0 8
      Gems/ProteusRobot/Code/Platform/Windows/proteusrobot_shared_files.cmake
  34. 0 4
      Gems/ProteusRobot/Code/Platform/iOS/PAL_ios.cmake
  35. 0 3
      Gems/ProteusRobot/Code/Platform/iOS/proteusrobot_api_files.cmake
  36. 0 8
      Gems/ProteusRobot/Code/Platform/iOS/proteusrobot_private_files.cmake
  37. 0 8
      Gems/ProteusRobot/Code/Platform/iOS/proteusrobot_shared_files.cmake
  38. 0 17
      Gems/ProteusRobot/Code/Source/Clients/ProteusRobotModule.cpp
  39. 0 83
      Gems/ProteusRobot/Code/Source/Clients/ProteusRobotSystemComponent.cpp
  40. 0 38
      Gems/ProteusRobot/Code/Source/Tools/ProteusRobotEditorModule.cpp
  41. 0 54
      Gems/ProteusRobot/Code/Source/Tools/ProteusRobotEditorSystemComponent.cpp
  42. 0 33
      Gems/ProteusRobot/Code/Source/Tools/ProteusRobotEditorSystemComponent.h
  43. 0 4
      Gems/ProteusRobot/Code/Tests/Clients/ProteusRobotTest.cpp
  44. 0 4
      Gems/ProteusRobot/Code/Tests/Tools/ProteusRobotEditorTest.cpp
  45. 0 4
      Gems/ProteusRobot/Code/proteusrobot_api_files.cmake
  46. 0 4
      Gems/ProteusRobot/Code/proteusrobot_editor_api_files.cmake
  47. 0 5
      Gems/ProteusRobot/Code/proteusrobot_editor_private_files.cmake
  48. 0 4
      Gems/ProteusRobot/Code/proteusrobot_editor_shared_files.cmake
  49. 0 4
      Gems/ProteusRobot/Code/proteusrobot_editor_tests_files.cmake
  50. 0 6
      Gems/ProteusRobot/Code/proteusrobot_private_files.cmake
  51. 0 4
      Gems/ProteusRobot/Code/proteusrobot_shared_files.cmake
  52. 0 4
      Gems/ProteusRobot/Code/proteusrobot_tests_files.cmake
  53. 15 11
      Gems/ProteusRobot/gem.json
  54. 2 2
      Gems/ProteusRobot/preview.png
  55. 6 0
      Gems/ROS2/Assets/Editor/Icons/Components/AckermannControl.svg
  56. 3 0
      Gems/ROS2/Assets/Editor/Icons/Components/AckermannVehicleModel.svg
  57. 1 0
      Gems/ROS2/Assets/Editor/Icons/Components/FingerGripperComponent.svg
  58. 1 0
      Gems/ROS2/Assets/Editor/Icons/Components/GripperActionServerComponent.svg
  59. 3 0
      Gems/ROS2/Assets/Editor/Icons/Components/JointsArticulationControllerComponent.svg
  60. 3 0
      Gems/ROS2/Assets/Editor/Icons/Components/JointsManipulationEditorComponent.svg
  61. 3 0
      Gems/ROS2/Assets/Editor/Icons/Components/JointsPIDControllerComponent.svg
  62. 1 0
      Gems/ROS2/Assets/Editor/Icons/Components/JointsTrajectoryComponent.svg
  63. 1 0
      Gems/ROS2/Assets/Editor/Icons/Components/ManualMotorController.svg
  64. 3 0
      Gems/ROS2/Assets/Editor/Icons/Components/PidMotorController.svg
  65. 3 0
      Gems/ROS2/Assets/Editor/Icons/Components/ROS2CameraSensor.svg
  66. 1 0
      Gems/ROS2/Assets/Editor/Icons/Components/ROS2ContactSensor.svg
  67. 3 0
      Gems/ROS2/Assets/Editor/Icons/Components/ROS2Frame.svg
  68. 1 0
      Gems/ROS2/Assets/Editor/Icons/Components/ROS2GNSSSensor.svg
  69. 1 0
      Gems/ROS2/Assets/Editor/Icons/Components/ROS2ImuSensor.svg
  70. 1 0
      Gems/ROS2/Assets/Editor/Icons/Components/ROS2Lidar2DSensor.svg
  71. 1 0
      Gems/ROS2/Assets/Editor/Icons/Components/ROS2LidarSensor.svg
  72. 3 0
      Gems/ROS2/Assets/Editor/Icons/Components/ROS2OdometrySensor.svg
  73. 5 0
      Gems/ROS2/Assets/Editor/Icons/Components/ROS2RobotControl.svg
  74. 1 0
      Gems/ROS2/Assets/Editor/Icons/Components/ROS2SpawnPoint.svg
  75. 3 0
      Gems/ROS2/Assets/Editor/Icons/Components/ROS2Spawner.svg
  76. 3 0
      Gems/ROS2/Assets/Editor/Icons/Components/ROS2WheelOdometrySensor.svg
  77. 3 0
      Gems/ROS2/Assets/Editor/Icons/Components/RigidBodyTwistControl.svg
  78. 1 0
      Gems/ROS2/Assets/Editor/Icons/Components/SkidSteeringTwistControl.svg
  79. 1 0
      Gems/ROS2/Assets/Editor/Icons/Components/SkidSteeringVehicleModel.svg
  80. 1 0
      Gems/ROS2/Assets/Editor/Icons/Components/VacuumGripperComponent.svg
  81. 19 0
      Gems/ROS2/Assets/Editor/Icons/Components/Viewport/AckermannControl.svg
  82. 16 0
      Gems/ROS2/Assets/Editor/Icons/Components/Viewport/AckermannVehicleModel.svg
  83. 8 0
      Gems/ROS2/Assets/Editor/Icons/Components/Viewport/FingerGripperComponent.svg
  84. 8 0
      Gems/ROS2/Assets/Editor/Icons/Components/Viewport/GripperActionServerComponent.svg
  85. 16 0
      Gems/ROS2/Assets/Editor/Icons/Components/Viewport/JointsArticulationControllerComponent.svg
  86. 16 0
      Gems/ROS2/Assets/Editor/Icons/Components/Viewport/JointsManipulationEditorComponent.svg
  87. 16 0
      Gems/ROS2/Assets/Editor/Icons/Components/Viewport/JointsPIDControllerComponent.svg
  88. 8 0
      Gems/ROS2/Assets/Editor/Icons/Components/Viewport/JointsTrajectoryComponent.svg
  89. 8 0
      Gems/ROS2/Assets/Editor/Icons/Components/Viewport/ManualMotorController.svg
  90. 16 0
      Gems/ROS2/Assets/Editor/Icons/Components/Viewport/PidMotorController.svg
  91. 16 0
      Gems/ROS2/Assets/Editor/Icons/Components/Viewport/ROS2CameraSensor.svg
  92. 8 0
      Gems/ROS2/Assets/Editor/Icons/Components/Viewport/ROS2ContactSensor.svg
  93. 16 0
      Gems/ROS2/Assets/Editor/Icons/Components/Viewport/ROS2Frame.svg
  94. 8 0
      Gems/ROS2/Assets/Editor/Icons/Components/Viewport/ROS2GNSSSensor.svg
  95. 8 0
      Gems/ROS2/Assets/Editor/Icons/Components/Viewport/ROS2ImuSensor.svg
  96. 8 0
      Gems/ROS2/Assets/Editor/Icons/Components/Viewport/ROS2Lidar2DSensor.svg
  97. 8 0
      Gems/ROS2/Assets/Editor/Icons/Components/Viewport/ROS2LidarSensor.svg
  98. 16 0
      Gems/ROS2/Assets/Editor/Icons/Components/Viewport/ROS2OdometrySensor.svg
  99. 18 0
      Gems/ROS2/Assets/Editor/Icons/Components/Viewport/ROS2RobotControl.svg
  100. 16 0
      Gems/ROS2/Assets/Editor/Icons/Components/Viewport/ROS2SpawnPoint.svg

+ 5 - 1
.gitattributes

@@ -1,4 +1,3 @@
-
 #
 #
 # Git LFS (see https://git-lfs.github.com/)
 # Git LFS (see https://git-lfs.github.com/)
 #
 #
@@ -126,5 +125,10 @@ Gems/AtomLyIntegration/CommonFeatures/Assets/Objects/Lucy/.wip/marmoset_bake.tbs
 Gems/AtomLyIntegration/CommonFeatures/Assets/Objects/Lucy/.wip/Brass/brass_bake.spp filter=lfs diff=lfs merge=lfs -text
 Gems/AtomLyIntegration/CommonFeatures/Assets/Objects/Lucy/.wip/Brass/brass_bake.spp filter=lfs diff=lfs merge=lfs -text
 Gems/AtomLyIntegration/CommonFeatures/Assets/Objects/Lucy/.wip/stone/stone_bake.spp filter=lfs diff=lfs merge=lfs -text
 Gems/AtomLyIntegration/CommonFeatures/Assets/Objects/Lucy/.wip/stone/stone_bake.spp filter=lfs diff=lfs merge=lfs -text
 Gems/WarehouseAssets/docs/images/*.png filter= diff= merge= -text
 Gems/WarehouseAssets/docs/images/*.png filter= diff= merge= -text
+Templates/Ros2FleetRobotTemplate/docs/images/*.png filter= diff= merge= -text
+Gems/ROS2/docs/**/*.png -filter -diff -merge
 Templates/Ros2ProjectTemplate/Screenshots/*.png filter= diff= merge= -text
 Templates/Ros2ProjectTemplate/Screenshots/*.png filter= diff= merge= -text
 Templates/Ros2FleetRobotTemplate/Screenshots/*.png filter= diff= merge= -text
 Templates/Ros2FleetRobotTemplate/Screenshots/*.png filter= diff= merge= -text
+Templates/Ros2RoboticManipulationTemplate/Screenshots/*.png filter= diff= merge= -text
+
+*.pgm filter=lfs diff=lfs merge=lfs -text

+ 4 - 1
Gems/AzQtComponentsForPython/gem.json

@@ -19,5 +19,8 @@
     "documentation_url": "",
     "documentation_url": "",
     "dependencies": [
     "dependencies": [
         "EditorPythonBindings"
         "EditorPythonBindings"
-    ]
+    ],
+    "repo_uri": "https://raw.githubusercontent.com/o3de/o3de-extras/development",
+    "download_source_uri": "https://github.com/o3de/o3de-extras/releases/download/2.0/azqtcomponentsforpython-1.0.0-gem.zip",
+    "version": "1.0.0"
 }
 }

+ 9 - 3
Gems/OpenXRVk/Code/Include/OpenXRVk/OpenXRVkDevice.h

@@ -11,6 +11,7 @@
 #include <XR/XRDevice.h>
 #include <XR/XRDevice.h>
 #include <XR/XRSwapChain.h>
 #include <XR/XRSwapChain.h>
 #include <OpenXRVk_Platform.h>
 #include <OpenXRVk_Platform.h>
+#include <Atom/RHI.Reflect/Vulkan/XRVkDescriptors.h>
 
 
 namespace OpenXRVk
 namespace OpenXRVk
 {
 {
@@ -27,6 +28,7 @@ namespace OpenXRVk
 
 
         //////////////////////////////////////////////////////////////////////////
         //////////////////////////////////////////////////////////////////////////
         // XR::Device overrides
         // XR::Device overrides
+        
         // Create the xr specific native device object and populate the XRDeviceDescriptor with it.
         // Create the xr specific native device object and populate the XRDeviceDescriptor with it.
         AZ::RHI::ResultCode InitDeviceInternal(AZ::RHI::XRDeviceDescriptor* instanceDescriptor) override;
         AZ::RHI::ResultCode InitDeviceInternal(AZ::RHI::XRDeviceDescriptor* instanceDescriptor) override;
         //! Get the Fov data  of the view specified by view index
         //! Get the Fov data  of the view specified by view index
@@ -41,8 +43,11 @@ namespace OpenXRVk
         //! Get the native device
         //! Get the native device
         VkDevice GetNativeDevice() const;
         VkDevice GetNativeDevice() const;
 
 
-        //! Get glad vulkan context.
-        const GladVulkanContext& GetContext() const;
+        //! Get the native physical device
+        VkPhysicalDevice GetNativePhysicalDevice() const;
+
+        //! Returns the graphic binding for a hardware queue
+        const AZ::Vulkan::XRDeviceDescriptor::GraphicsBinding& GetGraphicsBinding(AZ::RHI::HardwareQueueClass queueClass) const;
 
 
         //! Reserve space for appropriate number of views 
         //! Reserve space for appropriate number of views 
         void InitXrViews(uint32_t numViews);
         void InitXrViews(uint32_t numViews);
@@ -67,12 +72,13 @@ namespace OpenXRVk
         //////////////////////////////////////////////////////////////////////////
         //////////////////////////////////////////////////////////////////////////
 
 
         VkDevice m_xrVkDevice = VK_NULL_HANDLE;
         VkDevice m_xrVkDevice = VK_NULL_HANDLE;
+        VkPhysicalDevice m_xrVkPhysicalDevice = VK_NULL_HANDLE;
+        AZStd::array<AZ::Vulkan::XRDeviceDescriptor::GraphicsBinding, AZ::RHI::HardwareQueueClassCount> m_xrQueueBinding;
         XrFrameState m_frameState{ XR_TYPE_FRAME_STATE };
         XrFrameState m_frameState{ XR_TYPE_FRAME_STATE };
         AZStd::vector<XrCompositionLayerBaseHeader*> m_xrLayers;
         AZStd::vector<XrCompositionLayerBaseHeader*> m_xrLayers;
         XrCompositionLayerProjection m_xrLayer{ XR_TYPE_COMPOSITION_LAYER_PROJECTION };
         XrCompositionLayerProjection m_xrLayer{ XR_TYPE_COMPOSITION_LAYER_PROJECTION };
         AZStd::vector<XrCompositionLayerProjectionView> m_projectionLayerViews;
         AZStd::vector<XrCompositionLayerProjectionView> m_projectionLayerViews;
         AZStd::vector<XrView> m_views;
         AZStd::vector<XrView> m_views;
         uint32_t m_viewCountOutput = 0;
         uint32_t m_viewCountOutput = 0;
-        GladVulkanContext m_context = {};
     };
     };
 }
 }

+ 23 - 16
Gems/OpenXRVk/Code/Include/OpenXRVk/OpenXRVkInstance.h

@@ -8,11 +8,12 @@
 
 
 #pragma once
 #pragma once
 
 
+
 #include <AzCore/std/containers/vector.h>
 #include <AzCore/std/containers/vector.h>
-#include <Atom/RHI/ValidationLayer.h>
-#include <Atom/RHI.Loader/FunctionLoader.h>
 #include <OpenXRVk_Platform.h>
 #include <OpenXRVk_Platform.h>
 #include <OpenXRVk/OpenXRVkPhysicalDevice.h>
 #include <OpenXRVk/OpenXRVkPhysicalDevice.h>
+#include <Atom/RHI/ValidationLayer.h>
+#include <Atom/RHI.Reflect/Vulkan/VulkanBus.h>
 #include <XR/XRInstance.h>
 #include <XR/XRInstance.h>
 
 
 namespace OpenXRVk
 namespace OpenXRVk
@@ -20,7 +21,10 @@ namespace OpenXRVk
     //! Vulkan specific XR instance back-end class that will help manage
     //! Vulkan specific XR instance back-end class that will help manage
     //! XR specific vulkan native objects
     //! XR specific vulkan native objects
     class Instance final
     class Instance final
-    : public XR::Instance
+        : public XR::Instance
+        , public AZ::Vulkan::InstanceRequirementBus::Handler
+        , public AZ::Vulkan::DeviceRequirementBus::Handler
+        , public AZ::Vulkan::InstanceNotificationBus::Handler
     {
     {
     public:
     public:
         AZ_CLASS_ALLOCATOR(Instance, AZ::SystemAllocator);
         AZ_CLASS_ALLOCATOR(Instance, AZ::SystemAllocator);
@@ -30,7 +34,6 @@ namespace OpenXRVk
 
 
         //////////////////////////////////////////////////////////////////////////
         //////////////////////////////////////////////////////////////////////////
         // XR::Instance overrides
         // XR::Instance overrides
-        AZ::RHI::ResultCode InitNativeInstance(AZ::RHI::XRInstanceDescriptor* instanceDescriptor) override;
         AZ::u32 GetNumPhysicalDevices() const override;
         AZ::u32 GetNumPhysicalDevices() const override;
         AZ::RHI::ResultCode GetXRPhysicalDevice(AZ::RHI::XRPhysicalDeviceDescriptor* physicalDeviceDescriptor, int32_t index) override;
         AZ::RHI::ResultCode GetXRPhysicalDevice(AZ::RHI::XRPhysicalDeviceDescriptor* physicalDeviceDescriptor, int32_t index) override;
         //////////////////////////////////////////////////////////////////////////
         //////////////////////////////////////////////////////////////////////////
@@ -56,26 +59,29 @@ namespace OpenXRVk
         //! Get native VkInstance.
         //! Get native VkInstance.
         VkInstance GetNativeInstance() const;
         VkInstance GetNativeInstance() const;
 
 
-        //! Get glad vulkan context.
-        GladVulkanContext& GetContext();
-
-        //! Get function loader.
-        AZ::Vulkan::FunctionLoader& GetFunctionLoader();
-
         //! Get XR environment blend mode.
         //! Get XR environment blend mode.
         XrEnvironmentBlendMode GetEnvironmentBlendMode() const;
         XrEnvironmentBlendMode GetEnvironmentBlendMode() const;
 
 
         //! Get XR configuration type.
         //! Get XR configuration type.
         XrViewConfigurationType GetViewConfigType() const;
         XrViewConfigurationType GetViewConfigType() const;
 
 
-        //! Ge the active VkPhysicalDevice.
-        VkPhysicalDevice GetActivePhysicalDevice() const;
-
     protected:
     protected:
         // XR::Instance overrides...
         // XR::Instance overrides...
         AZ::RHI::ResultCode InitInstanceInternal() override;
         AZ::RHI::ResultCode InitInstanceInternal() override;
         void ShutdownInternal() override;
         void ShutdownInternal() override;
 
 
+        // AZ::Vulkan::InstanceRequirementBus::Handler overrides..
+        void CollectAdditionalRequiredInstanceExtensions(AZStd::vector<AZStd::string>& extensions) override;
+        void CollectMinMaxVulkanAPIVersions(AZStd::vector<uint32_t>& min, AZStd::vector<uint32_t>& max) override;
+
+        // AZ::Vulkan::DeviceRequirementBus::Handler overrides...
+        void CollectAdditionalRequiredDeviceExtensions(AZStd::vector<AZStd::string>& extensions) override;
+        void FilterSupportedDevices(AZStd::vector<VkPhysicalDevice>& supportedDevices) override;
+
+        // AZ::Vulkan::InstanceNotificationBus::Handler overrides...
+        virtual void OnInstanceCreated([[maybe_unused]] VkInstance instance);
+        virtual void OnInstanceDestroyed();
+
     private:
     private:
         XrInstance m_xrInstance = XR_NULL_HANDLE;
         XrInstance m_xrInstance = XR_NULL_HANDLE;
         VkInstance m_xrVkInstance = VK_NULL_HANDLE;
         VkInstance m_xrVkInstance = VK_NULL_HANDLE;
@@ -85,9 +91,10 @@ namespace OpenXRVk
         XrSystemId m_xrSystemId = XR_NULL_SYSTEM_ID;
         XrSystemId m_xrSystemId = XR_NULL_SYSTEM_ID;
         XR::RawStringList m_requiredLayers;
         XR::RawStringList m_requiredLayers;
         XR::RawStringList m_requiredExtensions;
         XR::RawStringList m_requiredExtensions;
-        GladVulkanContext m_context = {};
-        AZStd::unique_ptr<AZ::Vulkan::FunctionLoader> m_functionLoader;
+        XR::StringList m_requireVulkanInstanceExtensions;
+        XR::StringList m_requireVulkanDeviceExtensions;
         AZStd::vector<VkPhysicalDevice> m_supportedXRDevices;
         AZStd::vector<VkPhysicalDevice> m_supportedXRDevices;
-        AZ::u32 m_physicalDeviceActiveIndex = 0;
+        uint32_t m_minVulkanAPIVersion = 0;
+        uint32_t m_maxVulkanAPIVersion = 0;
     };
     };
 }
 }

+ 6 - 2
Gems/OpenXRVk/Code/Include/OpenXRVk/OpenXRVkSystemComponent.h

@@ -9,6 +9,7 @@
 #pragma once
 #pragma once
 
 
 #include <XR/XRFactory.h>
 #include <XR/XRFactory.h>
+#include <OpenXRVk/OpenXRVkInstance.h>
 #include <AzCore/Component/Component.h>
 #include <AzCore/Component/Component.h>
 
 
 namespace OpenXRVk
 namespace OpenXRVk
@@ -24,8 +25,8 @@ namespace OpenXRVk
         static void GetProvidedServices(AZ::ComponentDescriptor::DependencyArrayType& provided);
         static void GetProvidedServices(AZ::ComponentDescriptor::DependencyArrayType& provided);
         static void Reflect(AZ::ReflectContext* context);
         static void Reflect(AZ::ReflectContext* context);
 
 
-        SystemComponent();
-        ~SystemComponent();
+        SystemComponent() = default;
+        ~SystemComponent() = default;
 
 
         //////////////////////////////////////////////////////////////////////////
         //////////////////////////////////////////////////////////////////////////
         // Component
         // Component
@@ -59,5 +60,8 @@ namespace OpenXRVk
         //! Create XR::Swapchain::Image object.
         //! Create XR::Swapchain::Image object.
         XR::Ptr<XR::SwapChain::Image> CreateSwapChainImage() override;
         XR::Ptr<XR::SwapChain::Image> CreateSwapChainImage() override;
         ///////////////////////////////////////////////////////////////////
         ///////////////////////////////////////////////////////////////////
+
+    private:
+        XR::Ptr<OpenXRVk::Instance> m_instance;
     };
     };
 }
 }

+ 0 - 3
Gems/OpenXRVk/Code/Include/OpenXRVk/OpenXRVkUtils.h

@@ -63,7 +63,4 @@ namespace OpenXRVk
     //! Iterate through the characters while caching the starting pointer to a string
     //! Iterate through the characters while caching the starting pointer to a string
     //! and every time ' ' is encountered replace it with '\0' to indicate the end of a string.
     //! and every time ' ' is encountered replace it with '\0' to indicate the end of a string.
     AZStd::vector<const char*> ParseExtensionString(char* names);
     AZStd::vector<const char*> ParseExtensionString(char* names);
-
-    //! Disable certain extensions because function pointers didn't load correctly.
-    void FilterAvailableExtensions(GladVulkanContext& context);
 }
 }

+ 13 - 92
Gems/OpenXRVk/Code/Source/OpenXRVkDevice.cpp

@@ -13,7 +13,7 @@
 #include <OpenXRVk/OpenXRVkSpace.h>
 #include <OpenXRVk/OpenXRVkSpace.h>
 #include <OpenXRVk/OpenXRVkUtils.h>
 #include <OpenXRVk/OpenXRVkUtils.h>
 #include <OpenXRVkCommon.h>
 #include <OpenXRVkCommon.h>
-#include <Atom/RHI.Reflect/Vulkan/XRVkDescriptors.h>
+#include <Atom/RHI.Reflect/VkAllocator.h>
 #include <AzCore/Casting/numeric_cast.h>
 #include <AzCore/Casting/numeric_cast.h>
 
 
 namespace OpenXRVk
 namespace OpenXRVk
@@ -26,90 +26,9 @@ namespace OpenXRVk
     AZ::RHI::ResultCode Device::InitDeviceInternal(AZ::RHI::XRDeviceDescriptor* deviceDescriptor)
     AZ::RHI::ResultCode Device::InitDeviceInternal(AZ::RHI::XRDeviceDescriptor* deviceDescriptor)
     {
     {
         AZ::Vulkan::XRDeviceDescriptor* xrDeviceDescriptor = static_cast<AZ::Vulkan::XRDeviceDescriptor*>(deviceDescriptor);
         AZ::Vulkan::XRDeviceDescriptor* xrDeviceDescriptor = static_cast<AZ::Vulkan::XRDeviceDescriptor*>(deviceDescriptor);
-        Instance* xrVkInstance = static_cast<Instance*>(GetDescriptor().m_instance.get());
-        XrVulkanDeviceCreateInfoKHR xrDeviceCreateInfo{ XR_TYPE_VULKAN_DEVICE_CREATE_INFO_KHR };
-        xrDeviceCreateInfo.systemId = xrVkInstance->GetXRSystemId();
-        xrDeviceCreateInfo.pfnGetInstanceProcAddr = xrVkInstance->GetContext().GetInstanceProcAddr;
-        xrDeviceCreateInfo.vulkanCreateInfo = xrDeviceDescriptor->m_inputData.m_deviceCreateInfo;
-        xrDeviceCreateInfo.vulkanPhysicalDevice = xrVkInstance->GetActivePhysicalDevice();
-        xrDeviceCreateInfo.vulkanAllocator = nullptr;
-
-        PFN_xrGetVulkanDeviceExtensionsKHR pfnGetVulkanDeviceExtensionsKHR = nullptr;
-        XrResult result = xrGetInstanceProcAddr(
-            xrVkInstance->GetXRInstance(), "xrGetVulkanDeviceExtensionsKHR", reinterpret_cast<PFN_xrVoidFunction*>(&pfnGetVulkanDeviceExtensionsKHR));
-        ASSERT_IF_UNSUCCESSFUL(result);
-
-        AZ::u32 deviceExtensionNamesSize = 0;
-        result = pfnGetVulkanDeviceExtensionsKHR(xrVkInstance->GetXRInstance(), xrDeviceCreateInfo.systemId, 0, &deviceExtensionNamesSize, nullptr);
-        ASSERT_IF_UNSUCCESSFUL(result);
-
-        AZStd::vector<char> deviceExtensionNames(deviceExtensionNamesSize);
-        result = pfnGetVulkanDeviceExtensionsKHR(
-            xrVkInstance->GetXRInstance(), xrDeviceCreateInfo.systemId, deviceExtensionNamesSize, &deviceExtensionNamesSize, &deviceExtensionNames[0]);
-        ASSERT_IF_UNSUCCESSFUL(result);
-
-        AZStd::vector<const char*> extensions = ParseExtensionString(&deviceExtensionNames[0]);
-        for (uint32_t i = 0; i < xrDeviceCreateInfo.vulkanCreateInfo->enabledExtensionCount; ++i)
-        {
-            extensions.push_back(xrDeviceCreateInfo.vulkanCreateInfo->ppEnabledExtensionNames[i]);
-        }
-
-        if (GetDescriptor().m_validationMode == AZ::RHI::ValidationMode::Enabled)
-        {
-            AZ_Printf("OpenXRVk", "Vulkan device extensions to enable: (%i)\n", extensions.size());
-            for (const AZStd::string& extension : extensions)
-            {
-                AZ_Printf("OpenXRVk", "Name=%s\n", extension.c_str());
-            }
-        }
-
-        VkPhysicalDeviceFeatures features{};
-        memcpy(&features, xrDeviceCreateInfo.vulkanCreateInfo->pEnabledFeatures, sizeof(features));
-
-        VkPhysicalDeviceFeatures availableFeatures{};
-        xrVkInstance->GetContext().GetPhysicalDeviceFeatures(xrVkInstance->GetActivePhysicalDevice(), &availableFeatures);
-        if (availableFeatures.shaderStorageImageMultisample == VK_TRUE)
-        {
-            // Setting this quiets down a validation error triggered by the Oculus runtime
-            features.shaderStorageImageMultisample = VK_TRUE;
-        }
-
-        VkDeviceCreateInfo deviceInfo{ VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO };
-        memcpy(&deviceInfo, xrDeviceCreateInfo.vulkanCreateInfo, sizeof(deviceInfo));
-        deviceInfo.pEnabledFeatures = &features;
-        deviceInfo.enabledExtensionCount = aznumeric_cast<AZ::u32>(extensions.size());
-        deviceInfo.ppEnabledExtensionNames = extensions.empty() ? nullptr : extensions.data();
-
-        //Create VkDevice
-        auto pfnCreateDevice = (PFN_vkCreateDevice)xrDeviceCreateInfo.pfnGetInstanceProcAddr(xrVkInstance->GetNativeInstance(), "vkCreateDevice");
-        VkResult vulkanResult = pfnCreateDevice(xrDeviceCreateInfo.vulkanPhysicalDevice, &deviceInfo, xrDeviceCreateInfo.vulkanAllocator, &m_xrVkDevice);
-        if (vulkanResult != VK_SUCCESS)
-        {
-            ShutdownInternal();
-            AZ_Error("OpenXRVk", false, "Failed to create the device.");
-            return AZ::RHI::ResultCode::Fail;
-        }
-
-        {
-            VkPhysicalDevice xrVkPhysicalDevice = xrVkInstance->GetActivePhysicalDevice();
-            // Now that we have created the device, load the function pointers for it.
-            const bool functionsLoaded = xrVkInstance->GetFunctionLoader().LoadProcAddresses(
-                &m_context, xrVkInstance->GetNativeInstance(), xrVkPhysicalDevice, m_xrVkDevice);
-
-            FilterAvailableExtensions(m_context);
-
-            if (!functionsLoaded)
-            {
-                ShutdownInternal();
-                AZ_Error("OpenXRVk", false, "Failed to initialize function loader for the device.");
-                return AZ::RHI::ResultCode::Fail;
-            }
-        }
-
-        //Populate the output data of the descriptor
-        xrDeviceDescriptor->m_outputData.m_xrVkDevice = m_xrVkDevice;
-        xrDeviceDescriptor->m_outputData.m_context = m_context;
-
+        m_xrVkDevice = xrDeviceDescriptor->m_inputData.m_xrVkDevice;
+        m_xrVkPhysicalDevice = xrDeviceDescriptor->m_inputData.m_xrVkPhysicalDevice;
+        m_xrQueueBinding = xrDeviceDescriptor->m_inputData.m_xrQueueBinding;
         return AZ::RHI::ResultCode::Success;
         return AZ::RHI::ResultCode::Success;
     }
     }
 
 
@@ -258,9 +177,14 @@ namespace OpenXRVk
         return m_xrVkDevice;
         return m_xrVkDevice;
     }
     }
 
 
-    const GladVulkanContext& Device::GetContext() const
+    VkPhysicalDevice Device::GetNativePhysicalDevice() const
+    {
+        return m_xrVkPhysicalDevice;
+    }
+
+    const AZ::Vulkan::XRDeviceDescriptor::GraphicsBinding& Device::GetGraphicsBinding(AZ::RHI::HardwareQueueClass queueClass) const
     {
     {
-        return m_context;
+        return m_xrQueueBinding[static_cast<uint32_t>(queueClass)];
     }
     }
 
 
     AZ::RHI::ResultCode Device::GetViewFov(AZ::u32 viewIndex, AZ::RPI::FovData& outFovData) const
     AZ::RHI::ResultCode Device::GetViewFov(AZ::u32 viewIndex, AZ::RPI::FovData& outFovData) const
@@ -304,10 +228,7 @@ namespace OpenXRVk
         m_projectionLayerViews.clear();
         m_projectionLayerViews.clear();
         m_views.clear();
         m_views.clear();
         m_xrLayers.clear();
         m_xrLayers.clear();
-        if (m_xrVkDevice != VK_NULL_HANDLE)
-        {
-            m_context.DestroyDevice(m_xrVkDevice, nullptr);
-            m_xrVkDevice = VK_NULL_HANDLE;
-        }
+        m_xrVkDevice = VK_NULL_HANDLE;
+        m_xrVkPhysicalDevice = VK_NULL_HANDLE;
     }
     }
 }
 }

+ 101 - 108
Gems/OpenXRVk/Code/Source/OpenXRVkInstance.cpp

@@ -9,6 +9,7 @@
 #include <OpenXRVk/OpenXRVkInstance.h>
 #include <OpenXRVk/OpenXRVkInstance.h>
 #include <OpenXRVk/OpenXRVkUtils.h>
 #include <OpenXRVk/OpenXRVkUtils.h>
 #include <Atom/RHI.Reflect/Vulkan/XRVkDescriptors.h>
 #include <Atom/RHI.Reflect/Vulkan/XRVkDescriptors.h>
+#include <Atom/RHI.Reflect/VkAllocator.h>
 #include <AzCore/Casting/numeric_cast.h>
 #include <AzCore/Casting/numeric_cast.h>
 #include <OpenXRVkCommon.h>
 #include <OpenXRVkCommon.h>
 
 
@@ -190,6 +191,18 @@ namespace OpenXRVk
         graphicsRequirements.maxApiVersionSupported = legacyRequirements.maxApiVersionSupported;
         graphicsRequirements.maxApiVersionSupported = legacyRequirements.maxApiVersionSupported;
         graphicsRequirements.minApiVersionSupported = legacyRequirements.minApiVersionSupported;
         graphicsRequirements.minApiVersionSupported = legacyRequirements.minApiVersionSupported;
 
 
+        m_minVulkanAPIVersion = VK_MAKE_API_VERSION(
+            0,
+            XR_VERSION_MAJOR(graphicsRequirements.minApiVersionSupported),
+            XR_VERSION_MINOR(graphicsRequirements.minApiVersionSupported),
+            XR_VERSION_PATCH(graphicsRequirements.minApiVersionSupported));
+
+        m_maxVulkanAPIVersion = VK_MAKE_API_VERSION(
+            0,
+            XR_VERSION_MAJOR(graphicsRequirements.maxApiVersionSupported),
+            XR_VERSION_MINOR(graphicsRequirements.maxApiVersionSupported),
+            XR_VERSION_PATCH(graphicsRequirements.maxApiVersionSupported));
+
         if (m_validationMode == AZ::RHI::ValidationMode::Enabled)
         if (m_validationMode == AZ::RHI::ValidationMode::Enabled)
         {
         {
             AZ_Printf("OpenXRVk", "graphicsRequirements.maxApiVersionSupported %d.%d.%d\n",
             AZ_Printf("OpenXRVk", "graphicsRequirements.maxApiVersionSupported %d.%d.%d\n",
@@ -205,7 +218,62 @@ namespace OpenXRVk
             AZ_Printf("OpenXRVk", "Using system %d for form factor %s\n", m_xrSystemId, to_string(m_formFactor));
             AZ_Printf("OpenXRVk", "Using system %d for form factor %s\n", m_xrSystemId, to_string(m_formFactor));
             LogViewConfigurations();
             LogViewConfigurations();
         }
         }
-		
+
+        PFN_xrGetVulkanInstanceExtensionsKHR pfnGetVulkanInstanceExtensionsKHR = nullptr;
+        result = xrGetInstanceProcAddr(m_xrInstance, "xrGetVulkanInstanceExtensionsKHR", reinterpret_cast<PFN_xrVoidFunction*>(&pfnGetVulkanInstanceExtensionsKHR));
+        ASSERT_IF_UNSUCCESSFUL(result);
+
+        AZ::u32 extensionNamesSize = 0;
+        result = pfnGetVulkanInstanceExtensionsKHR(m_xrInstance, m_xrSystemId, 0, &extensionNamesSize, nullptr);
+        ASSERT_IF_UNSUCCESSFUL(result);
+
+        AZStd::vector<char> extensionNames(extensionNamesSize);
+        result = pfnGetVulkanInstanceExtensionsKHR(m_xrInstance, m_xrSystemId, extensionNamesSize, &extensionNamesSize, &extensionNames[0]);
+        ASSERT_IF_UNSUCCESSFUL(result);
+
+        AZStd::vector<const char*> requiredInstanceExtensions = ParseExtensionString(&extensionNames[0]);
+        m_requireVulkanInstanceExtensions.insert(m_requireVulkanInstanceExtensions.end(), requiredInstanceExtensions.begin(), requiredInstanceExtensions.end());
+        if (m_validationMode == AZ::RHI::ValidationMode::Enabled)
+        {
+            AZ_Printf("OpenXRVk", "Vulkan instance extensions to enable: (%i)\n", requiredInstanceExtensions.size());
+            for (const AZStd::string& extension : requiredInstanceExtensions)
+            {
+                AZ_Printf("OpenXRVk", "Name=%s\n", extension.c_str());
+            }
+        }
+
+        AZ::Vulkan::InstanceRequirementBus::Handler::BusConnect();
+
+        PFN_xrGetVulkanDeviceExtensionsKHR pfnGetVulkanDeviceExtensionsKHR = nullptr;
+        result = xrGetInstanceProcAddr(
+            m_xrInstance,
+            "xrGetVulkanDeviceExtensionsKHR",
+            reinterpret_cast<PFN_xrVoidFunction*>(&pfnGetVulkanDeviceExtensionsKHR));
+        ASSERT_IF_UNSUCCESSFUL(result);
+
+        AZ::u32 deviceExtensionNamesSize = 0;
+        result = pfnGetVulkanDeviceExtensionsKHR(m_xrInstance, m_xrSystemId, 0, &deviceExtensionNamesSize, nullptr);
+        ASSERT_IF_UNSUCCESSFUL(result);
+
+        AZStd::vector<char> deviceExtensionNames(deviceExtensionNamesSize);
+        result = pfnGetVulkanDeviceExtensionsKHR(
+            m_xrInstance, m_xrSystemId, deviceExtensionNamesSize, &deviceExtensionNamesSize, &deviceExtensionNames[0]);
+        ASSERT_IF_UNSUCCESSFUL(result);
+
+        AZStd::vector<const char*> requiredDeviceExtensions = ParseExtensionString(&deviceExtensionNames[0]);
+        m_requireVulkanDeviceExtensions.insert(m_requireVulkanDeviceExtensions.end(), requiredDeviceExtensions.begin(), requiredDeviceExtensions.end());
+        if (m_validationMode == AZ::RHI::ValidationMode::Enabled)
+        {
+            AZ_Printf("OpenXRVk", "Vulkan device extensions to enable: (%i)\n", requiredDeviceExtensions.size());
+            for (const AZStd::string& extension : requiredDeviceExtensions)
+            {
+                AZ_Printf("OpenXRVk", "Name=%s\n", extension.c_str());
+            }
+        }
+
+        AZ::Vulkan::DeviceRequirementBus::Handler::BusConnect();
+        AZ::Vulkan::InstanceNotificationBus::Handler::BusConnect();
+
         return AZ::RHI::ResultCode::Success;
         return AZ::RHI::ResultCode::Success;
     }
     }
 
 
@@ -288,109 +356,50 @@ namespace OpenXRVk
         }
         }
     }
     }
 
 
-    AZ::RHI::ResultCode Instance::InitNativeInstance(AZ::RHI::XRInstanceDescriptor* instanceDescriptor)
+    void Instance::ShutdownInternal()
     {
     {
-        m_functionLoader = AZ::Vulkan::FunctionLoader::Create();
-        if (!m_functionLoader->Init() ||
-            !m_functionLoader->LoadProcAddresses(&m_context, VK_NULL_HANDLE, VK_NULL_HANDLE, VK_NULL_HANDLE))
-        {
-            m_functionLoader.reset();
-            AZ_Error("OpenXRVk", false, "Could not initialize function loader.");
-            return AZ::RHI::ResultCode::Fail;
-        }
-
-        AZ::Vulkan::XRInstanceDescriptor* xrInstanceDescriptor = static_cast<AZ::Vulkan::XRInstanceDescriptor*>(instanceDescriptor);
-        XrVulkanInstanceCreateInfoKHR createInfo{ XR_TYPE_VULKAN_INSTANCE_CREATE_INFO_KHR };
-        createInfo.systemId = m_xrSystemId;
-        createInfo.pfnGetInstanceProcAddr = m_context.GetInstanceProcAddr;
-        createInfo.vulkanCreateInfo = xrInstanceDescriptor->m_inputData.m_createInfo;
-        createInfo.vulkanAllocator = nullptr;
+        AZ::Vulkan::InstanceNotificationBus::Handler::BusDisconnect();
+        AZ::Vulkan::DeviceRequirementBus::Handler::BusDisconnect();
+        AZ::Vulkan::InstanceRequirementBus::Handler::BusDisconnect();
 
 
-        PFN_xrGetVulkanInstanceExtensionsKHR pfnGetVulkanInstanceExtensionsKHR = nullptr;
-        XrResult result = xrGetInstanceProcAddr(m_xrInstance, "xrGetVulkanInstanceExtensionsKHR", reinterpret_cast<PFN_xrVoidFunction*>(&pfnGetVulkanInstanceExtensionsKHR));
-        ASSERT_IF_UNSUCCESSFUL(result);
-
-        AZ::u32 extensionNamesSize = 0;
-        result = pfnGetVulkanInstanceExtensionsKHR(m_xrInstance, m_xrSystemId, 0, &extensionNamesSize, nullptr);
-        ASSERT_IF_UNSUCCESSFUL(result);
-
-        AZStd::vector<char> extensionNames(extensionNamesSize);
-        result = pfnGetVulkanInstanceExtensionsKHR(m_xrInstance, m_xrSystemId, extensionNamesSize, &extensionNamesSize, &extensionNames[0]);
-        ASSERT_IF_UNSUCCESSFUL(result);
-
-        AZStd::vector<const char*> extensions = ParseExtensionString(&extensionNames[0]);
-        for (uint32_t i = 0; i < createInfo.vulkanCreateInfo->enabledExtensionCount; ++i)
-        {
-            extensions.push_back(createInfo.vulkanCreateInfo->ppEnabledExtensionNames[i]);
-        }
+        m_supportedXRDevices.clear();
+        m_xrVkInstance = VK_NULL_HANDLE;
+    }
 
 
-        if (m_validationMode == AZ::RHI::ValidationMode::Enabled)
-        {
-            AZ_Printf("OpenXRVk", "Vulkan instance extensions to enable: (%i)\n", extensions.size());
-            for (const AZStd::string& extension : extensions)
-            {
-                AZ_Printf("OpenXRVk", "Name=%s\n", extension.c_str());
-            }
-        }
+    void Instance::CollectAdditionalRequiredInstanceExtensions(AZStd::vector<AZStd::string>& extensions)
+    {
+        extensions.insert(extensions.end(), m_requireVulkanInstanceExtensions.begin(), m_requireVulkanInstanceExtensions.end());
+    }
 
 
-        VkInstanceCreateInfo instInfo{ VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO };
-        memcpy(&instInfo, createInfo.vulkanCreateInfo, sizeof(instInfo));
-        instInfo.enabledExtensionCount = aznumeric_cast<AZ::u32>(extensions.size());
-        instInfo.ppEnabledExtensionNames = extensions.empty() ? nullptr : extensions.data();
+    void Instance::CollectMinMaxVulkanAPIVersions(AZStd::vector<uint32_t>& min, AZStd::vector<uint32_t>& max)
+    {
+        min.push_back(m_minVulkanAPIVersion);
+        max.push_back(m_maxVulkanAPIVersion);
+    }
 
 
-        auto pfnCreateInstance = (PFN_vkCreateInstance)createInfo.pfnGetInstanceProcAddr(nullptr, "vkCreateInstance");
-        VkResult vkResult = pfnCreateInstance(&instInfo, nullptr, &m_xrVkInstance);
-        if (vkResult != VK_SUCCESS)
-        {
-            ShutdownInternal();
-            AZ_Error("OpenXRVk", false, "Failed to create the instance.");
-            return AZ::RHI::ResultCode::Fail;
-        }
+    void Instance::CollectAdditionalRequiredDeviceExtensions(AZStd::vector<AZStd::string>& extensions)
+    {
+        extensions.insert(extensions.end(), m_requireVulkanDeviceExtensions.begin(), m_requireVulkanDeviceExtensions.end());
+    }
 
 
-        // Now that we have created the instance, load the function pointers for it.
-        if (!m_functionLoader->LoadProcAddresses(&m_context, m_xrVkInstance, VK_NULL_HANDLE, VK_NULL_HANDLE))
+    void Instance::FilterSupportedDevices(AZStd::vector<VkPhysicalDevice>& supportedDevices)
+    {
+        AZStd::erase_if(supportedDevices, [&](const auto& physicalDevice)
         {
         {
-            ShutdownInternal();
-            AZ_Warning("OpenXRVk", false, "Failed to initialize function loader for the instance.");
-            return AZ::RHI::ResultCode::Fail;
-        }
-
-        FilterAvailableExtensions(m_context);
-
-        //Populate the instance descriptor with the correct VkInstance
-        xrInstanceDescriptor->m_outputData.m_xrVkInstance = m_xrVkInstance;
-        xrInstanceDescriptor->m_outputData.m_context = m_context;
+            return AZStd::find(m_supportedXRDevices.begin(), m_supportedXRDevices.end(), physicalDevice) == m_supportedXRDevices.end();
+        });
+    }
 
 
-        //Get the list of Physical devices
+    void Instance::OnInstanceCreated(VkInstance instance)
+    {
+        m_xrVkInstance = instance;
         m_supportedXRDevices = PhysicalDevice::EnumerateDeviceList(m_xrSystemId, m_xrInstance, m_xrVkInstance);
         m_supportedXRDevices = PhysicalDevice::EnumerateDeviceList(m_xrSystemId, m_xrInstance, m_xrVkInstance);
-        if (m_supportedXRDevices.empty())
-        {
-            ShutdownInternal();
-            AZ_Error("OpenXRVk", false, "No physical devices found.");
-            return AZ::RHI::ResultCode::Fail;
-        }
-
-        //Just use the first device at the moment.
-        m_physicalDeviceActiveIndex = 0;
-
-        return AZ::RHI::ResultCode::Success;
     }
     }
 
 
-    void Instance::ShutdownInternal()
+    void Instance::OnInstanceDestroyed()
     {
     {
-        if (m_xrVkInstance != VK_NULL_HANDLE)
-        {
-            m_supportedXRDevices.clear();
-
-            m_context.DestroyInstance(m_xrVkInstance, nullptr);
-            m_xrVkInstance = VK_NULL_HANDLE;
-        }
-
-        if (m_functionLoader)
-        {
-            m_functionLoader->Shutdown();
-        }
-        m_functionLoader = nullptr;
+        m_xrVkInstance = XR_NULL_HANDLE;
+        m_supportedXRDevices.clear();
     }
     }
 
 
     AZ::RHI::ResultCode Instance::GetXRPhysicalDevice(AZ::RHI::XRPhysicalDeviceDescriptor* physicalDeviceDescriptor, int32_t index)
     AZ::RHI::ResultCode Instance::GetXRPhysicalDevice(AZ::RHI::XRPhysicalDeviceDescriptor* physicalDeviceDescriptor, int32_t index)
@@ -409,12 +418,6 @@ namespace OpenXRVk
         return aznumeric_cast<AZ::u32>(m_supportedXRDevices.size());
         return aznumeric_cast<AZ::u32>(m_supportedXRDevices.size());
     }
     }
 
 
-    VkPhysicalDevice Instance::GetActivePhysicalDevice() const
-    {
-        AZ_Assert(m_physicalDeviceActiveIndex < m_supportedXRDevices.size(), "Index out of range");
-        return m_supportedXRDevices[m_physicalDeviceActiveIndex];
-    }
-
     XrInstance Instance::GetXRInstance() const
     XrInstance Instance::GetXRInstance() const
     {
     {
         return m_xrInstance;
         return m_xrInstance;
@@ -430,16 +433,6 @@ namespace OpenXRVk
         return m_xrVkInstance;
         return m_xrVkInstance;
     }
     }
 
 
-    GladVulkanContext& Instance::GetContext()
-    {
-        return m_context;
-    }
-
-    AZ::Vulkan::FunctionLoader& Instance::GetFunctionLoader()
-    {
-        return *m_functionLoader;
-    }
-
     XrEnvironmentBlendMode Instance::GetEnvironmentBlendMode() const
     XrEnvironmentBlendMode Instance::GetEnvironmentBlendMode() const
     {
     {
         return m_environmentBlendMode;
         return m_environmentBlendMode;

+ 5 - 5
Gems/OpenXRVk/Code/Source/OpenXRVkSession.cpp

@@ -24,19 +24,19 @@ namespace OpenXRVk
         return aznew Session;
         return aznew Session;
     }
     }
 
 
-    AZ::RHI::ResultCode Session::InitInternal(AZ::RHI::XRSessionDescriptor* descriptor)
+    AZ::RHI::ResultCode Session::InitInternal([[maybe_unused]] AZ::RHI::XRSessionDescriptor* descriptor)
     {
     {
-        AZ::Vulkan::XRSessionDescriptor* sessionDescriptor = static_cast<AZ::Vulkan::XRSessionDescriptor*>(descriptor);
         Instance* xrVkInstance = static_cast<Instance*>(GetDescriptor().m_instance.get());
         Instance* xrVkInstance = static_cast<Instance*>(GetDescriptor().m_instance.get());
         Device* xrVkDevice = static_cast<Device*>(GetDescriptor().m_device.get());
         Device* xrVkDevice = static_cast<Device*>(GetDescriptor().m_device.get());
+        auto graphicBinding = xrVkDevice->GetGraphicsBinding(AZ::RHI::HardwareQueueClass::Graphics);
 
 
         m_xrInstance = xrVkInstance->GetXRInstance();
         m_xrInstance = xrVkInstance->GetXRInstance();
         AZ_Printf("OpenXRVk", "Creating session...\n");
         AZ_Printf("OpenXRVk", "Creating session...\n");
         m_graphicsBinding.instance = xrVkInstance->GetNativeInstance();
         m_graphicsBinding.instance = xrVkInstance->GetNativeInstance();
-        m_graphicsBinding.physicalDevice = xrVkInstance->GetActivePhysicalDevice();
+        m_graphicsBinding.physicalDevice = xrVkDevice->GetNativePhysicalDevice();
         m_graphicsBinding.device = xrVkDevice->GetNativeDevice();
         m_graphicsBinding.device = xrVkDevice->GetNativeDevice();
-        m_graphicsBinding.queueFamilyIndex = sessionDescriptor->m_inputData.m_graphicsBinding.m_queueFamilyIndex;
-        m_graphicsBinding.queueIndex = sessionDescriptor->m_inputData.m_graphicsBinding.m_queueIndex;
+        m_graphicsBinding.queueFamilyIndex = graphicBinding.m_queueFamilyIndex;
+        m_graphicsBinding.queueIndex = graphicBinding.m_queueIndex;
 
 
         AZ_Assert(m_xrInstance != XR_NULL_HANDLE, "XR instance is null.");
         AZ_Assert(m_xrInstance != XR_NULL_HANDLE, "XR instance is null.");
         AZ_Assert(m_session == XR_NULL_HANDLE, "XR session is already initialized.");
         AZ_Assert(m_session == XR_NULL_HANDLE, "XR session is already initialized.");

+ 1 - 1
Gems/OpenXRVk/Code/Source/OpenXRVkSwapChain.cpp

@@ -241,7 +241,7 @@ namespace OpenXRVk
     VkFormat SwapChain::SelectColorSwapChainFormat(const AZStd::vector<int64_t>& runtimeFormats) const
     VkFormat SwapChain::SelectColorSwapChainFormat(const AZStd::vector<int64_t>& runtimeFormats) const
     {
     {
         // List of supported color swapchain formats.
         // List of supported color swapchain formats.
-        constexpr int64_t SupportedColorSwapchainFormats[] = { VK_FORMAT_B8G8R8A8_UNORM, VK_FORMAT_R8G8B8A8_UNORM };
+        constexpr int64_t SupportedColorSwapchainFormats[] = { VK_FORMAT_B8G8R8A8_UNORM, VK_FORMAT_R8G8B8A8_UNORM, VK_FORMAT_R8G8B8A8_SRGB };
 
 
         auto swapchainFormatIt =
         auto swapchainFormatIt =
             AZStd::find_first_of(runtimeFormats.begin(), runtimeFormats.end(), AZStd::begin(SupportedColorSwapchainFormats),
             AZStd::find_first_of(runtimeFormats.begin(), runtimeFormats.end(), AZStd::begin(SupportedColorSwapchainFormats),

+ 29 - 11
Gems/OpenXRVk/Code/Source/OpenXRVkSystemComponent.cpp

@@ -9,6 +9,8 @@
 
 
 #include <AzCore/Serialization/SerializeContext.h>
 #include <AzCore/Serialization/SerializeContext.h>
 
 
+#include <Atom/RHI/FactoryManagerBus.h>
+
 #include <OpenXRVk/OpenXRVkDevice.h>
 #include <OpenXRVk/OpenXRVkDevice.h>
 #include <OpenXRVk/OpenXRVkInput.h>
 #include <OpenXRVk/OpenXRVkInput.h>
 #include <OpenXRVk/OpenXRVkInstance.h>
 #include <OpenXRVk/OpenXRVkInstance.h>
@@ -17,11 +19,14 @@
 #include <OpenXRVk/OpenXRVkSwapChain.h>
 #include <OpenXRVk/OpenXRVkSwapChain.h>
 #include <OpenXRVk/OpenXRVkSystemComponent.h>
 #include <OpenXRVk/OpenXRVkSystemComponent.h>
 
 
+#include <XR/XRUtils.h>
+
 namespace OpenXRVk
 namespace OpenXRVk
 {
 {
     void SystemComponent::GetProvidedServices(AZ::ComponentDescriptor::DependencyArrayType& provided)
     void SystemComponent::GetProvidedServices(AZ::ComponentDescriptor::DependencyArrayType& provided)
     {
     {
         provided.push_back(XR::Factory::GetPlatformService());
         provided.push_back(XR::Factory::GetPlatformService());
+        provided.push_back(AZ_CRC_CE("VulkanRequirementsService"));
     }
     }
 
 
     void SystemComponent::Reflect(AZ::ReflectContext* context)
     void SystemComponent::Reflect(AZ::ReflectContext* context)
@@ -35,17 +40,6 @@ namespace OpenXRVk
         AzFramework::InputDeviceXRController::Reflect(context);
         AzFramework::InputDeviceXRController::Reflect(context);
     }
     }
 
 
-    SystemComponent::SystemComponent()
-    {
-        // Only have Vulkan back-end implementation for XR at the moment so register it. 
-        XR::Factory::Register(this);
-    }
-
-    SystemComponent::~SystemComponent()
-    {
-        XR::Factory::Unregister(this);
-    }
-
     XR::Ptr<XR::Instance> SystemComponent::CreateInstance()
     XR::Ptr<XR::Instance> SystemComponent::CreateInstance()
     {
     {
         return Instance::Create();
         return Instance::Create();
@@ -88,9 +82,33 @@ namespace OpenXRVk
 
 
     void SystemComponent::Activate()
     void SystemComponent::Activate()
     {
     {
+        if (XR::IsOpenXREnabled())
+        {
+            m_instance = AZStd::static_pointer_cast<OpenXRVk::Instance>(CreateInstance());
+            //Get the validation mode
+            AZ::RHI::ValidationMode validationMode = AZ::RHI::ValidationMode::Disabled;
+            AZ::RHI::FactoryManagerBus::BroadcastResult(validationMode, &AZ::RHI::FactoryManagerRequest::DetermineValidationMode);
+
+            if (m_instance->Init(validationMode) == AZ::RHI::ResultCode::Success)
+            {
+                XR::Factory::Register(this);
+                AZ::Interface<XR::Instance>::Register(m_instance.get());
+            }
+            else
+            {
+                AZ_Warning("OpenXRVK", false, "OpenXRVK is not supported on this platform");
+                m_instance = nullptr;
+            }
+        }
     }
     }
 
 
     void SystemComponent::Deactivate()
     void SystemComponent::Deactivate()
     {
     {
+        if (m_instance)
+        {
+            XR::Factory::Unregister(this);
+            AZ::Interface<XR::Instance>::Unregister(m_instance.get());
+            m_instance = nullptr;
+        }
     }
     }
 }
 }

+ 0 - 10
Gems/OpenXRVk/Code/Source/OpenXRVkUtils.cpp

@@ -74,14 +74,4 @@ namespace OpenXRVk
         }
         }
         return list;
         return list;
     }
     }
-
-    void FilterAvailableExtensions(GladVulkanContext& context)
-    {
-        // In some cases (like when running with the GPU profiler on Quest2) the extension is reported as available
-        // but the function pointers do not load. Disable the extension if that's the case.
-        if (context.EXT_debug_utils && !context.CmdBeginDebugUtilsLabelEXT)
-        {
-            context.EXT_debug_utils = 0;
-        }
-    }
 }
 }

+ 4 - 3
Gems/OpenXRVk/gem.json

@@ -13,7 +13,8 @@
     "user_tags": [],
     "user_tags": [],
     "requirements": "",
     "requirements": "",
     "documentation_url": "",
     "documentation_url": "",
-    "dependencies": [
-        "Atom_RPI"
-    ]
+    "dependencies": [],
+    "repo_uri": "https://raw.githubusercontent.com/o3de/o3de-extras/development",
+    "download_source_uri": "https://github.com/o3de/o3de-extras/releases/download/2.0/openxrvk-1.0.0-gem.zip",
+    "version": "1.0.0"
 }
 }

+ 17 - 14
Gems/ProteusRobot/CMakeLists.txt

@@ -1,22 +1,25 @@
+# Copyright (c) Contributors to the Open 3D Engine Project.
+# For complete copyright and license terms please see the LICENSE at the root of this distribution.
+#
+# SPDX-License-Identifier: Apache-2.0 OR MIT
 
 
 # Query the gem name from the gem.json file if possible
 # Query the gem name from the gem.json file if possible
 # otherwise fallback to using ProteusRobot
 # otherwise fallback to using ProteusRobot
-o3de_find_ancestor_gem_root(gem_path gem_name "${CMAKE_CURRENT_SOURCE_DIR}")
+o3de_find_ancestor_gem_root(gem_root_path gem_name "${CMAKE_CURRENT_SOURCE_DIR}")
 if (NOT gem_name)
 if (NOT gem_name)
     set(gem_name "ProteusRobot")
     set(gem_name "ProteusRobot")
 endif()
 endif()
 
 
-# Fallback to using the current source CMakeLists.txt directory as the gem root path
-if (NOT gem_path)
-    set(gem_path ${CMAKE_CURRENT_SOURCE_DIR})
-endif()
-
-set(gem_json ${gem_path}/gem.json)
-
-o3de_restricted_path(${gem_json} gem_restricted_path gem_parent_relative_path)
+# This indicates to the Builders applications(AssetProcessor, AssetBuilder, AssetBundler)
+# that the gem should be added to the "cmake_dependencies.<project>.assetbuilder.setreg"
+# which is generated when cmake configure occurs.
+# Also tooling applications such as the Editor needs the CMake alias
+# to see the gem as active
+if(PAL_TRAIT_BUILD_HOST_TOOLS)
+    ly_create_alias(NAME ${gem_name}.Builders NAMESPACE Gem)
+    ly_create_alias(NAME ${gem_name}.Tools NAMESPACE Gem)
 
 
-o3de_pal_dir(pal_dir ${CMAKE_CURRENT_SOURCE_DIR}/Platform/${PAL_PLATFORM_NAME} "${gem_restricted_path}" "${gem_path}" "${gem_parent_relative_path}")
-
-ly_add_external_target_path(${CMAKE_CURRENT_SOURCE_DIR}/3rdParty)
-
-add_subdirectory(Code)
+    # Add in CMake dependencies for each gem dependency listed in this gem's gem.json file
+    # for the Tools and Builders gem variants
+    o3de_add_variant_dependencies_for_gem_dependencies(GEM_NAME ${gem_name} VARIANTS Tools Builders)
+endif()

+ 0 - 4
Gems/ProteusRobot/Code/Platform/Android/PAL_android.cmake

@@ -1,4 +0,0 @@
-
-set(PAL_TRAIT_PROTEUSROBOT_SUPPORTED TRUE)
-set(PAL_TRAIT_PROTEUSROBOT_TEST_SUPPORTED FALSE)
-set(PAL_TRAIT_PROTEUSROBOT_EDITOR_TEST_SUPPORTED FALSE)

+ 0 - 3
Gems/ProteusRobot/Code/Platform/Android/proteusrobot_api_files.cmake

@@ -1,3 +0,0 @@
-
-set(FILES
-)

+ 0 - 8
Gems/ProteusRobot/Code/Platform/Android/proteusrobot_private_files.cmake

@@ -1,8 +0,0 @@
-
-# Platform specific files for Android
-# i.e. ../Source/Android/ProteusRobotAndroid.cpp
-#      ../Source/Android/ProteusRobotAndroid.h
-#      ../Include/Android/ProteusRobotAndroid.h
-
-set(FILES
-)

+ 0 - 8
Gems/ProteusRobot/Code/Platform/Android/proteusrobot_shared_files.cmake

@@ -1,8 +0,0 @@
-
-# Platform specific files for Android
-# i.e. ../Source/Android/ProteusRobotAndroid.cpp
-#      ../Source/Android/ProteusRobotAndroid.h
-#      ../Include/Android/ProteusRobotAndroid.h
-
-set(FILES
-)

+ 0 - 4
Gems/ProteusRobot/Code/Platform/Linux/PAL_linux.cmake

@@ -1,4 +0,0 @@
-
-set(PAL_TRAIT_PROTEUSROBOT_SUPPORTED TRUE)
-set(PAL_TRAIT_PROTEUSROBOT_TEST_SUPPORTED FALSE)
-set(PAL_TRAIT_PROTEUSROBOT_EDITOR_TEST_SUPPORTED FALSE)

+ 0 - 3
Gems/ProteusRobot/Code/Platform/Linux/proteusrobot_api_files.cmake

@@ -1,3 +0,0 @@
-
-set(FILES
-)

+ 0 - 3
Gems/ProteusRobot/Code/Platform/Linux/proteusrobot_editor_api_files.cmake

@@ -1,3 +0,0 @@
-
-set(FILES
-)

+ 0 - 8
Gems/ProteusRobot/Code/Platform/Linux/proteusrobot_private_files.cmake

@@ -1,8 +0,0 @@
-
-# Platform specific files for Linux
-# i.e. ../Source/Linux/ProteusRobotLinux.cpp
-#      ../Source/Linux/ProteusRobotLinux.h
-#      ../Include/Linux/ProteusRobotLinux.h
-
-set(FILES
-)

+ 0 - 8
Gems/ProteusRobot/Code/Platform/Linux/proteusrobot_shared_files.cmake

@@ -1,8 +0,0 @@
-
-# Platform specific files for Linux
-# i.e. ../Source/Linux/ProteusRobotLinux.cpp
-#      ../Source/Linux/ProteusRobotLinux.h
-#      ../Include/Linux/ProteusRobotLinux.h
-
-set(FILES
-)

+ 0 - 4
Gems/ProteusRobot/Code/Platform/Mac/PAL_mac.cmake

@@ -1,4 +0,0 @@
-
-set(PAL_TRAIT_PROTEUSROBOT_SUPPORTED TRUE)
-set(PAL_TRAIT_PROTEUSROBOT_TEST_SUPPORTED FALSE)
-set(PAL_TRAIT_PROTEUSROBOT_EDITOR_TEST_SUPPORTED FALSE)

+ 0 - 3
Gems/ProteusRobot/Code/Platform/Mac/proteusrobot_api_files.cmake

@@ -1,3 +0,0 @@
-
-set(FILES
-)

+ 0 - 3
Gems/ProteusRobot/Code/Platform/Mac/proteusrobot_editor_api_files.cmake

@@ -1,3 +0,0 @@
-
-set(FILES
-)

+ 0 - 8
Gems/ProteusRobot/Code/Platform/Mac/proteusrobot_private_files.cmake

@@ -1,8 +0,0 @@
-
-# Platform specific files for Mac
-# i.e. ../Source/Mac/ProteusRobotMac.cpp
-#      ../Source/Mac/ProteusRobotMac.h
-#      ../Include/Mac/ProteusRobotMac.h
-
-set(FILES
-)

+ 0 - 8
Gems/ProteusRobot/Code/Platform/Mac/proteusrobot_shared_files.cmake

@@ -1,8 +0,0 @@
-
-# Platform specific files for Mac
-# i.e. ../Source/Mac/ProteusRobotMac.cpp
-#      ../Source/Mac/ProteusRobotMac.h
-#      ../Include/Mac/ProteusRobotMac.h
-
-set(FILES
-)

+ 0 - 4
Gems/ProteusRobot/Code/Platform/Windows/PAL_windows.cmake

@@ -1,4 +0,0 @@
-
-set(PAL_TRAIT_PROTEUSROBOT_SUPPORTED TRUE)
-set(PAL_TRAIT_PROTEUSROBOT_TEST_SUPPORTED FALSE)
-set(PAL_TRAIT_PROTEUSROBOT_EDITOR_TEST_SUPPORTED FALSE)

+ 0 - 3
Gems/ProteusRobot/Code/Platform/Windows/proteusrobot_api_files.cmake

@@ -1,3 +0,0 @@
-
-set(FILES
-)

+ 0 - 3
Gems/ProteusRobot/Code/Platform/Windows/proteusrobot_editor_api_files.cmake

@@ -1,3 +0,0 @@
-
-set(FILES
-)

+ 0 - 8
Gems/ProteusRobot/Code/Platform/Windows/proteusrobot_private_files.cmake

@@ -1,8 +0,0 @@
-
-# Platform specific files for Windows
-# i.e. ../Source/Windows/ProteusRobotWindows.cpp
-#      ../Source/Windows/ProteusRobotWindows.h
-#      ../Include/Windows/ProteusRobotWindows.h
-
-set(FILES
-)

+ 0 - 8
Gems/ProteusRobot/Code/Platform/Windows/proteusrobot_shared_files.cmake

@@ -1,8 +0,0 @@
-
-# Platform specific files for Windows
-# i.e. ../Source/Windows/ProteusRobotWindows.cpp
-#      ../Source/Windows/ProteusRobotWindows.h
-#      ../Include/Windows/ProteusRobotWindows.h
-
-set(FILES
-)

+ 0 - 4
Gems/ProteusRobot/Code/Platform/iOS/PAL_ios.cmake

@@ -1,4 +0,0 @@
-
-set(PAL_TRAIT_PROTEUSROBOT_SUPPORTED TRUE)
-set(PAL_TRAIT_PROTEUSROBOT_TEST_SUPPORTED FALSE)
-set(PAL_TRAIT_PROTEUSROBOT_EDITOR_TEST_SUPPORTED FALSE)

+ 0 - 3
Gems/ProteusRobot/Code/Platform/iOS/proteusrobot_api_files.cmake

@@ -1,3 +0,0 @@
-
-set(FILES
-)

+ 0 - 8
Gems/ProteusRobot/Code/Platform/iOS/proteusrobot_private_files.cmake

@@ -1,8 +0,0 @@
-
-# Platform specific files for iOS
-# i.e. ../Source/iOS/ProteusRobotiOS.cpp
-#      ../Source/iOS/ProteusRobotiOS.h
-#      ../Include/iOS/ProteusRobotiOS.h
-
-set(FILES
-)

+ 0 - 8
Gems/ProteusRobot/Code/Platform/iOS/proteusrobot_shared_files.cmake

@@ -1,8 +0,0 @@
-
-# Platform specific files for iOS
-# i.e. ../Source/iOS/ProteusRobotiOS.cpp
-#      ../Source/iOS/ProteusRobotiOS.h
-#      ../Include/iOS/ProteusRobotiOS.h
-
-set(FILES
-)

+ 0 - 17
Gems/ProteusRobot/Code/Source/Clients/ProteusRobotModule.cpp

@@ -1,17 +0,0 @@
-
-
-#include <ProteusRobotModuleInterface.h>
-#include "ProteusRobotSystemComponent.h"
-
-namespace ProteusRobot
-{
-    class ProteusRobotModule
-        : public ProteusRobotModuleInterface
-    {
-    public:
-        AZ_RTTI(ProteusRobotModule, "{F9558D3E-566B-4824-8634-015F21864F5E}", ProteusRobotModuleInterface);
-        AZ_CLASS_ALLOCATOR(ProteusRobotModule, AZ::SystemAllocator);
-    };
-}// namespace ProteusRobot
-
-AZ_DECLARE_MODULE_CLASS(Gem_ProteusRobot, ProteusRobot::ProteusRobotModule)

+ 0 - 83
Gems/ProteusRobot/Code/Source/Clients/ProteusRobotSystemComponent.cpp

@@ -1,83 +0,0 @@
-
-#include "ProteusRobotSystemComponent.h"
-
-#include <AzCore/Serialization/SerializeContext.h>
-#include <AzCore/Serialization/EditContext.h>
-#include <AzCore/Serialization/EditContextConstants.inl>
-
-namespace ProteusRobot
-{
-    void ProteusRobotSystemComponent::Reflect(AZ::ReflectContext* context)
-    {
-        if (AZ::SerializeContext* serialize = azrtti_cast<AZ::SerializeContext*>(context))
-        {
-            serialize->Class<ProteusRobotSystemComponent, AZ::Component>()
-                ->Version(0)
-                ;
-
-            if (AZ::EditContext* ec = serialize->GetEditContext())
-            {
-                ec->Class<ProteusRobotSystemComponent>("ProteusRobot", "[Description of functionality provided by this System Component]")
-                    ->ClassElement(AZ::Edit::ClassElements::EditorData, "")
-                        ->Attribute(AZ::Edit::Attributes::AppearsInAddComponentMenu, AZ_CRC("System"))
-                        ->Attribute(AZ::Edit::Attributes::AutoExpand, true)
-                    ;
-            }
-        }
-    }
-
-    void ProteusRobotSystemComponent::GetProvidedServices(AZ::ComponentDescriptor::DependencyArrayType& provided)
-    {
-        provided.push_back(AZ_CRC_CE("ProteusRobotService"));
-    }
-
-    void ProteusRobotSystemComponent::GetIncompatibleServices(AZ::ComponentDescriptor::DependencyArrayType& incompatible)
-    {
-        incompatible.push_back(AZ_CRC_CE("ProteusRobotService"));
-    }
-
-    void ProteusRobotSystemComponent::GetRequiredServices([[maybe_unused]] AZ::ComponentDescriptor::DependencyArrayType& required)
-    {
-    }
-
-    void ProteusRobotSystemComponent::GetDependentServices([[maybe_unused]] AZ::ComponentDescriptor::DependencyArrayType& dependent)
-    {
-    }
-
-    ProteusRobotSystemComponent::ProteusRobotSystemComponent()
-    {
-        if (ProteusRobotInterface::Get() == nullptr)
-        {
-            ProteusRobotInterface::Register(this);
-        }
-    }
-
-    ProteusRobotSystemComponent::~ProteusRobotSystemComponent()
-    {
-        if (ProteusRobotInterface::Get() == this)
-        {
-            ProteusRobotInterface::Unregister(this);
-        }
-    }
-
-    void ProteusRobotSystemComponent::Init()
-    {
-    }
-
-    void ProteusRobotSystemComponent::Activate()
-    {
-        ProteusRobotRequestBus::Handler::BusConnect();
-        AZ::TickBus::Handler::BusConnect();
-    }
-
-    void ProteusRobotSystemComponent::Deactivate()
-    {
-        AZ::TickBus::Handler::BusDisconnect();
-        ProteusRobotRequestBus::Handler::BusDisconnect();
-    }
-
-    void ProteusRobotSystemComponent::OnTick([[maybe_unused]] float deltaTime, [[maybe_unused]] AZ::ScriptTimePoint time)
-    {
-    }
-
-} // namespace ProteusRobot

+ 0 - 38
Gems/ProteusRobot/Code/Source/Tools/ProteusRobotEditorModule.cpp

@@ -1,38 +0,0 @@
-
-#include <ProteusRobotModuleInterface.h>
-#include "ProteusRobotEditorSystemComponent.h"
-
-namespace ProteusRobot
-{
-    class ProteusRobotEditorModule
-        : public ProteusRobotModuleInterface
-    {
-    public:
-        AZ_RTTI(ProteusRobotEditorModule, "{F9558D3E-566B-4824-8634-015F21864F5E}", ProteusRobotModuleInterface);
-        AZ_CLASS_ALLOCATOR(ProteusRobotEditorModule, AZ::SystemAllocator);
-
-        ProteusRobotEditorModule()
-        {
-            // Push results of [MyComponent]::CreateDescriptor() into m_descriptors here.
-            // Add ALL components descriptors associated with this gem to m_descriptors.
-            // This will associate the AzTypeInfo information for the components with the the SerializeContext, BehaviorContext and EditContext.
-            // This happens through the [MyComponent]::Reflect() function.
-            m_descriptors.insert(m_descriptors.end(), {
-                ProteusRobotEditorSystemComponent::CreateDescriptor(),
-            });
-        }
-
-        /**
-         * Add required SystemComponents to the SystemEntity.
-         * Non-SystemComponents should not be added here
-         */
-        AZ::ComponentTypeList GetRequiredSystemComponents() const override
-        {
-            return AZ::ComponentTypeList {
-                azrtti_typeid<ProteusRobotEditorSystemComponent>(),
-            };
-        }
-    };
-}// namespace ProteusRobot
-
-AZ_DECLARE_MODULE_CLASS(Gem_ProteusRobot, ProteusRobot::ProteusRobotEditorModule)

+ 0 - 54
Gems/ProteusRobot/Code/Source/Tools/ProteusRobotEditorSystemComponent.cpp

@@ -1,54 +0,0 @@
-
-#include <AzCore/Serialization/SerializeContext.h>
-#include "ProteusRobotEditorSystemComponent.h"
-
-namespace ProteusRobot
-{
-    void ProteusRobotEditorSystemComponent::Reflect(AZ::ReflectContext* context)
-    {
-        if (auto serializeContext = azrtti_cast<AZ::SerializeContext*>(context))
-        {
-            serializeContext->Class<ProteusRobotEditorSystemComponent, ProteusRobotSystemComponent>()
-                ->Version(0);
-        }
-    }
-
-    ProteusRobotEditorSystemComponent::ProteusRobotEditorSystemComponent() = default;
-
-    ProteusRobotEditorSystemComponent::~ProteusRobotEditorSystemComponent() = default;
-
-    void ProteusRobotEditorSystemComponent::GetProvidedServices(AZ::ComponentDescriptor::DependencyArrayType& provided)
-    {
-        BaseSystemComponent::GetProvidedServices(provided);
-        provided.push_back(AZ_CRC_CE("ProteusRobotEditorService"));
-    }
-
-    void ProteusRobotEditorSystemComponent::GetIncompatibleServices(AZ::ComponentDescriptor::DependencyArrayType& incompatible)
-    {
-        BaseSystemComponent::GetIncompatibleServices(incompatible);
-        incompatible.push_back(AZ_CRC_CE("ProteusRobotEditorService"));
-    }
-
-    void ProteusRobotEditorSystemComponent::GetRequiredServices([[maybe_unused]] AZ::ComponentDescriptor::DependencyArrayType& required)
-    {
-        BaseSystemComponent::GetRequiredServices(required);
-    }
-
-    void ProteusRobotEditorSystemComponent::GetDependentServices([[maybe_unused]] AZ::ComponentDescriptor::DependencyArrayType& dependent)
-    {
-        BaseSystemComponent::GetDependentServices(dependent);
-    }
-
-    void ProteusRobotEditorSystemComponent::Activate()
-    {
-        ProteusRobotSystemComponent::Activate();
-        AzToolsFramework::EditorEvents::Bus::Handler::BusConnect();
-    }
-
-    void ProteusRobotEditorSystemComponent::Deactivate()
-    {
-        AzToolsFramework::EditorEvents::Bus::Handler::BusDisconnect();
-        ProteusRobotSystemComponent::Deactivate();
-    }
-
-} // namespace ProteusRobot

+ 0 - 33
Gems/ProteusRobot/Code/Source/Tools/ProteusRobotEditorSystemComponent.h

@@ -1,33 +0,0 @@
-
-#pragma once
-
-#include <AzToolsFramework/API/ToolsApplicationAPI.h>
-
-#include <Clients/ProteusRobotSystemComponent.h>
-
-namespace ProteusRobot
-{
-    /// System component for ProteusRobot editor
-    class ProteusRobotEditorSystemComponent
-        : public ProteusRobotSystemComponent
-        , protected AzToolsFramework::EditorEvents::Bus::Handler
-    {
-        using BaseSystemComponent = ProteusRobotSystemComponent;
-    public:
-        AZ_COMPONENT(ProteusRobotEditorSystemComponent, "{1AD25C4B-B8F7-4C54-BF46-3F5A9E02E90B}", BaseSystemComponent);
-        static void Reflect(AZ::ReflectContext* context);
-
-        ProteusRobotEditorSystemComponent();
-        ~ProteusRobotEditorSystemComponent();
-
-    private:
-        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);
-
-        // AZ::Component
-        void Activate() override;
-        void Deactivate() override;
-    };
-} // namespace ProteusRobot

+ 0 - 4
Gems/ProteusRobot/Code/Tests/Clients/ProteusRobotTest.cpp

@@ -1,4 +0,0 @@
-
-#include <AzTest/AzTest.h>
-
-AZ_UNIT_TEST_HOOK(DEFAULT_UNIT_TEST_ENV);

+ 0 - 4
Gems/ProteusRobot/Code/Tests/Tools/ProteusRobotEditorTest.cpp

@@ -1,4 +0,0 @@
-
-#include <AzTest/AzTest.h>
-
-AZ_UNIT_TEST_HOOK(DEFAULT_UNIT_TEST_ENV);

+ 0 - 4
Gems/ProteusRobot/Code/proteusrobot_api_files.cmake

@@ -1,4 +0,0 @@
-
-set(FILES
-    Include/ProteusRobot/ProteusRobotBus.h
-)

+ 0 - 4
Gems/ProteusRobot/Code/proteusrobot_editor_api_files.cmake

@@ -1,4 +0,0 @@
-
-
-set(FILES
-)

+ 0 - 5
Gems/ProteusRobot/Code/proteusrobot_editor_private_files.cmake

@@ -1,5 +0,0 @@
-
-set(FILES
-    Source/Tools/ProteusRobotEditorSystemComponent.cpp
-    Source/Tools/ProteusRobotEditorSystemComponent.h
-)

+ 0 - 4
Gems/ProteusRobot/Code/proteusrobot_editor_shared_files.cmake

@@ -1,4 +0,0 @@
-
-set(FILES
-    Source/Tools/ProteusRobotEditorModule.cpp
-)

+ 0 - 4
Gems/ProteusRobot/Code/proteusrobot_editor_tests_files.cmake

@@ -1,4 +0,0 @@
-
-set(FILES
-    Tests/Tools/ProteusRobotEditorTest.cpp
-)

+ 0 - 6
Gems/ProteusRobot/Code/proteusrobot_private_files.cmake

@@ -1,6 +0,0 @@
-
-set(FILES
-    Source/ProteusRobotModuleInterface.h
-    Source/Clients/ProteusRobotSystemComponent.cpp
-    Source/Clients/ProteusRobotSystemComponent.h
-)

+ 0 - 4
Gems/ProteusRobot/Code/proteusrobot_shared_files.cmake

@@ -1,4 +0,0 @@
-
-set(FILES
-    Source/Clients/ProteusRobotModule.cpp
-)

+ 0 - 4
Gems/ProteusRobot/Code/proteusrobot_tests_files.cmake

@@ -1,4 +0,0 @@
-
-set(FILES
-    Tests/Clients/ProteusRobotTest.cpp
-)

+ 15 - 11
Gems/ProteusRobot/gem.json

@@ -1,13 +1,13 @@
 {
 {
     "gem_name": "ProteusRobot",
     "gem_name": "ProteusRobot",
     "version": "1.0.0",
     "version": "1.0.0",
-    "display_name": "ProteusRobot",
-    "license": "License used i.e. Apache-2.0 or MIT",
-    "license_url": "Link to the license web site i.e. https://opensource.org/licenses/Apache-2.0",
-    "origin": "The name of the originator or creator",
+    "display_name": "Proteus Robot",
+    "license": "Apache-2.0",
+    "license_url": "https://opensource.org/licenses/Apache-2.0",
+    "origin": "RobotecAI",
     "origin_url": "https://github.com/o3de/o3de-extras/tree/development/Gems/ProteusRobot",
     "origin_url": "https://github.com/o3de/o3de-extras/tree/development/Gems/ProteusRobot",
-    "type": "Code",
-    "summary": "Proteus: Warehouse robot with Lidar sensor",
+    "type": "Asset",
+    "summary": "Proteus warehouse robot with Lidar sensor",
     "canonical_tags": [
     "canonical_tags": [
         "Gem"
         "Gem"
     ],
     ],
@@ -18,11 +18,15 @@
         ""
         ""
     ],
     ],
     "icon_path": "preview.png",
     "icon_path": "preview.png",
-    "requirements": "Notice of any requirements for this Gem i.e. This requires X other gem",
-    "documentation_url": "Link to any documentation of your Gem",
+    "requirements": "Requires ROS 2 Gem for the Lidar to function",
+    "documentation_url": "https://www.o3de.org/docs/user-guide/interactivity/robotics/project-configuration/#ros-2-project-templates",
     "dependencies": [],
     "dependencies": [],
-    "repo_uri": "",
-    "compatible_engines": [],
+    "repo_uri": "https://raw.githubusercontent.com/o3de/o3de-extras/development",
+     "compatible_engines": [
+        "o3de-sdk>=1.2.0",
+        "o3de>=1.2.0"
+    ],
     "engine_api_dependencies": [],
     "engine_api_dependencies": [],
-    "restricted": "ProteusRobot"
+    "restricted": "ProteusRobot",
+    "download_source_uri": "https://github.com/o3de/o3de-extras/releases/download/2.0/proteusrobot-1.0.0-gem.zip"
 }
 }

+ 2 - 2
Gems/ProteusRobot/preview.png

@@ -1,3 +1,3 @@
 version https://git-lfs.github.com/spec/v1
 version https://git-lfs.github.com/spec/v1
-oid sha256:4e2408737fe2bba9016b8bfaf0e09ba7624ab298720c51307a51cec1c816ebd7
-size 125915
+oid sha256:4f1c54b47691f37f59463ff5926c44bba4783f526512485704167502d840f76c
+size 19282

+ 6 - 0
Gems/ROS2/Assets/Editor/Icons/Components/AckermannControl.svg

@@ -0,0 +1,6 @@
+<svg width="25" height="25" viewBox="0 0 25 25" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M12.2941 17.9259C12.329 17.8336 12.4408 17.7978 12.5227 17.8528L16.8991 19.9431C17.0098 20.0173 17.0943 20.1733 17.0943 20.3243L17.0251 21.5278C16.9675 21.7268 16.7332 21.8124 16.5609 21.6975L11.4421 19.2696C11.3588 19.214 11.3503 19.0947 11.425 19.0279C11.741 18.8455 12.0237 18.3977 12.2941 17.9259Z" fill="#65C9C9"/>
+<path fill-rule="evenodd" clip-rule="evenodd" d="M7.35498 4.18148C5.68506 3.62484 4.54103 4.18899 3.9624 5.3182C3.38378 6.4474 3.91553 8.24788 5.74365 8.83968L19.4206 13.354C20.5935 13.7194 21.9343 13.4863 22.513 12.3571L22.6258 12.1369C23.2044 11.0077 22.7581 9.6232 21.6288 9.04458L7.35498 4.18148ZM5.40163 8.02949C6.28401 8.48164 7.36585 8.13287 7.818 7.25049C8.27014 6.36811 7.92137 5.28627 7.03899 4.83413C6.15661 4.38198 5.07477 4.73075 4.62262 5.61313C4.17048 6.49551 4.51925 7.57735 5.40163 8.02949ZM21.9307 11.8552C21.4785 12.7376 20.3967 13.0864 19.5143 12.6342C18.6319 12.1821 18.2832 11.1002 18.7353 10.2179C19.1874 9.33548 20.2693 8.9867 21.1517 9.43885C22.034 9.891 22.3828 10.9728 21.9307 11.8552Z" fill="#65C9C9"/>
+<path fill-rule="evenodd" clip-rule="evenodd" d="M4.78929 9.2828L10.2183 11.0511L11.7141 15.5085C12.3686 16.713 11.6321 18.2441 10.5691 18.8578L10.3975 18.9569C9.36923 19.3741 7.83502 19.0283 7.23992 18.0917L4.62262 12.3571C3.9624 10.8596 2.43808 10.8596 1.39893 10.8596V2.24353L4.78929 2.24353C5.23951 2.24378 5.72464 2.19474 6.07859 2.37611L6.61385 2.6781C6.82061 2.82542 6.69966 3.14612 6.54171 3.15142L5.96825 3.17068C4.60307 3.22068 3.66074 4.15872 3.28376 4.9467C2.55849 6.46272 3.29364 8.51641 4.78929 9.2828Z" fill="#65C9C9"/>
+<path fill-rule="evenodd" clip-rule="evenodd" d="M17.5676 21.6975L17.7654 13.5457L19.328 14.1908C21.1517 14.7075 22.4094 13.8869 23.1763 12.6342C23.2697 12.4816 23.2337 12.5622 23.3621 12.2168C23.8516 10.8997 23.5419 9.10339 21.8217 8.37563L19.9827 7.66913C19.9827 7.59602 20.0177 7.51153 20.0322 7.48319C20.1315 7.28947 20.3314 7.16816 20.5491 7.16953L24.6501 7.03609V13.7233C23.9032 13.7437 23.4219 14.2309 23.1763 14.9365L22.6083 22.626C22.2105 24.1105 20.9456 24.6531 19.8461 24.4769C18.4802 24.258 17.4637 22.9231 17.5676 21.6975Z" fill="#65C9C9"/>
+</svg>

+ 3 - 0
Gems/ROS2/Assets/Editor/Icons/Components/AckermannVehicleModel.svg

@@ -0,0 +1,3 @@
+<svg width="25" height="25" viewBox="0 0 25 25" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path fill-rule="evenodd" clip-rule="evenodd" d="M20.2745 1.69519H3.77453V2.80999L3.57619 2.90248C2.95291 3.19311 2.68326 3.93398 2.9739 4.55726L3.77453 6.27423V22.6952H20.2745V10.3205L21.1062 9.93273C21.7295 9.64209 21.9991 8.90122 21.7085 8.27795L20.2745 5.20279V1.69519ZM18.6691 2.97089L20.2745 6.41378V6.38589L21.2554 8.48926C21.4293 8.86226 21.2679 9.30564 20.8949 9.47957L19.5441 10.1094C19.1711 10.2834 18.7278 10.122 18.5538 9.749L17.3479 7.16297H8.58129H8.0296L8.03084 7.16562H7.93665L8.66474 8.72703C8.69205 8.78558 8.70703 8.84671 8.71077 8.90751C8.68507 9.08988 8.59224 9.25996 8.44602 9.37999C8.43846 9.38399 8.43075 9.38783 8.4229 9.39149L6.76135 10.1663C6.43409 10.2289 6.09377 10.0647 5.94654 9.749L3.42705 4.34595C3.25312 3.97294 3.41449 3.52956 3.7875 3.35563L5.13826 2.72576C5.3971 2.60506 5.68983 2.64583 5.9029 2.80674C5.90812 2.81627 5.91307 2.82604 5.91772 2.83603L7.2436 5.67937V5.66562H7.33138L7.33462 5.67257L7.34099 5.68622V5.67257H7.37028H7.84099H16.1013H16.653L16.4198 5.17257L16.0343 4.34595C15.8604 3.97294 16.0218 3.52956 16.3948 3.35563L17.7455 2.72576C18.0775 2.57097 18.4652 2.68174 18.6691 2.97089ZM5.02893 14.2456C4.75279 14.2456 4.52893 14.4695 4.52893 14.7456V21.2456C4.52893 21.5217 4.75279 21.7456 5.02893 21.7456H7.02893C7.30507 21.7456 7.52893 21.5217 7.52893 21.2456V18.7456H16.5201V21.2456C16.5201 21.5217 16.744 21.7456 17.0201 21.7456H19.0201C19.2963 21.7456 19.5201 21.5217 19.5201 21.2456V14.7456C19.5201 14.4695 19.2963 14.2456 19.0201 14.2456H17.0201C16.744 14.2456 16.5201 14.4695 16.5201 14.7456V17.2456H7.52893V14.7456C7.52893 14.4695 7.30507 14.2456 7.02893 14.2456H5.02893Z" fill="#65C9C9"/>
+</svg>

파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 1 - 0
Gems/ROS2/Assets/Editor/Icons/Components/FingerGripperComponent.svg


파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 1 - 0
Gems/ROS2/Assets/Editor/Icons/Components/GripperActionServerComponent.svg


+ 3 - 0
Gems/ROS2/Assets/Editor/Icons/Components/JointsArticulationControllerComponent.svg

@@ -0,0 +1,3 @@
+<svg width="25" height="25" viewBox="0 0 25 25" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path fill-rule="evenodd" clip-rule="evenodd" d="M17.9923 12.0818C18.0363 11.8853 18.0901 11.6453 18.1404 11.3941C18.5169 10.0651 18.4883 8.5778 17.8665 7.02203C17.6744 6.54139 17.2337 5.75984 16.9088 5.38399C15.4579 3.70554 14.2222 2.58156 11.3622 2.31726L11.2373 2.32544C10.6749 2.36203 9.76536 2.42119 9.26289 2.58156C4.20126 4.19678 3.0997 8.61168 4.24933 12.2137C4.48862 12.9635 4.71242 13.4423 5.12369 13.9845C5.22372 14.1164 5.42226 14.1074 5.51626 13.9711L6.43963 12.6327C6.71 12.1453 6.71208 11.7178 6.5426 11.1868C5.75687 8.72495 7.11565 6.09224 9.57753 5.3065C10.0977 5.14048 10.6255 5.0702 11.1419 5.08584C13.5752 5.19824 15.5409 7.17752 15.5991 9.64992C15.6588 12.1853 13.6903 14.297 11.1752 14.4323C11.0895 14.4369 11.0142 14.4931 10.9886 14.575C10.7939 15.1998 10.5472 15.9682 10.1245 16.9041C10.0641 17.0379 10.161 17.1895 10.3075 17.1808C11.385 17.1168 13.0239 16.7717 13.4606 16.6628C13.5818 16.6326 13.7004 16.5941 13.8183 16.556L13.8183 16.556C14.3726 16.3764 14.9098 16.2024 15.6194 16.912L17.8827 21.263C18.3043 22.1201 19.6219 21.928 20.3391 21.242L22.5678 18.9821C23.2065 18.3126 23.3548 17.0371 22.5474 16.5982L18.2359 14.2954C17.6273 13.6868 17.7912 12.9676 17.9363 12.3306C17.946 12.288 17.9556 12.2458 17.9649 12.204L17.9922 12.0818L17.9923 12.0818ZM7.02718 20.5002C6.67441 21.0969 5.90702 21.2982 5.30674 20.9517L3.59866 19.8308C2.98111 19.4742 2.78044 18.6778 3.15534 18.0712L7.4935 12.6515C7.73467 12.3502 7.81701 11.9226 7.75651 11.5414C7.73859 11.4285 7.72107 11.3117 7.70444 11.201C7.66852 10.9616 7.63681 10.7504 7.61443 10.6669C7.12036 8.823 8.11643 6.94463 9.96031 6.45056C11.8042 5.9565 13.6995 7.05073 14.1935 8.89462C14.6876 10.7385 13.6915 12.6169 11.8477 13.1109C11.74 13.1398 11.5373 13.2191 11.3084 13.3087C11.1569 13.368 10.994 13.4318 10.8396 13.4884C10.4758 13.6217 10.1251 13.8817 9.96081 14.2326L7.02718 20.5002Z" fill="#65C9C9"/>
+</svg>

+ 3 - 0
Gems/ROS2/Assets/Editor/Icons/Components/JointsManipulationEditorComponent.svg

@@ -0,0 +1,3 @@
+<svg width="25" height="25" viewBox="0 0 25 25" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path fill-rule="evenodd" clip-rule="evenodd" d="M2.97845 9.48438L9.21579 14.5425L6.4246 15.2315C6.5135 16.2205 7.52275 17.9732 9.21579 19.395C10.9088 20.8168 15.4314 22.0304 18.6309 18.8308C21.8305 15.6313 20.1104 10.9422 18.5959 9.42769C17.0814 7.91315 15.7488 7.21375 14.2557 7.16719L13.6849 9.91452L8.58067 3.88216L15.4493 1.18024L14.9565 4.43198C15.0969 4.46302 15.2352 4.49264 15.3717 4.52191C17.0412 4.8797 18.4635 5.18449 20.6513 7.37229C23.0181 9.73908 24.9087 16.5519 20.5636 20.7636C16.2186 24.9752 10.0626 23.9509 7.30474 21.5095C4.54693 19.0682 3.9243 17.0465 3.70333 15.9147L0.4729 16.6632L2.97845 9.48438ZM5.33274 9.32211C4.85715 8.87576 4.82961 8.12971 5.27101 7.64951L6.65071 6.31076C7.10482 5.81674 7.8774 5.79581 8.35758 6.26452L12.5841 10.8527C12.8289 11.1185 13.1884 11.1994 13.5359 11.1003C13.9303 10.9878 14.4881 10.8859 15.1111 10.9971C17.2088 11.3716 17.9788 12.6073 18.1823 14.4844C18.3858 16.3615 16.5314 18.4512 14.6633 18.5643C12.9959 18.779 11.1266 17.9098 10.5975 15.783C10.489 15.3469 10.5278 14.836 10.5893 14.4377C10.6462 14.0697 10.528 13.6933 10.2431 13.4536L5.33274 9.32211Z" fill="#65C9C9"/>
+</svg>

+ 3 - 0
Gems/ROS2/Assets/Editor/Icons/Components/JointsPIDControllerComponent.svg

@@ -0,0 +1,3 @@
+<svg width="25" height="25" viewBox="0 0 25 25" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path fill-rule="evenodd" clip-rule="evenodd" d="M8.98076 5.31042L12.0467 1.18799L15.3019 5.30605C15.4072 5.43932 15.309 5.63494 15.1392 5.62999L12.0467 5.53996L9.14743 5.62967C8.98021 5.63485 8.88092 5.44466 8.98076 5.31042ZM10.9236 6.18872C10.2316 6.22815 9.70037 6.81742 9.73264 7.50981L10.6507 12.0296C10.732 12.4298 10.5862 12.8724 10.3438 13.2012C10.2535 13.3236 10.1613 13.4535 10.0751 13.575L10.075 13.5752L10.075 13.5752L10.0749 13.5753C9.93262 13.7758 9.80661 13.9534 9.73244 14.0365C8.46161 15.4609 8.65894 17.5779 10.0834 18.8487C11.5078 20.1195 13.6927 19.995 14.9636 18.5706C16.2344 17.1462 16.0371 15.0292 14.6126 13.7584C14.5481 13.7008 14.4057 13.5416 14.2444 13.3611C14.1767 13.2854 14.1057 13.206 14.0356 13.1287C13.7655 12.8307 13.6021 12.4026 13.658 12.0043L14.3024 7.41731C14.2832 6.70448 13.6786 6.14857 12.9666 6.18914L10.9236 6.18872ZM6.19651 13.5073C6.06978 13.4375 5.91013 13.4894 5.85311 13.6224C4.69565 16.3216 4.89426 19.6895 7.69422 22.0031C10.3425 24.1914 14.9463 24.3195 17.3735 21.7754C19.9279 19.0981 20.1455 16.1499 19.1181 13.7251C19.0631 13.5953 18.9094 13.5418 18.7833 13.6049L16.9723 14.5104C16.8569 14.5681 16.8051 14.7038 16.8458 14.8262C17.3737 16.4162 17.0281 18.2381 15.791 19.5348C14.0072 21.4046 11.0453 21.4743 9.17548 19.6905C7.80067 18.3789 7.39904 16.4304 7.99183 14.7474C8.03395 14.6279 7.987 14.4934 7.87594 14.4322L6.19651 13.5073ZM3.94897 9.86359L8.43203 11.597C8.57053 11.6505 8.71702 11.5398 8.7033 11.3919L8.31859 7.24582C8.30452 7.09411 8.13275 7.01323 8.00684 7.09901L3.94897 9.86359ZM20.1677 9.86359L15.6847 11.597C15.5462 11.6505 15.3997 11.5398 15.4134 11.3919L15.7981 7.24582C15.8122 7.09411 15.9839 7.01323 16.1099 7.09901L20.1677 9.86359Z" fill="#65C9C9"/>
+</svg>

파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 1 - 0
Gems/ROS2/Assets/Editor/Icons/Components/JointsTrajectoryComponent.svg


파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 1 - 0
Gems/ROS2/Assets/Editor/Icons/Components/ManualMotorController.svg


+ 3 - 0
Gems/ROS2/Assets/Editor/Icons/Components/PidMotorController.svg

@@ -0,0 +1,3 @@
+<svg width="25" height="25" viewBox="0 0 25 25" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path fill-rule="evenodd" clip-rule="evenodd" d="M20.5438 8.50647C21.063 7.96711 21.3823 7.23386 21.3823 6.42603C21.3823 4.76917 20.0392 3.42603 18.3823 3.42603C17.6216 3.42603 16.9269 3.70921 16.3981 4.17591L16.3866 4.16154L7.93726 10.5069C5.35001 10.955 3.38232 13.2107 3.38232 15.926C3.38232 18.9636 5.84476 21.426 8.88232 21.426C11.6034 21.426 13.863 19.45 14.3043 16.8546L20.5438 8.50647ZM15.3884 6.61794L10.2129 10.5881C12.2457 11.0931 13.8317 12.7289 14.2647 14.7891L18.3651 9.42598C16.7806 9.41708 15.487 8.17972 15.3884 6.61794ZM6.37843 13.4805C5.76213 14.1114 5.38232 14.9744 5.38232 15.926C5.38232 17.859 6.94933 19.426 8.88232 19.426C10.8153 19.426 12.3823 17.859 12.3823 15.926C12.3823 13.993 10.8153 12.426 8.88232 12.426C8.34095 12.426 7.82829 12.5489 7.37071 12.7684L6.40531 13.509L6.37843 13.4805ZM11.3823 15.926C11.3823 17.3067 10.263 18.426 8.88232 18.426C7.50161 18.426 6.38232 17.3067 6.38232 15.926C6.38232 14.5453 7.50161 13.426 8.88232 13.426C10.263 13.426 11.3823 14.5453 11.3823 15.926ZM17.3823 5.42603H19.3823V7.42603H17.3823V5.42603Z" fill="#65C9C9"/>
+</svg>

+ 3 - 0
Gems/ROS2/Assets/Editor/Icons/Components/ROS2CameraSensor.svg

@@ -0,0 +1,3 @@
+<svg width="25" height="25" viewBox="0 0 25 25" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path fill-rule="evenodd" clip-rule="evenodd" d="M5.31592 2.07922C5.31592 1.80308 5.53978 1.57922 5.81592 1.57922H20.1608C20.437 1.57922 20.6608 1.80308 20.6608 2.07922V14.471C20.6608 14.7471 20.437 14.971 20.1608 14.971H5.81592C5.53978 14.971 5.31592 14.7471 5.31592 14.471V2.07922ZM17.3517 8.2751C17.3517 10.9224 15.2056 13.0685 12.5583 13.0685C9.91098 13.0685 7.76491 10.9224 7.76491 8.2751C7.76491 5.62779 9.91098 3.48172 12.5583 3.48172C15.2056 3.48172 17.3517 5.62779 17.3517 8.2751ZM15.986 8.27516C15.986 10.0975 14.5087 11.5749 12.6863 11.5749C10.8639 11.5749 9.38662 10.0975 9.38662 8.27516C9.38662 6.45279 10.8639 4.97547 12.6863 4.97547C14.5087 4.97547 15.986 6.45279 15.986 8.27516ZM14.3195 6.81772C14.3195 7.24588 13.5884 7.59297 12.6865 7.59297C11.7847 7.59297 11.0536 7.24588 11.0536 6.81772C11.0536 6.38956 11.7847 6.04247 12.6865 6.04247C13.5884 6.04247 14.3195 6.38956 14.3195 6.81772ZM3.97266 7.95711H2.6123C2.33616 7.95711 2.1123 8.18096 2.1123 8.45711V17.2986C2.1123 17.3116 2.1128 17.3244 2.11377 17.3371V23.1021C2.11377 23.6544 2.56148 24.1021 3.11377 24.1021H5.61377C6.16605 24.1021 6.61377 23.6544 6.61377 23.1021V17.7986H10.7358V20.1571C10.7358 20.7094 11.1836 21.1571 11.7358 21.1571H14.2358C14.7881 21.1571 15.2358 20.7094 15.2358 20.1571V17.7986H19.6772V23.1021C19.6772 23.6544 20.125 24.1021 20.6772 24.1021H23.1772C23.7295 24.1021 24.1772 23.6544 24.1772 23.1021V17.2986V16.6021V8.45711C24.1772 8.18096 23.9534 7.95711 23.6772 7.95711H21.9727V16.0792C21.9727 16.3554 21.7488 16.5792 21.4727 16.5792H4.47266C4.19651 16.5792 3.97266 16.3554 3.97266 16.0792V7.95711Z" fill="#65C9C9"/>
+</svg>

파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 1 - 0
Gems/ROS2/Assets/Editor/Icons/Components/ROS2ContactSensor.svg


+ 3 - 0
Gems/ROS2/Assets/Editor/Icons/Components/ROS2Frame.svg

@@ -0,0 +1,3 @@
+<svg width="25" height="25" viewBox="0 0 25 25" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path fill-rule="evenodd" clip-rule="evenodd" d="M13.6777 1.4126C13.6777 1.13646 13.9016 0.912598 14.1777 0.912598H21.6777C23.0584 0.912598 24.1777 2.03189 24.1777 3.4126V10.9126C24.1777 11.1887 23.9539 11.4126 23.6777 11.4126H14.1777C13.9016 11.4126 13.6777 11.1887 13.6777 10.9126V1.4126ZM17.973 4.2706L16.3615 1.69208L14.75 4.2706H15.6604L15.6642 9.59831H21.1719V10.6921L23.7503 9.0805L21.1719 7.46892V8.57459H17.5194L20.8952 5.14022L21.6901 5.93517L22.3738 2.97233L19.4111 3.65606L20.1265 4.37147L16.8229 7.576V4.2706H17.973ZM10.6207 5.68329L4.38037 5.68329L4.38053 10.8017L5.11845 10.8017L5.1183 6.43329L10.6207 6.43329L8.90247 8.17961C8.75838 8.32606 8.75838 8.5635 8.90247 8.70994C9.04656 8.85639 9.28017 8.85639 9.42426 8.70994L11.7723 6.32346C11.9164 6.17701 11.9164 5.93957 11.7723 5.79313L9.42426 3.40664C9.28017 3.26019 9.04656 3.26019 8.90247 3.40664C8.75838 3.55309 8.75838 3.79052 8.90247 3.93697L10.6207 5.68329ZM14.9374 19.1471L21.1777 19.1471L21.1776 14.0288L20.4397 14.0288L20.4398 18.3971L14.9374 18.3971L16.6556 16.6508C16.7997 16.5044 16.7997 16.2669 16.6556 16.1205C16.5115 15.974 16.2779 15.974 16.1338 16.1205L13.7858 18.507C13.6417 18.6534 13.6417 18.8909 13.7858 19.0373L16.1338 21.4238C16.2779 21.5702 16.5115 21.5702 16.6556 21.4238C16.7997 21.2773 16.7997 21.0399 16.6556 20.8935L14.9374 19.1471ZM1.88037 13.1659C1.60423 13.1659 1.38037 13.3898 1.38037 13.6659V21.1659C1.38037 22.5466 2.49966 23.6659 3.88037 23.6659H11.3804C11.6565 23.6659 11.8804 23.4421 11.8804 23.1659V13.6659C11.8804 13.3898 11.6565 13.1659 11.3804 13.1659H1.88037ZM3.74187 13.9159L5.35337 16.4944H4.2673V19.7049L7.49025 16.5787L6.7915 15.8799L9.75421 15.1962L9.07051 18.159L8.26085 17.3493L4.96385 20.7035H8.55225V19.6928L11.1306 21.3043L8.55225 22.9159V21.7273H3.10859L3.10487 16.4944H2.13037L3.74187 13.9159Z" fill="#65C9C9"/>
+</svg>

파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 1 - 0
Gems/ROS2/Assets/Editor/Icons/Components/ROS2GNSSSensor.svg


파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 1 - 0
Gems/ROS2/Assets/Editor/Icons/Components/ROS2ImuSensor.svg


파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 1 - 0
Gems/ROS2/Assets/Editor/Icons/Components/ROS2Lidar2DSensor.svg


파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 1 - 0
Gems/ROS2/Assets/Editor/Icons/Components/ROS2LidarSensor.svg


+ 3 - 0
Gems/ROS2/Assets/Editor/Icons/Components/ROS2OdometrySensor.svg

@@ -0,0 +1,3 @@
+<svg width="25" height="25" viewBox="0 0 25 25" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path fill-rule="evenodd" clip-rule="evenodd" d="M12.9885 23.4047C18.7875 23.4047 23.4885 18.7037 23.4885 12.9047C23.4885 7.10567 18.7875 2.40466 12.9885 2.40466C7.18954 2.40466 2.48853 7.10567 2.48853 12.9047C2.48853 18.7037 7.18954 23.4047 12.9885 23.4047ZM19.2991 7.37212C20.574 8.82526 21.355 10.7224 21.38 12.8015H18.8093C18.8097 12.7763 18.8098 12.7512 18.8098 12.726C18.8098 11.3586 18.3524 10.098 17.5823 9.08898L19.2991 7.37212ZM13.5598 4.531C15.3132 4.64901 16.9191 5.30555 18.2133 6.3366L16.531 8.01895C15.6931 7.35563 14.6739 6.91129 13.5598 6.77237V4.531ZM7.62048 6.45213C8.85184 5.42674 10.3813 4.74716 12.0598 4.56254V6.77237C10.9702 6.90825 9.97129 7.3363 9.144 7.97566L7.62048 6.45213ZM4.59559 12.8015C4.61985 10.7878 5.35324 8.94483 6.55763 7.5106L8.08036 9.03333C7.28427 10.0515 6.80981 11.3333 6.80981 12.726C6.80981 12.7512 6.80997 12.7763 6.81028 12.8015H4.59559ZM14.3419 19.8039L14.2145 18.8208C14.6621 18.4295 14.9448 17.8543 14.9448 17.213C14.9448 16.3746 14.4616 15.6491 13.7584 15.2998L12.8114 7.98921L11.8642 15.2983C11.1594 15.6471 10.6748 16.3734 10.6748 17.213C10.6748 17.8554 10.9585 18.4315 11.4074 18.8229L11.2803 19.8039H14.3419Z" fill="#65C9C9"/>
+</svg>

+ 5 - 0
Gems/ROS2/Assets/Editor/Icons/Components/ROS2RobotControl.svg

@@ -0,0 +1,5 @@
+<svg width="25" height="25" viewBox="0 0 25 25" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path fill-rule="evenodd" clip-rule="evenodd" d="M9.75627 13.5893C9.68257 15.2633 11.3729 16.1917 12.9056 16.1917C14.4383 16.1917 15.5201 14.8024 15.5718 13.5893L16.7183 4.50444C16.7183 2.72206 15.3764 1.40698 13.0139 1.40698C10.6515 1.40698 9.09778 2.72206 9.09778 4.50444L9.75627 13.5893ZM9.91566 3.55972C9.95049 3.42626 10.027 3.36616 10.1642 3.26465C10.0259 3.53655 10.0033 3.81004 10.0964 4.08513C10.2361 4.49776 10.8414 5.97064 12.908 5.97064C14.9747 5.97064 15.6788 4.47639 15.7847 4.08513C15.8651 3.78809 15.8235 3.5905 15.7761 3.36616C15.7611 3.29499 15.7455 3.22113 15.7331 3.14056C16.1344 3.43115 16.0446 3.94625 16.0446 4.36511C16.0446 4.66735 15.3952 6.95065 12.9056 7.02665C10.416 7.10265 9.79699 4.8643 9.82832 4.26343C9.83957 4.04755 9.85007 3.81109 9.91566 3.55972Z" fill="#65C9C9"/>
+<path d="M8.78749 14.16C8.72184 13.5777 8.92979 12.8145 9.373 12.0592C8.48741 12.4882 7.73282 13.5383 7.73282 14.7945C7.73282 16.6788 8.81196 18.5947 12.854 18.5947C16.896 18.5947 17.4481 16.2205 17.4931 15.1017C17.5404 13.9251 17.2074 12.4855 16.0446 12.0592C16.3928 12.659 16.4857 13.3616 16.4857 14.0735C16.4857 15.7959 14.9466 17.0281 12.9885 17.0281C10.228 17.0281 8.95713 15.6647 8.78749 14.16Z" fill="#65C9C9"/>
+<path fill-rule="evenodd" clip-rule="evenodd" d="M19.8669 8.75598H6.15725C5.77595 8.75598 5.57161 8.98939 5.49097 9.21709C5.42222 9.41123 4.39736 16.9074 4.08664 19.6382C4.03294 20.1101 3.99986 20.4008 3.9958 20.4344C3.96822 20.6624 4.02338 20.9693 4.08856 21.1415C4.11433 21.2096 4.19746 21.4499 4.29475 21.7312C4.44354 22.1614 4.62544 22.6872 4.68591 22.8391C4.78592 23.0904 4.98698 23.157 5.20968 23.157H20.7674C20.9901 23.157 21.1911 23.0904 21.2911 22.8391C21.3516 22.6872 21.5335 22.1614 21.6823 21.7312C21.7795 21.4501 21.8627 21.2096 21.8885 21.1415C21.9537 20.9693 22.0088 20.6624 21.9812 20.4344C21.9772 20.4008 21.9442 20.1106 21.8905 19.6392C21.5799 16.909 20.6019 9.41124 20.5332 9.21709C20.4525 8.98939 20.2482 8.75598 19.8669 8.75598ZM4.94834 19.8833L6.35292 9.5846H19.6712L21.0287 19.8833H4.94834ZM15.6223 21.1073L12.9885 21.0996L10.3548 21.1073V21.0919L5.03877 21.0764L5.65802 22.3661H20.319L20.9383 21.0764L15.6223 21.0919V21.1073Z" fill="#65C9C9"/>
+</svg>

파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 1 - 0
Gems/ROS2/Assets/Editor/Icons/Components/ROS2SpawnPoint.svg


+ 3 - 0
Gems/ROS2/Assets/Editor/Icons/Components/ROS2Spawner.svg

@@ -0,0 +1,3 @@
+<svg width="25" height="25" viewBox="0 0 25 25" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M16.0325 7.72577C13.2813 7.54608 11.6817 9.097 11.0904 9.94155C11.0904 9.44104 11.2068 8.46148 11.9714 7.54608C12.9271 6.40182 14.6399 6.02683 16.0325 6.02683C17.2927 6.02683 18.2171 6.05799 19.9101 6.99065C21.4434 7.83536 22.876 10.4049 23.3672 11.8588C23.3672 10.1435 22.8715 8.35998 22.0673 6.99065C21.386 5.8308 19.2004 3.56643 16.0325 3.40296C13.6809 3.28161 11.9714 3.63776 10.3528 4.86701C8.89278 5.97583 7.63311 7.76204 7.63311 9.84947C7.63311 12.1107 8.09093 13.3453 9.67914 14.6685C6.35536 14.2928 5.95152 11.566 5.89691 9.6044C5.8423 7.64282 6.71007 5.98402 7.74772 4.86701C8.78536 3.75 10.6252 2.75943 11.9714 2.48193C10.7398 2.48193 8.71654 2.71853 7.436 3.40296C5.90684 4.22028 4.80988 5.66424 4.18184 6.67227C3.55379 7.68031 2.58908 11.0943 3.80113 13.7864C5.24852 17.0012 7.95405 18.2298 10.0564 18.2298C12.6433 18.2298 14.0456 16.9071 14.5917 16.1715C14.5371 17.8061 13.2358 19.7614 10.1893 19.9402C7.404 20.1037 5.60289 18.9147 4.68591 18.0665C3.72689 17.1794 2.75355 15.5344 2.37697 13.9661C2.26267 16.3167 3.16209 18.421 4.44031 19.9402C5.58643 21.3024 7.67706 22.4928 10.3528 22.5556C13.1338 22.6209 14.3883 21.7383 15.6718 20.812C16.9552 19.8857 18.0786 17.8336 18.1605 15.8447C18.2424 13.8559 17.3909 12.3162 16.0325 11.3038C18.9792 11.4014 19.7268 13.8887 19.8633 15.714C19.9998 17.5394 19.3721 19.6183 18.0295 21.0722C16.9487 22.2426 15.0659 23.1469 13.9299 23.4819C17.6529 23.4819 19.5922 21.6883 20.4691 20.812C21.1895 20.0921 23.6101 16.1715 22.0673 12.5285C20.7292 9.36912 18.9428 7.91585 16.0325 7.72577Z" fill="#65C9C9"/>
+</svg>

+ 3 - 0
Gems/ROS2/Assets/Editor/Icons/Components/ROS2WheelOdometrySensor.svg

@@ -0,0 +1,3 @@
+<svg width="25" height="24" viewBox="0 0 25 24" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path fill-rule="evenodd" clip-rule="evenodd" d="M10.1057 3.75C13.5152 3.75 16.4416 5.81825 17.6988 8.76855H14.3969L15.9384 7.22705L14.8777 6.16639L12.7126 8.33155C12.8985 8.46393 13.074 8.61009 13.2375 8.76855H9.66919C7.88451 8.76855 6.43774 10.2153 6.43774 12C6.43774 13.7847 7.88451 15.2314 9.66919 15.2314H13.2375C13.074 15.3899 12.8986 15.536 12.7127 15.6683L14.8781 17.8337L15.9387 16.773L14.3972 15.2314H17.6988C16.4416 18.1818 13.5152 20.25 10.1057 20.25C5.54936 20.25 1.85571 16.5563 1.85571 12C1.85571 7.44365 5.54936 3.75 10.1057 3.75ZM10.8557 4.5V7.56222C10.6118 7.5213 10.3612 7.5 10.1057 7.5C9.85018 7.5 9.59962 7.5213 9.35571 7.56222V4.5H10.8557ZM7.49793 8.33221L5.33212 6.16641L4.27146 7.22707L6.43738 9.39299C6.72923 8.98306 7.08807 8.62415 7.49793 8.33221ZM5.66793 11.25H2.60571V12.75H5.66793C5.62701 12.5061 5.60571 12.2555 5.60571 12C5.60571 11.7445 5.62701 11.4939 5.66793 11.25ZM6.43726 14.6069L4.27113 16.773L5.33179 17.8336L7.49776 15.6677C7.08792 15.3757 6.72909 15.0168 6.43726 14.6069ZM9.35571 16.4378V19.5H10.8557V16.4378C10.6118 16.4787 10.3612 16.5 10.1057 16.5C9.85018 16.5 9.59962 16.4787 9.35571 16.4378ZM21.7871 8.75757H24.1213C24.1213 7.98897 23.6726 6.68239 23.0035 5.78582C22.1777 4.67934 21.032 4.25757 19.6213 4.25757C20.4602 5.28822 21.5856 7.29707 21.7871 8.75757ZM21.7871 15.2418H24.1213C24.1213 16.0104 23.6726 17.317 23.0035 18.2135C22.1777 19.32 21.032 19.7418 19.6213 19.7418C20.4602 18.7111 21.5856 16.7023 21.7871 15.2418ZM20.5279 15.2418H19.0595C19.0085 15.9331 17.4962 19.0133 16.2625 19.6711H18.1773C19.0913 18.9009 20.1284 16.5733 20.5279 15.2418ZM19.0595 8.75761H20.5279C20.1284 7.42608 19.0913 5.09849 18.1773 4.32825H16.2625C17.4962 4.98604 19.0085 8.06623 19.0595 8.75761ZM7.62134 12C7.62134 10.7574 8.6287 9.75 9.87134 9.75H24.1213V14.25H9.87134C8.6287 14.25 7.62134 13.2426 7.62134 12Z" fill="#65C9C9"/>
+</svg>

+ 3 - 0
Gems/ROS2/Assets/Editor/Icons/Components/RigidBodyTwistControl.svg

@@ -0,0 +1,3 @@
+<svg width="25" height="25" viewBox="0 0 25 25" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path fill-rule="evenodd" clip-rule="evenodd" d="M24.1515 3.43724C24.1515 4.67988 23.1442 5.68724 21.9015 5.68724C21.7514 5.68724 21.6046 5.67253 21.4627 5.64448V7.3578L15.3776 10.9696C15.6587 11.4264 15.8208 11.9641 15.8208 12.5397C15.8208 14.1966 14.4776 15.5397 12.8208 15.5397C12.2338 15.5397 11.6862 15.3712 11.2238 15.0798V17.2118L6.24859 20.1648C6.29871 20.3514 6.32544 20.5476 6.32544 20.75C6.32544 21.9927 5.31808 23 4.07544 23C2.8328 23 1.82544 21.9927 1.82544 20.75C1.82544 19.5074 2.8328 18.5 4.07544 18.5C4.38334 18.5 4.6768 18.5619 4.94406 18.6738L7.80802 14.0501L10.1689 13.9437C9.94667 13.5248 9.82078 13.047 9.82078 12.5397C9.82078 10.8829 11.1639 9.53974 12.8208 9.53974C13.4182 9.53974 13.9748 9.71438 14.4424 10.0154L18.0469 4.19611L19.7567 4.11906C19.6884 3.90399 19.6515 3.67492 19.6515 3.43724C19.6515 2.1946 20.6589 1.18724 21.9015 1.18724C23.1442 1.18724 24.1515 2.1946 24.1515 3.43724ZM12.8208 14.0397C13.6492 14.0397 14.3208 13.3682 14.3208 12.5397C14.3208 11.7113 13.6492 11.0397 12.8208 11.0397C11.9924 11.0397 11.3208 11.7113 11.3208 12.5397C11.3208 13.3682 11.9924 14.0397 12.8208 14.0397ZM9.23347 8.85713L6.84058 6.55514C6.80964 6.6126 6.7749 6.67547 6.73724 6.74364L6.73719 6.74374C6.30106 7.53314 5.47204 9.03369 5.5834 11.077C5.66223 12.5235 5.97329 13.709 6.48316 14.7098L5.61061 16.193C3.92742 13.7707 4.04447 11.403 4.17809 9.50465C4.30014 7.77046 5.37833 6.0228 5.67831 5.53655L5.71547 5.47616L3.11327 2.7227L9.23347 2.72268V8.85713ZM9.00644 19.3397L10.5274 18.4409C13.0752 19.5583 16.1979 19.3909 18.5 17.7887C19.9132 16.8051 20.7102 15.8218 21.5416 13.8955C21.6029 13.8955 21.7499 13.9194 21.9375 13.9499L21.9376 13.9499C22.2685 14.0037 22.7259 14.078 23.0623 14.078C22.3324 16.0651 21.5387 17.5872 19.2172 19.0803C16.6715 20.7175 12.7481 21.6028 9.00644 19.3397Z" fill="#65C9C9"/>
+</svg>

파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 1 - 0
Gems/ROS2/Assets/Editor/Icons/Components/SkidSteeringTwistControl.svg


파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 1 - 0
Gems/ROS2/Assets/Editor/Icons/Components/SkidSteeringVehicleModel.svg


파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 1 - 0
Gems/ROS2/Assets/Editor/Icons/Components/VacuumGripperComponent.svg


+ 19 - 0
Gems/ROS2/Assets/Editor/Icons/Components/Viewport/AckermannControl.svg

@@ -0,0 +1,19 @@
+<svg width="25" height="25" viewBox="0 0 25 25" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path fill-rule="evenodd" clip-rule="evenodd" d="M21.3472 0.552246C23.5245 0.552246 24.379 2.33071 24.379 3.5709C24.379 4.81108 24.379 19.3338 24.379 21.1943C24.379 22.9452 23.1505 24.5089 21.3472 24.5089C19.5439 24.5089 5.07166 24.5089 3.23165 24.5089C1.80898 24.5089 0.422363 23.067 0.422363 21.7109C0.422363 20.3548 0.422363 4.58758 0.422363 3.2248C0.422363 1.86202 1.78776 0.552246 3.03192 0.552246C4.27608 0.552246 19.3825 0.552246 21.3472 0.552246Z" fill="url(#paint0_linear_3280_31773)"/>
+<mask id="mask0_3280_31773" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="0" y="0" width="25" height="25">
+<path fill-rule="evenodd" clip-rule="evenodd" d="M21.3472 0.552246C23.5245 0.552246 24.379 2.33071 24.379 3.5709C24.379 4.81108 24.379 19.3338 24.379 21.1943C24.379 22.9452 23.1505 24.5089 21.3472 24.5089C19.5439 24.5089 5.07166 24.5089 3.23165 24.5089C1.80898 24.5089 0.422363 23.067 0.422363 21.7109C0.422363 20.3548 0.422363 4.58758 0.422363 3.2248C0.422363 1.86202 1.78776 0.552246 3.03192 0.552246C4.27608 0.552246 19.3825 0.552246 21.3472 0.552246Z" fill="white"/>
+</mask>
+<g mask="url(#mask0_3280_31773)">
+<rect x="0.422363" y="0.552246" width="24" height="24" fill="#65C9C9"/>
+</g>
+<path d="M11.726 17.9259C11.7609 17.8336 11.8727 17.7978 11.9546 17.8528L16.331 19.9431C16.4417 20.0173 16.5262 20.1733 16.5262 20.3243L16.457 21.5278C16.3994 21.7268 16.165 21.8124 15.9927 21.6975L10.874 19.2696C10.7906 19.214 10.7822 19.0947 10.8569 19.0279C11.1728 18.8455 11.4556 18.3977 11.726 17.9259Z" fill="white"/>
+<path fill-rule="evenodd" clip-rule="evenodd" d="M6.78687 4.18148C5.11694 3.62484 3.97291 4.18899 3.39429 5.3182C2.81566 6.4474 3.34741 8.24788 5.17554 8.83968L18.8525 13.354C20.0254 13.7194 21.3662 13.4863 21.9448 12.3571L22.0577 12.1369C22.6363 11.0077 22.1899 9.6232 21.0607 9.04458L6.78687 4.18148ZM4.83352 8.02949C5.71589 8.48164 6.79774 8.13287 7.24988 7.25049C7.70203 6.36811 7.35325 5.28627 6.47088 4.83413C5.5885 4.38198 4.50665 4.73075 4.05451 5.61313C3.60236 6.49551 3.95114 7.57735 4.83352 8.02949ZM21.3626 11.8552C20.9104 12.7376 19.8286 13.0864 18.9462 12.6342C18.0638 12.1821 17.715 11.1002 18.1672 10.2179C18.6193 9.33548 19.7012 8.9867 20.5836 9.43885C21.4659 9.891 21.8147 10.9728 21.3626 11.8552Z" fill="white"/>
+<path fill-rule="evenodd" clip-rule="evenodd" d="M4.22118 9.2828L9.65016 11.0511L11.1459 15.5085C11.8005 16.713 11.064 18.2441 10.0009 18.8578L9.82939 18.9569C8.80112 19.3741 7.2669 19.0283 6.6718 18.0917L4.05451 12.3571C3.39429 10.8596 1.86997 10.8596 0.830811 10.8596V2.24353L4.22118 2.24353C4.6714 2.24378 5.15652 2.19474 5.51048 2.37611L6.04574 2.6781C6.2525 2.82542 6.13155 3.14612 5.9736 3.15142L5.40014 3.17068C4.03495 3.22068 3.09262 4.15872 2.71564 4.9467C1.99037 6.46272 2.72553 8.51641 4.22118 9.2828Z" fill="white"/>
+<path fill-rule="evenodd" clip-rule="evenodd" d="M16.9995 21.6975L17.1973 13.5457L18.7599 14.1908C20.5836 14.7075 21.8413 13.8869 22.6082 12.6342C22.7016 12.4816 22.6656 12.5622 22.7939 12.2168C23.2835 10.8997 22.9738 9.10339 21.2536 8.37563L19.4146 7.66913C19.4146 7.59602 19.4496 7.51153 19.4641 7.48319C19.5634 7.28947 19.7633 7.16816 19.9809 7.16953L24.0819 7.03609V13.7233C23.3351 13.7437 22.8538 14.2309 22.6082 14.9365L22.0402 22.626C21.6424 24.1105 20.3775 24.6531 19.278 24.4769C17.9121 24.258 16.8956 22.9231 16.9995 21.6975Z" fill="white"/>
+<defs>
+<linearGradient id="paint0_linear_3280_31773" x1="0.422363" y1="0.552246" x2="0.422363" y2="24.5089" gradientUnits="userSpaceOnUse">
+<stop stop-color="#ADADAD" stop-opacity="0.01"/>
+<stop offset="1" stop-color="#9D9D9D"/>
+</linearGradient>
+</defs>
+</svg>

+ 16 - 0
Gems/ROS2/Assets/Editor/Icons/Components/Viewport/AckermannVehicleModel.svg

@@ -0,0 +1,16 @@
+<svg width="25" height="25" viewBox="0 0 25 25" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path fill-rule="evenodd" clip-rule="evenodd" d="M21.1314 0.19519C23.3087 0.19519 24.1632 1.97366 24.1632 3.21384C24.1632 4.45403 24.1632 18.9768 24.1632 20.8373C24.1632 22.5882 22.9347 24.1518 21.1314 24.1518C19.328 24.1518 4.85584 24.1518 3.01583 24.1518C1.59316 24.1518 0.206543 22.71 0.206543 21.3539C0.206543 19.9978 0.206543 4.23052 0.206543 2.86774C0.206543 1.50497 1.57194 0.19519 2.8161 0.19519C4.06026 0.19519 19.1667 0.19519 21.1314 0.19519Z" fill="url(#paint0_linear_3280_31774)"/>
+<mask id="mask0_3280_31774" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="0" y="0" width="25" height="25">
+<path fill-rule="evenodd" clip-rule="evenodd" d="M21.1314 0.19519C23.3087 0.19519 24.1632 1.97366 24.1632 3.21384C24.1632 4.45403 24.1632 18.9768 24.1632 20.8373C24.1632 22.5882 22.9347 24.1518 21.1314 24.1518C19.328 24.1518 4.85584 24.1518 3.01583 24.1518C1.59316 24.1518 0.206543 22.71 0.206543 21.3539C0.206543 19.9978 0.206543 4.23052 0.206543 2.86774C0.206543 1.50497 1.57194 0.19519 2.8161 0.19519C4.06026 0.19519 19.1667 0.19519 21.1314 0.19519Z" fill="white"/>
+</mask>
+<g mask="url(#mask0_3280_31774)">
+<rect x="0.206543" y="0.19519" width="24" height="24" fill="#65C9C9"/>
+</g>
+<path fill-rule="evenodd" clip-rule="evenodd" d="M20.4567 1.69519H3.95666V2.80999L3.75832 2.90248C3.13504 3.19311 2.86539 3.93398 3.15603 4.55726L3.95666 6.27423V22.6952H20.4567V10.3205L21.2883 9.93273C21.9116 9.64209 22.1813 8.90122 21.8906 8.27795L20.4567 5.20279V1.69519ZM18.8512 2.97088L20.4567 6.41378V6.38589L21.4375 8.48926C21.6114 8.86226 21.45 9.30564 21.077 9.47957L19.7263 10.1094C19.3533 10.2834 18.9099 10.122 18.736 9.749L17.5301 7.16297H8.76342H8.21173L8.21297 7.16562H8.11878L8.84687 8.72703C8.87417 8.78558 8.88916 8.84671 8.8929 8.90751C8.8672 9.08988 8.77437 9.25996 8.62815 9.37999C8.62059 9.384 8.61288 9.38783 8.60503 9.39149L6.94348 10.1663C6.61622 10.2289 6.2759 10.0647 6.12866 9.749L3.60918 4.34595C3.43525 3.97294 3.59662 3.52956 3.96963 3.35563L5.32039 2.72576C5.57923 2.60506 5.87196 2.64583 6.08503 2.80674C6.09025 2.81627 6.09519 2.82604 6.09985 2.83603L7.42573 5.67937V5.66562H7.51351L7.51675 5.67257L7.52311 5.68622V5.67257H7.5524H8.02311H16.2834H16.8351L16.6019 5.17257L16.2165 4.34595C16.0425 3.97294 16.2039 3.52956 16.5769 3.35563L17.9277 2.72576C18.2596 2.57097 18.6473 2.68174 18.8512 2.97088ZM5.21106 14.2456C4.93491 14.2456 4.71106 14.4695 4.71106 14.7456V21.2456C4.71106 21.5217 4.93491 21.7456 5.21106 21.7456H7.21106C7.4872 21.7456 7.71106 21.5217 7.71106 21.2456V18.7456H16.7023V21.2456C16.7023 21.5217 16.9261 21.7456 17.2023 21.7456H19.2023C19.4784 21.7456 19.7023 21.5217 19.7023 21.2456V14.7456C19.7023 14.4695 19.4784 14.2456 19.2023 14.2456H17.2023C16.9261 14.2456 16.7023 14.4695 16.7023 14.7456V17.2456H7.71106V14.7456C7.71106 14.4695 7.4872 14.2456 7.21106 14.2456H5.21106Z" fill="white"/>
+<defs>
+<linearGradient id="paint0_linear_3280_31774" x1="0.206543" y1="0.19519" x2="0.206543" y2="24.1518" gradientUnits="userSpaceOnUse">
+<stop stop-color="#ADADAD" stop-opacity="0.01"/>
+<stop offset="1" stop-color="#9D9D9D"/>
+</linearGradient>
+</defs>
+</svg>

파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 8 - 0
Gems/ROS2/Assets/Editor/Icons/Components/Viewport/FingerGripperComponent.svg


파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 8 - 0
Gems/ROS2/Assets/Editor/Icons/Components/Viewport/GripperActionServerComponent.svg


+ 16 - 0
Gems/ROS2/Assets/Editor/Icons/Components/Viewport/JointsArticulationControllerComponent.svg

@@ -0,0 +1,16 @@
+<svg width="25" height="25" viewBox="0 0 25 25" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path fill-rule="evenodd" clip-rule="evenodd" d="M21.738 0.104004C23.9154 0.104004 24.7699 1.88247 24.7699 3.12266C24.7699 4.36284 24.7699 18.8856 24.7699 20.7461C24.7699 22.497 23.5414 24.0607 21.738 24.0607C19.9347 24.0607 5.46253 24.0607 3.62252 24.0607C2.19985 24.0607 0.813232 22.6188 0.813232 21.2627C0.813232 19.9066 0.813232 4.13933 0.813232 2.77656C0.813232 1.41378 2.17863 0.104004 3.42279 0.104004C4.66695 0.104004 19.7734 0.104004 21.738 0.104004Z" fill="url(#paint0_linear_3280_31779)"/>
+<mask id="mask0_3280_31779" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="0" y="0" width="25" height="25">
+<path fill-rule="evenodd" clip-rule="evenodd" d="M21.738 0.104004C23.9154 0.104004 24.7699 1.88247 24.7699 3.12266C24.7699 4.36284 24.7699 18.8856 24.7699 20.7461C24.7699 22.497 23.5414 24.0607 21.738 24.0607C19.9347 24.0607 5.46253 24.0607 3.62252 24.0607C2.19985 24.0607 0.813232 22.6188 0.813232 21.2627C0.813232 19.9066 0.813232 4.13933 0.813232 2.77656C0.813232 1.41378 2.17863 0.104004 3.42279 0.104004C4.66695 0.104004 19.7734 0.104004 21.738 0.104004Z" fill="white"/>
+</mask>
+<g mask="url(#mask0_3280_31779)">
+<rect x="0.813232" y="0.104004" width="24" height="24" fill="#65C9C9"/>
+</g>
+<path fill-rule="evenodd" clip-rule="evenodd" d="M18.7313 12.1103C18.7753 11.9137 18.8291 11.6738 18.8794 11.4225C19.2559 10.0935 19.2274 8.60624 18.6055 7.05047C18.4134 6.56984 17.9727 5.78829 17.6478 5.41243C16.1969 3.73398 14.9612 2.61 12.1012 2.3457L11.9763 2.35389C11.4139 2.39047 10.5044 2.44964 10.0019 2.61C4.94028 4.22522 3.83872 8.64012 4.98834 12.2421C5.22764 12.9919 5.45143 13.4707 5.8627 14.013C5.96273 14.1449 6.16127 14.1358 6.25527 13.9995L7.17864 12.6611C7.44901 12.1737 7.45109 11.7463 7.28161 11.2153C6.49588 8.75339 7.85467 6.12068 10.3165 5.33495C10.8367 5.16892 11.3646 5.09864 11.881 5.11429C14.3142 5.2267 16.2799 7.20597 16.3381 9.67837C16.3978 12.2137 14.4293 14.3254 11.9142 14.4607C11.8285 14.4654 11.7532 14.5215 11.7276 14.6035C11.5329 15.2282 11.2862 15.9966 10.8635 16.9326C10.8031 17.0664 10.9 17.218 11.0465 17.2093C12.124 17.1452 13.7629 16.8001 14.1996 16.6912C14.3208 16.661 14.4394 16.6226 14.5573 16.5844L14.5573 16.5844C15.1116 16.4049 15.6489 16.2309 16.3584 16.9404L18.6217 21.2914C19.0433 22.1485 20.3609 21.9564 21.0781 21.2705L23.3068 19.0105C23.9455 18.341 24.0938 17.0655 23.2864 16.6267L18.9749 14.3239C18.3663 13.7153 18.5302 12.996 18.6753 12.359C18.685 12.3165 18.6946 12.2742 18.7039 12.2324L18.7313 12.1103ZM7.7662 20.5286C7.41343 21.1253 6.64603 21.3267 6.04576 20.9801L4.33768 19.8592C3.72012 19.5027 3.51946 18.7062 3.89435 18.0997L8.23252 12.6799C8.47369 12.3786 8.55603 11.951 8.49553 11.5699C8.4776 11.4569 8.46008 11.3402 8.44346 11.2295C8.40753 10.9901 8.37583 10.7789 8.35344 10.6953C7.85938 8.85144 8.85544 6.97307 10.6993 6.47901C12.5432 5.98494 14.4385 7.07918 14.9326 8.92306C15.4266 10.7669 14.4306 12.6453 12.5867 13.1394C12.4791 13.1682 12.2763 13.2476 12.0474 13.3372C11.8959 13.3965 11.733 13.4602 11.5786 13.5168C11.2148 13.6502 10.8641 13.9101 10.6998 14.2611L7.7662 20.5286Z" fill="white"/>
+<defs>
+<linearGradient id="paint0_linear_3280_31779" x1="0.813232" y1="0.104004" x2="0.813232" y2="24.0607" gradientUnits="userSpaceOnUse">
+<stop stop-color="#ADADAD" stop-opacity="0.01"/>
+<stop offset="1" stop-color="#9D9D9D"/>
+</linearGradient>
+</defs>
+</svg>

+ 16 - 0
Gems/ROS2/Assets/Editor/Icons/Components/Viewport/JointsManipulationEditorComponent.svg

@@ -0,0 +1,16 @@
+<svg width="25" height="25" viewBox="0 0 25 25" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path fill-rule="evenodd" clip-rule="evenodd" d="M21.325 0.426025C23.5023 0.426025 24.3568 2.20449 24.3568 3.44468C24.3568 4.68486 24.3568 19.2076 24.3568 21.0681C24.3568 22.819 23.1283 24.3827 21.325 24.3827C19.5216 24.3827 5.04945 24.3827 3.20944 24.3827C1.78676 24.3827 0.400146 22.9408 0.400146 21.5847C0.400146 20.2286 0.400146 4.46135 0.400146 3.09858C0.400146 1.7358 1.76554 0.426025 3.0097 0.426025C4.25387 0.426025 19.3603 0.426025 21.325 0.426025Z" fill="url(#paint0_linear_3280_31781)"/>
+<mask id="mask0_3280_31781" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="0" y="0" width="25" height="25">
+<path fill-rule="evenodd" clip-rule="evenodd" d="M21.325 0.426025C23.5023 0.426025 24.3568 2.20449 24.3568 3.44468C24.3568 4.68486 24.3568 19.2076 24.3568 21.0681C24.3568 22.819 23.1283 24.3827 21.325 24.3827C19.5216 24.3827 5.04945 24.3827 3.20944 24.3827C1.78676 24.3827 0.400146 22.9408 0.400146 21.5847C0.400146 20.2286 0.400146 4.46135 0.400146 3.09858C0.400146 1.7358 1.76554 0.426025 3.0097 0.426025C4.25387 0.426025 19.3603 0.426025 21.325 0.426025Z" fill="white"/>
+</mask>
+<g mask="url(#mask0_3280_31781)">
+<rect x="0.400146" y="0.426025" width="24" height="24" fill="#65C9C9"/>
+</g>
+<path fill-rule="evenodd" clip-rule="evenodd" d="M3.32025 9.48438L9.55759 14.5425L6.7664 15.2315C6.8553 16.2205 7.86454 17.9732 9.55759 19.395C11.2506 20.8168 15.7732 22.0304 18.9727 18.8308C22.1722 15.6313 20.4522 10.9422 18.9377 9.42769C17.4231 7.91315 16.0906 7.21375 14.5975 7.16719L14.0267 9.91452L8.92247 3.88216L15.7911 1.18024L15.2983 4.43198C15.4387 4.46302 15.577 4.49264 15.7135 4.52191C17.383 4.8797 18.8053 5.18449 20.9931 7.37229C23.3599 9.73908 25.2505 16.5519 20.9054 20.7636C16.5604 24.9752 10.4044 23.9509 7.64654 21.5095C4.88873 19.0682 4.2661 17.0465 4.04513 15.9147L0.814697 16.6632L3.32025 9.48438ZM5.67454 9.32211C5.19895 8.87576 5.17141 8.12971 5.61281 7.64951L6.99251 6.31076C7.44661 5.81674 8.21919 5.79581 8.69938 6.26452L12.9259 10.8527C13.1707 11.1185 13.5302 11.1994 13.8777 11.1003C14.2721 10.9878 14.8299 10.8859 15.4529 10.9971C17.5506 11.3716 18.3206 12.6073 18.5241 14.4844C18.7276 16.3615 16.8732 18.4512 15.0051 18.5643C13.3376 18.779 11.4684 17.9098 10.9393 15.783C10.8308 15.3469 10.8696 14.836 10.9311 14.4377C10.988 14.0697 10.8698 13.6933 10.5849 13.4536L5.67454 9.32211Z" fill="white"/>
+<defs>
+<linearGradient id="paint0_linear_3280_31781" x1="0.400146" y1="0.426025" x2="0.400146" y2="24.3827" gradientUnits="userSpaceOnUse">
+<stop stop-color="#ADADAD" stop-opacity="0.01"/>
+<stop offset="1" stop-color="#9D9D9D"/>
+</linearGradient>
+</defs>
+</svg>

+ 16 - 0
Gems/ROS2/Assets/Editor/Icons/Components/Viewport/JointsPIDControllerComponent.svg

@@ -0,0 +1,16 @@
+<svg width="25" height="25" viewBox="0 0 25 25" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path fill-rule="evenodd" clip-rule="evenodd" d="M21.7395 0.531006C23.9169 0.531006 24.7714 2.30947 24.7714 3.54966C24.7714 4.78984 24.7714 19.3126 24.7714 21.1731C24.7714 22.924 23.5428 24.4877 21.7395 24.4877C19.9362 24.4877 5.464 24.4877 3.62399 24.4877C2.20131 24.4877 0.814697 23.0458 0.814697 21.6897C0.814697 20.3336 0.814697 4.56633 0.814697 3.20356C0.814697 1.84078 2.1801 0.531006 3.42426 0.531006C4.66842 0.531006 19.7748 0.531006 21.7395 0.531006Z" fill="url(#paint0_linear_3280_31782)"/>
+<mask id="mask0_3280_31782" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="0" y="0" width="25" height="25">
+<path fill-rule="evenodd" clip-rule="evenodd" d="M21.7395 0.531006C23.9169 0.531006 24.7714 2.30947 24.7714 3.54966C24.7714 4.78984 24.7714 19.3126 24.7714 21.1731C24.7714 22.924 23.5428 24.4877 21.7395 24.4877C19.9362 24.4877 5.464 24.4877 3.62399 24.4877C2.20131 24.4877 0.814697 23.0458 0.814697 21.6897C0.814697 20.3336 0.814697 4.56633 0.814697 3.20356C0.814697 1.84078 2.1801 0.531006 3.42426 0.531006C4.66842 0.531006 19.7748 0.531006 21.7395 0.531006Z" fill="white"/>
+</mask>
+<g mask="url(#mask0_3280_31782)">
+<rect x="0.814697" y="0.531006" width="24" height="24" fill="#65C9C9"/>
+</g>
+<path fill-rule="evenodd" clip-rule="evenodd" d="M3.65866 1.72725L1.96824 3.41768C1.77393 3.61198 1.77393 3.94229 1.96824 4.1366L2.99804 5.16639L5.40738 2.75705L4.37758 1.72725C4.18328 1.51352 3.85296 1.51352 3.65866 1.72725ZM4.04175 6.20251L9.52364 11.6844L11.9417 9.26632L6.45982 3.78443L4.04175 6.20251ZM5.30229 8.8823C5.17408 8.77782 4.98118 8.82438 4.91916 8.97771C4.61806 9.72209 4.47292 10.3487 4.49434 11.259C4.58328 15.039 7.46678 19.2438 12.3252 18.7817C12.6831 18.7477 13.1996 18.5981 13.6433 18.4696L13.6434 18.4696C13.8384 18.4131 14.0194 18.3607 14.1666 18.324C14.2878 18.2937 14.4065 18.2553 14.5243 18.2171C15.0786 18.0376 15.6159 17.8636 16.3254 18.5731L18.5887 22.9241C19.0103 23.7812 20.3279 23.5892 21.0451 22.9032L23.2738 20.6432C23.9125 19.9738 24.0608 18.6982 23.2535 18.2594L18.942 15.9566C18.3334 15.348 18.4972 14.6287 18.6424 13.9918L18.6426 13.9906C18.6522 13.9484 18.6618 13.9066 18.671 13.8652L18.6983 13.743C18.8215 13.1931 19.0208 12.3037 19.0084 11.7764C18.8837 6.46476 14.9576 4.16472 11.1776 4.25367C10.3908 4.27218 9.86829 4.35211 9.23219 4.59407C9.07748 4.65292 9.03027 4.84598 9.13455 4.97454L10.1588 6.2374C10.5504 6.63407 10.96 6.7564 11.5172 6.74329C14.1007 6.6825 16.2444 8.72757 16.3051 11.3111C16.3659 13.8946 14.3209 16.0382 11.7373 16.099C9.15383 16.1598 7.0102 14.1147 6.94941 11.5312C6.94747 11.4488 6.94767 11.3669 6.94997 11.2854C6.96698 10.6815 6.92417 10.2729 6.4914 9.8514L5.30229 8.8823ZM14.1498 13.269C14.2275 13.6381 13.8972 13.9684 13.528 13.8907L11.3324 13.3855C11.2353 13.3661 11.1576 13.3273 11.0798 13.2495L10.5164 12.6861L12.9451 10.2767L13.5086 10.8402C13.5669 10.9179 13.6252 10.9956 13.6446 11.0928L14.1498 13.269Z" fill="white"/>
+<defs>
+<linearGradient id="paint0_linear_3280_31782" x1="0.814697" y1="0.531006" x2="0.814697" y2="24.4877" gradientUnits="userSpaceOnUse">
+<stop stop-color="#ADADAD" stop-opacity="0.01"/>
+<stop offset="1" stop-color="#9D9D9D"/>
+</linearGradient>
+</defs>
+</svg>

파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 8 - 0
Gems/ROS2/Assets/Editor/Icons/Components/Viewport/JointsTrajectoryComponent.svg


파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 8 - 0
Gems/ROS2/Assets/Editor/Icons/Components/Viewport/ManualMotorController.svg


+ 16 - 0
Gems/ROS2/Assets/Editor/Icons/Components/Viewport/PidMotorController.svg

@@ -0,0 +1,16 @@
+<svg width="25" height="25" viewBox="0 0 25 25" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path fill-rule="evenodd" clip-rule="evenodd" d="M21.9136 0.426025C24.0909 0.426025 24.9454 2.20449 24.9454 3.44468C24.9454 4.68486 24.9454 19.2076 24.9454 21.0681C24.9454 22.819 23.7169 24.3827 21.9136 24.3827C20.1103 24.3827 5.63807 24.3827 3.79806 24.3827C2.37539 24.3827 0.98877 22.9408 0.98877 21.5847C0.98877 20.2286 0.98877 4.46135 0.98877 3.09858C0.98877 1.7358 2.35417 0.426025 3.59833 0.426025C4.84249 0.426025 19.9489 0.426025 21.9136 0.426025Z" fill="url(#paint0_linear_3280_31786)"/>
+<mask id="mask0_3280_31786" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="0" y="0" width="25" height="25">
+<path fill-rule="evenodd" clip-rule="evenodd" d="M21.9136 0.426025C24.0909 0.426025 24.9454 2.20449 24.9454 3.44468C24.9454 4.68486 24.9454 19.2076 24.9454 21.0681C24.9454 22.819 23.7169 24.3827 21.9136 24.3827C20.1103 24.3827 5.63807 24.3827 3.79806 24.3827C2.37539 24.3827 0.98877 22.9408 0.98877 21.5847C0.98877 20.2286 0.98877 4.46135 0.98877 3.09858C0.98877 1.7358 2.35417 0.426025 3.59833 0.426025C4.84249 0.426025 19.9489 0.426025 21.9136 0.426025Z" fill="white"/>
+</mask>
+<g mask="url(#mask0_3280_31786)">
+<rect x="0.98877" y="0.426025" width="24" height="24" fill="#65C9C9"/>
+</g>
+<path fill-rule="evenodd" clip-rule="evenodd" d="M21.1502 8.50647C21.6695 7.96711 21.9888 7.23386 21.9888 6.42603C21.9888 4.76917 20.6456 3.42603 18.9888 3.42603C18.228 3.42603 17.5334 3.70921 17.0045 4.17591L16.993 4.16154L8.54371 10.5069C5.95645 10.955 3.98877 13.2107 3.98877 15.926C3.98877 18.9636 6.4512 21.426 9.48877 21.426C12.2098 21.426 14.4694 19.45 14.9107 16.8546L21.1502 8.50647ZM15.9948 6.61794L10.8194 10.5881C12.8521 11.0931 14.4381 12.7289 14.8711 14.7891L18.9716 9.42598C17.387 9.41708 16.0934 8.17972 15.9948 6.61794ZM6.98487 13.4805C6.36857 14.1114 5.98877 14.9744 5.98877 15.926C5.98877 17.859 7.55577 19.426 9.48877 19.426C11.4218 19.426 12.9888 17.859 12.9888 15.926C12.9888 13.993 11.4218 12.426 9.48877 12.426C8.9474 12.426 8.43473 12.5489 7.97716 12.7684L7.01175 13.509L6.98487 13.4805ZM11.9888 15.926C11.9888 17.3067 10.8695 18.426 9.48877 18.426C8.10806 18.426 6.98877 17.3067 6.98877 15.926C6.98877 14.5453 8.10806 13.426 9.48877 13.426C10.8695 13.426 11.9888 14.5453 11.9888 15.926ZM17.9888 5.42603H19.9888V7.42603H17.9888V5.42603Z" fill="white"/>
+<defs>
+<linearGradient id="paint0_linear_3280_31786" x1="0.98877" y1="0.426025" x2="0.98877" y2="24.3827" gradientUnits="userSpaceOnUse">
+<stop stop-color="#ADADAD" stop-opacity="0.01"/>
+<stop offset="1" stop-color="#9D9D9D"/>
+</linearGradient>
+</defs>
+</svg>

+ 16 - 0
Gems/ROS2/Assets/Editor/Icons/Components/Viewport/ROS2CameraSensor.svg

@@ -0,0 +1,16 @@
+<svg width="25" height="25" viewBox="0 0 25 25" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path fill-rule="evenodd" clip-rule="evenodd" d="M21.9136 0.852051C24.0909 0.852051 24.9454 2.63052 24.9454 3.8707C24.9454 5.11089 24.9454 19.6336 24.9454 21.4941C24.9454 23.245 23.7169 24.8087 21.9136 24.8087C20.1103 24.8087 5.63807 24.8087 3.79806 24.8087C2.37539 24.8087 0.98877 23.3668 0.98877 22.0107C0.98877 20.6546 0.98877 4.88738 0.98877 3.5246C0.98877 2.16183 2.35417 0.852051 3.59833 0.852051C4.84249 0.852051 19.9489 0.852051 21.9136 0.852051Z" fill="url(#paint0_linear_3280_31787)"/>
+<mask id="mask0_3280_31787" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="0" y="0" width="25" height="25">
+<path fill-rule="evenodd" clip-rule="evenodd" d="M21.9136 0.852051C24.0909 0.852051 24.9454 2.63052 24.9454 3.8707C24.9454 5.11089 24.9454 19.6336 24.9454 21.4941C24.9454 23.245 23.7169 24.8087 21.9136 24.8087C20.1103 24.8087 5.63807 24.8087 3.79806 24.8087C2.37539 24.8087 0.98877 23.3668 0.98877 22.0107C0.98877 20.6546 0.98877 4.88738 0.98877 3.5246C0.98877 2.16183 2.35417 0.852051 3.59833 0.852051C4.84249 0.852051 19.9489 0.852051 21.9136 0.852051Z" fill="white"/>
+</mask>
+<g mask="url(#mask0_3280_31787)">
+<rect x="0.98877" y="0.852051" width="24" height="24" fill="#65C9C9"/>
+</g>
+<path fill-rule="evenodd" clip-rule="evenodd" d="M5.31738 2.07922C5.31738 1.80308 5.54124 1.57922 5.81738 1.57922H20.1623C20.4384 1.57922 20.6623 1.80308 20.6623 2.07922V14.471C20.6623 14.7471 20.4384 14.971 20.1623 14.971H5.81738C5.54124 14.971 5.31738 14.7471 5.31738 14.471V2.07922ZM17.3531 8.2751C17.3531 10.9224 15.2071 13.0685 12.5598 13.0685C9.91245 13.0685 7.76638 10.9224 7.76638 8.2751C7.76638 5.62779 9.91245 3.48172 12.5598 3.48172C15.2071 3.48172 17.3531 5.62779 17.3531 8.2751ZM15.9875 8.27516C15.9875 10.0975 14.5102 11.5749 12.6878 11.5749C10.8654 11.5749 9.38808 10.0975 9.38808 8.27516C9.38808 6.45279 10.8654 4.97547 12.6878 4.97547C14.5102 4.97547 15.9875 6.45279 15.9875 8.27516ZM14.3209 6.81772C14.3209 7.24588 13.5898 7.59297 12.688 7.59297C11.7862 7.59297 11.0551 7.24588 11.0551 6.81772C11.0551 6.38956 11.7862 6.04247 12.688 6.04247C13.5898 6.04247 14.3209 6.38956 14.3209 6.81772ZM3.97412 7.95711H2.61377C2.33763 7.95711 2.11377 8.18096 2.11377 8.45711V17.2986C2.11377 17.3116 2.11426 17.3244 2.11523 17.3371V23.1021C2.11523 23.6544 2.56295 24.1021 3.11523 24.1021H5.61523C6.16752 24.1021 6.61523 23.6544 6.61523 23.1021V17.7986H10.7373V20.1571C10.7373 20.7094 11.185 21.1571 11.7373 21.1571H14.2373C14.7896 21.1571 15.2373 20.7094 15.2373 20.1571V17.7986H19.6787V23.1021C19.6787 23.6544 20.1264 24.1021 20.6787 24.1021H23.1787C23.731 24.1021 24.1787 23.6544 24.1787 23.1021V17.2986V16.6021V8.45711C24.1787 8.18097 23.9549 7.95711 23.6787 7.95711H21.9741V16.0792C21.9741 16.3554 21.7503 16.5792 21.4741 16.5792H4.47412C4.19798 16.5792 3.97412 16.3554 3.97412 16.0792V7.95711Z" fill="white"/>
+<defs>
+<linearGradient id="paint0_linear_3280_31787" x1="0.98877" y1="0.852051" x2="0.98877" y2="24.8087" gradientUnits="userSpaceOnUse">
+<stop stop-color="#ADADAD" stop-opacity="0.01"/>
+<stop offset="1" stop-color="#9D9D9D"/>
+</linearGradient>
+</defs>
+</svg>

파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 8 - 0
Gems/ROS2/Assets/Editor/Icons/Components/Viewport/ROS2ContactSensor.svg


+ 16 - 0
Gems/ROS2/Assets/Editor/Icons/Components/Viewport/ROS2Frame.svg

@@ -0,0 +1,16 @@
+<svg width="25" height="25" viewBox="0 0 25 25" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path fill-rule="evenodd" clip-rule="evenodd" d="M20.936 0.665894C23.1134 0.665894 23.9679 2.44436 23.9679 3.68455C23.9679 4.92473 23.9679 19.4475 23.9679 21.308C23.9679 23.0589 22.7394 24.6225 20.936 24.6225C19.1327 24.6225 4.66053 24.6225 2.82052 24.6225C1.39785 24.6225 0.0112305 23.1807 0.0112305 21.8246C0.0112305 20.4685 0.0112305 4.70122 0.0112305 3.33845C0.0112305 1.97567 1.37663 0.665894 2.62079 0.665894C3.86495 0.665894 18.9714 0.665894 20.936 0.665894Z" fill="url(#paint0_linear_3280_31789)"/>
+<mask id="mask0_3280_31789" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="0" y="0" width="24" height="25">
+<path fill-rule="evenodd" clip-rule="evenodd" d="M20.936 0.665894C23.1134 0.665894 23.9679 2.44436 23.9679 3.68455C23.9679 4.92473 23.9679 19.4475 23.9679 21.308C23.9679 23.0589 22.7394 24.6225 20.936 24.6225C19.1327 24.6225 4.66053 24.6225 2.82052 24.6225C1.39785 24.6225 0.0112305 23.1807 0.0112305 21.8246C0.0112305 20.4685 0.0112305 4.70122 0.0112305 3.33845C0.0112305 1.97567 1.37663 0.665894 2.62079 0.665894C3.86495 0.665894 18.9714 0.665894 20.936 0.665894Z" fill="white"/>
+</mask>
+<g mask="url(#mask0_3280_31789)">
+<rect x="0.0112305" y="0.665894" width="24" height="24" fill="#65C9C9"/>
+</g>
+<path fill-rule="evenodd" clip-rule="evenodd" d="M12.9099 1.78925C12.9099 1.5131 13.1338 1.28925 13.4099 1.28925H20.9099C22.2906 1.28925 23.4099 2.40853 23.4099 3.78925V11.2892C23.4099 11.5654 23.1861 11.7892 22.9099 11.7892H13.4099C13.1338 11.7892 12.9099 11.5654 12.9099 11.2892V1.78925ZM17.2052 4.64724L15.5937 2.06873L13.9822 4.64724H14.8925L14.8963 9.97496H20.4041V11.0687L22.9824 9.45715L20.4041 7.84557V8.95124H16.7516L20.1274 5.51687L20.9223 6.31182L21.606 3.34898L18.6433 4.03271L19.3587 4.74812L16.055 7.95265V4.64724H17.2052ZM9.85284 6.05994L3.61255 6.05994L3.6127 11.1783L4.35062 11.1783L4.35048 6.80994L9.85284 6.80994L8.13465 8.55626C7.99056 8.70271 7.99056 8.94014 8.13465 9.08659C8.27873 9.23304 8.51235 9.23304 8.65644 9.08659L11.0045 6.70011C11.1486 6.55366 11.1486 6.31622 11.0045 6.16978L8.65644 3.78329C8.51235 3.63684 8.27874 3.63684 8.13465 3.78329C7.99056 3.92974 7.99056 4.16717 8.13465 4.31362L9.85284 6.05994ZM14.1696 19.5238L20.4099 19.5238L20.4098 14.4054L19.6718 14.4054L19.672 18.7738L14.1696 18.7738L15.8878 17.0275C16.0319 16.881 16.0319 16.6436 15.8878 16.4971C15.7437 16.3507 15.5101 16.3507 15.366 16.4971L13.018 18.8836C12.8739 19.0301 12.8739 19.2675 13.018 19.4139L15.366 21.8004C15.5101 21.9469 15.7437 21.9469 15.8878 21.8004C16.0319 21.654 16.0319 21.4166 15.8878 21.2701L14.1696 19.5238ZM1.11255 13.5426C0.836406 13.5426 0.612549 13.7664 0.612549 14.0426V21.5426C0.612549 22.9233 1.73184 24.0426 3.11255 24.0426H10.6125C10.8887 24.0426 11.1125 23.8187 11.1125 23.5426V14.0426C11.1125 13.7664 10.8887 13.5426 10.6125 13.5426H1.11255ZM2.97405 14.2926L4.58554 16.8711H3.49948V20.0816L6.72243 16.9553L6.02368 16.2566L8.98638 15.5728L8.30268 18.5357L7.49303 17.726L4.19603 21.0802H7.78442V20.0694L10.3628 21.681L7.78442 23.2926V22.1039H2.34077L2.33704 16.8711H1.36255L2.97405 14.2926Z" fill="white"/>
+<defs>
+<linearGradient id="paint0_linear_3280_31789" x1="0.0112305" y1="0.665894" x2="0.0112305" y2="24.6225" gradientUnits="userSpaceOnUse">
+<stop stop-color="#ADADAD" stop-opacity="0.01"/>
+<stop offset="1" stop-color="#9D9D9D"/>
+</linearGradient>
+</defs>
+</svg>

파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 8 - 0
Gems/ROS2/Assets/Editor/Icons/Components/Viewport/ROS2GNSSSensor.svg


파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 8 - 0
Gems/ROS2/Assets/Editor/Icons/Components/Viewport/ROS2ImuSensor.svg


파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 8 - 0
Gems/ROS2/Assets/Editor/Icons/Components/Viewport/ROS2Lidar2DSensor.svg


파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 8 - 0
Gems/ROS2/Assets/Editor/Icons/Components/Viewport/ROS2LidarSensor.svg


+ 16 - 0
Gems/ROS2/Assets/Editor/Icons/Components/Viewport/ROS2OdometrySensor.svg

@@ -0,0 +1,16 @@
+<svg width="25" height="25" viewBox="0 0 25 25" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path fill-rule="evenodd" clip-rule="evenodd" d="M21.6604 0.947998C23.8378 0.947998 24.6923 2.72647 24.6923 3.96665C24.6923 5.20683 24.6923 19.7296 24.6923 21.5901C24.6923 23.341 23.4637 24.9047 21.6604 24.9047C19.8571 24.9047 5.38489 24.9047 3.54489 24.9047C2.12221 24.9047 0.735596 23.4628 0.735596 22.1067C0.735596 20.7506 0.735596 4.98333 0.735596 3.62055C0.735596 2.25778 2.10099 0.947998 3.34515 0.947998C4.58931 0.947998 19.6957 0.947998 21.6604 0.947998Z" fill="url(#paint0_linear_3280_31795)"/>
+<mask id="mask0_3280_31795" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="0" y="0" width="25" height="25">
+<path fill-rule="evenodd" clip-rule="evenodd" d="M21.6604 0.947998C23.8378 0.947998 24.6923 2.72647 24.6923 3.96665C24.6923 5.20683 24.6923 19.7296 24.6923 21.5901C24.6923 23.341 23.4637 24.9047 21.6604 24.9047C19.8571 24.9047 5.38489 24.9047 3.54489 24.9047C2.12221 24.9047 0.735596 23.4628 0.735596 22.1067C0.735596 20.7506 0.735596 4.98333 0.735596 3.62055C0.735596 2.25778 2.10099 0.947998 3.34515 0.947998C4.58931 0.947998 19.6957 0.947998 21.6604 0.947998Z" fill="white"/>
+</mask>
+<g mask="url(#mask0_3280_31795)">
+<rect x="0.735596" y="0.947998" width="24" height="24" fill="#65C9C9"/>
+</g>
+<path fill-rule="evenodd" clip-rule="evenodd" d="M12.7356 23.448C18.5346 23.448 23.2356 18.747 23.2356 12.948C23.2356 7.14901 18.5346 2.448 12.7356 2.448C6.93661 2.448 2.2356 7.14901 2.2356 12.948C2.2356 18.747 6.93661 23.448 12.7356 23.448ZM19.0462 7.41545C20.3211 8.86859 21.1021 10.7658 21.1271 12.8448H18.5564C18.5567 12.8197 18.5569 12.7945 18.5569 12.7693C18.5569 11.4019 18.0995 10.1414 17.3293 9.13232L19.0462 7.41545ZM13.3069 4.57434C15.0603 4.69235 16.6662 5.34889 17.9604 6.37994L16.278 8.06229C15.4401 7.39896 14.4209 6.95463 13.3069 6.81571V4.57434ZM7.36755 6.49547C8.59891 5.47007 10.1284 4.7905 11.8069 4.60587V6.81571C10.7173 6.95158 9.71836 7.37963 8.89107 8.01899L7.36755 6.49547ZM4.34266 12.8448C4.36692 10.8312 5.10031 8.98817 6.3047 7.55394L7.82743 9.07667C7.03134 10.0948 6.55688 11.3767 6.55688 12.7693C6.55688 12.7945 6.55704 12.8197 6.55735 12.8448H4.34266ZM14.089 19.8472L13.9616 18.8642C14.4092 18.4728 14.6919 17.8976 14.6919 17.2563C14.6919 16.4179 14.2086 15.6924 13.5055 15.3431L12.5584 8.03255L11.6112 15.3417C10.9065 15.6904 10.4219 16.4168 10.4219 17.2563C10.4219 17.8987 10.7056 18.4748 11.1545 18.8662L11.0273 19.8472H14.089Z" fill="white"/>
+<defs>
+<linearGradient id="paint0_linear_3280_31795" x1="0.735596" y1="0.947998" x2="0.735596" y2="24.9047" gradientUnits="userSpaceOnUse">
+<stop stop-color="#ADADAD" stop-opacity="0.01"/>
+<stop offset="1" stop-color="#9D9D9D"/>
+</linearGradient>
+</defs>
+</svg>

+ 18 - 0
Gems/ROS2/Assets/Editor/Icons/Components/Viewport/ROS2RobotControl.svg

@@ -0,0 +1,18 @@
+<svg width="25" height="25" viewBox="0 0 25 25" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path fill-rule="evenodd" clip-rule="evenodd" d="M21.117 0.56897C23.2943 0.56897 24.1488 2.34744 24.1488 3.58762C24.1488 4.82781 24.1488 19.3506 24.1488 21.211C24.1488 22.9619 22.9203 24.5256 21.117 24.5256C19.3136 24.5256 4.84144 24.5256 3.00143 24.5256C1.57876 24.5256 0.192139 23.0837 0.192139 21.7276C0.192139 20.3715 0.192139 4.6043 0.192139 3.24152C0.192139 1.87875 1.55754 0.56897 2.8017 0.56897C4.04586 0.56897 19.1523 0.56897 21.117 0.56897Z" fill="url(#paint0_linear_3280_31797)"/>
+<mask id="mask0_3280_31797" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="0" y="0" width="25" height="25">
+<path fill-rule="evenodd" clip-rule="evenodd" d="M21.117 0.56897C23.2943 0.56897 24.1488 2.34744 24.1488 3.58762C24.1488 4.82781 24.1488 19.3506 24.1488 21.211C24.1488 22.9619 22.9203 24.5256 21.117 24.5256C19.3136 24.5256 4.84144 24.5256 3.00143 24.5256C1.57876 24.5256 0.192139 23.0837 0.192139 21.7276C0.192139 20.3715 0.192139 4.6043 0.192139 3.24152C0.192139 1.87875 1.55754 0.56897 2.8017 0.56897C4.04586 0.56897 19.1523 0.56897 21.117 0.56897Z" fill="white"/>
+</mask>
+<g mask="url(#mask0_3280_31797)">
+<rect x="0.192139" y="0.56897" width="24" height="24" fill="#65C9C9"/>
+</g>
+<path fill-rule="evenodd" clip-rule="evenodd" d="M8.95989 13.8763C8.88618 15.5503 10.5765 16.4786 12.1092 16.4786C13.6419 16.4786 14.7237 15.0894 14.7754 13.8763L15.9219 4.79143C15.9219 3.00905 14.58 1.69397 12.2175 1.69397C9.85507 1.69397 8.30139 3.00905 8.30139 4.79143L8.95989 13.8763ZM9.11927 3.84671C9.1541 3.71325 9.23061 3.65314 9.36783 3.55164C9.22949 3.82354 9.20689 4.09703 9.30004 4.37212C9.43976 4.78474 10.045 6.25762 12.1116 6.25762C14.1783 6.25762 14.8824 4.76338 14.9883 4.37212C15.0688 4.07508 15.0271 3.87748 14.9797 3.65314C14.9647 3.58198 14.9491 3.50812 14.9367 3.42754C15.338 3.71814 15.2482 4.23324 15.2482 4.6521C15.2482 4.95434 14.5988 7.23764 12.1092 7.31364C9.6196 7.38964 9.00061 5.15129 9.03193 4.55042C9.04319 4.33454 9.05368 4.09807 9.11927 3.84671Z" fill="white"/>
+<path d="M7.99111 14.447C7.92545 13.8647 8.1334 13.1015 8.57661 12.3462C7.69102 12.7751 6.93643 13.8252 6.93643 15.0815C6.93643 16.9658 8.01557 18.8817 12.0576 18.8817C16.0997 18.8817 16.6517 16.5075 16.6967 15.3887C16.744 14.2121 16.4111 12.7725 15.2482 12.3462C15.5964 12.946 15.6893 13.6486 15.6893 14.3605C15.6893 16.0829 14.1503 17.3151 12.1921 17.3151C9.43166 17.3151 8.16074 15.9517 7.99111 14.447Z" fill="white"/>
+<path fill-rule="evenodd" clip-rule="evenodd" d="M19.0705 9.04297H5.36086C4.97957 9.04297 4.77522 9.27638 4.69459 9.50408C4.62583 9.69821 3.60098 17.1944 3.29026 19.9252C3.23656 20.3971 3.20348 20.6878 3.19941 20.7214C3.17183 20.9494 3.22699 21.2562 3.29217 21.4285C3.31794 21.4966 3.40108 21.7369 3.49837 22.0182C3.64715 22.4483 3.82905 22.9742 3.88952 23.1261C3.98953 23.3774 4.19059 23.444 4.41329 23.444H19.971C20.1937 23.444 20.3947 23.3774 20.4948 23.1261C20.5552 22.9742 20.7371 22.4484 20.8859 22.0182C20.9831 21.7371 21.0663 21.4966 21.0921 21.4285C21.1573 21.2562 21.2124 20.9494 21.1849 20.7214C21.1808 20.6878 21.1478 20.3976 21.0941 19.9262C20.7835 17.196 19.8056 9.69823 19.7368 9.50408C19.6562 9.27638 19.4518 9.04297 19.0705 9.04297ZM4.15195 20.1703L5.55653 9.87159H18.8748L20.2323 20.1703H4.15195ZM14.8259 21.3943L12.1921 21.3866L9.55837 21.3943V21.3789L4.24239 21.3634L4.86163 22.6531H19.5226L20.1419 21.3634L14.8259 21.3789V21.3943Z" fill="white"/>
+<defs>
+<linearGradient id="paint0_linear_3280_31797" x1="0.192139" y1="0.56897" x2="0.192139" y2="24.5256" gradientUnits="userSpaceOnUse">
+<stop stop-color="#ADADAD" stop-opacity="0.01"/>
+<stop offset="1" stop-color="#9D9D9D"/>
+</linearGradient>
+</defs>
+</svg>

+ 16 - 0
Gems/ROS2/Assets/Editor/Icons/Components/Viewport/ROS2SpawnPoint.svg

@@ -0,0 +1,16 @@
+<svg width="25" height="25" viewBox="0 0 25 25" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path fill-rule="evenodd" clip-rule="evenodd" d="M21.7849 0.646973C23.9623 0.646973 24.8168 2.42544 24.8168 3.66562C24.8168 4.90581 24.8168 19.4286 24.8168 21.289C24.8168 23.0399 23.5882 24.6036 21.7849 24.6036C19.9816 24.6036 5.50941 24.6036 3.6694 24.6036C2.24672 24.6036 0.860107 23.1617 0.860107 21.8056C0.860107 20.4495 0.860107 4.6823 0.860107 3.31953C0.860107 1.95675 2.22551 0.646973 3.46967 0.646973C4.71383 0.646973 19.8202 0.646973 21.7849 0.646973Z" fill="url(#paint0_linear_3280_31798)"/>
+<mask id="mask0_3280_31798" style="mask-type:luminance" maskUnits="userSpaceOnUse" x="0" y="0" width="25" height="25">
+<path fill-rule="evenodd" clip-rule="evenodd" d="M21.7849 0.646973C23.9623 0.646973 24.8168 2.42544 24.8168 3.66562C24.8168 4.90581 24.8168 19.4286 24.8168 21.289C24.8168 23.0399 23.5882 24.6036 21.7849 24.6036C19.9816 24.6036 5.50941 24.6036 3.6694 24.6036C2.24672 24.6036 0.860107 23.1617 0.860107 21.8056C0.860107 20.4495 0.860107 4.6823 0.860107 3.31953C0.860107 1.95675 2.22551 0.646973 3.46967 0.646973C4.71383 0.646973 19.8202 0.646973 21.7849 0.646973Z" fill="white"/>
+</mask>
+<g mask="url(#mask0_3280_31798)">
+<rect x="0.860107" y="0.646973" width="24" height="24" fill="#65C9C9"/>
+</g>
+<path fill-rule="evenodd" clip-rule="evenodd" d="M8.37567 8.15849L12.7312 14.062L17.0849 8.15619C17.4309 7.49 17.6062 6.77848 17.6062 6.04086C17.6062 3.43343 15.4193 1.31195 12.7312 1.31195C10.0431 1.31195 7.8562 3.43343 7.8562 6.04086C7.8562 6.77771 8.03147 7.48948 8.37725 8.15619L8.37567 8.15849ZM12.7304 4.44887C13.5556 4.44887 14.2269 5.12008 14.2269 5.94525C14.2269 6.77028 13.5556 7.44164 12.7304 7.44164C11.9053 7.44164 11.2341 6.77043 11.2341 5.94525C11.2341 5.12008 11.9053 4.44887 12.7304 4.44887ZM5.71437 13.7881C5.71437 12.9505 6.63766 12.1988 8.10109 11.6855C8.1131 11.7041 8.12534 11.7227 8.13779 11.7411C7.36123 12.072 6.89869 12.4879 6.89869 12.9397C6.89869 14.018 9.53409 14.8922 12.785 14.8922C16.036 14.8922 18.6714 14.018 18.6714 12.9397C18.6714 12.4617 18.1535 12.0238 17.2938 11.6844L17.3117 11.6563C18.824 12.1701 19.7829 12.9345 19.7829 13.7881C19.7829 15.335 16.6335 16.589 12.7486 16.589C8.86372 16.589 5.71437 15.335 5.71437 13.7881ZM3.60216 15.9656C3.60216 15.2344 4.01381 14.547 4.73708 13.9492C4.76457 14.0726 4.81859 14.1937 4.8973 14.3118C4.77878 14.5277 4.7164 14.7518 4.7164 14.9815C4.7164 16.7444 8.39029 18.1736 12.9223 18.1736C17.4542 18.1736 21.1281 16.7444 21.1281 14.9815C21.1281 14.7515 21.0656 14.5272 20.9468 14.311C20.9751 14.2686 21.0001 14.2257 21.0219 14.1825C21.582 14.7233 21.8952 15.3278 21.8952 15.9656C21.8952 18.2721 17.8001 20.1419 12.7487 20.1419C7.69719 20.1419 3.60216 18.2721 3.60216 15.9656ZM22.9275 17.4624C22.9639 17.3158 22.9825 17.167 22.9825 17.0164C22.9825 16.7625 22.9296 16.5138 22.828 16.2721C23.6341 17 24.0898 17.8274 24.0898 18.7048C24.0898 21.6193 19.0621 23.982 12.8602 23.982C6.65827 23.982 1.63062 21.6193 1.63062 18.7048C1.63062 17.8942 2.01953 17.1263 2.71446 16.44C2.65365 16.6285 2.62225 16.8209 2.62225 17.0164C2.62225 17.2846 2.68139 17.5471 2.79451 17.8016C3.03119 20.0262 7.44679 21.7996 12.8592 21.7996C18.4234 21.7996 22.934 19.9255 22.934 17.6136C22.934 17.563 22.9318 17.5126 22.9275 17.4624Z" fill="white"/>
+<defs>
+<linearGradient id="paint0_linear_3280_31798" x1="0.860107" y1="0.646973" x2="0.860107" y2="24.6036" gradientUnits="userSpaceOnUse">
+<stop stop-color="#ADADAD" stop-opacity="0.01"/>
+<stop offset="1" stop-color="#9D9D9D"/>
+</linearGradient>
+</defs>
+</svg>

이 변경점에서 너무 많은 파일들이 변경되어 몇몇 파일들은 표시되지 않았습니다.