*Update 2013-09-29: At this point SlimDX is quite out of date and I would recommend starting with SharpDX.
Since I tried OpenTK, I decided to give SlimDX a try as well. So, here's a simple getting started app:
using System;
using System.Drawing;
using System.Windows.Forms;
using SlimDX;
using SlimDX.Direct3D9;
using SlimDX.Windows;
namespace SlimDXApp1
{
public partial class SlimDXApp1Form : RenderForm
{
struct Vertex
{
public Vector4 Position;
public int Color;
}
Device device;
VertexDeclaration vertexDeclaration;
public SlimDXApp1Form()
: base("SlimDXApp1")
{
this.ClientSize = new Size(800, 600);
this.device = new Device(new Direct3D(), 0, DeviceType.Hardware, this.Handle, CreateFlags.HardwareVertexProcessing, new PresentParameters()
{
BackBufferWidth = this.ClientSize.Width,
BackBufferHeight = this.ClientSize.Height
});
this.vertexDeclaration = new VertexDeclaration(this.device, new[] {
new VertexElement(0, 0, DeclarationType.Float4, DeclarationMethod.Default, DeclarationUsage.PositionTransformed, 0),
new VertexElement(0, 16, DeclarationType.Color, DeclarationMethod.Default, DeclarationUsage.Color, 0),
VertexElement.VertexDeclarationEnd
});
}
public void Run()
{
MessagePump.Run(this, () =>
{
this.device.Clear(ClearFlags.Target | ClearFlags.ZBuffer, Color.Black, 1.0f, 0);
this.device.BeginScene();
this.device.VertexDeclaration = this.vertexDeclaration;
this.device.DrawUserPrimitives<Vertex>(PrimitiveType.TriangleList, 1, new[] {
new Vertex() { Color = Color.Red.ToArgb(), Position = new Vector4(400.0f, 100.0f, 0.5f, 1.0f) },
new Vertex() { Color = Color.Blue.ToArgb(), Position = new Vector4(650.0f, 500.0f, 0.5f, 1.0f) },
new Vertex() { Color = Color.Green.ToArgb(), Position = new Vector4(150.0f, 500.0f, 0.5f, 1.0f) }
});
this.device.EndScene();
this.device.Present();
});
}
[STAThread]
static void Main()
{
SlimDXApp1Form form = new SlimDXApp1Form();
form.Run();
foreach(var item in ObjectTable.Objects)
item.Dispose();
}
}
}