void FSteamVRHMD::D3D11Bridge::UpdateViewport(const FViewport& Viewport, FRHIViewport* InViewportRHI) { check(IsInGameThread()); check(InViewportRHI); const FTexture2DRHIRef& RT = Viewport.GetRenderTargetTexture(); check(IsValidRef(RT)); if (RenderTargetTexture != nullptr) { RenderTargetTexture->Release(); //@todo steamvr: need to also release in reset } RenderTargetTexture = (ID3D11Texture2D*)RT->GetNativeResource(); RenderTargetTexture->AddRef(); InViewportRHI->SetCustomPresent(this); }
bool FSteamVRHMD::NeedReAllocateViewportRenderTarget(const FViewport& Viewport) { check(IsInGameThread()); if (IsStereoEnabled()) { const uint32 InSizeX = Viewport.GetSizeXY().X; const uint32 InSizeY = Viewport.GetSizeXY().Y; FIntPoint RenderTargetSize; RenderTargetSize.X = Viewport.GetRenderTargetTexture()->GetSizeX(); RenderTargetSize.Y = Viewport.GetRenderTargetTexture()->GetSizeY(); uint32 NewSizeX = InSizeX, NewSizeY = InSizeY; CalculateRenderTargetSize(Viewport, NewSizeX, NewSizeY); if (NewSizeX != RenderTargetSize.X || NewSizeY != RenderTargetSize.Y) { return true; } } return false; }