Laden...

Performance mit Directdraw

Erstellt von boonkerz vor 20 Jahren Letzter Beitrag vor 20 Jahren 3.543 Views
B
boonkerz Themenstarter:in
122 Beiträge seit 2004
vor 20 Jahren
Performance mit Directdraw

Hallo

ich lasse einfach eine Hintergrundgrafik und ein Menü zeichnen.

Beides mache ich in der Haupschleife.

Das Hintergrundbild so:

back.DrawFast(0,0,hintergrund,DrawFastFlags.DoNotWait|DrawFastFlags.SourceColorKey );

Und das Menü wird erst aus einer XML Datei gelesen und dann auch so angezeigt.

System.Xml.XmlDocument doc = new System.Xml.XmlDocument();
					doc.Load(menuFile);
					System.Xml.XmlNode nd = doc.DocumentElement.FirstChild;

    
    					while(nd != null)
							 {
anzeige 
	nd = nd.NextSibling;
				  				}

So nun habe ich eine auslastung von 50% ist das schon so viel bei sowenig eigendlich doch nicht?

MFG

C
980 Beiträge seit 2003
vor 20 Jahren

Was für eine Hauptschlaufe? Ein Mainloop braucht man (mit .NET) normalerweise nur bei games ... ?

B
boonkerz Themenstarter:in
122 Beiträge seit 2004
vor 20 Jahren

Hallo

Na ja ich habe mir die Beispiel Code unter samples angeschaut und da war es so:

public FullScreenDialog()
        {
            //
            // Required for Windows Form Designer support.
            //
            InitializeComponent();
            
            // Create a new DrawDevice.
            InitDirectDraw();

           
            // Keep looping until told to quit.
            while (Created)
            {               
                DisplayFrame();     // Process and draw the next frame.
                Application.DoEvents(); // Make sure the app has time to process messages.
            }
        }

Und in der DisplayFrame mache ich halt diese Anzeige.

MFG

C
980 Beiträge seit 2003
vor 20 Jahren

Mit diesem Loop zeichnest du das ganze immer neu ... klar hast da eine hohe CPU auslastung 😉

Du musst (im Fullscreen Modus) das Fenster nur neu Zeichnen wenn sich etwas geändert hat, zumindest solang alles statisch bleibt (nicht zb. ein ständig animierter hintergrund) ...

C
980 Beiträge seit 2003
vor 20 Jahren

btw: auch mit statischem content würde ich trotzdem mit buffern arbeiten (muss ja nich gleich double buffering sein), ist nicht nur effizienter sondern auch viel flüssiger (kein "bildaufbau")

B
boonkerz Themenstarter:in
122 Beiträge seit 2004
vor 20 Jahren

Hallo

Kannst du mir ungefähr eine Richtung geben wie ich es realisieren kann?

MFG

C
980 Beiträge seit 2003
vor 20 Jahren

Naja, z.b. generell nur zeichnen wenn sich auch was geändert hat. Also zum ersten mal die While Schleife entfernen und einfach 1x rendern (DisplayFrame()) ... und dann halt bei den entsprechenden Ereignissen neu rendern ("interrupt") ... je nach art des interfaces (tastatur, maus..=) ist trotzdem ein main loop sinnvoll, der dann allerdings normalerweise nichts macht ausser es steht was an ("polling") ...