Понадобился 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();
}
privatevoid 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)