private bool init()
        {
            bool lresult = false;

            do
            {
                // Free the old surface
                if (this.surface != null)
                {
                    this.surface.Dispose();
                    this.surface = null;
                }

                using (var device = CreateDevice(Interop.NativeMethods.GetDesktopWindow()))
                {
                    surface = GetSharedSurface(device);

                    Lock();

                    this.SetBackBuffer(D3DResourceType.IDirect3DSurface9, this.surface.NativeInterface);

                    Unlock();

                    lresult = true;
                }
            } while (false);

            return(lresult);
        }
        public EVRDisplay()
        {
            var lTuple = D3D9Image.createD3D9Image();

            if (lTuple != null)
            {
                this.imageSource = lTuple.Item1;

                this.surface = lTuple.Item2;
            }

            if (this.imageSource != null)
            {
                var image = new System.Windows.Controls.Image();
                image.Stretch = System.Windows.Media.Stretch.Uniform;
                image.Source  = this.imageSource;
                this.AddChild(image);

                // To greatly reduce flickering we're only going to AddDirtyRect
                // when WPF is rendering.
                System.Windows.Media.CompositionTarget.Rendering += this.CompositionTargetRendering;
            }
        }