Laden...

Direct2D - Tutorial und Performancevergleich Gdi <-> D2D

Erstellt von Blacal vor 13 Jahren Letzter Beitrag vor 13 Jahren 8.477 Views
B
Blacal Themenstarter:in
387 Beiträge seit 2005
vor 13 Jahren
Direct2D - Tutorial und Performancevergleich Gdi <-> D2D

Hi,

seit ein paar Tagen bin ich dabei, ein kurzes Direct2D/DirectWrite Tutorial zu schreiben. Quasi so nebenbei habe ich dabei die Performance zwischen Gdi und Direct2D verglichen. Das angehängte Bild zeigt einen Vergleich beim Zeichnen von Bildern.

Bei mir hier am Rechner (Windows 7, Phenom X4, 4GB Ram und Radeon HD 5750) ist der Unterschied teilweise extrem (vorallem bei den Bildern). Mich persönlich würde jetzt interessieren, wie sich das bei anderen Leuten verhält.

Das Testprogramm findet ihr hier: Link
Direkte Performancevergleiche habe ich da für Chapter 2 und Chapter 4 eingebaut. Die SlimDX Dll habe ich mit ins Archiv gepackt, könnte aber trotzdem sein, das zum ausführen die aktuelle SlimDX-Version installiert sein muss (zum Beispiel wenn die installierte DirectX-Version zu alt ist). Ein aktuelles Setzp für SlimDX findet man hier.

Natürlich bin ich hier auch für Vorschläge für das Tutorial offen, falls jemanden ein interessantes Thema einfällt. Aktuell enthalten sind:

  • Initialisierung
  • Zeichnen von einfachen Objekten
  • Zeichnen von Text
  • Laden und zeichnen von Bildern

Gruß

U
1.578 Beiträge seit 2009
vor 13 Jahren

FYI: SlimDX muss installiert werden, die dll alleine reicht nicht. (Deswegen habe ich es bei mir nicht getestet)

F
14 Beiträge seit 2010
vor 13 Jahren

Ich hab es getestet, da ich SlimDX installiert habe.

Chapter 2 ist der Performanceunterschied gering, wenn D2D mit Rundungen läuft. Mit Quadraten ist der Performancevorteil bei 1:1,5. Ist also nicht so extrem.

Chapter 4 ist da ne andere Nummer. D2D läuft Superflüssig beim Resizen. Allerdings gehts bei GDI voll in die Knie. Wenn ich zu schnell mach, muss ich bis zu 15 Sekunden warten, bis das Programm sich wieder gefangen hat. Da ist der Faktor auch kaum erfühlbar. Da ist D2D extrem performanter.

Mein System:
Windows 7 Professional 64-Bit
AMD Phenom II X4 940 4x3GHz
Corsair XMS2 4GB 1066MHz DDR2
MSI Geforce GTX260

U
208 Beiträge seit 2008
vor 13 Jahren

Habe im großen und ganzen das gleiche Ergebnis wie fullsizeDeveloper. Bei Chapter 4 ist GDI total zusammengebrochen.

System:
Windows 7 Professional 32-Bit
Intel Core 2 Duo E6600 2x2,4GHz
3 GB RAM
NVIDIA GeForce 9600 GT 512 MB

P.S.: Also, ich hab SlimDX soweit ich weiß nicht installiert (es sei denn es ist irgendwie mit Win7 dabei), das Programm funktionierte bei mir aber trotzdem. Nur so als Hinweis. 🙂

B
Blacal Themenstarter:in
387 Beiträge seit 2005
vor 13 Jahren

Hi,

ja, generell reicht die Dll von SlimDX, solange die aktuelle DirectX Redistributable installiert ist (aktuellste Verison ist Juni 2010). Eventuell reicht auch eine ältere Redist (glaub ab mitte letzten Jahres war Direct2D dabei, bin mir aber jetzt auch nicht sicher).

Im SlimDX Setup ist halt der benötigte Teil der DirectX Redist auch mit enthalten.

Danke schonmal für die Antworten.

Gruß

5.657 Beiträge seit 2006
vor 13 Jahren

Hallo Blacal,

also ich hab das mal ausprobiert und finde das sehr spannend! Ich selbst hab noch nie mit Direct2D gezeichnet, deshalb bin ich echt erstaunt über die Performance gegenüber GDI.

Bei deinem Testprogramm kann man ja jetzt schlecht Vergleichswerte nennen, deshalb sag ich einfach mal gefühlsmäßig, daß Direct2D im Chapter 2 etwa doppelt so schnell ist wie GDI, allerdings immer performanter je mehr Rechtecke gezeichnet werden.

Bei Chapter 4 ist das ganze sehr extrem, z.B. bei 5000 Rechtecken 27ms : 4317ms! Was ist dort eigentlich anders als in Chapter 2?

Ich hab das ganze unter Vista getestet, mit einer GeForce-Irgendwas Karte für'n Laptop 😃
Für aussagekräftigere Tests müßtest du evtl. mal eine selbstdurchlaufende Anwendung releasen, die dann ein vergleichbares Testergebnis ausspuckt.

Was mich jetzt noch interessieren würde: Was sind denn gute Anwendungsfälle für Direct2D? Du hast doch bestimmt irgendwas vor, wenn du solche Tests erstellst? 😃

Schöne Grüße,
Christian

Weeks of programming can save you hours of planning

1.373 Beiträge seit 2004
vor 13 Jahren

Hallo,

Ich habe die Anwendung auch getestet und kann das bereits beschriebene Verhalten D2D vs GDI bestätigen.

Allerdings fällt auf, dass die D2D Variante scheinbar die Objekte um einen halben Pixel verschoben zeichnet, wodurch sie leicht unscharf werden. Das solltest du ggf. noch "reparieren", vermutlich indem du den Koordinaten einen Offset von einem halben Pixel verpasst (zumindest ging das in D3D so, ich weiß nicht, ob es bei D2D andere/einfachere Möglichkeiten gibt).

Grüße,
Andre

B
Blacal Themenstarter:in
387 Beiträge seit 2005
vor 13 Jahren

Hi,

Anwendungsfällte sehen eigentlich genauso aus, wie bei System.Drawing auch. Unterm Strich ist Direct2D nichts anderes, daher vergleiche ich die beiden APIs auch etwas. Vorallem in den letzten Monaten hatte ich Probleme mit der Performance von GDI im Bezug auf Bitmaps, daher im Speziellen auch dieser Vergleich.

Warum ich mich mit Direct2D beschäftige hat aber ursprünglich einen anderen Grund, und zwar habe ich nach einer Bibliothek gesucht, mit der ich schnell und einfach Texturen aus Direct3D 11 manipulieren kann. Zwar gibts hier einen gewaltigen Stolperstein (Man muss hier aktuell noch einen Umweg über Direct3D 10.1 machen), funktioniert aber im Grunde sehr gut.

Aber mal ganz abgesehen von der Performance: Sehr begeistert bin ich im Moment von DirectWrite. Vor kurzem gabs ja das Thema Text als Blocksatz anzeigen. Mit System.Drawing tut man sich hier mit der recht primitiven Methode Graphics.DrawString sehr schwer. DirectWrite dagegen nimmt einem die Arbeit ab, in dem man ganze Textlayouts definieren kann. Mehr dazu schreibe ich gerade in einem Tutorial zusammen, aber hier schonmal ein kleiner Überblick: Tutorial: Getting Started with DirectWrite.

Die Aussagen von diesem kleinen Testprogramm reichen mir mal fürs erste, will jetzt hier keinen quasi Benchmark daraus machen.

Gruß