Esempio n. 1
0
        public static void Main(string[] args)
        {
            OSVR.ClientKit.ClientContext context = new OSVR.ClientKit.ClientContext("org.opengoggles.exampleclients.managed.TrackerCallback");

            // This is just one of the paths. You can also use:
            // /me/hands/right
            // /me/head
            Interface lefthand = context.getInterface("/me/hands/left");

            TrackerCallbacks callbacks = new TrackerCallbacks();

            // The coordinate system is right-handed, withX to the right, Y up, and Z near.
            OSVR.ClientKit.PoseCallback poseCb = new PoseCallback(TrackerCallbacks.myTrackerCallback);
            lefthand.registerCallback(poseCb, IntPtr.Zero);

            // If you just want orientation
            OSVR.ClientKit.OrientationCallback oriCb = new OrientationCallback(TrackerCallbacks.myOrientationCallback);
            lefthand.registerCallback(oriCb, IntPtr.Zero);

            // or position
            OSVR.ClientKit.PositionCallback posCb = new PositionCallback(TrackerCallbacks.myPositionCallback);
            lefthand.registerCallback(posCb, IntPtr.Zero);

            // Pretend that this is your application's main loop
            for (int i = 0; i < 1000000; ++i)
            {
                context.update();
            }

            Console.WriteLine("Library shut down; exiting.");
        }
        static void Main(string[] args)
        {
            ClientContext.PreloadNativeLibraries();
			using (OSVR.ClientKit.ClientContext context = new OSVR.ClientKit.ClientContext("com.osvr.exampleclients.managed.AnalogCallback"))
            {
                // This is just one of the paths: specifically, the Hydra's left
                // controller's analog trigger. More are in the docs and/or listed on
                // startup
#if NET20
                using (var analogTrigger = AnalogInterface.GetInterface(context, "/controller/left/trigger"))
#else
                using (var analogTrigger = context.GetAnalogInterface("/controller/left/trigger"))
#endif
                {
                    analogTrigger.StateChanged += analogTrigger_StateChanged;
                    // Pretend that this is your application's main loop
                    for (int i = 0; i < 1000000; ++i)
                    {
                        context.update();
                    }

                    Console.WriteLine("Library shut down; exiting.");
                }
            }
        }
Esempio n. 3
0
        static void Main(string[] args)
        {
            ClientContext.PreloadNativeLibraries();
			using (OSVR.ClientKit.ClientContext context = new OSVR.ClientKit.ClientContext("com.osvr.exampleclients.managed.Locomotion"))
            {
#if NET20
                using (var naviPosition = NaviPositionInterface.GetInterface(context, "/me/feet/both"))
                using (var naviVelocity = NaviVelocityInterface.GetInterface(context, "/me/feet/both"))
#else
                using (var naviPosition = context.GetNaviPositionInterface("/me/feet/both"))
                using (var naviVelocity = context.GetNaviVelocityInterface("/me/feet/both"))
#endif
                {
                    naviPosition.StateChanged += locomotionPosition_StateChanged;
                    naviVelocity.StateChanged += locomotionVelocity_StateChanged;

                    // Pretend that this is your application's main loop
                    for (int i = 0; i < 1000000; ++i)
                    {
                        context.update();
                    }

                    Console.WriteLine("Library shut down; exiting.");
                }
            }
        }
Esempio n. 4
0
        static void Main(string[] args)
        {
            ClientContext.PreloadNativeLibraries();
            using (OSVR.ClientKit.ClientContext context = new OSVR.ClientKit.ClientContext("com.osvr.exampleclients.managed.Direction"))
            {
#if NET20
                using (var direction = DirectionInterface.GetInterface(context, Path))
#else
                using (var direction = context.GetDirectionInterface(Path))
#endif
                {
                    direction.StateChanged += direction_StateChanged;

                    // Pretend that this is your application's main loop
                    for (int i = 0; i < 1000000; ++i)
                    {
                        context.update();
                        var directionState = direction.GetState();
                        Console.WriteLine("Direction State: {0}", FormatDirectionReport(directionState.Value));
                    }

                    Console.WriteLine("Library shut down; exiting.");
                }
            }
        }
Esempio n. 5
0
        static void Main(string[] args)
        {
            ClientContext.PreloadNativeLibraries();
            using (ServerAutoStarter serverAutoStarter = new ServerAutoStarter())
                using (OSVR.ClientKit.ClientContext context = new OSVR.ClientKit.ClientContext("com.osvr.exampleclients.managed.ButtonCallback"))
                {
                    // This is just one of the paths: specifically, the Hydra's left
                    // controller's button labelled "1". More are in the docs and/or listed on
                    // startup
#if NET20
                    using (var button1 = ButtonInterface.GetInterface(context, "/controller/left/1"))
#else
                    using (var button1 = context.GetButtonInterface("/controller/left/1"))
#endif
                    {
                        button1.StateChanged += button1_StateChanged;
                        // Pretend that this is your application's main loop
                        for (int i = 0; i < 1000000; ++i)
                        {
                            context.update();
                        }

                        Console.WriteLine("Library shut down; exiting.");
                    }
                }
        }
Esempio n. 6
0
        static void Main(string[] args)
        {
            ClientContext.PreloadNativeLibraries();
            using (ServerAutoStarter serverAutoStarter = new ServerAutoStarter())
                using (OSVR.ClientKit.ClientContext context = new OSVR.ClientKit.ClientContext("com.osvr.exampleclients.managed.Direction"))
                {
#if NET20
                    using (var direction = DirectionInterface.GetInterface(context, Path))
#else
                    using (var direction = context.GetDirectionInterface(Path))
#endif
                    {
                        direction.StateChanged += direction_StateChanged;

                        // Pretend that this is your application's main loop
                        for (int i = 0; i < 1000000; ++i)
                        {
                            context.update();
                            var directionState = direction.GetState();
                            Console.WriteLine("Direction State: {0}", FormatDirectionReport(directionState.Value));
                        }

                        Console.WriteLine("Library shut down; exiting.");
                    }
                }
        }
Esempio n. 7
0
        static void Main(string[] args)
        {
            ClientContext.PreloadNativeLibraries();
            using (ServerAutoStarter serverAutoStarter = new ServerAutoStarter())
                using (OSVR.ClientKit.ClientContext context = new OSVR.ClientKit.ClientContext("com.osvr.exampleclients.managed.Locomotion"))
                {
#if NET20
                    using (var naviPosition = NaviPositionInterface.GetInterface(context, "/me/feet/both"))
                        using (var naviVelocity = NaviVelocityInterface.GetInterface(context, "/me/feet/both"))
#else
                    using (var naviPosition = context.GetNaviPositionInterface("/me/feet/both"))
                        using (var naviVelocity = context.GetNaviVelocityInterface("/me/feet/both"))
#endif
                        {
                            naviPosition.StateChanged += locomotionPosition_StateChanged;
                            naviVelocity.StateChanged += locomotionVelocity_StateChanged;

                            // Pretend that this is your application's main loop
                            for (int i = 0; i < 1000000; ++i)
                            {
                                context.update();
                            }

                            Console.WriteLine("Library shut down; exiting.");
                        }
                }
        }
Esempio n. 8
0
        static void Main(string[] args)
        {
            ClientContext.PreloadNativeLibraries();
            using (ServerAutoStarter serverAutoStarter = new ServerAutoStarter())
                using (OSVR.ClientKit.ClientContext context = new OSVR.ClientKit.ClientContext("com.osvr.exampleclients.managed.Imaging"))
                {
                    // there are three types of interfaces for eye tracking, 2D, 3D, and blinking
#if NET20
                    using (var imaging = ImagingInterface.GetInterface(context, "/camera"))
#else
                    using (var imaging = context.GetImagingInterface("/camera"))
#endif
                    {
                        imaging.StateChanged += imaging_StateChanged;

                        // Pretend that this is your application's main loop
                        for (int i = 0; i < 10000000; ++i)
                        {
                            context.update();
                        }

                        Console.WriteLine("Library shut down; exiting.");
                    }
                }
        }
Esempio n. 9
0
        static void Main(string[] args)
        {
            OSVR.ClientKit.ClientContext context = new OSVR.ClientKit.ClientContext("org.opengoggles.exampleclients.managed.DisplayParameter");
            string displayDescription            = context.getStringParameter("/display");

            Console.WriteLine("Got value of /display:");
            Console.WriteLine(displayDescription);

            Console.WriteLine("Library shut down; exiting.");
        }
Esempio n. 10
0
        static void Main(string[] args)
        {
            ClientContext.PreloadNativeLibraries();
            using (OSVR.ClientKit.ClientContext context = new OSVR.ClientKit.ClientContext("com.osvr.exampleclients.managed.DisplayParameter"))
            {
                string displayDescription = context.getStringParameter("/display");

                Console.WriteLine("Got value of /display:");
                Console.WriteLine(displayDescription);

                Console.WriteLine("Library shut down; exiting.");
            }
        }
Esempio n. 11
0
        static void Main(string[] args)
        {
            OSVR.ClientKit.ClientContext context = new OSVR.ClientKit.ClientContext("org.opengoggles.exampleclients.managed.ButtonCallback");

            // This is just one of the paths: specifically, the Hydra's left
            // controller's button labelled "1". More are in the docs and/or listed on
            // startup
            Interface button1 = context.getInterface("/controller/left/1");

            OSVR.ClientKit.ButtonCallback mycb = new OSVR.ClientKit.ButtonCallback(myButtonCallback);
            button1.registerCallback(mycb, IntPtr.Zero);

            // Pretend that this is your application's main loop
            for (int i = 0; i < 1000000; ++i)
            {
                context.update();
            }

            Console.WriteLine("Library shut down; exiting.");
        }
Esempio n. 12
0
        static void Main(string[] args)
        {
            ClientContext.PreloadNativeLibraries();
            using (ServerAutoStarter serverAutoStarter = new ServerAutoStarter())
                using (OSVR.ClientKit.ClientContext context = new OSVR.ClientKit.ClientContext("com.osvr.exampleclients.managed.EyeTracker"))
                {
                    // there are three types of interfaces for eye tracking, 2D, 3D, and blinking
#if NET20
                    using (var eyeTracker2D = EyeTracker2DInterface.GetInterface(context, EyeTrackerPath))
                        using (var eyeTracker3D = EyeTracker3DInterface.GetInterface(context, EyeTrackerPath))
                            using (var eyeTrackerBlink = EyeTrackerBlinkInterface.GetInterface(context, EyeTrackerPath))
#else
                    using (var eyeTracker2D = context.GetEyeTracker2DInterface(EyeTrackerPath))
                        using (var eyeTracker3D = context.GetEyeTracker3DInterface(EyeTrackerPath))
                            using (var eyeTrackerBlink = context.GetEyeTrackerBlinkInterface(EyeTrackerPath))
#endif
                            {
                                eyeTracker2D.StateChanged    += eyeTracker2D_StateChanged;
                                eyeTracker3D.StateChanged    += eyeTracker3D_StateChanged;
                                eyeTrackerBlink.StateChanged += eyeTrackerBlink_StateChanged;

                                // Pretend that this is your application's main loop
                                for (int i = 0; i < 1000000; ++i)
                                {
                                    context.update();
                                    var eyeTracker2DState    = eyeTracker2D.GetState();
                                    var eyeTracker3DState    = eyeTracker3D.GetState();
                                    var eyeTrackerBlinkState = eyeTrackerBlink.GetState();
                                    Console.WriteLine("Getting state:");
                                    Console.WriteLine("EyeTracker2D: {0}", FormatEyeTracker2DReport(eyeTracker2DState.Value));
                                    Console.WriteLine("EyeTracker3D: {0}", FormatEyeTracker3DReport(eyeTracker3DState.Value));
                                    Console.WriteLine("EyeTrackerBlink: {0}", eyeTrackerBlinkState.Value);
                                }

                                Console.WriteLine("Library shut down; exiting.");
                            }
                }
        }
Esempio n. 13
0
        static void Main(string[] args)
        {
            ClientContext.PreloadNativeLibraries();
            using (OSVR.ClientKit.ClientContext context = new OSVR.ClientKit.ClientContext("com.osvr.exampleclients.managed.EyeTracker"))
            {
                // there are three types of interfaces for eye tracking, 2D, 3D, and blinking
#if NET20
                using (var eyeTracker2D = EyeTracker2DInterface.GetInterface(context, EyeTrackerPath))
                using (var eyeTracker3D = EyeTracker3DInterface.GetInterface(context, EyeTrackerPath))
                using (var eyeTrackerBlink = EyeTrackerBlinkInterface.GetInterface(context, EyeTrackerPath))
#else
                using (var eyeTracker2D = context.GetEyeTracker2DInterface(EyeTrackerPath))
                using (var eyeTracker3D = context.GetEyeTracker3DInterface(EyeTrackerPath))
                using (var eyeTrackerBlink = context.GetEyeTrackerBlinkInterface(EyeTrackerPath))
#endif
                {
                    eyeTracker2D.StateChanged += eyeTracker2D_StateChanged;
                    eyeTracker3D.StateChanged += eyeTracker3D_StateChanged;
                    eyeTrackerBlink.StateChanged += eyeTrackerBlink_StateChanged;

                    // Pretend that this is your application's main loop
                    for (int i = 0; i < 1000000; ++i)
                    {
                        context.update();
                        var eyeTracker2DState = eyeTracker2D.GetState();
                        var eyeTracker3DState = eyeTracker3D.GetState();
                        var eyeTrackerBlinkState = eyeTrackerBlink.GetState();
                        Console.WriteLine("Getting state:");
                        Console.WriteLine("EyeTracker2D: {0}", FormatEyeTracker2DReport(eyeTracker2DState.Value));
                        Console.WriteLine("EyeTracker3D: {0}", FormatEyeTracker3DReport(eyeTracker3DState.Value));
                        Console.WriteLine("EyeTrackerBlink: {0}", eyeTrackerBlinkState.Value);
                    }

                    Console.WriteLine("Library shut down; exiting.");
                }
            }
        }
Esempio n. 14
0
        static void Main(string[] args)
        {
            ClientContext.PreloadNativeLibraries();
            using (OSVR.ClientKit.ClientContext context = new OSVR.ClientKit.ClientContext("com.osvr.exampleclients.managed.Imaging"))
            {
                // there are three types of interfaces for eye tracking, 2D, 3D, and blinking
#if NET20
                using (var imaging = ImagingInterface.GetInterface(context, "/camera"))
#else
                using (var imaging = context.GetImagingInterface("/camera"))
#endif
                {
                    imaging.StateChanged += imaging_StateChanged;

                    // Pretend that this is your application's main loop
                    for (int i = 0; i < 10000000; ++i)
                    {
                        context.update();
                    }

                    Console.WriteLine("Library shut down; exiting.");
                }
            }
        }
        static void Main(string[] args)
        {
            ClientContext.PreloadNativeLibraries();
			using (OSVR.ClientKit.ClientContext context = new OSVR.ClientKit.ClientContext("com.osvr.exampleclients.managed.DisplayParameter"))
            {
                string displayDescription = context.getStringParameter("/display");

                Console.WriteLine("Got value of /display:");
                Console.WriteLine(displayDescription);

                for (var i = 0; i < 100000; i++)
                {
                    context.update();

                    using(var displayConfig = context.GetDisplayConfig())
                    {
                        // GetDisplayConfig can sometimes fail, returning null
                        if (displayConfig != null)
                        {
                            Console.WriteLine("Waiting for the display config to be initialized and receive its first pose...");
                            do
                            {
                                context.update();
                            } while (!displayConfig.CheckDisplayStartup());

                            var numDisplayInputs = displayConfig.GetNumDisplayInputs();
                            Console.WriteLine("There are {0} display inputs.", numDisplayInputs);

                            for(byte displayInputIndex = 0; displayInputIndex < numDisplayInputs; displayInputIndex++)
                            {
                                var displayDimensions = displayConfig.GetDisplayDimensions(displayInputIndex);
                                Console.WriteLine("Display input {0} is width {1} and height {2}",
                                    displayInputIndex, displayDimensions.Width, displayDimensions.Height);
                            }

                            var numViewers = displayConfig.GetNumViewers();
                            Console.WriteLine("There are {0} viewers for this display configuration.", numViewers);
                            for (uint viewer = 0; viewer < numViewers; viewer++)
                            {
                                var numEyes = displayConfig.GetNumEyesForViewer(viewer);
                                Console.WriteLine("There are {0} eyes for viewer {1}.", numEyes, viewer);

                                var viewerPose = displayConfig.GetViewerPose(viewer);
                                Console.WriteLine("Viewer pose for viewer {0}: {1}",
                                    viewer, GetPoseDisplay(viewerPose));

                                for (byte eye = 0; eye < numEyes; eye++)
                                {
                                    var numSurfaces = displayConfig.GetNumSurfacesForViewerEye(viewer, eye);
                                    Console.WriteLine("There are {0} surfaces for eye {1} on viewer {2}.",
                                        numSurfaces, eye, viewer);

                                    var viewerEyePose = displayConfig.GetViewerEyePose(viewer, eye);
                                    Console.WriteLine("Viewer eye pose for eye {0} on viewer {1}: {2}.",
                                        eye, viewer, GetPoseDisplay(viewerEyePose));

                                    var viewerEyeMatrixd = displayConfig.GetViewerEyeViewMatrixd(viewer, eye, MatrixConventionsFlags.Default);
                                    Console.WriteLine("Viewer eye view-matrix (double) for eye {0} on viewer {1}: {2}",
                                        eye, viewer, viewerEyeMatrixd.ToString());

                                    var viewerEyeMatrixf = displayConfig.GetViewerEyeViewMatrixf(viewer, eye, MatrixConventionsFlags.Default);
                                    Console.WriteLine("Viewer eye view-matrix (float) for eye {0} on viewer {1}: {2}",
                                        eye, viewer, viewerEyeMatrixf.ToString());

                                    for (uint surface = 0; surface < numSurfaces; surface++)
                                    {
                                        Console.WriteLine("surface {0} for eye {1} for viewer {2}:",
                                            surface, eye, viewer);

                                        var viewport = displayConfig.GetRelativeViewportForViewerEyeSurface(
                                            viewer, eye, surface);
                                        Console.WriteLine("Relative viewport: {0}", viewport.ToString());

                                        var wantsDistortion = displayConfig.DoesViewerEyeSurfaceWantDistortion(
                                            viewer, eye, surface);
                                        Console.WriteLine("Surface wants distortion? {0}", wantsDistortion);

                                        if(wantsDistortion)
                                        {
                                            var radialDistortionPriority = displayConfig.GetViewerEyeSurfaceRadialDistortionPriority(
                                                viewer, eye, surface);
                                            Console.WriteLine("Radial Distortion priority: {0}", radialDistortionPriority);

                                            if (radialDistortionPriority >= 0)
                                            {
                                                var distortionParameters = displayConfig.GetViewerEyeSurfaceRadialDistortion(
                                                    viewer, eye, surface);
                                                Console.WriteLine("Surface radial distortion parameters: {0}", distortionParameters.ToString());
                                            }
                                        }

                                        var projectiond = displayConfig.GetProjectionMatrixForViewerEyeSurfaced(
                                            viewer, eye, surface, 1.0, 1000.0, MatrixConventionsFlags.Default);
                                        Console.WriteLine("Projection (double): {0}", projectiond.ToString());

                                        var projectionf = displayConfig.GetProjectionMatrixForViewerEyeSurfacef(
                                            viewer, eye, surface, 1.0f, 1000.0f, MatrixConventionsFlags.Default);
                                        Console.WriteLine("Projection (float): {0}", projectionf.ToString());

                                        var projectionClippingPlanes = displayConfig.GetViewerEyeSurfaceProjectionClippingPlanes(viewer, eye, surface);
                                        Console.WriteLine("Projection clipping planes: left: {0} right: {1} top: {2} bottom: {3}",
                                            projectionClippingPlanes.Left,
                                            projectionClippingPlanes.Right,
                                            projectionClippingPlanes.Top,
                                            projectionClippingPlanes.Bottom);

                                        var displayInputIndex = displayConfig.GetViewerEyeSurfaceDisplayInputIndex(viewer, eye, surface);
                                        Console.WriteLine("Display input index: {0}", displayInputIndex);
                                    }
                                }
                            }
                            break;
                        }
                    }
                }

                Console.WriteLine("Library shut down; exiting.");
            }
        }
Esempio n. 16
0
        static void Main(string[] args)
        {
            ClientContext.PreloadNativeLibraries();
            using (ServerAutoStarter serverAutoStarter = new ServerAutoStarter())
                using (OSVR.ClientKit.ClientContext context = new OSVR.ClientKit.ClientContext("com.osvr.exampleclients.managed.DisplayParameter"))
                {
                    string displayDescription = context.getStringParameter("/display");

                    Console.WriteLine("Got value of /display:");
                    Console.WriteLine(displayDescription);

                    for (var i = 0; i < 100000; i++)
                    {
                        context.update();

                        using (var displayConfig = context.GetDisplayConfig())
                        {
                            // GetDisplayConfig can sometimes fail, returning null
                            if (displayConfig != null)
                            {
                                Console.WriteLine("Waiting for the display config to be initialized and receive its first pose...");
                                do
                                {
                                    context.update();
                                } while (!displayConfig.CheckDisplayStartup());

                                var numDisplayInputs = displayConfig.GetNumDisplayInputs();
                                Console.WriteLine("There are {0} display inputs.", numDisplayInputs);

                                for (byte displayInputIndex = 0; displayInputIndex < numDisplayInputs; displayInputIndex++)
                                {
                                    var displayDimensions = displayConfig.GetDisplayDimensions(displayInputIndex);
                                    Console.WriteLine("Display input {0} is width {1} and height {2}",
                                                      displayInputIndex, displayDimensions.Width, displayDimensions.Height);
                                }

                                var numViewers = displayConfig.GetNumViewers();
                                Console.WriteLine("There are {0} viewers for this display configuration.", numViewers);
                                for (uint viewer = 0; viewer < numViewers; viewer++)
                                {
                                    var numEyes = displayConfig.GetNumEyesForViewer(viewer);
                                    Console.WriteLine("There are {0} eyes for viewer {1}.", numEyes, viewer);

                                    var viewerPose = displayConfig.GetViewerPose(viewer);
                                    Console.WriteLine("Viewer pose for viewer {0}: {1}",
                                                      viewer, GetPoseDisplay(viewerPose));

                                    for (byte eye = 0; eye < numEyes; eye++)
                                    {
                                        var numSurfaces = displayConfig.GetNumSurfacesForViewerEye(viewer, eye);
                                        Console.WriteLine("There are {0} surfaces for eye {1} on viewer {2}.",
                                                          numSurfaces, eye, viewer);

                                        var viewerEyePose = displayConfig.GetViewerEyePose(viewer, eye);
                                        Console.WriteLine("Viewer eye pose for eye {0} on viewer {1}: {2}.",
                                                          eye, viewer, GetPoseDisplay(viewerEyePose));

                                        var viewerEyeMatrixd = displayConfig.GetViewerEyeViewMatrixd(viewer, eye, MatrixConventionsFlags.Default);
                                        Console.WriteLine("Viewer eye view-matrix (double) for eye {0} on viewer {1}: {2}",
                                                          eye, viewer, viewerEyeMatrixd.ToString());

                                        var viewerEyeMatrixf = displayConfig.GetViewerEyeViewMatrixf(viewer, eye, MatrixConventionsFlags.Default);
                                        Console.WriteLine("Viewer eye view-matrix (float) for eye {0} on viewer {1}: {2}",
                                                          eye, viewer, viewerEyeMatrixf.ToString());

                                        for (uint surface = 0; surface < numSurfaces; surface++)
                                        {
                                            Console.WriteLine("surface {0} for eye {1} for viewer {2}:",
                                                              surface, eye, viewer);

                                            var viewport = displayConfig.GetRelativeViewportForViewerEyeSurface(
                                                viewer, eye, surface);
                                            Console.WriteLine("Relative viewport: {0}", viewport.ToString());

                                            var wantsDistortion = displayConfig.DoesViewerEyeSurfaceWantDistortion(
                                                viewer, eye, surface);
                                            Console.WriteLine("Surface wants distortion? {0}", wantsDistortion);

                                            if (wantsDistortion)
                                            {
                                                var radialDistortionPriority = displayConfig.GetViewerEyeSurfaceRadialDistortionPriority(
                                                    viewer, eye, surface);
                                                Console.WriteLine("Radial Distortion priority: {0}", radialDistortionPriority);

                                                if (radialDistortionPriority >= 0)
                                                {
                                                    var distortionParameters = displayConfig.GetViewerEyeSurfaceRadialDistortion(
                                                        viewer, eye, surface);
                                                    Console.WriteLine("Surface radial distortion parameters: {0}", distortionParameters.ToString());
                                                }
                                            }

                                            var projectiond = displayConfig.GetProjectionMatrixForViewerEyeSurfaced(
                                                viewer, eye, surface, 1.0, 1000.0, MatrixConventionsFlags.Default);
                                            Console.WriteLine("Projection (double): {0}", projectiond.ToString());

                                            var projectionf = displayConfig.GetProjectionMatrixForViewerEyeSurfacef(
                                                viewer, eye, surface, 1.0f, 1000.0f, MatrixConventionsFlags.Default);
                                            Console.WriteLine("Projection (float): {0}", projectionf.ToString());

                                            var projectionClippingPlanes = displayConfig.GetViewerEyeSurfaceProjectionClippingPlanes(viewer, eye, surface);
                                            Console.WriteLine("Projection clipping planes: left: {0} right: {1} top: {2} bottom: {3}",
                                                              projectionClippingPlanes.Left,
                                                              projectionClippingPlanes.Right,
                                                              projectionClippingPlanes.Top,
                                                              projectionClippingPlanes.Bottom);

                                            var displayInputIndex = displayConfig.GetViewerEyeSurfaceDisplayInputIndex(viewer, eye, surface);
                                            Console.WriteLine("Display input index: {0}", displayInputIndex);
                                        }
                                    }
                                }
                                break;
                            }
                        }
                    }

                    Console.WriteLine("Library shut down; exiting.");
                }
        }