Autor Beitrag
GuaAck
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 376
Erhaltene Danke: 32

Windows 8.1
Delphi 10.4 Comm. Edition
BeitragVerfasst: So 03.02.19 01:14 
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:

ausblenden 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:
ausblenden 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
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: So 03.02.19 06:41 
- Nachträglich durch die Entwickler-Ecke gelöscht -
Sinspin
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1321
Erhaltene Danke: 117

Win 10
RIO, CE, Lazarus
BeitragVerfasst: 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?

_________________
Wir zerstören die Natur und Wälder der Erde. Wir töten wilde Tiere für Trophäen. Wir produzieren Lebewesen als Massenware um sie nach wenigen Monaten zu töten. Warum sollte unser aller Mutter, die Natur, nicht die gleichen Rechte haben?
GuaAck Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 376
Erhaltene Danke: 32

Windows 8.1
Delphi 10.4 Comm. Edition
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1321
Erhaltene Danke: 117

Win 10
RIO, CE, Lazarus
BeitragVerfasst: 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.

_________________
Wir zerstören die Natur und Wälder der Erde. Wir töten wilde Tiere für Trophäen. Wir produzieren Lebewesen als Massenware um sie nach wenigen Monaten zu töten. Warum sollte unser aller Mutter, die Natur, nicht die gleichen Rechte haben?
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mi 06.02.19 19:20 
- Nachträglich durch die Entwickler-Ecke gelöscht -