Moin!
Ich versuche mit SlimDX und DirectX11 in ein Panel/eine Form zu zeichnen. Dafür hab ich eine Device Klasse geschrieben die sowohl SwapChain als auch (DX11) Device erstellt und das RenderTarget der SwapChain speichert damit ich direkt alles habe was ich brauche.
In der Form selber habe ich im Constructor das Device erstellt und in der Form_Paint Methode versuche ich mit dem Device das Panel in ner bestimmten Farbe (zum Testen) zu clearen.
Das ganze funktioniert leider nicht, d.h. es gibt weder eine Fehlermeldung noch wird überhaupt irgendwas gezeichnet.
Der Code in meinem Device ist 1zu1 aus dem Tutorial der SlimDX Doku entnommen (
http://slimdx.org/tutorials/DeviceCreation.php)
Ich hab bereits Rückgabewerte untersucht aber überall habe ich nen S_OK, d.h. es scheint alles zu funktionieren und ich habe afaik auch nichts übersehen.
Hier der Code für mein Device, den Form Constructor und die Paint Methode:
|
C#-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
class Device
{
public Device(IntPtr windowHandle, int width, int height)
{
var description = new SwapChainDescription()
{
BufferCount = 1,
Usage = Usage.RenderTargetOutput,
OutputHandle = windowHandle,
IsWindowed = true,
ModeDescription = new ModeDescription(0, 0, new Rational(60, 1), Format.R8G8B8A8_UNorm),
SampleDescription = new SampleDescription(1, 0),
Flags = SwapChainFlags.AllowModeSwitch,
SwapEffect = SwapEffect.Discard
};
var res = SlimDX.Direct3D11.Device.CreateWithSwapChain(DriverType.Hardware, DeviceCreationFlags.None, description, out m_Device, out m_SwapChain);
var context = GetDeviceContext();
var viewport = new Viewport(0.0f, 0.0f, width, height);
context.Rasterizer.SetViewports(viewport);
var resource1 = SlimDX.Direct3D11.Resource.FromSwapChain<Texture2D>(m_SwapChain, 0);
m_RenderTarget = new RenderTargetView(m_Device, resource1);
context.OutputMerger.SetTargets(m_RenderTarget);
}
}
|
|
C#-Quelltext
|
1
2
3
4
5
|
public Form1()
{
InitializeComponent();
m_Device = new Device(this.Handle, this.Width, this.Height);
}
|
|
C#-Quelltext
|
1
2
3
4
5
6
7
8
9
|
private void Form1_Paint(object sender, PaintEventArgs e)
{
var context = m_Device.GetDeviceContext();
var renderTarget = m_Device.GetRenderTarget();
var swapChain = m_Device.GetSwapChain();
context.ClearRenderTargetView(renderTarget, new SlimDX.Color4(1.0f, 0.0f, 0.0f));
var res = swapChain.Present(0, PresentFlags.None);
}
|
Bin selber leider ziemlich ratlos, hab von der Materie ehrlich gesagt auch nicht soviel Ahnung.