/// <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); }
/// <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(); }
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); }
/// <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); }
/// <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(); }