internal override void Render(MeshDrawer[] meshes, Camera camera, UIEngine ui) { GL.Viewport(0, 0, camera.Width, camera.Height); var reye = CalcRightEyePosition(camera); camera.Node.GetTransform.Position -= reye; //render scene to left eye camera.CalcLook(); GL.BindFramebuffer(FramebufferTarget.Framebuffer, leftBuffer.RenderBufferDraw); GL.Clear(ClearBufferMask.ColorBufferBit | ClearBufferMask.DepthBufferBit); //render background first due to model transperancy if (camera.Background != null) { camera.Background.DrawBackground(camera); } RenderScene(meshes, camera); ui.DrawWorldUI(camera); leftBuffer.DownSample(); vrSystem.SetLeftEye(leftBuffer.RenderTexture.textureID); //render scene to right eye camera.Node.GetTransform.Position += 2 * reye; camera.CalcLook(); //render scene to left eye GL.BindFramebuffer(FramebufferTarget.Framebuffer, rightBuffer.RenderBufferDraw); GL.Clear(ClearBufferMask.ColorBufferBit | ClearBufferMask.DepthBufferBit); //render background first due to model transperancy if (camera.Background != null) { camera.Background.DrawBackground(camera); } RenderScene(meshes, camera); ui.DrawWorldUI(camera); rightBuffer.DownSample(); vrSystem.SetRightEye(rightBuffer.RenderTexture.textureID); //return camera back camera.Node.GetTransform.Position -= reye; }