Entwickler-Ecke

Multimedia / Grafik - DirectX in mehreren Frames. Threads?


GuaAck - So 03.02.19 01:14
Titel: DirectX in mehreren Frames. Threads?
Hallo,

ich habe seit vielen Jahren ein Programm, um Messdaten in 3D darzustellen. Mit Maus und Wheel kann ich schieben, drehen zoomen, also bestens. Ich mache das mit DirectX, das in einem TFrame im MainForm läuft.

Nun habe ich spezielle Messdaten, für die ich gerne vier solcher Frames auf dem Bildschirm hätte. Mein Ansatz:


Delphi-Quelltext
1:
2:
3:
TPlott3D_multi = CLASS
  frame: array[0..3of TPlott3D;
END;


In meinem bisherigen Programm habe ich als Test alle "Plott3D" ersetzt durch:

Delphi-Quelltext
1:
2:
FOR i_frame:=0 TO 3 DO
  Plott3D_Multi.frame[i_frame]....


Erwartet hatte ich nun vier gleiche Bilder in den vier Frames im Mainform. Aber nur der letzte Frame zeigt das Bild.

Jetzt erscheint mir das sogar logisch: DirectX nutzt ja die Hardware der Grafikkarte und die nimmt das, was zuletzt kommt.

Mein ursprüngliches Programm kann ich ohne Probleme mehrfach starten, funktioniert. Windows sichert also wohl bei einem Prozesswechsel die Daten.

Nun meine zwei Fragen:
a) Liege ich mit meiner Einschätzug richtig? Oder müsste es mit mehreren Frames gehen und ich habe ein falsches Verständnis?

b) Würde es gehen, wenn ich DirectX in vier einzelnen Threads unterbringe? Aus dem Thread würde zwar auf die Frames im MainForm zugegriffen, was eigenlich nicht sein sollte, aber ich habe mit solchen Konstrukten bisher keine Problem gehabt.

Vielleicht gibt es ja auch noch ander Lösungsideen.

Viele Grüße
GuaAck


Delete - So 03.02.19 06:41

- Nachträglich durch die Entwickler-Ecke gelöscht -


Sinspin - So 03.02.19 14:02

Hallo,

ich habe bisher kaum mit DirectX gearbeitet. Dafür einiges mit OpenGL und einem 2D Renderer.
Das einzige Problem das mir aufgefallen ist, ist zwangsweise beim Anzeigen der Inhalte in Fenstern mit Synchronize zu arbeiten. Sonst bleibt immer mal was weg.
Allerdings rendere ich nicht in Frames sondern in TImages und deren TBitmap Eigenschaft.
Verwendest du Delphi oder Lazarus?


GuaAck - Mo 04.02.19 21:06

Hallo,

ich arbeite mit Delphi 7.0.

Warum Frames? Das weiß ich nicht mehr. Als ich vor vielen Jaheren mit DirectX anfing, da war das in einem Beispiel so gemacht, also habe ich es auch so gemacht und es funktionierte ja gut, also kein Anlass, was zu ändern. Ich pobiere aber mal, es in TImage zu machen.

Gruß GuaAck


Sinspin - Di 05.02.19 09:43

Wenn ich micht recht erinnere haben Frames eigene Handles, also HDC. Was man bei Panels nicht hat. Deswegen zeichnet man halt auf dem Mainform oder in Frames, soweit man die arbeit mit einem TBitmap vermeiden will. Ich finde Bitmaps aber praktischer da man die auch einfach alle zusammen in ein großes Image zeichnen oder zum Debuggen auf die Platte schreiben kann.

Wenn das Programm nicht zu groß ist, dann steig damit auf die Emba/Delphi Community Version um. Das bringt massen Vorteile. Als einziger Nachteil ist die Größe der Exe zu nennen.


Delete - Mi 06.02.19 19:20

- Nachträglich durch die Entwickler-Ecke gelöscht -