void FOculusRiftHMD::UpdateViewport(bool bUseSeparateRenderTarget, const FViewport& InViewport, SViewport* ViewportWidget) { check(IsInGameThread()); if (GIsEditor && ViewportWidget) { // In editor we are going to check if the viewport widget supports stereo rendering or not. if (!ViewportWidget->IsStereoRenderingAllowed()) { return; } } FRHIViewport* const ViewportRHI = InViewport.GetViewportRHI().GetReference(); TSharedPtr<SWindow> Window; if (ViewportWidget && !IsFullscreenAllowed()) { FWidgetPath WidgetPath; TSharedRef<SWidget> Widget = ViewportWidget->AsShared(); Window = FSlateApplication::Get().FindWidgetWindow(Widget, WidgetPath); } if (!Settings->IsStereoEnabled()) { if ((!bUseSeparateRenderTarget || GIsEditor) && ViewportRHI) { ViewportRHI->SetCustomPresent(nullptr); } // Restore AutoResizeViewport mode for the window if (ViewportWidget && !IsFullscreenAllowed() && Settings->MirrorWindowSize.X != 0 && Settings->MirrorWindowSize.Y != 0) { FWidgetPath WidgetPath; TSharedRef<SWidget> Widget = ViewportWidget->AsShared(); TSharedPtr<SWindow> Window = FSlateApplication::Get().FindWidgetWindow(Widget, WidgetPath); if (Window.IsValid()) { Window->SetViewportSizeDrivenByWindow(true); } } return; } FGameFrame* CurrentFrame = GetFrame(); if (!bUseSeparateRenderTarget || !CurrentFrame) return; check(CurrentFrame); CurrentFrame->ViewportSize = InViewport.GetSizeXY(); CurrentFrame->WindowSize = Window->GetSizeInScreen(); check(pCustomPresent); pCustomPresent->UpdateViewport(InViewport, ViewportRHI, CurrentFrame); }
void FSteamVRHMD::UpdateViewport(bool bUseSeparateRenderTarget, const FViewport& InViewport, SViewport* ViewportWidget) { check(IsInGameThread()); FRHIViewport* const ViewportRHI = InViewport.GetViewportRHI().GetReference(); if (!IsStereoEnabled()) { if (!bUseSeparateRenderTarget) { ViewportRHI->SetCustomPresent(nullptr); } return; } GetActiveRHIBridgeImpl()->UpdateViewport(InViewport, ViewportRHI); }