Exemplo n.º 1
0
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);
}
Exemplo n.º 2
0
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);
}