private void ThreadProc() { while (true) { updateParametersReadySemaphore.Wait(); preparedFrame = framePreparer.PrepareFrame(updateParameters); } }
private Texture2D RenderView(IPreparedFrame preparedFrame, HiddenAreaMesh hiddenAreaMesh, Matrix viewTransform, Matrix projectionTransform) { var renderTexture = preparedFrame.RenderView(device.ImmediateContext, hiddenAreaMesh, viewTransform, projectionTransform); mostRecentProjectionTransform = projectionTransform; mostRecentRenderTexture = renderTexture; return(renderTexture); }
private void Run() { //setup initial frame timeKeeper.Start(); OpenVR.Compositor.GetLastPoses(poses, gamePoses); KickoffFramePreparation(); preparedFrame = asyncFramePreparer.FinishPreparingFrame(); RenderLoop.Run(companionWindow.Form, DoFrame); }
private void SubmitEye(EVREye eye, IPreparedFrame preparedFrame) { immediateContext.WithEvent($"VRApp::SubmitEye({eye})", () => { HiddenAreaMesh hiddenAreaMesh = hiddenAreaMeshes.GetMesh(eye); Matrix viewMatrix = GetViewMatrix(eye); Matrix projectionMatrix = GetProjectionMatrix(eye); var resultTexture = RenderView(preparedFrame, hiddenAreaMesh, viewMatrix, projectionMatrix); VRTextureBounds_t bounds; bounds.uMin = 0; bounds.uMax = 1; bounds.vMin = 0; bounds.vMax = 1; Texture_t eyeTexture; eyeTexture.handle = resultTexture.NativePointer; eyeTexture.eType = ETextureType.DirectX; eyeTexture.eColorSpace = EColorSpace.Auto; OpenVR.Compositor.Submit(eye, ref eyeTexture, ref bounds, EVRSubmitFlags.Submit_Default); }); }
private void DoFrame() { OpenVR.Compositor.WaitGetPoses(poses, gamePoses); timeKeeper.AdvanceFrame(); PumpVREvents(); KickoffFramePreparation(); immediateContext.WithEvent("VRApp::Prework", () => { preparedFrame.DoPrework(device.ImmediateContext, poses); }); SubmitEye(EVREye.Eye_Left, preparedFrame); SubmitEye(EVREye.Eye_Right, preparedFrame); if (companionWindow.HasIndependentCamera) { Matrix companionViewTransform = companionWindow.GetViewTransform(); Matrix companionWindowProjectionMatrix = companionWindow.GetDesiredProjectionMatrix(); immediateContext.WithEvent("VRApp::RenderCompanionView", () => { RenderView(preparedFrame, null, companionViewTransform, companionWindowProjectionMatrix); }); } companionWindow.Display( mostRecentRenderTexture, mostRecentProjectionTransform, () => preparedFrame.DrawCompanionWindowUi(device.ImmediateContext)); preparedFrame.DoPostwork(device.ImmediateContext); OpenVR.Compositor.PostPresentHandoff(); preparedFrame.Dispose(); preparedFrame = asyncFramePreparer.FinishPreparingFrame(); }
public void StartPreparingFrame(FrameUpdateParameters updateParameters) { this.updateParameters = updateParameters; this.preparedFrame = null; updateParametersReadySemaphore.Release(); }