Life Engine

DirectX10_1 Sample 1

Автор:

Всем привет.

Понадобился DX10 но годных туториалов по нему в инете не нашёл (для SlimDX).

Методом научного тыка таки разобрался сам с DX10, собсно выкладываю сюда исходники в помощь начинающим прогерам. В дальнейшем буду выкладывать новый усложнённый код по мере моего самообучения : )

В данном примере:
1. Создаётся фабрика и девайс
2. создаётся SwapChain и бэкбуфер
3. Очищается бэкбуфер и выводится на экран
+ ещё мелочи

Для работы примера нужен установленный SlimDX 2010 (June)

using System;
using System.Windows.Forms;
using SlimDX;
using SlimDX.Direct3D10;
using SlimDX.DXGI;

namespace DX10_Test
{
    public partial class Form1 : Form
    {
        private SlimDX.Direct3D10_1.Device1 g_device;
        private Factory g_factory;
        private SwapChain g_primarySC;
        private SwapChainDescription g_scDesc;
        private RenderTargetView g_backBuffer;

        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            //creating DXGI factory
            g_factory = new Factory();

            //i dunno what's that, LOL
            g_factory.SetWindowAssociation(this.Handle, WindowAssociationFlags.None);

            //creating device
            g_device = new SlimDX.Direct3D10_1.Device1(g_factory.GetAdapter(0), DriverType.Hardware, DeviceCreationFlags.None, SlimDX.Direct3D10_1.FeatureLevel.Level_9_3);

            //filling mode description
            ModeDescription mode = new ModeDescription();
            mode.Format = Format.R8G8B8A8_UNorm;
            mode.Height = this.Height;
            mode.Width = this.Width;
            mode.ScanlineOrdering = DisplayModeScanlineOrdering.Unspecified;
            mode.Scaling = DisplayModeScaling.Unspecified;
            mode.RefreshRate = new Rational(60, 1);

            //filling sample descriptrion
            SampleDescription sample = new SampleDescription();
            sample.Count = 1;
            sample.Quality = 0;

            //filling swap chain description
            g_scDesc = new SwapChainDescription();
            g_scDesc.BufferCount = 1;
            g_scDesc.Flags = SwapChainFlags.None;
            g_scDesc.IsWindowed = true;
            g_scDesc.ModeDescription = mode;
            g_scDesc.OutputHandle = this.Handle;
            g_scDesc.SampleDescription = sample;
            g_scDesc.SwapEffect = SwapEffect.Discard;
            g_scDesc.Usage = Usage.RenderTargetOutput;

            //creating swap chain
            g_primarySC = new SwapChain(g_factory, g_device, g_scDesc);

            //creating render target holder (view)
            g_backBuffer = new RenderTargetView(g_device, SlimDX.Direct3D10.Resource.FromSwapChain<Texture2D>(g_primarySC, 0));

            //we should manually set up viewports
            g_device.Rasterizer.SetViewports(new Viewport(0, 0, this.Width, this.Height, 0, 1));

            this.Show();

            //main loop ^____^
            while (this.Created)
            {
                //clear render target
                g_device.ClearRenderTargetView(g_backBuffer, new Color4(0xffff00));

                //presenting out back buffer to the monitor
                g_primarySC.Present(0, PresentFlags.None);

                Application.DoEvents();
            }

            //disposing resources
            {
                g_backBuffer.Resource.Dispose(); // This is important thing!
                g_device.ClearState();
                g_backBuffer.Dispose();
                g_device.Dispose();
                g_primarySC.Dispose();
                g_factory.Dispose();
            }
        }
    }
}

Ну и собсно EXE (скомпилированный пример):  Скачать (10kb)

#C#, #DirectX, #DirectX 10, #SlimDX

11 октября 2010

Комментарии [4]