Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
WPF vs. GDI+ vs. MDX usw...
Jack_AI
myCSharp.de - Member



Dabei seit:
Beiträge: 198
Herkunft: Erlangen

Themenstarter:

WPF vs. GDI+ vs. MDX usw...

beantworten | zitieren | melden

Hallo.

Nachdem ich mal 3D-Programmierung mit C# probieren wollte und auch bald auf die gravierenden Nachteile von GDI+ und MDX und OpenGL usw. gestoßen bin (siehe Thread "Einfacher Einstieg in 3D"), bin ich auch auf WPF gestoßen. Von WPF habe ich zuvor noch nie etwas gehört. Ich habe mal ein klein wenig angefangen Managed Direct X zu lernen, habe aber aufgehört, da es ja eine "Zeitbombe" sein soll. Das war schon ziemlich frustrierend. Jetzt habe ich mich in GDI+ eingelesen und muss jetzt wieder frustriert feststellen, dass es schon wieder etwas besseres geben soll (WPF).

Mir fehlen derzeit die Anhaltspunkte. Die Problematik verwirrt mich zunehmend. Einige Fragen, die sich mir stellen:

- WPF soll auf DirectX basieren. Wie funktioniert denn das, wenn die Weiterentwicklung von DirectX für C# eingestellt wurde?
- Kann man WPF für 3D-Darstellungen nutzen? Ist es dafür geeignet?
- Ist WPF, ohne den höheren Performance-Anspruch zu berücksichtigen, immer GDI+ vorzuziehen?
- Ist WPF für 2D-Spiele geeignet?
- Welche Erfahrungen habt ihr gemacht?
- Kann mir jemand gute Tutorial zu WPF empfehlen?

Danke im Voraus für die Aufklärung,
Jack
private Nachricht | Beiträge des Benutzers
Coder007
myCSharp.de - Member



Dabei seit:
Beiträge: 1249

beantworten | zitieren | melden

Ich würd jetzt einfach mal behaupten, du hast noch nicht sehr viel Programmiererfahrung und dir erstmal von 3D generell abraten. Sammle erstmal mehr Erfahrung. 3D ist an sich recht kompliziert, außerdem nehm ich einfach mal, dass dir der mathematische Hintergrund fehlt. Das kann nur frustrierend werden. Wenn du unbedingt schnell einsteigen willst, kann ich persönlich XNA weiterempfehlen. Damit ist mir der Einstieg am einfachsten gefallen. Aber ohne fundierte Kenntnisse wirst du mit keiner Technologie weit kommen.
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 52329
Herkunft: Berlin

beantworten | zitieren | melden

Zitat
WPF soll auf DirectX basieren. Wie funktioniert denn das, wenn die Weiterentwicklung von DirectX für C# eingestellt wurde?
WPF benutzt eben direkt DirectX und nicht Managed DirectX.
Zitat
Kann man WPF für 3D-Darstellungen nutzen? Ist es dafür geeignet?
Ja, aber vielleicht nicht so wie du denkst. :-) Siehe nächsten Punkt.
Zitat
Ist WPF, ohne den höheren Performance-Anspruch zu berücksichtigen, immer GDI+ vorzuziehen?
Ich würde WPF nicht mit GDI vergleichen, sondern eher mit WindowsForms. Also erstmal stellt WPF Controls zu Verfügung genauso wie Windows-Forms.
Zitat
Ist WPF für 2D-Spiele geeignet?
Wenn man mit Windows.Forms 2D Spiele machen kann, wir das auch mit WPF gehen.
Zitat
Kann mir jemand gute Tutorial zu WPF empfehlen?
[Artikel] Einführung in die WPF(Windows Presentation Foundation) - aktuell Teil 3: Beispielanwendung

herbivore
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 52329
Herkunft: Berlin

beantworten | zitieren | melden

Hallo Coder007,
Zitat
enn du unbedingt schnell einsteigen willst, kann ich persönlich XNA weiterempfehlen.
nur zur Sicherheit: bitte in diesem Thread hier nicht noch mal den Leichter Einstieg in die 3D-Programmierung unter C#? diskutieren, sondern bei Bedarf dort

herbivore
private Nachricht | Beiträge des Benutzers
feadur
myCSharp.de - Member



Dabei seit:
Beiträge: 726
Herkunft: Bonn

beantworten | zitieren | melden

Es kommt halt drauf an was du genau machen möchtest.
WPF ist vor allem ein Framework für die Entwicklung von Windows Anwendungen. Controls können beliebig zusammengestellt und mit Effekten versehen werden.
Wenn du aber z.b. ein 3d Spiel schreiben willst, würde ich dir ehr von WPF abraten. Dafür gibt es die genannten Engines/Bibliotheken, mit denen du sicherlich besser die gewünschte Performance dafür erreichen kannst.
private Nachricht | Beiträge des Benutzers
Jack_AI
myCSharp.de - Member



Dabei seit:
Beiträge: 198
Herkunft: Erlangen

Themenstarter:

beantworten | zitieren | melden

Danke schon mal für deine sehr hilfreiche Antwort, herbivore. Ich würde aber gerne noch auf ein paar Punkte eingehen. Vielleicht kann mir hier ja jemand anderes weiterhelfen.
Zitat
Zitat
Kann man WPF für 3D-Darstellungen nutzen? Ist es dafür geeignet?
Ja, aber vielleicht nicht so wie du denkst. :-) Siehe nächsten Punkt.
Mit 3D-Darstellungen meinte ich so etwas wie flüssige Darstellung von bewegten 3D-Modellen.
Zitat
Zitat
Ist WPF, ohne den höheren Performance-Anspruch zu berücksichtigen, immer GDI+ vorzuziehen?
Ich würde WPF nicht mit GDI vergleichen, sondern eher mit WindowsForms. Also erstmal stellt WPF Controls zu Verfügung genauso wie Windows-Forms.
Mein Fehler. Ich meinte natürlich Windows-Forms. Um also zur ursprünglichen Frage zurück zu kommen: Gibt es, außer Performance-Verlust, sonstige Nachteile gegenüber Windows-Forms?
Zitat
Zitat
Ist WPF für 2D-Spiele geeignet?
Wenn man mit Windows.Forms 2D Spiele machen kann, wir das auch mit WPF gehen.
...wobei ich hier im Forum gelesen habe, dass die Möglichkeiten für 2D-Spiele doch stark beschränkt sind. Also, dass zum Beispiel 2D-Jump-and-Runs in der Art von Super Mario kaum performant möglich sind.

Grüße,
Jack

edit:
@feadur: Ich verstehe. Das dürfte dann so ziemlich meine Frage zur 3D-Darstellung beantworten. Danke.
Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von Jack_AI am .
private Nachricht | Beiträge des Benutzers
ikaros
myCSharp.de - Member



Dabei seit:
Beiträge: 1787

beantworten | zitieren | melden

Zitat
ist WPF für 2D-Spiele geeignet?
Ja, genauso wie Flash oder der kleine (in Entwicklung befindliche) "Bruder" von WPF namens Silverlight.
Davon abgesehen ist die 2D-API unterhalb des XAML-krams auch leistungsfähiger als GDI-Plus(seltsames Thema irgendwie, da sowohl Erweiterung als auch Aufsatz auf GDI+ bestehender Funktionen, die bisher nur schwer unter .Net erreichbar waren).
So richtig toll unter (3.0/3.5 mit MediaAPI sind vor allem Boolsche Pfadoperationen und der Animationsteil).

2D-Spiele gingen auch schon so... Ein Teil der ehemaligigen DirectX-API ist übrigens schon abgewandert in Standard-SDKs(DirectDraw)...

3D geht mit OpenGL, DirectX(welche Version eigentlich)...
Zitat
...wobei ich hier im Forum gelesen habe, dass die Möglichkeiten für 2D-Spiele doch stark beschränkt sind. Also, dass zum Beispiel 2D-Jump-and-Runs in der Art von Super Mario kaum performant möglich sind.
Keine Ahnung was du gelesen hast oder unter performant verstehst.
Mit reinem SW-Rendering(GDI+ derzeit nur SW-Unterstützung) bekommst du fliessende Animationen hin). Bei Abladung von Rechenleistung auf Grafikkarten und Physikkarten ist dir mögliche Komplexität höher, oder nicht..., zumindest kippt eine "Highperformancelösung", die vielleicht nicht mal angemessen ist, eher den Rechner falls z.B:: unter Win irgendein Popupfenster sich meldet.

Mein Tipp:
Werd dir zuerst klar was du machen willst, Dann wie. - Die Darstellung betreffend.
private Nachricht | Beiträge des Benutzers
Jack_AI
myCSharp.de - Member



Dabei seit:
Beiträge: 198
Herkunft: Erlangen

Themenstarter:

beantworten | zitieren | melden

Danke für die Antworten bis hier her.

Vielleicht noch eine kurze Frage, bevor ich mich "ins Vergnügen stürzen": In wie fern lassen sich Windows-Forms und WPF kombinieren? Also, wenn ich bereits eine Anwendung mit Windows-Forms erstellt habe, kann ich dann nachträglich noch Elemente aus WPF einfügen?
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Jack_AI am .
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 52329
Herkunft: Berlin

beantworten | zitieren | melden

Hallo Jack_AI,

das wird wohl nicht gehen. System.Windows.Forms.Forms kann man nur System.Windows.Forms.Controls (=WinForm-Control-Klasse) hinzufügen, keine System.Windows.Controls.Controls (=WPF-Control-Klasse).

herbivore
private Nachricht | Beiträge des Benutzers
winSharp93
myCSharp.de - Experte

Avatar #avatar-2918.png


Dabei seit:
Beiträge: 6155
Herkunft: Stuttgart

beantworten | zitieren | melden

Hallo,

auch wenn die Frage etwas vom Thema abweicht:
Besitzen WPF-Controls eigentlich noch ein Handle, sodass man diverse WinApi Aufrufe (AnimateWindow, etc.) tätigen kann oder sind diese vollständig inkompatibel mit den "jetzigen" Controls?
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 52329
Herkunft: Berlin

beantworten | zitieren | melden

Hallo winSharp93,

ich gehe davon aus, dass die WPF-Controls nicht auf den alten Win32-Controls aufbauen, die ja wiederum auf GDI aufbauen wogegen WPF ja DirectX nutzt. Es wird also nicht möglich sein, die alten Win32 Funktionen für WPF zu benutzen.

herbivore
private Nachricht | Beiträge des Benutzers
ikaros
myCSharp.de - Member



Dabei seit:
Beiträge: 1787

beantworten | zitieren | melden

@winSharp93:
Interop wird unterstützt. Du kannst Winformcontrols in WPF einbinden und WPF in Winforms darstellen.
Antwort: definitiv ja, Handles gibt es(leider...).
Problematisch ist allerdings die Mixtur zwischen Rendern in WPF und GDI+. Zumindest hab ich das gelesen, probiert aber noch nicht.
private Nachricht | Beiträge des Benutzers
winSharp93
myCSharp.de - Experte

Avatar #avatar-2918.png


Dabei seit:
Beiträge: 6155
Herkunft: Stuttgart

beantworten | zitieren | melden

Zitat
Original von ikaros
Antwort: definitiv ja, Handles gibt es(leider...).
Danke für die Antwort.

Reagieren dann die WPF - Controls auch auf Windows - Messages, sodass man z. B. ein WM_MOUSEHOVER senden kann und der Button, etc. dann eine eventuelle Hover - Animation durchführt?
private Nachricht | Beiträge des Benutzers
ikaros
myCSharp.de - Member



Dabei seit:
Beiträge: 1787

beantworten | zitieren | melden

ja, ich muss aber erst nachkramen in meiner Linksammlung.
private Nachricht | Beiträge des Benutzers
feadur
myCSharp.de - Member



Dabei seit:
Beiträge: 726
Herkunft: Bonn

beantworten | zitieren | melden

WPF Controls haben keine Handles. Du kannst ihnen deshalb auch keinerlei Windows Messages schicken. Eine Ausnahme bildet hier nur die Klasse Window, deren Handle über einen WindowInteropHelper in Erfahrung gebracht werden kann. Ansonsten werden sämtliche Controls über das Rendering System von WPF verwaltet, was wiederrum auf DirectX aufsetzt.
Was ebenfalls wie gesagt möglich ist, ist das Einbinden von WPF Controls in Win32- oder WinForms Fenster. Das ändert aber nichts daran dass die Controls selbst nicht auf Fensternachrichten reagieren.
private Nachricht | Beiträge des Benutzers
ikaros
myCSharp.de - Member



Dabei seit:
Beiträge: 1787

beantworten | zitieren | melden

Zitat
WPF Controls haben keine Handles.
ROFL, Zauberei?
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 52329
Herkunft: Berlin

beantworten | zitieren | melden

Hallo ikaros,

ich gehe auch eher davon aus, dass WPF-Controls keine Handles haben. Verwechselst du vielleicht Win32-Controls (die natürlich Handles haben) mit WPF-Controls (die wohl eher keine brauchen)?

Aber vielleicht sollten wir nicht weiter spekulieren, sondern "Beweise" anführen. Dabei sollte es dir leichter fallen zu "beweisen", dass es Handles gibt, als es uns fallen würde zu "beweisen", dass es sie nicht gibt. Vor allem, da du so ohne Zweifel davon überzeugt bist.

herbivore
private Nachricht | Beiträge des Benutzers
feadur
myCSharp.de - Member



Dabei seit:
Beiträge: 726
Herkunft: Bonn

beantworten | zitieren | melden

hallo zusammen,

ich habe einen sehr netten Artikel aus dem dotNet-Magazin gefunden, nach dessen Lektüre sicherlich klar sein sollte, warum WPF Controls keine Handles mehr haben...

Gruß
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von feadur am .
private Nachricht | Beiträge des Benutzers
ikaros
myCSharp.de - Member



Dabei seit:
Beiträge: 1787

beantworten | zitieren | melden

hier ist der versprochene Link:

Migration und so

Die Samples sollten eigentlich alles abdecken was man so braucht.

Thema Handles:

Mach ich vielleicht später genauer.
Hier erstmal grob:
Controls benötigen Container, Pens, Brushes, Fonts usw. Diese Ressourcen werden über Handles verwaltet.

edit:
@feadur
ich wollte dich nicht ärgern, mir ist schon klar das du Windowhandles meinst
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 52329
Herkunft: Berlin

beantworten | zitieren | melden

Hallo ikaros,

Pens, Brushes & Co sind doch GDI- also Win32-Objekte. Diese haben Handles. Aber das sagt doch noch lange nicht, ob die Zeichenobjekte unter WPF auch Handles haben. Davon abgesehen geht es doch wirklich um die Frage, ob WPF-Controls Handles haben. Ich denke mal so viel ist klar, nämlich dass sie standardmäßig keine brauchen.

herbivore
private Nachricht | Beiträge des Benutzers
ikaros
myCSharp.de - Member



Dabei seit:
Beiträge: 1787

beantworten | zitieren | melden

Zitat
Original von herbivore
Hallo ikaros,

Pens, Brushes & Co sind doch GDI- also Win32-Objekte. Diese haben Handles. Aber das sagt doch noch lange nicht, ob die Zeichenobjekte unter WPF auch Handles haben.

Pens, Brushes & Co gibt es auch unter WPF. Unter .Net haben diese allerdings nicht mehr die Dispose-Methode um das Aufräumen interner Ressourcen zu handlen sondern einen noch ominösen Automatismus.
Es gibt da durchaus neues. Handles sind trotzdem da. Warum?
Weil jede Art von Ressourcenzugriff unter Windows mittels Handles realisiert wird. Der Mediacore kann zwar sparen(Ein Gradient geht als Beschreibung zur GPU falls sie das versteht) aber keine Wunder wirken(Handle auf Bitmap(Filehandle) eines TextureBrushes, oder AVI-Handle eines Media-Brushes). Erstrecht kann der Mediacore nicht einfach das OS ersetzen, er setzt drauf auf.
Zitat

Edit: Mediacore = Presentationcore(sorry)

Davon abgesehen geht es doch wirklich um die Frage, ob WPF-Controls Handles haben. Ich denke mal so viel ist klar, nämlich dass sie standardmäßig keine brauchen.

herbivore

WPFControls aggregieren Ressourcen, damit haben sie direkt oder indirekt die Handles am Hals.
Vielleicht ist es besser zu sagen(indirekter Fall): die Controls erfordern Handles. Die Verwaltung kann ja durchaus zentral woanders erfolgen.
private Nachricht | Beiträge des Benutzers