Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

idontknow

unregistriert

1

01.04.2012, 21:01

[C#] SlimDX & DIrectX11 Device erstellen macht Probleme

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.

Sylence

Community-Fossil

Beiträge: 1 663

Beruf: Softwareentwickler

  • Private Nachricht senden

2

01.04.2012, 21:16

Schau mal nach ob die Debug-Runtime irgendwas ausspuckt:

In den Projekteinstellungen unter Debug den Haken bei "Enable unmanaged code debugging" setzen und im DirectX Control Panel deine exe in die Liste hinzufügen. Dann bekommst du in der Ausgabe die Debugmeldungen von DirectX angezeigt.

idontknow

unregistriert

3

01.04.2012, 21:43

Nichts.. :(

Werbeanzeige