diff --git a/RWTHVRCluster.uplugin b/RWTHVRCluster.uplugin index d5a51b05b2bf52b34d77c81db889a656220d5447..7382e211f65d9fb165bda0e468c8e54969dabbe6 100644 --- a/RWTHVRCluster.uplugin +++ b/RWTHVRCluster.uplugin @@ -22,7 +22,7 @@ { "Name": "RWTHVRCluster", "Type": "Runtime", - "LoadingPhase": "Default", + "LoadingPhase": "PostConfigInit", "WhitelistPlatforms": [ "Win64", "Linux" diff --git a/Source/RWTHVRCluster/Private/RWTHVRCluster.cpp b/Source/RWTHVRCluster/Private/RWTHVRCluster.cpp index 5632551f90a26458579d02705077b14faad5305c..104e2d0d73448945b5199d4b0b52d0eedea42753 100644 --- a/Source/RWTHVRCluster/Private/RWTHVRCluster.cpp +++ b/Source/RWTHVRCluster/Private/RWTHVRCluster.cpp @@ -1,8 +1,64 @@ #include "RWTHVRCluster.h" + +#include "IVulkanDynamicRHI.h" + #define LOCTEXT_NAMESPACE "FRWTHVRClusterModule" -void FRWTHVRClusterModule::StartupModule() { ClusterConsole.Register(); } +void FRWTHVRClusterModule::StartupModule() +{ + ClusterConsole.Register(); + + if (FApp::CanEverRender()) + { +#if PLATFORM_WINDOWS + TCHAR const* DynamicRHIModuleName = GetSelectedDynamicRHIModuleName(false); +#elif PLATFORM_LINUX + TCHAR const* DynamicRHIModuleName = TEXT("VulkanRHI"); +#endif + + if (FString("VulkanRHI") == FString(DynamicRHIModuleName)) + { + TArray<ANSICHAR const*> const ExtensionsToAdd{VK_NV_PRESENT_BARRIER_EXTENSION_NAME}; + TArray<ANSICHAR const*> const InstanceExtensionsToAdd{VK_KHR_GET_SURFACE_CAPABILITIES_2_EXTENSION_NAME}; + + IVulkanDynamicRHI::AddEnabledDeviceExtensionsAndLayers(ExtensionsToAdd, TArray<ANSICHAR const*>()); + IVulkanDynamicRHI::AddEnabledInstanceExtensionsAndLayers({InstanceExtensionsToAdd}, TArray<ANSICHAR const*>()); + } + /* + FCoreDelegates::OnPostEngineInit.AddLambda( + []() + { + switch (GDynamicRHI->GetInterfaceType()) + { + case ERHIInterfaceType::Vulkan: + FAVDevice::GetHardwareDevice()->SetContext<FVideoContextVulkan>(MakeShared<FVideoContextVulkan>( + GetIVulkanDynamicRHI()->RHIGetVkInstance(), GetIVulkanDynamicRHI()->RHIGetVkDevice(), + GetIVulkanDynamicRHI()->RHIGetVkPhysicalDevice(), [](char const* Name) -> PFN_vkVoidFunction + { return (PFN_vkVoidFunction)GetIVulkanDynamicRHI()->RHIGetVkDeviceProcAddr(Name); })); + + break; +#if PLATFORM_WINDOWS + case ERHIInterfaceType::D3D11: + FAVDevice::GetHardwareDevice()->SetContext<FVideoContextD3D11>( + MakeShared<FVideoContextD3D11>(GetID3D11DynamicRHI()->RHIGetDevice())); + + break; + case ERHIInterfaceType::D3D12: + FAVDevice::GetHardwareDevice()->SetContext<FVideoContextD3D12>( + MakeShared<FVideoContextD3D12>(GetID3D12DynamicRHI()->RHIGetDevice(0))); + + break; +#endif + default: + break; + } + + FAVDevice::GetHardwareDevice()->SetContext<FVideoContextRHI>(MakeShared<FVideoContextRHI>()); + }); + */ + } +} void FRWTHVRClusterModule::ShutdownModule() { ClusterConsole.Unregister(); } diff --git a/Source/RWTHVRCluster/RWTHVRCluster.Build.cs b/Source/RWTHVRCluster/RWTHVRCluster.Build.cs index 98f6200330450e0a35572838fe11bc02a88997e3..f27ad3ba52b067c4fd6cbed74462863175160015 100644 --- a/Source/RWTHVRCluster/RWTHVRCluster.Build.cs +++ b/Source/RWTHVRCluster/RWTHVRCluster.Build.cs @@ -25,12 +25,19 @@ public class RWTHVRCluster : ModuleRules "UMG", "Slate", "SlateCore", - "LiveLink", + "LiveLink", "HeadMountedDisplay", // required for MotionControllerComp - "DisplayCluster" + "DisplayCluster", + "RenderCore" } ); + PrivateDependencyModuleNames.AddRange( + new string[] + { + "VulkanRHI", "RHI", "Vulkan" + } + ); if (IsPluginEnabledForTarget("DTrackPlugin", base.Target)) { PublicDependencyModuleNames.AddRange( @@ -42,10 +49,6 @@ public class RWTHVRCluster : ModuleRules ); } - PrivateDependencyModuleNames.AddRange( - new string[] { } - ); - DynamicallyLoadedModuleNames.AddRange( new string[] { } );