Schnelle Grafikausgabe



  • Hallo,
    ich arbeite gerade an einem CAD-Zeichenprogramm. Mit dem Programm ist es möglich Linien und Kreise zu zeichnen. Derzeit verwende ich für die Grafikausgabe GDI+. Wenn ich jedoch mit GDI+ mehr als ca. 50.000 Linien auf dem Bildschirm ausgebe, dann wird mein Programm recht langsam.

    Jetzt meine Frage: wie kann ich die Grafikausgabe beschleunigen ?

    Eine Möglichkeit wäre vermutlich, dass ich Managed DirectX verwende. Doch das möchte ich nach Möglichkeit vermeiden, da sonst der Benutzer meines Programmes wieder DirectX auf seinem PC installieren muss. Oder ist DirectX 9 bei XP schon vorinstalliert ?

    Was habe ich da sonst noch für Möglichkeiten ?

    Könnte man mit Assembler eine schnellere Grafikausgabe realisieren ? Also ich meine wenn z.B. Assemblercode für die Grafikausgabe in meinen C++/CLI-Code einbettet.

    Ich hoffe ihr könnt mir weiterhelfen.

    Vielen Dank,
    mfg arena_blau

    ---------------



  • arena_blau schrieb:

    Oder ist DirectX 9 bei XP schon vorinstalliert ?

    Ist es zwar nicht, das ist doch aber kein Problem. Das .Net Framework muss der User doch auch installieren, warum dann nicht auch DX? Das sollte man dem User schon zumuten können...



  • Das .Net-Framework ist soweit ich weiss mit Windows XP / Vista bereits mitinstalliert. Nur z.B. bei Win98 ist es nicht vorhanden und muss extra installiert werden.

    Mein Problem ist, dass das Programm das ich gerade entwickle vor allem für Handwerker gedacht ist. Und viele davon (speziell die älteren) haben Probleme wenn sie z.B. DirectX installieren müssen. Deshalb würde ich nach Möglichkeit gerne darauf verzichten.

    Könnte man mit Assembler eine schnellere Grafikausgabe erreichen ?

    Danke,
    mfg arena_blau

    ---------------------



  • arena_blau schrieb:

    Jetzt meine Frage: wie kann ich die Grafikausgabe beschleunigen ?

    Verwendest du Caching und Clipping?
    Hast du Antialias, Smothrendering & co deaktiviert?



  • Verwende native OpenGL oder native DirectX. Beides geht sehr schön mit C++/CLI.
    Hier Managed DirectX zu verwenden (was von MS höchstoffiziell "gedroppt" wurde, soll heissen: nichtmehr weiterentwickelt wird) hielte ich für einen Fehler. Wenn unbedingt "managed" dann eher XNA.

    p.S.: ja, GDI+ ist sehr langsam, weil alles mit der CPU gemacht wird.



  • ... Probleme wenn sie z.B. DirectX installieren müssen. Deshalb würde ich nach Möglichkeit gerne darauf verzichten.

    Dann nimm entweder OpenGL oder Direct3D 7 oder 8.
    Irgendeine ältere D3D Version kommt mit Windows XP auf jeden Fall schon mit wenn ich mich nicht irre. Und OpenGL sowieso.

    Mal ganz davon abgesehen dass DirectX installieren echt kein Problem sein kann. Das is eine mickrige .exe, und lässt sich IIRC auch mit in den Installer für das Programm packen. Oder wenn das Programm per "Verzeichnis kopieren" installiert wird auch on-demand ala "DirectX ist noch nicht installiert, wollen sie das jetzt tun" -> "Ja" -> ShellExecute(). (Indem man eine passende DirectX Version einfach mit ins Verzeichnis legt, und ein "Zwischenprogramm" zum Starten verwendet, welches erst prüft ob DX schon installiert ist, und danach erst das eigentliche Programm startet).

    p.S.: Doku für ältere DX Versionen müsstest du dann natürlich irgendwo herbekommen. Von MS ist diese AFAIK nichtmehr offiziell erhältlich. Aber ich behaupte mal dass es möglich sein sollte *irgendwie* an ein älteres DX SDK zu kommen - wo die Doku mit dabei ist.



  • arena_blau schrieb:

    Das .Net-Framework ist soweit ich weiss mit Windows XP / Vista bereits mitinstalliert. Nur z.B. bei Win98 ist es nicht vorhanden und muss extra installiert werden.

    Da irrst du dich teilweise. Mit Vista wird .Net 3.0 ausgeliefert, das stimmt natürlich. Aber in XP ist kein .Net vorhanden. Erst mit XP SP 2 wird das Framework als optionale Komponente angeboten wenn man die ISO des SPs verwendet, beim Webinstaller war für XP nie ein .Net Framework bei. Sprich bei XP als Zielsystem muss man auch prüfen ob .Net überhaupt installiert ist.

    Auch .Net auf Windows 98 installieren ist nicht so trivial wies klingt. Nämlich nur die allerersten Versionen des Frameworks unterstützen Win98. Die aktuellen unterstützen weder Win 98 noch Win2k.

    Da muss man gucken welche Plattformen man unterstützen möchte und auf welche Frameworkversion man sich einigen muss um auf allen Systemen lauffähig zu bleiben.



  • arena_blau schrieb:

    Könnte man mit Assembler eine schnellere Grafikausgabe erreichen ?

    nein.



  • Also am besten wäre es wohl, wenn ich das ganze mit OpenGL realisieren würde. Doch wie lerne ich das am besten ?

    Könnt ihr mir dazu ein Buch empfehlen ? (Die meisten Bücher werden sich vermutlich mit 3D-Grafik und nicht mit 2D-Grafik beschäftigen, oder ?)

    Danke,
    mfg arena_blau

    -------




Anmelden zum Antworten