Frage

Ich habe eine simple-GDI basierten Daten Plotter mit C ++ / CLI geschrieben, aber es ist nicht besonders schnell (einige grundlegende Profilierung gibt es das Rendering zu screenen, das ist das Problem).

Gibt es eine Möglichkeit der Hardware-Beschleunigung für einen Usercontrol zu ermöglichen, oder gibt es eine .net-Schnittstelle Direct3D? ... oder gibt es einige andere Optionen, die ich in Erwägung ziehen könnte.

Wir verwenden verwalteten Code so wirklich die Lösung CLI kompatibel sein muss, wenn überhaupt möglich.

[Bearbeiten] Falls es hilft, ich bin zerreißend Streifen (128 Datenpunkte) der Rechtecke, die jeweils 2x2 Pixel Graphics::FillRectangle sind - vielleicht gibt es einen besseren Weg, dies zu tun

War es hilfreich?

Lösung

Managed DirectX ist seit einiger Zeit veraltet. Sie wollen wirklich nicht, dass verwenden. Stattdessen sollten Sie verwenden SlimDX das ist eine Open-Source-Interop-Schicht für die DirectX SDK APIs in C ++ geschrieben / CLI. Es ist besser als Managed DirectX und wird von einer Experten-Community von Entwicklern unterstützt. (Ich werde mit ihnen die Directwrite-Unterstützung auf die Verbesserung der bald zu arbeiten.)

Andere Tipps

Aus meiner Erfahrung, werden Sie nicht gut genug Leistung erhalten aus GDI + verwenden. Selbst für einfache Zeichnung, werden Sie schnell erkennen, dass eine Menge Aufwand gibt.

Die Alternative wäre (wie Sie bereits erwähnt) sein Direct3D oder könnten Sie regelmäßig GDI betrachten mit Systemaufrufe. Das macht natürlich der Code plattformabhängig, aber es kann sehr schnell sein. Ich habe mit, dass gute Ergebnisse hat.

Es hängt alles davon ab, wie viel Komplexität Sie bereit sind, zu behandeln. GDI kann relativ einfach sein, wenn Sie die Grundlagen herauszufinden, Direct3D ein wenig komplexer ist. Obwohl Direct3D ist zukunftssicher.

Es ist wahr, dass GDI + nicht sehr gute Leistung-weise ist, aber ich mich ein GDI + Plotter in einem Werk-Projekt geschrieben habe, die bei ~ 30 Frames bei 1680x1050 Auflösung pr Sekunde mit tausend Punkten Graphen auszuspucken Lage ist (Scroll-Grafik).

Es dauerte eine Menge Tuning dies zu erreichen:

  • Konvertieren alles auf einen einzigen Pfad vor dem Zeichnen.
  • Wenn Back-Puffer verwenden, verwenden Sie einen mit Pixelformat Format32bppPArgb, dies beschleunigen kann 2-4x Blitten.
  • Wenn ein Pfades mit einem Lot Zeichnung von vertikalen Linien (Hochfrequenzsignal), so dass sie als horizontale Linien auf einem Rückpuffer zieht statt und dann zieht das Bild auf dem Bildschirm gedreht. Beachten Sie, dass das Zeichnen eines Bildes gedreht haben auch gewisse Kosten.

Ich kann nicht sehen, wie Ihr Szenario, obwohl eine ganze Menge Optimierung erfordert, 128 Punkte von Daten sind nichts. Setzt man diese Punkte in einem Graphic machen könnte obwohl ein Unterschied, denn das würde weniger Rangier Kopf bedeuten.

Welche Auflösung und Framerate reden wir hier überhaupt?

Microsoft hat nun auch Direct2D , die Hardware-beschleunigte 2D ist Zeichnung:

  

Direct2D ist eine Hardware-beschleunigte,   Immediate-Modus, 2-D-Grafik-API,   bietet eine hohe Leistung und   Hochwertiges Rendering für 2-D   Geometrie, Bitmaps und Text. Das   Direct2D API ist so konzipiert,   interoperabel und mit GDI, GDI + und   Direct3D.

Es erfordert Windows 7 / Server 2008 R2, aber Unterstützung für Vista / Server 2008 durch den Plattform-Update für Windows Vista

  • Windows Server 2008 SP2 mit Plattform-Update für Windows Server 2008
  • Lizenziert unter: CC-BY-SA mit Zuschreibung
    Nicht verbunden mit StackOverflow
    scroll top