private void InitDeviceAndSwapChain(SwapChainDescription currentDescription) { DeviceCreationFlags flags = DeviceCreationFlags.None; #if DEBUG // flags |= DeviceCreationFlags.Debug; #endif flags |= DeviceCreationFlags.SingleThreaded; DriverType type; #if SOFTWARE type = DriverType.Warp; #else type = DriverType.Hardware; #endif Device.CreateWithSwapChain(null, type, flags, currentDescription, out device, out swapChain); // Stops Alt + Enter from causing fullscreen skrewiness. using (Factory factory = swapChain.GetParent <Factory>()) { factory.SetWindowAssociation(renderFrame.Handle, WindowAssociationFlags.IgnoreAltEnter); } }
private void InitD3D() { { SwapChainDescription swap_chain_desc = new SwapChainDescription(); swap_chain_desc.BufferCount = 2; swap_chain_desc.OutputHandle = m_Window.Handle; swap_chain_desc.IsWindowed = true; swap_chain_desc.ModeDescription = new ModeDescription(m_Window.Width, m_Window.Height, new Rational(60, 1), Format.R8G8B8A8_UNorm); swap_chain_desc.SampleDescription = new SampleDescription(1, 0); swap_chain_desc.SwapEffect = SwapEffect.Discard; swap_chain_desc.Usage = Usage.RenderTargetOutput; if (D3DDevice.CreateWithSwapChain(null, DriverType.Hardware, 0, swap_chain_desc, out m_D3DDevice, out m_SwapChain).IsFailure) { throw new Exception("Bad stuff happened"); } m_D3DDevice.Factory.SetWindowAssociation(m_Window.Handle, WindowAssociationFlags.IgnoreAll); } using (Texture2D back_buffer = Texture2D.FromSwapChain <Texture2D>(m_SwapChain, 0)) { m_RenderTargetView = new RenderTargetView(m_D3DDevice, back_buffer); } { var tex_desc = new Texture2DDescription(); tex_desc.Width = m_Window.Width; tex_desc.Height = m_Window.Height; tex_desc.SampleDescription = new SampleDescription(1, 0); tex_desc.Format = Format.D32_Float; tex_desc.MipLevels = 1; tex_desc.ArraySize = 1; tex_desc.BindFlags = BindFlags.DepthStencil; tex_desc.CpuAccessFlags = CpuAccessFlags.None; tex_desc.Usage = ResourceUsage.Default; tex_desc.OptionFlags = ResourceOptionFlags.None; var depth_buffer = new Texture2D(m_D3DDevice, tex_desc); m_DepthStencilView = new DepthStencilView(m_D3DDevice, depth_buffer); } m_D3DDevice.OutputMerger.SetTargets(m_DepthStencilView, m_RenderTargetView); //m_D3DDevice.OutputMerger.SetTargets(m_RenderTargetView); { Viewport viewport = new Viewport(0, 0, m_Window.Width, m_Window.Height, 0, 1); m_D3DDevice.Rasterizer.SetViewports(viewport); } m_Effect = Effect.FromFile(m_D3DDevice, "effect.fx", "fx_4_0"); m_Tex = Texture2D.FromFile(m_D3DDevice, "IMG_4788.jpg"); GenerateGeometry(); m_Start = DateTime.Now; }
private void InitalizeGraphics() { if (Window.RenderCanvasHandle == IntPtr.Zero) { throw new InvalidOperationException("Window handle cannot be zero"); } SwapChainDescription swapChainDesc = new SwapChainDescription() { BufferCount = 1, Flags = SwapChainFlags.None, IsWindowed = true, OutputHandle = Window.RenderCanvasHandle, SwapEffect = SwapEffect.Discard, Usage = Usage.RenderTargetOutput, ModeDescription = new ModeDescription() { Format = SlimDX.DXGI.Format.R8G8B8A8_UNorm, //Format = SlimDX.DXGI.Format.B8G8R8A8_UNorm, Width = Window.ClientSize.Width, Height = Window.ClientSize.Height, RefreshRate = new Rational(60, 1), Scaling = DisplayModeScaling.Unspecified, ScanlineOrdering = DisplayModeScanlineOrdering.Unspecified }, SampleDescription = new SampleDescription(1, 0) }; var giFactory = new SlimDX.DXGI.Factory(); var adapter = giFactory.GetAdapter(0); Device device; SwapChain swapChain; Device.CreateWithSwapChain(adapter, DriverType.Hardware, DeviceCreationFlags.None, swapChainDesc, out device, out swapChain); _swapChain = swapChain; GraphicsDevice = device; // create a view of our render target, which is the backbuffer of the swap chain we just created using (var resource = SlimDX.Direct3D10.Resource.FromSwapChain <Texture2D>(swapChain, 0)) { _backBuffer = new RenderTargetView(device, resource); } // setting a viewport is required if you want to actually see anything var viewport = new Viewport(0, 0, Window.ClientSize.Width, Window.ClientSize.Height); device.OutputMerger.SetTargets(_backBuffer); device.Rasterizer.SetViewports(viewport); CreateDepthStencil(); LoadVisualizationEffect(); // Allocate a large buffer to write the PhysX visualization vertices into // There's more optimized ways of doing this, but for this sample a large buffer will do _userPrimitivesBuffer = new SlimDX.Direct3D10.Buffer(GraphicsDevice, VertexPositionColor.SizeInBytes * 50000, ResourceUsage.Dynamic, BindFlags.VertexBuffer, CpuAccessFlags.Write, ResourceOptionFlags.None); var elements = new[] { new InputElement("Position", 0, Format.R32G32B32A32_Float, 0, 0), new InputElement("Color", 0, Format.R32G32B32A32_Float, 16, 0) }; _inputLayout = new InputLayout(GraphicsDevice, _visualizationEffect.RenderScenePass0.Description.Signature, elements); }
static void Main() { var form = new RenderForm("SlimDX - MiniTri Direct3D 10 Sample"); var desc = new SwapChainDescription() { BufferCount = 1, ModeDescription = new ModeDescription(form.ClientSize.Width, form.ClientSize.Height, new Rational(60, 1), Format.R8G8B8A8_UNorm), IsWindowed = true, OutputHandle = form.Handle, SampleDescription = new SampleDescription(1, 0), SwapEffect = SwapEffect.Discard, Usage = Usage.RenderTargetOutput }; Device device; SwapChain swapChain; Device.CreateWithSwapChain(null, DriverType.Hardware, DeviceCreationFlags.Debug, desc, out device, out swapChain); //Stops Alt+enter from causing fullscreen skrewiness. Factory factory = swapChain.GetParent <Factory>(); factory.SetWindowAssociation(form.Handle, WindowAssociationFlags.IgnoreAll); Texture2D backBuffer = Texture2D.FromSwapChain <Texture2D>(swapChain, 0); var renderView = new RenderTargetView(device, backBuffer); var effect = Effect.FromFile(device, "MiniTri.fx", "fx_4_0"); var technique = effect.GetTechniqueByIndex(0); var pass = technique.GetPassByIndex(0); var layout = new InputLayout(device, pass.Description.Signature, new[] { new InputElement("POSITION", 0, Format.R32G32B32A32_Float, 0, 0), new InputElement("COLOR", 0, Format.R32G32B32A32_Float, 16, 0) }); var stream = new DataStream(3 * 32, true, true); stream.WriteRange(new[] { new Vector4(0.0f, 0.5f, 0.5f, 1.0f), new Vector4(1.0f, 0.0f, 0.0f, 1.0f), new Vector4(0.5f, -0.5f, 0.5f, 1.0f), new Vector4(0.0f, 1.0f, 0.0f, 1.0f), new Vector4(-0.5f, -0.5f, 0.5f, 1.0f), new Vector4(0.0f, 0.0f, 1.0f, 1.0f) }); stream.Position = 0; var vertices = new SlimDX.Direct3D10.Buffer(device, stream, new BufferDescription() { BindFlags = BindFlags.VertexBuffer, CpuAccessFlags = CpuAccessFlags.None, OptionFlags = ResourceOptionFlags.None, SizeInBytes = 3 * 32, Usage = ResourceUsage.Default }); stream.Dispose(); device.OutputMerger.SetTargets(renderView); device.Rasterizer.SetViewports(new Viewport(0, 0, form.ClientSize.Width, form.ClientSize.Height, 0.0f, 1.0f)); MessagePump.Run(form, () => { device.ClearRenderTargetView(renderView, Color.Black); device.InputAssembler.SetInputLayout(layout); device.InputAssembler.SetPrimitiveTopology(PrimitiveTopology.TriangleList); device.InputAssembler.SetVertexBuffers(0, new VertexBufferBinding(vertices, 32, 0)); for (int i = 0; i < technique.Description.PassCount; ++i) { pass.Apply(); device.Draw(3, 0); } swapChain.Present(0, PresentFlags.None); }); vertices.Dispose(); layout.Dispose(); effect.Dispose(); renderView.Dispose(); backBuffer.Dispose(); device.Dispose(); swapChain.Dispose(); //foreach (var item in ObjectTable.Objects) // item.Dispose(); }