private static void OnTick(object sender, TickEventArgs e) { WindowSurface.Fill(Color.CornflowerBlue); Rectangle.Fill(Color.Red); WindowSurface.Lock(); WindowSurface.Blit(Rectangle, RectangleLocation); WindowSurface.Unlock(); WindowSurface.Update(); }
// Methods #region Public Methods public void Initialize(WindowSurface window) { if (Initialized) { return; } Window = window; try { _presentParameters = new PresentParameters(); _presentParameters.Windowed = true; _presentParameters.SwapEffect = SwapEffect.Discard; _presentParameters.BackBufferCount = 1; _presentParameters.BackBufferWidth = window.Width; _presentParameters.BackBufferHeight = window.Height; _presentParameters.BackBufferFormat = Format.X8R8G8B8; _presentParameters.DeviceWindowHandle = window.Handle; _device = new Device(Manager.Adapters.Default.Adapter, DeviceType.Hardware, Window.Handle, CreateFlags.HardwareVertexProcessing, _presentParameters); //_device.RenderState.AlphaBlendEnable = true; //_device.RenderState.IndexedVertexBlendEnable = true; //_device.RenderState.AlphaSourceBlend = Blend.SourceAlpha; //_device.RenderState.SourceBlend = Blend.SourceAlpha; //_device.RenderState.AlphaFunction = Compare.Always; //_device.RenderState.DestinationBlend = Blend.SourceAlpha; //_device.RenderState.AlphaFunction = BlendFunction.Add; _device.RenderState.AlphaBlendEnable = true; _device.RenderState.AlphaTestEnable = true; _device.RenderState.SourceBlend = Blend.SourceAlpha; _device.RenderState.DestinationBlend = Blend.InvSourceAlpha; _device.RenderState.BlendOperation = BlendOperation.Add; _device.RenderState.AlphaSourceBlend = Blend.Zero; _device.RenderState.AlphaDestinationBlend = Blend.Zero; _device.RenderState.AlphaBlendOperation = BlendOperation.Add; _device.RenderState.AlphaFunction = Compare.Always; _device.RenderState.VertexBlend = VertexBlend.ZeroWeights; _device.SetRenderState(RenderStates.ZEnable, false); _device.SetRenderState(RenderStates.Lighting, false); _device.VertexFormat = CustomVertex.TransformedColored.Format; _device.DeviceLost += new EventHandler(OnDeviceLost); _device.DeviceReset += new EventHandler(OnResetDevice); Gemoetry = new GemoetryRenderer(this); Core.Components.Require <GameLoop>().Subscribe(this); Initialized = true; } catch (Direct3DXException ex) { MessageBox.Show(string.Format("{0}{1} (0x{2:X})", ERR_D3D_INITIALIZE, ex.ErrorString, ex.ErrorCode), "GraphicsDevice::Initialize", MessageBoxButtons.OK, MessageBoxIcon.Error); } catch (DirectXException ex) { MessageBox.Show(string.Format("{0}{1} (0x{2:X})", ERR_D3D_INITIALIZE, ex.ErrorString, ex.ErrorCode), "GraphicsDevice::Initialize", MessageBoxButtons.OK, MessageBoxIcon.Error); } catch (Exception ex) { MessageBox.Show(ERR_D3D_INITIALIZE + ex.Message, "GraphicsDevice::Initialize", MessageBoxButtons.OK, MessageBoxIcon.Error); } }