Autor Beitrag
GuaAck
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 307
Erhaltene Danke: 29

Windows 8.1
Delphi 7 Pers.
BeitragVerfasst: So 03.02.19 00: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 05:41 
- Nachträglich durch die Entwickler-Ecke gelöscht -
Sinspin
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1192
Erhaltene Danke: 100

Win7
DXE2 Prof, Lazarus
BeitragVerfasst: So 03.02.19 13: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?

_________________
Solange keine Zeile Code geschrieben ist, läuft ein Programm immer fehlerfrei.
Ich teste nicht, weil ich Angst habe Fehler zu finden.
GuaAck Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 307
Erhaltene Danke: 29

Windows 8.1
Delphi 7 Pers.
BeitragVerfasst: Mo 04.02.19 20: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: 1192
Erhaltene Danke: 100

Win7
DXE2 Prof, Lazarus
BeitragVerfasst: Di 05.02.19 08: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.

_________________
Solange keine Zeile Code geschrieben ist, läuft ein Programm immer fehlerfrei.
Ich teste nicht, weil ich Angst habe Fehler zu finden.
Frühlingsrolle
Ehemaliges Mitglied
Erhaltene Danke: 1



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