Settings used to initialize a Direct3D9 device.
예제 #1
0
        /// <summary>
        /// Initializes a new instance of the <see cref="DeviceContext9"/> class.
        /// </summary>
        /// <param name="handle">The window handle to associate with the device.</param>
        /// <param name="settings">The settings used to configure the device.</param>
        internal DeviceContext9(IntPtr handle, DeviceSettings9 settings)
        {
            if (handle == IntPtr.Zero)
                throw new ArgumentException("Value must be a valid window handle.", "handle");
            if (settings == null)
                throw new ArgumentNullException("settings");

            this.settings = settings;

            PresentParameters = new PresentParameters();
            PresentParameters.BackBufferFormat = Format.X8R8G8B8;
            PresentParameters.BackBufferCount = 1;
            PresentParameters.BackBufferWidth = settings.Width;
            PresentParameters.BackBufferHeight = settings.Height;
            PresentParameters.Multisample = MultisampleType.None;
            PresentParameters.SwapEffect = SwapEffect.Discard;
            PresentParameters.EnableAutoDepthStencil = true;
            PresentParameters.AutoDepthStencilFormat = Format.D24X8;
            PresentParameters.PresentFlags = PresentFlags.DiscardDepthStencil;
            PresentParameters.PresentationInterval = PresentInterval.Default;
            PresentParameters.Windowed = true;
            PresentParameters.DeviceWindowHandle = handle;

            direct3D = new Direct3D();
            int msaaQuality = 0;
            if (direct3D.CheckDeviceMultisampleType(settings.AdapterOrdinal, DeviceType.Hardware, Format.A8R8G8B8, true, MultisampleType.FourSamples, out msaaQuality))
            {
                this.MultisampleType = SlimDX.Direct3D9.MultisampleType.FourSamples;
                this.MultisampleQuality = msaaQuality - 1;
                PresentParameters.Multisample = MultisampleType.FourSamples;
                PresentParameters.MultisampleQuality = msaaQuality - 1;
            }

            Device = new Device(direct3D, settings.AdapterOrdinal, DeviceType.Hardware, handle, settings.CreationFlags, PresentParameters);
        }
예제 #2
0
        /// <summary>
        /// Initializes a <see cref="DeviceContext9">Direct3D9 device context</see> according to the specified settings.
        /// The base class retains ownership of the context and will dispose of it when appropriate.
        /// </summary>
        /// <param name="settings">The settings.</param>
        /// <returns>The initialized device context.</returns>
        protected void InitializeDevice(DeviceSettings9 settings)
        {
            var result = new DeviceContext9(_form.Handle, settings);

            userInterfaceRenderer = new UserInterfaceRenderer9(result.Device, settings.Width, settings.Height);
            apiContext            = result;
            Context = result;

            this.globalSettings.Device = Context.Device;
            this.globalSettings.Init();
        }
예제 #3
0
        public Cartographer()
        {
            InitializeComponent();

            BuildTree(null, -1);

            this.Disposed += new EventHandler(Cleanup);

            var settings = new Renderer.DeviceSettings9()
            {
                AdapterOrdinal = 0,
                CreationFlags = SlimDX.Direct3D9.CreateFlags.HardwareVertexProcessing,
                Width = 128,
                Height = 128
            };
            context = new Renderer.DeviceContext9(this.Handle, settings);
        }
예제 #4
0
        public Cartographer()
        {
            InitializeComponent();

            BuildTree(null, -1);

            this.Disposed += new EventHandler(Cleanup);

            var settings = new Renderer.DeviceSettings9()
            {
                AdapterOrdinal = 0,
                CreationFlags = SlimDX.Direct3D9.CreateFlags.HardwareVertexProcessing,
                Width = 128,
                Height = 128
            };
            context = new Renderer.DeviceContext9(this.Handle, settings);
        }
예제 #5
0
        /// <summary>
        /// Initializes a new instance of the <see cref="DeviceContext9"/> class.
        /// </summary>
        /// <param name="handle">The window handle to associate with the device.</param>
        /// <param name="settings">The settings used to configure the device.</param>
        internal DeviceContext9(IntPtr handle, DeviceSettings9 settings)
        {
            if (handle == IntPtr.Zero)
            {
                throw new ArgumentException("Value must be a valid window handle.", "handle");
            }
            if (settings == null)
            {
                throw new ArgumentNullException("settings");
            }

            this.settings = settings;

            PresentParameters = new PresentParameters();
            PresentParameters.BackBufferFormat       = Format.X8R8G8B8;
            PresentParameters.BackBufferCount        = 1;
            PresentParameters.BackBufferWidth        = settings.Width;
            PresentParameters.BackBufferHeight       = settings.Height;
            PresentParameters.Multisample            = MultisampleType.None;
            PresentParameters.SwapEffect             = SwapEffect.Discard;
            PresentParameters.EnableAutoDepthStencil = true;
            PresentParameters.AutoDepthStencilFormat = Format.D24X8;
            PresentParameters.PresentFlags           = PresentFlags.DiscardDepthStencil;
            PresentParameters.PresentationInterval   = PresentInterval.Default;
            PresentParameters.Windowed           = true;
            PresentParameters.DeviceWindowHandle = handle;

            direct3D = new Direct3D();
            int msaaQuality = 0;

            if (direct3D.CheckDeviceMultisampleType(settings.AdapterOrdinal, DeviceType.Hardware, Format.A8R8G8B8, true, MultisampleType.FourSamples, out msaaQuality))
            {
                this.MultisampleType                 = SlimDX.Direct3D9.MultisampleType.FourSamples;
                this.MultisampleQuality              = msaaQuality - 1;
                PresentParameters.Multisample        = MultisampleType.FourSamples;
                PresentParameters.MultisampleQuality = msaaQuality - 1;
            }

            Device = new Device(direct3D, settings.AdapterOrdinal, DeviceType.Hardware, handle, settings.CreationFlags, PresentParameters);
        }
예제 #6
0
        /// <summary>
        /// Runs the sample.
        /// </summary>
        public void Run()
        {
            _configuration = OnConfigure();
            _form          = CreateForm(_configuration);

            currentFormWindowState = _form.WindowState;

            bool isFormClosed   = false;
            bool formIsResizing = false;

            _form.MouseClick += HandleMouseClick;
            _form.KeyDown    += HandleKeyDown;
            _form.KeyUp      += HandleKeyUp;
            _form.MouseDown  += HandleMouseDown;
            _form.MouseUp    += HandleMouseUp;
            _form.MouseMove  += HandleMouseMove;
            _form.MouseWheel += HandleMouseMove;

            _form.Resize += (o, args) =>
            {
                if (_form.WindowState != currentFormWindowState)
                {
                    HandleResize(o, args);
                }

                currentFormWindowState = _form.WindowState;
            };

            _form.ResizeBegin += (o, args) => { formIsResizing = true; };
            _form.ResizeEnd   += (o, args) =>
            {
                formIsResizing = false;
                HandleResize(o, args);
            };

            _form.Closed += (o, args) => { isFormClosed = true; };

            userInterface = new UserInterface();
            var stats = new Element();

            stats.SetBinding("Label", framesPerSecond);
            userInterface.Container.Add(stats);

            arcBall.SetWindow(_form.ClientSize.Width, _form.ClientSize.Height);

            var settings = new DeviceSettings9
            {
                AdapterOrdinal = 0,
                CreationFlags  = CreateFlags.HardwareVertexProcessing,
                Width          = WindowWidth,
                Height         = WindowHeight
            };

            InitializeDevice(settings);

            OnInitialize();
            this.renderList.ForEach(x => x.Init());

            OnResourceLoad();

            clock.Start();
            MessagePump.Run(_form, () =>
            {
                if (isFormClosed)
                {
                    return;
                }

                Update();
                if (!formIsResizing)
                {
                    Render(false);
                }
            });

            OnResourceUnload();
        }
예제 #7
0
        /// <summary>
        /// Initializes a <see cref="DeviceContext9">Direct3D9 device context</see> according to the specified settings.
        /// The base class retains ownership of the context and will dispose of it when appropriate.
        /// </summary>
        /// <param name="settings">The settings.</param>
        /// <returns>The initialized device context.</returns>
        protected void InitializeDevice(DeviceSettings9 settings)
        {
            var result = new DeviceContext9(_form.Handle, settings);
            userInterfaceRenderer = new UserInterfaceRenderer9(result.Device, settings.Width, settings.Height);
            apiContext = result;
            Context = result;

            this.globalSettings.Device = Context.Device;
            this.globalSettings.Init();
        }
예제 #8
0
        /// <summary>
        /// Runs the sample.
        /// </summary>
        public void Run()
        {
            _configuration = OnConfigure();
            _form = CreateForm(_configuration);

            currentFormWindowState = _form.WindowState;

            bool isFormClosed = false;
            bool formIsResizing = false;

            _form.MouseClick += HandleMouseClick;
            _form.KeyDown += HandleKeyDown;
            _form.KeyUp += HandleKeyUp;
            _form.MouseDown += HandleMouseDown;
            _form.MouseUp += HandleMouseUp;
            _form.MouseMove += HandleMouseMove;
            _form.MouseWheel += HandleMouseMove;

            _form.Resize += (o, args) =>
            {
                if (_form.WindowState != currentFormWindowState)
                {
                    HandleResize(o, args);
                }

                currentFormWindowState = _form.WindowState;
            };

            _form.ResizeBegin += (o, args) => { formIsResizing = true; };
            _form.ResizeEnd += (o, args) =>
            {
                formIsResizing = false;
                HandleResize(o, args);
            };

            _form.Closed += (o, args) => { isFormClosed = true; };

            userInterface = new UserInterface();
            var stats = new Element();
            stats.SetBinding("Label", framesPerSecond);
            userInterface.Container.Add(stats);

            arcBall.SetWindow(_form.ClientSize.Width, _form.ClientSize.Height);

            var settings = new DeviceSettings9
            {
                AdapterOrdinal = 0,
                CreationFlags = CreateFlags.HardwareVertexProcessing,
                Width = WindowWidth,
                Height = WindowHeight
            };

            InitializeDevice(settings);

            OnInitialize();
            this.renderList.ForEach(x => x.Init());

            OnResourceLoad();

            clock.Start();
            MessagePump.Run(_form, () =>
            {
                if (isFormClosed)
                {
                    return;
                }

                Update();
                if (!formIsResizing)
                {
                    Render(false);
                }
            });

            OnResourceUnload();
        }