Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi DirectX / DelphiX / GDI (https://www.delphipraxis.net/32124-directx-delphix-gdi.html)

Gruber_Hans_12345 19. Okt 2004 08:49


DirectX / DelphiX / GDI
 
Hallo,

Da ich in einigen meiner Projekte TPaintBox verwenden (auf Panels platziert und dort DoubleBufferd := TRUE) diese teilweise schon recht Grafikintensive sind, spiele ich mit dem Gedanken, ob sich ein Umstieg auf DirectX auszahlt bzw. überhaupt möglich ist.

*) Wird bei DriectX noch Doublebufferd benötigt bzw. muß man das dann selbst machen (mit zuerst auf Bitmap zeichnen und so ...)
*) Kann DirectX einfach in einem Panel ablaufen, oder muß immer ein ganzes Fenster / Screen dafür verwendet werden ?
*) Zahlt es sich aus ? es werden hauptsächlich Balken mit Images, ein Haufen Lies und Rect, etwas Farbverlaäufe, teiilweise recht große images ... gezeichnet
*) Vermute mal, daß unter DirectX Clipping funktioniert (zwar anders als bei Windows API) Oder ?
*) Gibt es sonst eine andere Alternative ? (OpenGL kommt sicher nicht in Frage !)

Würde mich freuen, wenn ich ein paar (ausser "Suchfunktion benutzen") Antworten bekomme.

mimi 20. Okt 2004 09:18

Re: DirectX / DelphiX / GDI
 
also meines wissen kannst du DX in einem Panel ablaufen lassen.
Wenn du Große Bilder erstellst würde es sich anbieten DX zu nutzen, schau mal ob DelphiX was für dich ist, damit ist es einfach DX zu nutzen ist aber nur für 2D sachen geienigt(obwohl einige damit auch schon 3D engine geschrieben haben, sollen).

Gruber_Hans_12345 24. Okt 2004 13:08

Re: DirectX / DelphiX / GDI
 
Hab mich jetzt schon in einige Sachen eingelesen, und auf folgende Fragen gestoßen.

*) Ich verwende nur 2D, ist es überhaupt Möglich mit OpenGL 2D zu zeichnen (ohne sich dabei etwas zu brechen) Man hat doch immer eine verzerrung drinnen oder ?
*) DelphiX ist ja schon sehr alt, lohnt sich der Umstieg auf DelphiX überhaupt noch ?
*) Ab DirectX 8 gibt es ja anscheinend kein DirectDraw mehr ? Ist damit die 2D Schiene auch in DriectX gestorben, oder sind da die Funtkionen in direct3D geflossen ?
*) Da es eventuell interessant wird, das zu zeichnende auch zu Drucken, kann DriectX soetwas ? (Bei OpenGL gibt es ja keine Möglichkeit dafür)

Ultimator 24. Okt 2004 13:12

Re: DirectX / DelphiX / GDI
 
Darf man Fragen, wieso OpenGL für dich nicht in Frage kommt? :gruebel:
Du hast keine Probleme mit dem teilweise schon alten DelphiX und du kannst es auch unter Linux laufen lassen...

Gruber_Hans_12345 24. Okt 2004 14:11

Re: DirectX / DelphiX / GDI
 
Linux kommt nicht in Frage, da der nicht Grafische Teil und der Teil, der mit der Windows API arbeitet sehr sark überwiegt.

OpenGL aus folgendem Grund nicht
*) Drucken ist nicht Möglich (bei GDI kann ich ja einfach auf den Canvas des Drucker malen, bei directXweiß ich nicht, ob es da was
gibt, aber bei OpenGL definitiv (zumindest das was ich gelesen habe) nicht)

*) Da OpenGL ja rein 3D ist, befürchte ich, das wenn ich 2D zeichnen will das sehr umständlich ist, und ich immer verzerrungen bekomme, wenn ich die Kamera von vorne draufschauen lasse)


Ich bin mir ja von Grunde auf noch nicht sicher, ob sich der Umstieg generell lohnt. Bei meiner Anwendung handelt es sich um einen Kalender, der oben eine Zeitachse zeichnet, noch unten hin die verschiedenen Personen und dann die Termine zeichnet, diese können Text und Grafik usw. enthalten.
Mit GDI funkt das alles schon ganz gut, nur wenn man viele Termine hat, und zu scrollen anfängt, dann wirds nicht schön.
Wenn ich jetzt die Daten mal verdopple oder noch mehr reingeben, dann glaube ich, das es probleme beim zeichnen geben wird (einfach zu langsam)
Nur ob sich sowas überhaupt vernünftig mit DirectX/OpenGL zeichnen läßt :gruebel:

[edit]
Noch was ... ich verwende beim zeichnen hauptsächlich folgende Funtkionen
*) per windows API CreateRectRgn, SelectClipRgn
*) Moveto, LineTo, Rectangle, FillRect, PolyLine, Polygon
*) TextOut, TextExtent, CreateFontIndirect
*) ImageList.Draw
*) und noch ein paar andere, die ich vergessen habe ...
[/edit]

tommie-lie 24. Okt 2004 14:56

Re: DirectX / DelphiX / GDI
 
Zitat:

Zitat von Gruber_Hans_12345
*) Drucken ist nicht Möglich (bei GDI kann ich ja einfach auf den Canvas des Drucker malen, bei directXweiß ich nicht, ob es da was gibt, aber bei OpenGL definitiv (zumindest das was ich gelesen habe) nicht)

Auch bei OpenGL kannst du einen Screenshot vom RedneringContext machen und den ausdrucken.

Zitat:

Zitat von Gruber_Hans_12345
*) Da OpenGL ja rein 3D ist, befürchte ich, das wenn ich 2D zeichnen will das sehr umständlich ist, und ich immer verzerrungen bekomme, wenn ich die Kamera von vorne draufschauen lasse)

Auch OpenGL verfügt über hardwarebeschleunigte 2D-Zeichenfunktionen.

Zitat:

Zitat von Gruber_Hans_12345
Mit GDI funkt das alles schon ganz gut, nur wenn man viele Termine hat, und zu scrollen anfängt, dann wirds nicht schön.

Die "üblichen Verdächtigen" (DoubleBuffering, Zugriffe über die API) sind schon abgeklappert?

Gruber_Hans_12345 24. Okt 2004 15:05

Re: DirectX / DelphiX / GDI
 
Zitat:

Zitat von tommie-lie
Auch bei OpenGL kannst du einen Screenshot vom RedneringContext machen und den ausdrucken.

Aber ob das so schön/gut aussieht, wenn ich das auf A1/A0 ausdrucken will ?
Bei GDI Canvas kann man das ja relativ einfach machen ... (ob das mit DirectX funktioniert weiß ich eh noch nicht)

Zitat:

Zitat von tommie-lie
Auch OpenGL verfügt über hardwarebeschleunigte 2D-Zeichenfunktionen.

Ah, die habe ich noch nicht gesehen

Zitat:

Zitat von tommie-lie
Die "üblichen Verdächtigen" (DoubleBuffering, Zugriffe über die API) sind schon abgeklappert

Double Buffering ist eingeschaltet. Es passt auch alles ganz gut, Probleme gibt es nur, wenn ich schnell scrolle, und eine große Zahl von Zeichenoperationen habe.
Was meinste mit Zugriff über API ?
Moveto, LineTo Rectangle und co direct mit dem HDC zeichnen ? Bringt das was ?

tommie-lie 24. Okt 2004 17:10

Re: DirectX / DelphiX / GDI
 
Zitat:

Zitat von Gruber_Hans_12345
Aber ob das so schön/gut aussieht, wenn ich das auf A1/A0 ausdrucken will ?

Wenn du den Rendering Context groß genug wählst und somit auch genug Pixel für einen interpolationsfreien Ausdruck auf A0 hat. Aber das Ausdrucken kannst du ja immer noch über GDI machen.

Zitat:

Zitat von Gruber_Hans_12345
Es passt auch alles ganz gut, Probleme gibt es nur, wenn ich schnell scrolle, und eine große Zahl von Zeichenoperationen habe.

Dann würde ich nicht unbedingt an die Grafik denken, sondern vielleicht eher an den Code, der das, was dargestellt werden soll, zusammensucht. Wenn das Problem nämlcih nur bei großen Datenmengen auftritt, ist es zweifelhaft, daß schnellere Grafik abhilfe schafft, denn auch die muss irgendwo die Daten hernehmen, die gezeichnet werden sollen.

Zitat:

Zitat von Gruber_Hans_12345
Was meinste mit Zugriff über API? Moveto, LineTo Rectangle und co direct mit dem HDC zeichnen? Bringt das was?

In einigen Fällen, wo in kurzer Zeit massiv auf solche Funktionen zurückgegriffen wird, da spart man nämlich mit den API-Funktionen den Klassenoverhead, den die VCL-Lösung beansprucht, der Vorteil ist aber nur minimal, das ist richtig. Und wie gesagt, bei deinem Problem würde ich sowieso nicht auf die Grafik tippen.



P . S . : Weißt du , was plenken ist ? (und dann auch noch so inkonsequent nur bei Fragezeichen :mrgreen:)

Gruber_Hans_12345 24. Okt 2004 20:02

Re: DirectX / DelphiX / GDI
 
Zitat:

Zitat von tommie-lie
Dann würde ich nicht unbedingt an die Grafik denken, sondern vielleicht eher an den Code, der das, was dargestellt werden soll, zusammensucht. Wenn das Problem nämlcih nur bei großen Datenmengen auftritt, ist es zweifelhaft, daß schnellere Grafik abhilfe schafft, denn auch die muss irgendwo die Daten hernehmen, die gezeichnet werden sollen.

Jep, da kann man sicher noch einiges optimieren, da ich aber einfach doch eine große Zahl von GDI Befehlen habe (FillRect, Textausgaben usw.) dachte ich mir, das man da auch noch viel Zeit gewinnen kann.

Ich glaube, dann werde ich einstweilen mal bei GDI bleiben, und die Daten etwas optimieren.

Zitat:

Zitat von tommie-lie
In einigen Fällen, wo in kurzer Zeit massiv auf solche Funktionen zurückgegriffen wird, da spart man nämlich mit den API-Funktionen den Klassenoverhead, den die VCL-Lösung beansprucht, der Vorteil ist aber nur minimal, das ist richtig.

Ne, glaube auch nicht, das sich der Aufwand lohnt (ist meiner Meinung nach minimaler Lohn für doch viel Aufwand)

Zitat:

Zitat von tommie-lie
P . S . : Weißt du , was plenken ist ? (und dann auch noch so inkonsequent nur bei Fragezeichen :mrgreen:)

Tja, was man sich Jahrelang angewohnt hat, wird man nicht so schnell wieder los !
Aber ich glaube ich habe das nur bei Ruf und Fragezeichen oder ? (Der Rest sollte passen)

tommie-lie 24. Okt 2004 20:09

Re: DirectX / DelphiX / GDI
 
Zitat:

Zitat von Gruber_Hans_12345
da ich aber einfach doch eine große Zahl von GDI Befehlen habe (FillRect, Textausgaben usw.) dachte ich mir, das man da auch noch viel Zeit gewinnen kann.

Sofern ein Stocken des Scrollings mit steigender Datanmenge skaliert (je größer die Datenmenge bei gleicher Scrolgeschwindigkeit, desto langsamer ist der Bildaufbau), liegt es höchstwahrscheinlich nicht am Zeichnen, sondern an der Art und Weise, wie du die Daten zusammensammelst, die gezeichnet werden sollen, da solltest du also zuerst ansetzen.

Zitat:

Zitat von Gruber_Hans_12345
Tja, was man sich Jahrelang angewohnt hat, wird man nicht so schnell wieder los !

Ironie oder Absicht? :mrgreen:
Zitat:

Zitat von Gruber_Hans_12345
Aber ich glaube ich habe das nur bei Ruf und Fragezeichen oder ? (Der Rest sollte passen)

Stimmt, das ist ja das Inkonsequente daran :tongue:


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:08 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz