示例#1
0
		private void Initialize3D()
		{
			HwndSource hwnd = new HwndSource(0, 0, 0, 0, 0, "D3", IntPtr.Zero);

			pp.SwapEffect = SwapEffect.Discard;
			pp.DeviceWindowHandle = hwnd.Handle;
			pp.Windowed = true;
			pp.BackBufferWidth = (int)ActualWidth;
			pp.BackBufferHeight = (int)ActualHeight;
			pp.BackBufferFormat = Format.X8R8G8B8;

			try
			{
				var direct3DEx = new Direct3DEx();
				direct3D = direct3DEx;
				device = new DeviceEx(direct3DEx, 0, DeviceType.Hardware, hwnd.Handle, CreateFlags.HardwareVertexProcessing, pp);
			}
			catch
			{
				direct3D = new Direct3D();
				device = new Device(direct3D, 0, DeviceType.Hardware, hwnd.Handle, CreateFlags.HardwareVertexProcessing, pp);
			}

			System.Windows.Media.CompositionTarget.Rendering += new EventHandler(CompositionTarget_Rendering);
		}
示例#2
0
        public KinectD3DImage()
        {
            if (App.Current.MainWindow != null)
            {
                IntPtr window        = new WindowInteropHelper(App.Current.MainWindow).Handle;
                var    presentparams = new SharpDX.Direct3D9.PresentParameters
                {
                    Windowed             = true,
                    SwapEffect           = SharpDX.Direct3D9.SwapEffect.Discard,
                    DeviceWindowHandle   = window,
                    PresentationInterval = PresentInterval.Immediate,
                };

                const CreateFlags deviceFlags = CreateFlags.HardwareVertexProcessing | CreateFlags.Multithreaded | CreateFlags.FpuPreserve;

                this.direct3d       = new Direct3DEx();
                this.imagingFactory = new ImagingFactory();
                this.device         = Capture.Direct3D11Helper.CreateDevice();
                this.d3dDevice      = Capture.Direct3D11Helper.CreateSharpDXDevice(this.device);
                this.d9device       = new DeviceEx(this.direct3d, 0, DeviceType.Hardware, IntPtr.Zero, deviceFlags, presentparams);
                this.IsFrontBufferAvailableChanged += this.GraphicItemD3DImageIsFrontBufferAvailableChanged;
                this.renderEvent = new ManualResetEventSlim(false);
                var renderThread = new Thread(this.RenderThread);
                renderThread.Start();
            }
        }
示例#3
0
        /// <summary>
        /// Constructor for the hooking class.
        /// Creates the Direct3D9/Direct3D9Ex devices inside the function to get their
        /// native pointer for hooking purposes.
        /// </summary>
        public DX9Hook()
        {
            // Obtain the pointer to the IDirect3DDevice9 instance
            // by creating our own blank windows form and creating a IDirect3DDevice9
            // targeting that form. The returned device should be the same one as used by the game.
            using (Direct3D direct3D = new Direct3D())
                using (Form renderForm = new Form())
                    using (Device device = new Device(direct3D, 0, DeviceType.NullReference, IntPtr.Zero, CreateFlags.HardwareVertexProcessing, new PresentParameters()
                    {
                        BackBufferWidth = 1, BackBufferHeight = 1, DeviceWindowHandle = renderForm.Handle
                    }))
                    {
                        DirectXFunctions = new VirtualFunctionTable(device.NativePointer, Enum.GetNames(typeof(Direct3DDevice9)).Length);
                    }

            // Obtain the pointer to the IDirect3DDevice9Ex instance
            // by creating our own blank windows form and creating a IDirect3DDevice9Ex
            // targeting that form. The returned device should be the same one as used by the game.
            using (Direct3DEx direct3D = new Direct3DEx())
                using (var renderForm = new Form())
                    using (DeviceEx device = new DeviceEx(direct3D, 0, DeviceType.NullReference, IntPtr.Zero, CreateFlags.HardwareVertexProcessing, new PresentParameters()
                    {
                        BackBufferWidth = 1, BackBufferHeight = 1, DeviceWindowHandle = renderForm.Handle
                    }))
                    {
                        try
                        {
                            DirectXFunctions.TableEntries.AddRange(VirtualFunctionTable.GetObjectVTableAddresses(device.NativePointer, Enum.GetNames(typeof(Direct3DDevice9Ex)).Length));
                            SupportsDirect3D9Ex = true;
                        }
                        catch { SupportsDirect3D9Ex = false; }
                    }
        }
        void Initialise()
        {
            if (this.FHandle == (IntPtr)0)
            {
                throw (new Exception("No shared texture handle set"));
            }
            this.FContext = new Direct3DEx();

            this.FHiddenControl         = new Control();
            this.FHiddenControl.Visible = false;
            this.FHiddenControl.Width   = this.FWidth;
            this.FHiddenControl.Height  = this.FHeight;

            var flags = CreateFlags.HardwareVertexProcessing | CreateFlags.Multithreaded | CreateFlags.PureDevice | CreateFlags.FpuPreserve;

            this.FDevice = new DeviceEx(FContext, 0, DeviceType.Hardware, this.FHiddenControl.Handle, flags, new PresentParameters()
            {
                BackBufferWidth  = this.FWidth,
                BackBufferHeight = this.FHeight
            });

            this.FTextureShared = new Texture(this.FDevice, this.FWidth, this.FHeight, 1, FUsage, FFormat, Pool.Default, ref this.FHandle);
            this.FTextureCopied = new Texture(this.FDevice, this.FWidth, this.FHeight, 1, Usage.RenderTarget, FFormat, Pool.Default);

            var description = FTextureCopied.GetLevelDescription(0);

            this.FSurfaceOffscreen = Surface.CreateOffscreenPlainEx(FDevice, FWidth, FHeight, description.Format, Pool.SystemMemory, Usage.None);
            this.FInitialised      = true;
        }
示例#5
0
        public void StartDirect3D(Window window)
        {
            Direct3DContext = new Direct3DEx();

            var presentParameters = new PresentParameters
            {
                Windowed             = true,
                SwapEffect           = SwapEffect.Discard,
                DeviceWindowHandle   = new WindowInteropHelper(window).Handle,
                PresentationInterval = SharpDX.Direct3D9.PresentInterval.Default
            };

            Direct3DDevice = new DeviceEx(Direct3DContext, 0, DeviceType.Hardware, IntPtr.Zero,
                                          CreateFlags.HardwareVertexProcessing | CreateFlags.Multithreaded | CreateFlags.FpuPreserve,
                                          presentParameters);

            // Create the device using the main window handle, and a placeholder size (1,1).
            // The actual size doesn't matter because whenever we render using this GraphicsDevice,
            // we will make sure the back buffer is large enough for the window we're rendering into.
            // Also, the handle doesn't matter because we call GraphicsDevice.Present(...) with the
            // actual window handle to render into.
            GraphicsDevice = CreateGraphicsDevice(new WindowInteropHelper(window).Handle, 1, 1);

            DeviceCreated?.Invoke(this, EventArgs.Empty);
        }
示例#6
0
        /// <summary>
        /// Creates a new instance of <see cref="SharpDXElement"/> class.
        /// Initializes the D3D9 runtime.
        /// </summary>
        public SharpDXElement()
        {
            image = new D3DImage();

            var presentparams = new PresentParameters
            {
                Windowed             = true,
                SwapEffect           = SwapEffect.Discard,
                DeviceWindowHandle   = GetDesktopWindow(),
                PresentationInterval = PresentInterval.Default
            };

            direct3D = new Direct3DEx();

            device9 = new DeviceEx(direct3D,
                                   0,
                                   DeviceType.Hardware,
                                   IntPtr.Zero,
                                   CreateFlags.HardwareVertexProcessing | CreateFlags.Multithreaded | CreateFlags.FpuPreserve,
                                   presentparams);

            resizeDelayTimer          = new DispatcherTimer(DispatcherPriority.Normal);
            resizeDelayTimer.Interval = SendResizeDelay;
            resizeDelayTimer.Tick    += HandleResizeDelayTimerTick;

            SizeChanged += HandleSizeChanged;
            Unloaded    += HandleUnloaded;
        }
示例#7
0
 public Graphics(RenderForm form, int width, int height)
 {
     reset = () => form.Invoke(new Action(() =>
     {
         device.Reset(presentParameters);
         fontRenderer.Flush();
         textureRenderer.Flush();
         resized = false;
     }));
     form.UserResized += (sender, args) => Resize(form.ClientSize.Width, form.ClientSize.Height);
     presentParameters = new PresentParameters
     {
         Windowed             = true,
         SwapEffect           = SwapEffect.Discard,
         BackBufferFormat     = Format.A8R8G8B8,
         BackBufferCount      = 1,
         BackBufferWidth      = width,
         BackBufferHeight     = height,
         PresentationInterval = PresentInterval.One,
         MultiSampleType      = MultisampleType.None,
         MultiSampleQuality   = 0,
         PresentFlags         = PresentFlags.LockableBackBuffer
     };
     direct3D        = new Direct3DEx();
     device          = new DeviceEx(direct3D, 0, DeviceType.Hardware, form.Handle, CREATE_FLAGS, presentParameters);
     fontRenderer    = new FontRenderer(device);
     textureRenderer = new TextureRenderer(device);
     renderLocker.Reset();
 }
        void InitD3D9()
        {
            if (NumActiveImages == 0)
            {
                D3DContext = new Direct3DEx();

                PresentParameters pp = new PresentParameters();
                pp.Windowed             = true;
                pp.SwapEffect           = SwapEffect.Discard;
                pp.DeviceWindowHandle   = GetDesktopWindow();
                pp.PresentationInterval = PresentInterval.Immediate;
                pp.Multisample          = MultisampleType.None;
                pp.MultisampleQuality   = 0;

                var format  = Format.A8R8G8B8;
                var adapter = 0;

                // check for 4xAA
                if (D3DContext.CheckDeviceMultisampleType(adapter, DeviceType.Hardware, format, true, MultisampleType.FourSamples))
                {
                    pp.Multisample = MultisampleType.FourSamples;
                }
                // check fo 2xAA
                else if (D3DContext.CheckDeviceMultisampleType(adapter, DeviceType.Hardware, format, true, MultisampleType.TwoSamples))
                {
                    pp.Multisample = MultisampleType.TwoSamples;
                }


                D3DDevice = new DeviceEx(D3DContext, adapter, DeviceType.Hardware, IntPtr.Zero,
                                         CreateFlags.HardwareVertexProcessing | CreateFlags.Multithreaded | CreateFlags.FpuPreserve, pp);
            }
        }
示例#9
0
 public static void Load()
 {
     if (_d3d == null)
     {
         _d3d = new Direct3DEx();
     }
 }
示例#10
0
        /// <summary>
        ///
        /// </summary>
        public D3D9()
        {
            PresentParameters presentparams = new PresentParameters();

            presentparams.Windowed               = true;
            presentparams.SwapEffect             = SwapEffect.Discard;
            presentparams.DeviceWindowHandle     = D3D9.GetDesktopWindow();
            presentparams.EnableAutoDepthStencil = false;
            presentparams.AutoDepthStencilFormat = Format.D24S8;
            presentparams.PresentationInterval   = PresentInterval.Default;

            try
            {
                using (Diagnostics.PotentialExceptionRegion)
                {
                    var context = new Direct3DEx();
                    Context      = context;
                    this._device = new DeviceEx(context, 0, DeviceType.Hardware, IntPtr.Zero, CreateFlags.HardwareVertexProcessing | CreateFlags.Multithreaded | CreateFlags.FpuPreserve, presentparams);
                }
            }
            catch (Exception)
            {
                Context      = new Direct3D();
                this._device = new Device(Context, 0, DeviceType.Hardware, IntPtr.Zero, CreateFlags.HardwareVertexProcessing | CreateFlags.Multithreaded | CreateFlags.FpuPreserve, presentparams);
            }
        }
示例#11
0
        private void CleanUp()
        {
            logger.Verb("D3DImageRenderer::CleanUp()");

            //System.Windows.Media.CompositionTarget.Rendering -= CompositionTarget_Rendering;

            if (surface != null)
            {
                surface.Dispose();
                surface = null;
            }

            if (direct3D != null)
            {
                direct3D.Dispose();
                direct3D = null;
            }

            if (device != null)
            {
                device.Dispose();
                device = null;
            }

            if (waitEvent != null)
            {
                waitEvent.Dispose();
                waitEvent = null;
            }

            state = RendererState.Closed;
        }
示例#12
0
        private void Initialize3D()
        {
            HwndSource hwnd = new HwndSource(0, 0, 0, 0, 0, "D3", IntPtr.Zero);

            pp.SwapEffect         = SwapEffect.Discard;
            pp.DeviceWindowHandle = hwnd.Handle;
            pp.Windowed           = true;
            pp.BackBufferWidth    = (int)ActualWidth;
            pp.BackBufferHeight   = (int)ActualHeight;
            pp.BackBufferFormat   = Format.X8R8G8B8;

            try
            {
                var direct3DEx = new Direct3DEx();
                direct3D = direct3DEx;
                device   = new DeviceEx(direct3DEx, 0, DeviceType.Hardware, hwnd.Handle, CreateFlags.HardwareVertexProcessing, pp);
            }
            catch
            {
                direct3D = new Direct3D();
                device   = new Device(direct3D, 0, DeviceType.Hardware, hwnd.Handle, CreateFlags.HardwareVertexProcessing, pp);
            }

            System.Windows.Media.CompositionTarget.Rendering += new EventHandler(CompositionTarget_Rendering);
        }
示例#13
0
        /// <summary>
        /// Initializes a new instance of the <see cref="D3D9"/> class.
        /// </summary>
        public D3D9()
        {
            // Create Direct3DEx device on Windows Vista/7/8 with a display configured to use
            // the Windows Display Driver Model (WDDM). Use Direct3D on any other platform.
            _direct3D = new Direct3DEx();

            PresentParameters presentparams = new PresentParameters
            {
                Windowed             = true,
                SwapEffect           = SwapEffect.Discard,
                PresentationInterval = PresentInterval.Default,

                // The device back buffer is not used.
                BackBufferFormat = Format.Unknown,
                BackBufferWidth  = 1,
                BackBufferHeight = 1,

                // Use dummy window handle.
                DeviceWindowHandle = GetDesktopWindow()
            };


            _device = new DeviceEx(_direct3D, 0, DeviceType.Hardware, IntPtr.Zero,
                                   CreateFlags.HardwareVertexProcessing | CreateFlags.Multithreaded | CreateFlags.FpuPreserve,
                                   presentparams);
        }
示例#14
0
        private void Initialize3D()
        {
            HwndSource hwnd = new HwndSource(0, 0, 0, 0, 0, "D3", IntPtr.Zero);

            _pp.SwapEffect             = SwapEffect.Discard;
            _pp.DeviceWindowHandle     = hwnd.Handle;
            _pp.Windowed               = true;
            _pp.EnableAutoDepthStencil = true;
            _pp.BackBufferWidth        = Math.Max(100, (int)ActualWidth);
            _pp.BackBufferHeight       = Math.Max(100, (int)ActualHeight);
            _pp.BackBufferFormat       = Format.A8R8G8B8;
            _pp.AutoDepthStencilFormat = Format.D32SingleLockable;
            _pp.BackBufferCount        = 1;
            try
            {
                var direct3DEx = new Direct3DEx();
                Direct3D = direct3DEx;
                Device   = new DeviceEx(direct3DEx, 0, DeviceType.Hardware, hwnd.Handle, CreateFlags.HardwareVertexProcessing, _pp);
            }
            catch
            {
                // At this point we are pretty much screwed, require DeviceEx for the reset capability
                MessageBox.Show("Can't start DirectX, so that pretty much discounts doing anything else");
            }
            System.Windows.Media.CompositionTarget.Rendering += new EventHandler(CompositionTarget_Rendering);
        }
示例#15
0
 public static void Unload()
 {
     if (_d3d != null)
     {
         _d3d.Dispose();
     }
     _d3d = null;
 }
示例#16
0
        // - private methods -------------------------------------------------------------

        private void StartD3D()
        {
            var presentParams = GetPresentParameters();
            var createFlags   = CreateFlags.HardwareVertexProcessing | CreateFlags.Multithreaded | CreateFlags.FpuPreserve;

            D3DContext = new Direct3DEx();
            D3DDevice  = new DeviceEx(D3DContext, 0, DeviceType.Hardware, IntPtr.Zero, createFlags, presentParams);
        }
示例#17
0
        public GraphicsInteropImageSource()
        {
            var presentParams = GetPresentParameters();
            var createFlags   = CreateFlags.HardwareVertexProcessing | CreateFlags.Multithreaded | CreateFlags.FpuPreserve;


            D3DContext = new Direct3DEx();
            D3DDevice  = new DeviceEx(D3DContext, 0, DeviceType.Hardware, IntPtr.Zero, createFlags, presentParams);
        }
示例#18
0
    public DwmCapture(IntPtr hWnd)
    {
        _captureHwnd = hWnd;

        #region Initialise the Direct3D device

        int adapterOrdinal = 0;

        _d3dEx       = new Direct3DEx();
        _adapterLuid = _d3dEx.GetAdapterLuid(adapterOrdinal);

        var presentParams = new PresentParameters
        {
            PresentFlags     = PresentFlags.LockableBackBuffer,
            Windowed         = true,
            BackBufferFormat = Format.A8R8G8B8,
            SwapEffect       = SwapEffect.Flip
        };

        _deviceEx = new DeviceEx(_d3dEx, adapterOrdinal, DeviceType.Hardware, _captureHwnd, SlimDX.Direct3D9.CreateFlags.Multithreaded | SlimDX.Direct3D9.CreateFlags.SoftwareVertexProcessing, presentParams);

        #endregion

        #region Setup the shared surface (using DWM)

        uint   format        = 0;
        IntPtr pSharedHandle = IntPtr.Zero;
        int    hr            = NativeMethods.GetSharedSurface(_captureHwnd, _adapterLuid, 0, 0, ref format, out pSharedHandle, 0);
        NativeMethods.UpdateWindowShared(_captureHwnd, 0, 0, 0, IntPtr.Zero, IntPtr.Zero);

        RECT winRect;
        NativeMethods.GetWindowRect(_captureHwnd, out winRect);

        Size size = new Size(winRect.Right - winRect.Left, winRect.Bottom - winRect.Top);

        /* Hack because SlimDX does not let you specify a shared handle for creating shared resources we
         * have to create an IDirect3DDevice9 reference to the device instead */
        IDirect3DDevice9 devEx = (IDirect3DDevice9)Marshal.GetObjectForIUnknown(_deviceEx.ComPointer);
        IntPtr           pTexture;
        devEx.CreateTexture((int)size.Width, (int)size.Height, 1, 1, format, 0, out pTexture, ref pSharedHandle);
        Texture texture = Texture.FromPointer(pTexture);

        _sharedSurface = texture.GetSurfaceLevel(0);

        _renderTarget = Surface.CreateRenderTarget(_deviceEx, (int)size.Width, (int)size.Height, Format.X8R8G8B8,
                                                   MultisampleType.None, 0, false);

        _deviceEx.SetRenderTarget(0, _renderTarget);

        Surface.FromSurface(_renderTarget, _sharedSurface, Filter.None, 0);

        _systemMemorySurface = Surface.CreateOffscreenPlain(_deviceEx, (int)size.Width, (int)size.Height,
                                                            Format.X8R8G8B8, Pool.SystemMemory);

        #endregion
    }
示例#19
0
    public DwmCapture(IntPtr hWnd)
    {
        _captureHwnd = hWnd;

        #region Initialise the Direct3D device

        int adapterOrdinal = 0;

        _d3dEx = new Direct3DEx();
        _adapterLuid = _d3dEx.GetAdapterLuid(adapterOrdinal);

        var presentParams = new PresentParameters
        {
            PresentFlags = PresentFlags.LockableBackBuffer,
            Windowed = true,
            BackBufferFormat = Format.A8R8G8B8,
            SwapEffect = SwapEffect.Flip
        };

        _deviceEx = new DeviceEx(_d3dEx, adapterOrdinal, DeviceType.Hardware, _captureHwnd, SlimDX.Direct3D9.CreateFlags.Multithreaded | SlimDX.Direct3D9.CreateFlags.SoftwareVertexProcessing, presentParams);

        #endregion

        #region Setup the shared surface (using DWM)

        uint format = 0;
        IntPtr pSharedHandle = IntPtr.Zero;
        int hr = NativeMethods.GetSharedSurface(_captureHwnd, _adapterLuid, 0, 0, ref format, out pSharedHandle, 0);
        NativeMethods.UpdateWindowShared(_captureHwnd, 0, 0, 0, IntPtr.Zero, IntPtr.Zero);

        RECT winRect;
        NativeMethods.GetWindowRect(_captureHwnd, out winRect);

        Size size = new Size(winRect.Right - winRect.Left, winRect.Bottom - winRect.Top);

        /* Hack because SlimDX does not let you specify a shared handle for creating shared resources we
         * have to create an IDirect3DDevice9 reference to the device instead */
        IDirect3DDevice9 devEx = (IDirect3DDevice9)Marshal.GetObjectForIUnknown(_deviceEx.ComPointer);
        IntPtr pTexture;
        devEx.CreateTexture((int)size.Width, (int)size.Height, 1, 1, format, 0, out pTexture, ref pSharedHandle);
        Texture texture = Texture.FromPointer(pTexture);

        _sharedSurface = texture.GetSurfaceLevel(0);

        _renderTarget = Surface.CreateRenderTarget(_deviceEx, (int)size.Width, (int)size.Height, Format.X8R8G8B8,
                                                    MultisampleType.None, 0, false);

        _deviceEx.SetRenderTarget(0, _renderTarget);

        Surface.FromSurface(_renderTarget, _sharedSurface, Filter.None, 0);

        _systemMemorySurface = Surface.CreateOffscreenPlain(_deviceEx, (int)size.Width, (int)size.Height,
                                                             Format.X8R8G8B8, Pool.SystemMemory);

        #endregion
    }
示例#20
0
        // - private methods -------------------------------------------------------------

        private void StartD3D()
        {
            if (ActiveClients != 0)
            {
                return;
            }

            D3DContext = new Direct3DEx();
            D3DDevice  = new DeviceEx(D3DContext, 0, DeviceType.Hardware, IntPtr.Zero, CreateFlags.HardwareVertexProcessing | CreateFlags.Multithreaded | CreateFlags.FpuPreserve, GetPresentParameters());
        }
示例#21
0
        internal static void EnsureD3D9()
        {
            if (Direct3D9Object == null)
#if TEST_Direct3D9Ex
            { Direct3D9Object = new Direct3DEx();                               // yyagi
            }
#else
            { Direct3D9Object = new Direct3D(); }
#endif
        }
示例#22
0
        // - private methods -------------------------------------------------------------

        private void StartD3D()
        {
            if (Dx11ImageSource.ActiveClients != 0)
            {
                return;
            }

            var presentParams = GetPresentParameters();
            var createFlags   = CreateFlags.HardwareVertexProcessing | CreateFlags.Multithreaded | CreateFlags.FpuPreserve;

            Dx11ImageSource.D3DContext = new Direct3DEx();
            Dx11ImageSource.D3DDevice  = new DeviceEx(D3DContext, 0, DeviceType.Hardware, IntPtr.Zero, createFlags, presentParams);
        }
示例#23
0
 void InitializeDirect3D()
 {
     try
     {
         direct3DEx  = new Direct3DEx();
         useDeviceEx = true;
     }
     catch
     {
         direct3D    = new Direct3D();
         useDeviceEx = false;
     }
 }
示例#24
0
        private static void StartD3D()
        {
            _d3DContext = new Direct3DEx();

            var presentparams = new PresentParameters
            {
                Windowed             = true,
                SwapEffect           = SwapEffect.Discard,
                DeviceWindowHandle   = GetDesktopWindow(),
                PresentationInterval = PresentInterval.Default
            };

            D3D10ImageSource._d3DDevice = new DeviceEx(_d3DContext, 0, DeviceType.Hardware, IntPtr.Zero, CreateFlags.HardwareVertexProcessing | CreateFlags.Multithreaded | CreateFlags.FpuPreserve, presentparams);
        }
示例#25
0
        private void ReleaseDirect3D()
        {
            if (_direct3D != null && !_direct3D.Disposed)
            {
                _direct3D.Dispose();
                _direct3D = null;
            }

            if (_direct3DEx != null && !_direct3DEx.Disposed)
            {
                _direct3DEx.Dispose();
                _direct3DEx = null;
            }
        }
示例#26
0
            public D3D9()
            {
                var presentparams = new PresentParameters
                {
                    Windowed             = true,
                    SwapEffect           = SwapEffect.Discard,
                    DeviceWindowHandle   = GetDesktopWindow(),
                    PresentationInterval = PresentInterval.Default
                };

                const CreateFlags deviceFlags = CreateFlags.HardwareVertexProcessing | CreateFlags.Multithreaded | CreateFlags.FpuPreserve;

                direct3d = new Direct3DEx();
                device   = new DeviceEx(direct3d, 0, DeviceType.Hardware, IntPtr.Zero, deviceFlags, presentparams);
            }
示例#27
0
        private static void StartD3D()
        {
            if (_activeClients != 0)
            {
                return;
            }

            var presentParams             = GetPresentParameters();
            const CreateFlags createFlags = CreateFlags.HardwareVertexProcessing | CreateFlags.Multithreaded |
                                            CreateFlags.FpuPreserve;

            _d3DContext = new Direct3DEx();
            _d3DDevice  =
                new DeviceEx(_d3DContext, 0, DeviceType.Hardware, IntPtr.Zero, createFlags, presentParams);
        }
示例#28
0
        void InitD3D9()
        {
            if (NumActiveImages == 0)
            {
                D3DContext = new Direct3DEx();

                PresentParameters presentparams = new PresentParameters();
                presentparams.Windowed             = true;
                presentparams.SwapEffect           = SwapEffect.Discard;
                presentparams.DeviceWindowHandle   = GetDesktopWindow();
                presentparams.PresentationInterval = PresentInterval.Immediate;

                D3DDevice = new DeviceEx(D3DContext, 0, DeviceType.Hardware, IntPtr.Zero, CreateFlags.HardwareVertexProcessing | CreateFlags.Multithreaded | CreateFlags.FpuPreserve, presentparams);
            }
        }
示例#29
0
        private void StartD3D()
        {
            context = new Direct3DEx();
            // Ref: https://docs.microsoft.com/en-us/dotnet/framework/wpf/advanced/wpf-and-direct3d9-interoperation
            var presentparams = new PresentParameters
            {
                Windowed   = true,
                SwapEffect = SwapEffect.Discard,
                //DeviceWindowHandle = GetDesktopWindow(),
                PresentationInterval = PresentInterval.Default,
                BackBufferHeight     = 1, BackBufferWidth = 1, BackBufferFormat = Format.Unknown
            };

            device = new DeviceEx(context, this.adapterIndex, DeviceType.Hardware, IntPtr.Zero, CreateFlags.HardwareVertexProcessing | CreateFlags.Multithreaded | CreateFlags.FpuPreserve, presentparams);
        }
示例#30
0
        public D3D9(DeviceEx device)
        {
            if (device != null)
            {
                throw new NotSupportedException();
            }
            else
            {
                context = new Direct3DEx();

                PresentParameters presentparams = new PresentParameters();
                presentparams.Windowed             = true;
                presentparams.SwapEffect           = SwapEffect.Discard;
                presentparams.DeviceWindowHandle   = GetDesktopWindow();
                presentparams.PresentationInterval = PresentInterval.Default;
                this.device = new DeviceEx(context, 0, DeviceType.Hardware, IntPtr.Zero, CreateFlags.HardwareVertexProcessing | CreateFlags.Multithreaded | CreateFlags.FpuPreserve, presentparams);
            }
        }
示例#31
0
        private void StartD3D()
        {
            if (DX10ImageSource.ActiveClients != 0)
            {
                return;
            }

            D3DContext = new Direct3DEx();

            PresentParameters presentparams = new PresentParameters();

            presentparams.Windowed             = true;
            presentparams.SwapEffect           = SwapEffect.Discard;
            presentparams.DeviceWindowHandle   = GetDesktopWindow();
            presentparams.PresentationInterval = PresentInterval.Default;

            DX10ImageSource.D3DDevice = new DeviceEx(D3DContext, 0, DeviceType.Hardware, IntPtr.Zero, CreateFlags.HardwareVertexProcessing | CreateFlags.Multithreaded | CreateFlags.FpuPreserve, presentparams);
        }
示例#32
0
        /// <summary>
        ///     必要ありそうなら、DirectX9を初期化する。(WPF用)
        /// </summary>
        private void InitD3D9()
        {
            if (ActiveImageCount == 0)
            {
                D3DContext = new Direct3DEx();

                var presentParam = new PresentParameters();
                presentParam.Windowed             = true;
                presentParam.SwapEffect           = SwapEffect.Discard;
                presentParam.DeviceWindowHandle   = GetDesktopWindow();
                presentParam.PresentationInterval = PresentInterval.Immediate;

                D3DDevice = new DeviceEx(D3DContext, 0, DeviceType.Hardware, IntPtr.Zero,
                                         CreateFlags.HardwareVertexProcessing | CreateFlags.Multithreaded | CreateFlags.FpuPreserve,
                                         presentParam);
                D3DDevice.SetRenderState(RenderState.AlphaBlendEnable, false);
            }
        }
示例#33
0
        public Scene(Control _control, Device _device)
        {
            m_Control = _control;
            m_Device = _device;
            if (m_Device == null)
            {
                Direct3DEx _d3d = new Direct3DEx();
                DisplayMode _mode = _d3d.GetAdapterDisplayMode(0);
                PresentParameters _parameters = new PresentParameters();
                _parameters.BackBufferFormat = _mode.Format;
                _parameters.BackBufferCount = 1;
                _parameters.BackBufferWidth = m_Control.Width;
                _parameters.BackBufferHeight = m_Control.Height;
                _parameters.Multisample = MultisampleType.None;
                _parameters.SwapEffect = SwapEffect.Discard;
                _parameters.PresentationInterval = PresentInterval.Default;
                _parameters.Windowed = true;
                _parameters.DeviceWindowHandle = m_Control.Handle;
                _parameters.PresentFlags = PresentFlags.DeviceClip | PresentFlags.Video;
                m_Device = new DeviceEx(_d3d, 0, DeviceType.Hardware, m_Control.Handle, CreateFlags.Multithreaded | CreateFlags.HardwareVertexProcessing, _parameters);

                m_RenderTarget = m_Device.GetRenderTarget(0);
            }
        }
示例#34
0
 public static void Unload()
 {
   if (_d3d != null)
     _d3d.Dispose();
   _d3d = null;
 }
示例#35
0
 public static void Load()
 {
   if (_d3d == null)
     _d3d = new Direct3DEx();
 }
示例#36
0
        private void InitializeD3D()
        {
            // Create the D3D object.
            d3d = new Direct3DEx();

            PresentParameters pp = new PresentParameters();
            pp.BackBufferWidth = 512;
            pp.BackBufferHeight = 512;
            pp.BackBufferFormat = Format.Unknown;
            pp.BackBufferCount = 0;
            pp.Multisample = MultisampleType.None;
            pp.MultisampleQuality = 0;
            pp.SwapEffect = SwapEffect.Discard;
            pp.DeviceWindowHandle = panel1.Handle;
            pp.Windowed = true;
            pp.EnableAutoDepthStencil = false;
            pp.AutoDepthStencilFormat = Format.Unknown;
            pp.PresentationInterval = PresentInterval.Default;

            bDeviceFound = false;
            CUdevice[] cudaDevices = null;
            for (g_iAdapter = 0; g_iAdapter < d3d.AdapterCount; g_iAdapter++)
            {
                device = new DeviceEx(d3d, d3d.Adapters[g_iAdapter].Adapter, DeviceType.Hardware, panel1.Handle, CreateFlags.HardwareVertexProcessing | CreateFlags.Multithreaded, pp);
                try
                {
                    cudaDevices = CudaContext.GetDirectXDevices(device.ComPointer, CUd3dXDeviceList.All, CudaContext.DirectXVersion.D3D9);
                    bDeviceFound = cudaDevices.Length > 0;
                    Console.WriteLine("> Display Device #" + d3d.Adapters[g_iAdapter].Adapter
                        + ": \"" + d3d.Adapters[g_iAdapter].Details.Description + "\" supports Direct3D9 and CUDA.");
                    break;
                }
                catch (CudaException)
                {
                    //No Cuda device found for this Direct3D9 device
                    Console.WriteLine("> Display Device #" + d3d.Adapters[g_iAdapter].Adapter
                        + ": \"" + d3d.Adapters[g_iAdapter].Details.Description + "\" supports Direct3D9 but not CUDA.");
                }
            }

            // we check to make sure we have found a cuda-compatible D3D device to work on
            if (!bDeviceFound)
            {
                Console.WriteLine("No CUDA-compatible Direct3D9 device available");
                if (device != null)
                    device.Dispose();
                Close();
                return;
            }

            ctx = new CudaContext(cudaDevices[0], device.ComPointer, CUCtxFlags.BlockingSync, CudaContext.DirectXVersion.D3D9);

            // Set projection matrix
            SlimDX.Matrix matProj = SlimDX.Matrix.OrthoOffCenterLH(0, 1, 1, 0, 0, 1);
            device.SetTransform(TransformState.Projection, matProj);

            // Turn off D3D lighting, since we are providing our own vertex colors
            device.SetRenderState(RenderState.Lighting, false);

            //Load kernels
            CUmodule module = ctx.LoadModulePTX("kernel.ptx");

            addForces_k = new CudaKernel("addForces_k", module, ctx);
            advectVelocity_k = new CudaKernel("advectVelocity_k", module, ctx);
            diffuseProject_k = new CudaKernel("diffuseProject_k", module, ctx);
            updateVelocity_k = new CudaKernel("updateVelocity_k", module, ctx);
            advectParticles_k = new CudaKernel("advectParticles_k", module, ctx);
        }
示例#37
0
        public Renderer(Control _control, bool _fullscreen, String _renderMethod)
        {
            fullscreen = _fullscreen;
            m_Control = _control;
            renderMethod = _renderMethod;
            if (m_Device == null)
            {
                Direct3DEx _d3d = new Direct3DEx();
                PresentParameters _parameters = new PresentParameters();
                if (fullscreen)
                {
                    _parameters.BackBufferWidth = 1920;// m_Control.Width;
                    _parameters.BackBufferHeight = 1080;// m_Control.Height;
                }
                else
                {
                    _parameters.BackBufferWidth = 1280;// m_Control.Width;
                    _parameters.BackBufferHeight = 800;// m_Control.Height;
                }

                if (fullscreen)
                {
                    _parameters.BackBufferFormat = Format.X8R8G8B8;
                    _parameters.BackBufferCount = 1;
                    _parameters.Multisample = MultisampleType.None;
                    _parameters.SwapEffect = SwapEffect.Flip;
                    //_parameters.PresentationInterval = PresentInterval.Default;
                    _parameters.PresentationInterval = PresentInterval.Immediate;
                    _parameters.Windowed = false;
                    _parameters.DeviceWindowHandle = m_Control.Parent.Handle;
                    _parameters.SwapEffect = SwapEffect.Flip;
                    _parameters.FullScreenRefreshRateInHertz = 0;
                    _parameters.PresentFlags = PresentFlags.None | PresentFlags.DiscardDepthStencil;
                    _parameters.AutoDepthStencilFormat = Format.D24X8;
                    _parameters.EnableAutoDepthStencil = true;
                    m_Device = new Device(_d3d, 0, DeviceType.Hardware, m_Control.Parent.Handle, CreateFlags.Multithreaded | CreateFlags.HardwareVertexProcessing, _parameters);
                }
                else
                {

                    DisplayMode _mode = _d3d.GetAdapterDisplayMode(0);
                    _parameters.BackBufferFormat = _mode.Format;
                    _parameters.BackBufferCount = 1;
                    _parameters.Multisample = MultisampleType.None;
                    _parameters.SwapEffect = SwapEffect.Flip;
                    _parameters.PresentationInterval = PresentInterval.Default;
                    _parameters.Windowed = true;
                    _parameters.DeviceWindowHandle = m_Control.Handle;
                    _parameters.PresentationInterval = PresentInterval.Immediate;
                    _parameters.PresentFlags = PresentFlags.DeviceClip | PresentFlags.Video;
                    m_Device = new DeviceEx(_d3d, 0, DeviceType.Hardware, m_Control.Handle, CreateFlags.Multithreaded | CreateFlags.HardwareVertexProcessing, _parameters);
                }
            }

            m_RenderTarget = m_Device.GetRenderTarget(0);

            leftTex = new Texture(m_Device, 1280, 720, 1, Usage.RenderTarget, Format.A8R8G8B8, Pool.Default);
            //leftTex = Texture.FromFile(m_Device, ".\\Images\\checkerboard.jpg", D3DX.DefaultNonPowerOf2, D3DX.DefaultNonPowerOf2, 1, Usage.Dynamic, Format.A8R8G8B8, Pool.Default, Filter.None, Filter.None, 0);
            //leftTex = Texture.FromFile(m_Device, ".\\Images\\LeftEye.jpg", D3DX.DefaultNonPowerOf2, D3DX.DefaultNonPowerOf2, 1, Usage.RenderTarget, Format.Unknown, Pool.Default, Filter.None, Filter.None, 0);
            SurfaceDescription desc = leftTex.GetLevelDescription(0);
            //leftTex = Texture.FromFile(m_Device, ".\\Images\\CheckerboardLeft.jpg", Usage.RenderTarget, Pool.Default);

            rightTex = new Texture(m_Device, 1280, 720, 1, Usage.RenderTarget, Format.A8R8G8B8, Pool.Default);
            //rightTex = Texture.FromFile(m_Device, ".\\Images\\RightEye.jpg", D3DX.DefaultNonPowerOf2, D3DX.DefaultNonPowerOf2, 1, Usage.RenderTarget, Format.Unknown, Pool.Default, Filter.None, Filter.None, 0);
            //rightTex = Texture.FromFile(m_Device, ".\\Images\\CheckerboardRight.jpg", Usage.RenderTarget, Pool.Default);

            m_font = new SlimDX.Direct3D9.Font(m_Device, new System.Drawing.Font(FontFamily.GenericSansSerif, 24.0f));

            switch (renderMethod)
            {
                case "None" :
                    m_distortionEffect = Effect.FromFile(m_Device, "PlainPS.fx", ShaderFlags.None);
                    break;
                case "Oculus":
                    m_distortionEffect = Effect.FromFile(m_Device, "OculusRiftPS.fx", ShaderFlags.None);
                    break;
                case "3DTV":
                    m_distortionEffect = Effect.FromFile(m_Device, "PlainPS.fx", ShaderFlags.None);
                    break;
                default:
                    throw new Exception("No render method found.");
                    break;
            }

            //leftImage = Surface.CreateOffscreenPlain(m_Device, 640, 720, Format.A8R8G8B8, Pool.Default);
            //Surface.FromFile(leftImage, ".\\Images\\checkerboardRedGreen.jpg", Filter.None, 0);

            //rightImage = Surface.CreateOffscreenPlain(m_Device, 640, 720, Format.A8R8G8B8, Pool.Default);
            //Surface.FromFile(rightImage, ".\\Images\\checkerboardRedGreen.jpg", Filter.None, 0);
            //tex = new Texture(m_Device, 1280, 720, 1, Usage.Dynamic, Format.A8R8G8B8, Pool.Default);

            //tex = new Texture(m_Device, 1280, 720, 1, Usage.RenderTarget, Format.R8G8B8, Pool.Default);
        }
        private void StartD3D()
        {
            if (activeClients != 0)
                return;

            context = new Direct3DEx();

            var presentparams = new PresentParameters
            {
                Windowed = true,
                SwapEffect = SwapEffect.Discard,
                DeviceWindowHandle = GetDesktopWindow(),
                PresentationInterval = PresentInterval.Default,
            };

            device = new DeviceEx(context, this.adapterIndex, DeviceType.Hardware, IntPtr.Zero, CreateFlags.HardwareVertexProcessing | CreateFlags.Multithreaded | CreateFlags.FpuPreserve, presentparams);
        }
示例#39
0
        private void StartD3D()
        {
            if (DX11ImageSource.ActiveClients != 0)
                return;

            D3DContext = new Direct3DEx();

            PresentParameters presentparams = new PresentParameters();
            presentparams.Windowed = true;
            presentparams.SwapEffect = SwapEffect.Discard;
            presentparams.DeviceWindowHandle = GetDesktopWindow();
            presentparams.PresentationInterval = PresentInterval.Default;

            DX11ImageSource.D3DDevice = new DeviceEx(D3DContext, 0, DeviceType.Hardware, IntPtr.Zero, CreateFlags.HardwareVertexProcessing | CreateFlags.Multithreaded | CreateFlags.FpuPreserve, presentparams);
        }
示例#40
0
        /// <summary>
        /// Initializes Direct3D9 and creates a static D3D9 device for interop
        /// </summary>
        private static void CreateDevice()
        {
            m_direct3D = new Direct3DEx();

            /* Create the device present parameters */
            var param = new PresentParameters();
            param.Windowed = true;
            param.SwapEffect = SwapEffect.Discard;
            param.BackBufferFormat = Format.A8R8G8B8;
            param.PresentationInterval = PresentInterval.Immediate;

            /* Creates the Direct3D9Ex device.  This must be an "Ex" device
             * to allow resource sharing with D3D10 */
            m_device = new DeviceEx(m_direct3D,
                                    0,
                                    DeviceType.Hardware,
                                    GetDesktopWindow(),
                                    CreateFlags.HardwareVertexProcessing | CreateFlags.Multithreaded | CreateFlags.FpuPreserve,
                                    param);
        }
示例#41
0
        public Scene(Control _control, Device _device, int adapterId, bool fullScreen)
        {
            m_Control = _control;
            m_Device = _device;
            m_fullscreen = fullScreen;
            m_adapterId = adapterId;
            if (m_Device == null)
            {
                Direct3DEx _d3d = new Direct3DEx();
                PresentParameters _parameters = new PresentParameters();
                _parameters.BackBufferWidth = 1280;// m_Control.Width;
                _parameters.BackBufferHeight = 800;// m_Control.Height;
                _parameters.BackBufferWidth = 1920;// m_Control.Width;
                _parameters.BackBufferHeight = 1080;// m_Control.Height;
                if (m_fullscreen)
                {
                    _parameters.BackBufferFormat = Format.X8R8G8B8;
                    _parameters.BackBufferCount = 1;
                    _parameters.Multisample = MultisampleType.None;
                    _parameters.SwapEffect = SwapEffect.Flip;
                    _parameters.PresentationInterval = PresentInterval.Default;
                    _parameters.Windowed = false;
                    _parameters.DeviceWindowHandle = m_Control.Parent.Handle;
                    _parameters.SwapEffect = SwapEffect.Flip;
                    _parameters.PresentationInterval = PresentInterval.Immediate;
                    _parameters.FullScreenRefreshRateInHertz = 0;
                    _parameters.PresentFlags = PresentFlags.None | PresentFlags.DiscardDepthStencil;
                    _parameters.AutoDepthStencilFormat = Format.D24X8;
                    _parameters.EnableAutoDepthStencil = true;
                    m_Device = new Device(_d3d, m_adapterId, DeviceType.Hardware, m_Control.Parent.Handle, CreateFlags.Multithreaded | CreateFlags.HardwareVertexProcessing, _parameters);
                }
                else
                {
                    DisplayMode _mode = _d3d.GetAdapterDisplayMode(0);
                    _parameters.BackBufferFormat = _mode.Format;
                    _parameters.BackBufferCount = 1;
                    _parameters.Multisample = MultisampleType.None;
                    _parameters.SwapEffect = SwapEffect.Discard;
                    _parameters.PresentationInterval = PresentInterval.Default;
                    _parameters.Windowed = true;
                    _parameters.DeviceWindowHandle = m_Control.Handle;
                    _parameters.PresentFlags = PresentFlags.DeviceClip | PresentFlags.Video;
                    m_Device = new DeviceEx(_d3d, m_adapterId, DeviceType.Hardware, m_Control.Handle, CreateFlags.Multithreaded | CreateFlags.HardwareVertexProcessing, _parameters);
                }
            }
            m_RenderTarget = m_Device.GetRenderTarget(0);

            m_tex = new Texture(m_Device, 1280, 800, 1, Usage.RenderTarget, Format.X8R8G8B8, Pool.Default);

            m_font = new SlimDX.Direct3D9.Font(m_Device, new System.Drawing.Font(FontFamily.GenericSansSerif, 24.0f));

            m_distortionEffect = Effect.FromFile(m_Device, "OculusRift.fx", ShaderFlags.None);

            RegistryKey softwareKey = Registry.CurrentUser.OpenSubKey("Software", true);
            RegistryKey scottCutlerKey = softwareKey.CreateSubKey("Scott Cutler");
            RegistryKey ocucamKey = scottCutlerKey.CreateSubKey("Ocucam");
            //Begin fix code
            ocucamKey.SetValue("pupilOffset", m_pupilOffset);
            ocucamKey.SetValue("scale", m_scale);
            //End fix code
            m_pupilOffset = Convert.ToSingle((string)ocucamKey.GetValue("pupilOffset", m_pupilOffset));
            m_scale = Convert.ToSingle((string)ocucamKey.GetValue("scale", m_scale));
            ocucamKey.Close();
            scottCutlerKey.Close();
            softwareKey.Close();
        }
示例#42
0
        void ShutdownD3D9()
        {
            if (NumActiveImages == 0)
            {
                if (SharedTexture != null)
                {
                    SharedTexture.Dispose();
                    SharedTexture = null;
                }

                if (D3DDevice != null)
                {
                    D3DDevice.Dispose();
                    D3DDevice = null;
                }

                if (D3DContext != null)
                {
                    D3DContext.Dispose();
                    D3DContext = null;
                }
            }
        }
示例#43
0
        void InitD3D9()
        {
            if (NumActiveImages == 0)
            {
                D3DContext = new Direct3DEx();

                PresentParameters presentparams = new PresentParameters();
                presentparams.Windowed = true;
                presentparams.SwapEffect = SwapEffect.Discard;
                presentparams.DeviceWindowHandle = GetDesktopWindow();
                presentparams.PresentationInterval = PresentInterval.Immediate;

                D3DDevice = new DeviceEx(D3DContext, 0, DeviceType.Hardware, IntPtr.Zero, CreateFlags.HardwareVertexProcessing | CreateFlags.Multithreaded | CreateFlags.FpuPreserve, presentparams);
            }
        }
示例#44
0
文件: Device.cs 项目: HaKDMoDz/Irelia
        public Device(IntPtr handle, int width, int height)
        {
            if (handle == IntPtr.Zero)
                throw new ArgumentException("Value must be a valid window handle", "handle");

            if (GetSystemMetrics(SM_REMOTESESSION) != 0)
                throw new Exception("We can't run at all under terminal services");

            int renderingTier = (RenderCapability.Tier >> 16);
            if (renderingTier < 2)
                throw new Exception("Render capability check failed, low tier=" + renderingTier);

            // Create D3D
            try
            {
                this.direct3dEx = new Direct3DEx();
                UseDeviceEx = true;
            }
            catch
            {
                this.direct3d = new Direct3D();
                UseDeviceEx = false;
            }

            // Create device
            Result result;
            if (!Direct3D.CheckDeviceType(0, DeviceType.Hardware, this.adapterFormat, this.backbufferFormat, true, out result))
                throw new Exception("CheckDeviceType failed: " + result.ToString());

            if (!Direct3D.CheckDepthStencilMatch(0, DeviceType.Hardware, this.adapterFormat, this.backbufferFormat, this.depthStencilFormat, out result))
                throw new Exception("CheckDepthStencilMatch failed: " + result.ToString());

            Capabilities deviceCaps = Direct3D.GetDeviceCaps(0, DeviceType.Hardware);
            if ((deviceCaps.DeviceCaps & DeviceCaps.HWTransformAndLight) != 0)
                this.createFlags |= CreateFlags.HardwareVertexProcessing;
            else
                this.createFlags |= CreateFlags.SoftwareVertexProcessing;

            PresentParams = new PresentParameters()
            {
                BackBufferFormat = this.backbufferFormat,
                BackBufferCount = 1,
                BackBufferWidth = width,
                BackBufferHeight = height,
                Multisample = MultisampleType.None,
                SwapEffect = SwapEffect.Discard,
                EnableAutoDepthStencil = true,
                AutoDepthStencilFormat = this.depthStencilFormat,
                PresentFlags = PresentFlags.DiscardDepthStencil,
                PresentationInterval = PresentInterval.Immediate,
                Windowed = true,
                DeviceWindowHandle = handle,
            };

            if (UseDeviceEx)
            {
                this.deviceEx = new DeviceEx(this.direct3dEx,
                        0,
                        DeviceType.Hardware,
                        handle,
                        this.createFlags,
                        PresentParams);
            }
            else
            {
                this.device = new SlimDX.Direct3D9.Device(this.direct3d,
                    0,
                    DeviceType.Hardware,
                    handle,
                    this.createFlags,
                    PresentParams);
            }

            // Create vertex declarations
            TransformedColoredVertexDecl = new TransformedColoredVertexDecl(this);
            MeshVertexDecl = new MeshVertexDecl(this);
            TextureVertexDecl = new TexturedVertexDecl(this);
            ScreenVertexDecl = new ScreenVertexDecl(this);

            ScreenVertexBuffer = new VertexBuffer<ScreenVertex>(this);
            var vertices = new ScreenVertex[]
            {
                new ScreenVertex() { Position = new Vector3(-1.0f, -1.0f, 0.5f), UV = new Vector2(0.0f, 1.0f) },
                new ScreenVertex() { Position = new Vector3(-1.0f, 1.0f, 0.5f), UV = new Vector2(0.0f, 0.0f) },
                new ScreenVertex() { Position = new Vector3(1.0f, -1.0f, 0.5f), UV = new Vector2(1.0f, 1.0f) },
                new ScreenVertex() { Position = new Vector3(1.0f, 1.0f, 0.5f), UV = new Vector2(1.0f, 0.0f) },
            };
            ScreenVertexBuffer.Write(vertices);
        }
示例#45
0
        void InitD3D9()
        {
            if (NumActiveImages == 0)
            {
                D3DContext = new Direct3DEx();

                PresentParameters presentparams = new PresentParameters();
                presentparams.Windowed = settings.IsWindowed;
                presentparams.SwapEffect = SwapEffect.Discard;
                presentparams.DeviceWindowHandle = GetDesktopWindow();
                presentparams.PresentationInterval = PresentInterval.Immediate;

                if (!settings.IsWindowed)
                {
                    presentparams.FullScreenRefreshRateInHertz = 120;
                    presentparams.BackBufferHeight = settings.ScreenHeight;
                    presentparams.BackBufferWidth = settings.ScreenWidth;
                    presentparams.BackBufferFormat = TranslateFormat(settings.Format);
                    DisplayModeEx fullScreen = new DisplayModeEx()
                    {
                        Format = TranslateFormat(settings.Format),
                        Width = settings.ScreenWidth,
                        Height = settings.ScreenHeight,
                        RefreshRate = 120
                    };
                    D3DDevice = new DeviceEx(D3DContext,
                        0, DeviceType.Hardware, IntPtr.Zero,
                        CreateFlags.HardwareVertexProcessing | CreateFlags.Multithreaded | CreateFlags.FpuPreserve,
                        presentparams, fullScreen);
                }
                else
                    D3DDevice = new DeviceEx(D3DContext, 0, DeviceType.Hardware, IntPtr.Zero,
                        CreateFlags.HardwareVertexProcessing | CreateFlags.Multithreaded | CreateFlags.FpuPreserve,
                        presentparams);
            }
        }
示例#46
0
        private void InitDevice()
        {
            // Use D3DEx for Vista/Win7+
            _is3D9Ex = false;
            if (Environment.OSVersion.Platform == PlatformID.Win32NT && Environment.OSVersion.Version.Major >= 6)
            {
                _is3D9Ex = true;
            }

            DeviceType devType = DeviceType.Hardware;
            int adapterOrdinal = 0;

            Direct3D d3d = null;
            Direct3DEx d3dex = null;

            if (_is3D9Ex)
            {
                try
                {
                    // Create Ex, fallback if it fails
                    d3dex = new Direct3DEx();
                }
                catch
                {
                    d3d = new Direct3D();
                    _is3D9Ex = false;
                }
            }
            else
                d3d = new Direct3D();

            // Look for PerfHUD
            AdapterCollection adapters = (_is3D9Ex ? d3dex : d3d).Adapters;
            foreach (AdapterInformation adap in adapters)
            {
                if (adap.Details.Description.Contains("PerfH"))
                {
                    adapterOrdinal = adap.Adapter;
                    devType = DeviceType.Reference;
                }
            }

            foreach (var item in adapters[adapterOrdinal].GetDisplayModes(Format.X8R8G8B8))
            {
                string val = item.Width + "x" + item.Height;
                bool found = false;
                for (int i = 0; i < ValidResolutions.Count; i++)
                {
                    if (ValidResolutions[i].Equals(val))
                    {
                        found = true;
                        break;
                    }
                }
                if(!found)
                    ValidResolutions.Add(val);
            }

            // Get resolution
            Size res = GetResolution();
            RenderSize = res;
            form.ClientSize = res;

            // Set present parameters
            _pp = new PresentParameters();
            _pp.Windowed = r_fs.Integer==0?true:false;
            _pp.SwapEffect = SwapEffect.Discard;
            _pp.EnableAutoDepthStencil = true;
            _pp.AutoDepthStencilFormat = Format.D24S8;
            _pp.PresentationInterval = (r_vsync.Integer==1? PresentInterval.One: PresentInterval.Immediate);
            _pp.Multisample = MultiSampling;
            _pp.BackBufferWidth = RenderSize.Width;
            _pp.BackBufferHeight = RenderSize.Height;
            _pp.BackBufferFormat = Format.X8R8G8B8;
            _pp.DeviceWindowHandle = form.Handle;

            // Handle Capabilities
            Capabilities caps =  adapters[adapterOrdinal].GetCaps(devType);
            CreateFlags createFlags = CreateFlags.SoftwareVertexProcessing;

            // Got hardare vertex?
            if ((caps.DeviceCaps & DeviceCaps.HWTransformAndLight) == DeviceCaps.HWTransformAndLight)
            {
                createFlags = CreateFlags.HardwareVertexProcessing;
                // Support pure device?
                if ((caps.DeviceCaps & DeviceCaps.PureDevice) == DeviceCaps.PureDevice)
                    createFlags |= CreateFlags.PureDevice;
            }

            createFlags |= CreateFlags.FpuPreserve;

            // Create d3d device + behemoth fallback
            try
            {
                if (_is3D9Ex)
                {
                    if (r_fs.Bool)
                    {
                        DisplayModeEx dsp = new DisplayModeEx();
                        dsp.Width = _pp.BackBufferWidth;
                        dsp.Height = _pp.BackBufferHeight;
                        dsp.Format = _pp.BackBufferFormat;
                        dsp.RefreshRate = 60;
                        _pp.FullScreenRefreshRateInHertz = 60;
                        //DisplayModeEx dispMode = d3dex.GetAdapterDisplayModeEx(adapterOrdinal);
                        //RenderSize = new Size(dispMode.Width, dispMode.Height);
                        //form.ClientSize = new Size(dispMode.Width, dispMode.Height);
                        //_pp.BackBufferFormat = dispMode.Format;
                        //_pp.BackBufferWidth = dispMode.Width;
                        //_pp.BackBufferHeight = dispMode.Height;
                        //_pp.FullScreenRefreshRateInHertz = dispMode.RefreshRate;
                        device = new DeviceEx(d3dex, adapterOrdinal, devType, form.Handle, createFlags, _pp, dsp);
                    }
                    else
                        device = new DeviceEx(d3dex, adapterOrdinal, devType, form.Handle, createFlags, _pp);
                }
                else
                    device = new Device(d3d, adapterOrdinal, devType, form.Handle, createFlags, _pp);

            }
            catch (Direct3D9Exception ex)
            {
                if (ex.ResultCode == ResultCode.NotAvailable)
                {
                    // Try again with different settings
                    RenderSize = new Size(800, 600);
                    form.ClientSize = new Size(800, 600);
                    _pp.BackBufferWidth = 800;
                    _pp.BackBufferHeight = 600;
                    _pp.BackBufferCount = 1;
                    _pp.SwapEffect = SwapEffect.Discard;
                    createFlags &= ~(CreateFlags.PureDevice | CreateFlags.HardwareVertexProcessing);
                    createFlags |= CreateFlags.SoftwareVertexProcessing;
                    try
                    {
                        if (_is3D9Ex)
                        {
                            if (r_fs.Bool)
                            {
                                DisplayModeEx dispMode = d3dex.GetAdapterDisplayModeEx(adapterOrdinal);
                                RenderSize = new Size(dispMode.Width, dispMode.Height);
                                form.ClientSize = new Size(dispMode.Width, dispMode.Height);
                                _pp.BackBufferFormat = dispMode.Format;
                                _pp.BackBufferWidth = dispMode.Width;
                                _pp.BackBufferHeight = dispMode.Height;
                                _pp.FullScreenRefreshRateInHertz = dispMode.RefreshRate;
                                device = new DeviceEx(d3dex, adapterOrdinal, devType, form.Handle, createFlags, _pp, dispMode);
                            }
                            else
                                device = new DeviceEx(d3dex, adapterOrdinal, devType, form.Handle, createFlags, _pp);
                        }
                        else
                            device = new Device(d3d, adapterOrdinal, devType, form.Handle, createFlags, _pp);
                    }
                    catch (Exception ex2)
                    {
                        if (_is3D9Ex)
                        {
                            // 3. fallback.. disable ex
                            _is3D9Ex = false;
                            Size ress = GetResolution();
                            RenderSize = ress;
                            form.ClientSize = ress;
                            _pp.BackBufferWidth = ress.Width;
                            _pp.BackBufferHeight = ress.Height;
                            _pp.BackBufferCount = 1;
                            _pp.SwapEffect = SwapEffect.Discard;
                            d3dex.Dispose();
                            device = new Device(new Direct3D(), adapterOrdinal, devType, form.Handle, createFlags, _pp);
                        }
                        else
                            throw ex2;
                    }
                }
                else
                    throw ex;
            }

            // Load main shader
            if (System.IO.File.Exists(System.Windows.Forms.Application.StartupPath+"/client/render/simple.fx"))
            {
                string shaderOutput = null;
                SlimDX.Configuration.ThrowOnError = false;
                effect = Effect.FromFile(device, System.Windows.Forms.Application.StartupPath + "/client/render/simple.fx", null, null, null, ShaderFlags.None, null, out shaderOutput);

                if (shaderOutput != null && shaderOutput != "" && effect == null)
                {
                    // Shader problem :..(
                    System.Windows.Forms.MessageBox.Show(shaderOutput, "Shader Compilation error :(", System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Error);
                    Shutdown();
                    return;
                }
                SlimDX.Configuration.ThrowOnError = true;
            }
            else
            {
                System.Console.WriteLine("Could not find shader..");
            }

            // Add fonts
            if (Fonts.Count == 0)
            {
                System.Drawing.Text.PrivateFontCollection col = new System.Drawing.Text.PrivateFontCollection();
                col.AddFontFile(System.Windows.Forms.Application.StartupPath + @"\data\gui\Candara.ttf");

                // UI Title
                System.Drawing.Font localFont = new System.Drawing.Font(col.Families[0], 10.5f, System.Drawing.FontStyle.Regular);
                SlimDX.Direct3D9.Font font = new SlimDX.Direct3D9.Font(Renderer.Instance.device, localFont);
                Fonts.Add("title", font);

                // FPS, etc.
                font = new SlimDX.Direct3D9.Font(device, new System.Drawing.Font("Lucidia Console", 10f, System.Drawing.FontStyle.Regular));
                Fonts.Add("diag", font);

                // Labels and UI elements
                localFont = new System.Drawing.Font(col.Families[0], 10f, System.Drawing.FontStyle.Regular);
                font = new SlimDX.Direct3D9.Font(Renderer.Instance.device, localFont);
                Fonts.Add("label", font);

                localFont = new System.Drawing.Font(col.Families[0], 15f, System.Drawing.FontStyle.Regular);
                font = new SlimDX.Direct3D9.Font(Renderer.Instance.device, localFont);
                Fonts.Add("biglabel", font);

                localFont = new System.Drawing.Font(col.Families[0], 23f, System.Drawing.FontStyle.Regular);
                font = new SlimDX.Direct3D9.Font(Renderer.Instance.device, localFont);
                Fonts.Add("biggerlabel", font);

                // Textbox
                col = new System.Drawing.Text.PrivateFontCollection();
                col.AddFontFile(System.Windows.Forms.Application.StartupPath + @"\data\gui\dina10px.ttf");
                localFont = new System.Drawing.Font(col.Families[0], 12f, FontStyle.Regular);
                font = new SlimDX.Direct3D9.Font(Renderer.Instance.device, localFont);
                Fonts.Add("textbox", font);
            }

            // Init backbuffers, etc.
            OnResetDevice();

            bloom = new Bloom(this);
            tonemap = new ToneMap(this);

            // Init windowing system
            WindowManager.Instance.Init(device);
        }
示例#47
0
            public void Dispose()
            {
                Deallocate();
				FContext.Dispose();
				FContext = null;
            }
示例#48
0
 void InitializeDirect3D()
 {
     try
     {
         direct3DEx = new Direct3DEx();
         useDeviceEx = true;
     }
     catch
     {
         direct3D = new Direct3D();
         useDeviceEx = false;
     }
 }
示例#49
0
			public Instance()
			{
				this.FContext = new Direct3DEx();
				this.FHiddenControl = new Control();
			}
        /// <summary>
        /// Initializes the Direct3D objects and sets the Available flag
        /// </summary>
        private void InitializeDirect3D()
        {
            DirectXStatus = DirectXStatus.Unavailable_Unknown;

            ReleaseDevice();
            ReleaseDirect3D();

            // assume that we can't run at all under terminal services
            //if (GetSystemMetrics(SM_REMOTESESSION) != 0)
            //{
            //    DirectXStatus = DirectXStatus.Unavailable_RemoteSession;
            //    return;
            //}

            //int renderingTier = (RenderCapability.Tier >> 16);
            //if (renderingTier < 2)
            //{
                //DirectXStatus = DirectXStatus.Unavailable_LowTier;
                //return;
            //}

#if USE_XP_MODE
         _direct3D = new Direct3D();
         UseDeviceEx = false;
#else
            try
            {
                direct3DEx = new Direct3DEx();
                UseDeviceEx = true;
            }
            catch
            {
                try
                {
                    direct3D = new Direct3D();
                    UseDeviceEx = false;
                }
                catch (Direct3DX9NotFoundException)
                {
                    DirectXStatus = DirectXStatus.Unavailable_MissingDirectX;
                    return;
                }
                catch
                {
                    DirectXStatus = DirectXStatus.Unavailable_Unknown;
                    return;
                }
            }
#endif

            bool ok;
            Result result;

            ok = Direct3D.CheckDeviceType(0, DeviceType.Hardware, adapterFormat, backbufferFormat, true, out result);
            if (!ok)
            {
                //const int D3DERR_NOTAVAILABLE = -2005530518;
                //if (result.Code == D3DERR_NOTAVAILABLE)
                //{
                //   ReleaseDirect3D();
                //   Available = Status.Unavailable_NotReady;
                //   return;
                //}
                ReleaseDirect3D();
                return;
            }

            ok = Direct3D.CheckDepthStencilMatch(0, DeviceType.Hardware, adapterFormat, backbufferFormat, depthStencilFormat, out result);
            if (!ok)
            {
                ReleaseDirect3D();
                return;
            }

            Capabilities deviceCaps = Direct3D.GetDeviceCaps(0, DeviceType.Hardware);
            if ((deviceCaps.DeviceCaps & DeviceCaps.HWTransformAndLight) != 0)
                createFlags |= CreateFlags.HardwareVertexProcessing;
            else
                createFlags |= CreateFlags.SoftwareVertexProcessing;

            DirectXStatus = DirectXStatus.Available;

            return;
        }
示例#51
0
        private bool InitializeD3D()
        {
            HwndSource hwnd = new HwndSource(0, 0, 0, 0, 0, "null", IntPtr.Zero);
            // Create the D3D object.
            d3d = new Direct3DEx();

            PresentParameters pp = new PresentParameters();
            pp.BackBufferWidth = 512;
            pp.BackBufferHeight = 512;
            pp.BackBufferFormat = Format.Unknown;
            pp.BackBufferCount = 0;
            pp.Multisample = MultisampleType.None;
            pp.MultisampleQuality = 0;
            pp.SwapEffect = SwapEffect.Discard;
            pp.DeviceWindowHandle = (IntPtr)0;
            pp.Windowed = true;
            pp.EnableAutoDepthStencil = false;
            pp.AutoDepthStencilFormat = Format.Unknown;
            pp.PresentationInterval = PresentInterval.Default;

            bDeviceFound = false;
            CUdevice[] cudaDevices = null;
            for (g_iAdapter = 0; g_iAdapter < d3d.AdapterCount; g_iAdapter++)
            {
                device = new DeviceEx(d3d, d3d.Adapters[g_iAdapter].Adapter, DeviceType.Hardware, hwnd.Handle, CreateFlags.HardwareVertexProcessing | CreateFlags.Multithreaded, pp);
                try
                {
                    cudaDevices = CudaContext.GetDirectXDevices(device.ComPointer, CUd3dXDeviceList.All, CudaContext.DirectXVersion.D3D9);
                    bDeviceFound = cudaDevices.Length > 0;
                    infoLog.AppendText("> Display Device #" + d3d.Adapters[g_iAdapter].Adapter
                        + ": \"" + d3d.Adapters[g_iAdapter].Details.Description + "\" supports Direct3D9 and CUDA.\n");
                    break;
                }
                catch (CudaException)
                {
                    //No Cuda device found for this Direct3D9 device
                    infoLog.AppendText("> Display Device #" + d3d.Adapters[g_iAdapter].Adapter
                        + ": \"" + d3d.Adapters[g_iAdapter].Details.Description + "\" supports Direct3D9 but not CUDA.\n");
                }
            }

            // we check to make sure we have found a cuda-compatible D3D device to work on
            if (!bDeviceFound)
            {
                infoLog.AppendText("No CUDA-compatible Direct3D9 device available");
                if (device != null)
                    device.Dispose();
                return false;
            }

            ctx = new CudaContext(cudaDevices[0], device.ComPointer, CUCtxFlags.BlockingSync, CudaContext.DirectXVersion.D3D9);
            deviceName.Text = "Device name: " + ctx.GetDeviceName();

            // Set projection matrix
            SlimDX.Matrix matProj = SlimDX.Matrix.OrthoOffCenterLH(0, 1, 1, 0, 0, 1);
            device.SetTransform(TransformState.Projection, matProj);

            // Turn off D3D lighting, since we are providing our own vertex colors
            device.SetRenderState(RenderState.Lighting, false);

            //Load kernels
            CUmodule module = ctx.LoadModulePTX("kernel.ptx");

            addForces_k = new CudaKernel("addForces_k", module, ctx);
            advectVelocity_k = new CudaKernel("advectVelocity_k", module, ctx);
            diffuseProject_k = new CudaKernel("diffuseProject_k", module, ctx);
            updateVelocity_k = new CudaKernel("updateVelocity_k", module, ctx);
            advectParticles_k = new CudaKernel("advectParticles_k", module, ctx);

            d3dimage.Lock();
            Surface surf = device.GetBackBuffer(0, 0);
            d3dimage.SetBackBuffer(D3DResourceType.IDirect3DSurface9, surf.ComPointer);
            d3dimage.Unlock();
            surf.Dispose();

            //Setup the "real" frame rate counter.
            //The cuda counter only measures cuda runtime, not the overhead to actually
            //show the result via DirectX and WPF.
            realLastTick = Environment.TickCount;
            return true;
        }
        private void ReleaseDirect3D()
        {
            if (direct3D != null)
            {
                if (!direct3D.Disposed)
                {
                    direct3D.Dispose();
                    direct3D = null;
                }
            }

            if (direct3DEx != null)
            {
                if (!direct3DEx.Disposed)
                {
                    direct3DEx.Dispose();
                    direct3DEx = null;
                }
            }
        }
示例#53
0
		private void ReleaseDirect3D()
		{
			if(_direct3D != null && !_direct3D.Disposed)
			{
				_direct3D.Dispose();
				_direct3D = null;
			}

			if(_direct3DEx != null && !_direct3DEx.Disposed)
			{
				_direct3DEx.Dispose();
				_direct3DEx = null;
			}
		}
示例#54
0
		void Initialise()
		{
			if (this.FHandle == (IntPtr) 0)
				throw (new Exception("No shared texture handle set"));
			this.FContext = new Direct3DEx();

			this.FHiddenControl = new Control();
			this.FHiddenControl.Visible = false;
			this.FHiddenControl.Width = this.FWidth;
			this.FHiddenControl.Height = this.FHeight;
			
			var flags = CreateFlags.HardwareVertexProcessing | CreateFlags.Multithreaded | CreateFlags.PureDevice | CreateFlags.FpuPreserve;
			this.FDevice = new DeviceEx(FContext, 0, DeviceType.Hardware, this.FHiddenControl.Handle, flags, new PresentParameters()
			{
				BackBufferWidth = this.FWidth,
				BackBufferHeight = this.FHeight
			});

			this.FTextureShared = new Texture(this.FDevice, this.FWidth, this.FHeight, 1, FUsage, FFormat, Pool.Default, ref this.FHandle);
			this.FTextureCopied = new Texture(this.FDevice, this.FWidth, this.FHeight, 1, Usage.RenderTarget, FFormat, Pool.Default);

			var description = FTextureCopied.GetLevelDescription(0);
			this.FSurfaceOffscreen = Surface.CreateOffscreenPlainEx(FDevice, FWidth, FHeight, description.Format, Pool.SystemMemory, Usage.None);
			this.FInitialised = true;
		}