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);
            }
        }
Example #2
0
        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;
        }
Example #3
0
        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);
        }
Example #4
0
        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();
        }