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

11.03.2012, 14:41

[C#] SlimDX Device.Clear zeichnet nen Rechteck..

Moin!

Ich versuche gerade in C# mit dem DirectX Wrapper SlimDX (http://slimdx.org/) in ein ToolstripContainer bzw. genauer in das "innere" Element des Containers zu zeichnen. Das Resultat ist sehr dürftig, alles was ich mache ist bei OnPaint Device.Clear aufzurufen mit dem Ziel zum Testen den Container Rot zu färben (bzw. dessen Fläche). Stattdessen zeichnet mir SlimDX ein (nicht gefülltes) Rechteck..


(Link)


Der Code ist sehr minimal gehalten. Im Designer habe ich einfach ein ToolstripContainer hinzugefügt (das wars schon).

Initialisierung des Device:

C#-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
private void InitializeDirect3D()
        {
            var Window = m_MainContainer.ContentPanel;
            // Create a new PresentParameters object and fill in the necessary fields.
            PresentParameters presentParams = new PresentParameters();

            // Below are the required bare mininum, needed to initialize the D3D device.
            presentParams.BackBufferHeight = Window.ClientRectangle.Height;         // BackBufferHeight, set to  the Window's height.
            presentParams.BackBufferWidth = Window.ClientRectangle.Width;           // BackBufferWidth, set to  the Window's width.
            presentParams.DeviceWindowHandle = Window.Handle;                       // DeviceWindowHandle, set to  the Window's handle.

            // Create the device.
            m_Device = new Device(new Direct3D(), 0, DeviceType.Hardware, Window.Handle, CreateFlags.HardwareVertexProcessing, presentParams);
        }


OnPaint Methode des panels:

C#-Quelltext

1
2
3
4
5
private void m_MainContainer_ContentPanel_Paint(object sender, PaintEventArgs e)
        {
            m_Device.Clear(ClearFlags.Target, new SlimDX.Color4(255, 0, 0), 1.0f, 0);
            m_Device.Present();
        }


Ich bin etwas ratlos, hab schon mit den Parametern herumgespielt (ClearFlags, zbuffer depth und stencil) aber hat alles nicht geholfen.

Beiträge: 1 223

Wohnort: Deutschland Bayern

Beruf: Schüler

  • Private Nachricht senden

2

11.03.2012, 14:44

Du solltest es vielleicht mal mit einem anderem Control versuchen.
Am besten Panel oder PictureBox

idontknow

unregistriert

3

11.03.2012, 15:19

Hab versucht auch in andere Element bzw direkt in die Form zu rendern, hat aber auch nicht geklappt. (Selbe Resultat). Auf der SlimDX Seite habe ich nur ein Tutorial gefunden, das1) nur für DX11 ist und 2) benutzen die immer ihre eigene Renderform.. sollte aber auch so gehen.

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

4

11.03.2012, 18:52

Das rot durchgestrichene weiße Rechteck kommt auf jeden Fall nicht von SlimDX, sondern von .NET!
Also musst du dort den Fehler suchen.

idontknow

unregistriert

5

11.03.2012, 19:06

hmm. Ich kenn mich mit C#/.NET kaum aus.
Was kann den die Ursache für diese Rechteck sein? Ist das irgendwie ne Art Fehler-Output von .NET? kann mir das nur schwer vorstellen. Wenn ich aber in SlimDX die Farbe ändere hat das keine Auswirkungen..

Der Code ist nunmal auch total minimal. ich hab quasi ne neue WinForms Application erstellt und SlimDX eingebunden + ein Device erstellt und die OnPaint Methode des Fensters geändert, das wars.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

6

11.03.2012, 21:34

Das Bild erscheint normalerweise, wenn man ein falsches Bild zuweist, also z.B. wenn es disposed oder null ist.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

idontknow

unregistriert

7

12.03.2012, 00:45

... Ohh man super behinderter Fehler hab vergessen meine tolle Initialze-Methode aufzurufen.. warum passiert mir sowas :(. Wenigstens wieder was gelernt (was das komische Rechteck bedeutet ;) )

Werbeanzeige