Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi DirektX als Alternative zu BitBlt (https://www.delphipraxis.net/114575-direktx-als-alternative-zu-bitblt.html)

EWeiss 27. Mai 2008 16:34


DirektX als Alternative zu BitBlt
 
Habe jetzt nochmal alles getestet und denke die beste
alternative wäre nach DirectX umzusteigen.

Also anstelle von BitBlt denn mit der PaintBox scheint das
bei der übergabe des HDC in eine DLL nicht wirklich zu funktionieren.

Muss aber gestehen das ich unter Delphi damit noch nicht gearbeitet habe.
Welche Units muss ich einbinden um ein ganz einfaches BitBlt in DirectX zu realisieren ?

Und am wichtigsten wie geht das ?

gruss Emil

Medium 27. Mai 2008 22:14

Re: DirektX als Alternative zu BitBlt
 
Öhm, BitBlt? Mit DirectX? Ich glaube, du hast eine grundlegend falsche Vorstellung von dem, was DirectX ist. (Es ist zunächstmal um auf die Frage einzugehen, kein gleichwertiger Ersatz für GDI-Funktionen.)

lbccaleb 27. Mai 2008 22:19

Re: DirektX als Alternative zu BitBlt
 
hy,

vllt hilft dir delphix weiter!! (keine ahnung ob du es kennst)

delphix

Medium 27. Mai 2008 22:26

Re: DirektX als Alternative zu BitBlt
 
Zitat:

Zitat von delphix
Full installation of DelphiX (unrar only) has all features of DirectX 7

Yuck... das ist aber mal aktuell :lol:

lbccaleb 27. Mai 2008 22:50

Re: DirektX als Alternative zu BitBlt
 
Zitat:

Zitat von Medium
Zitat:

Zitat von delphix
Full installation of DelphiX (unrar only) has all features of DirectX 7

Yuck... das ist aber mal aktuell :lol:

ja das funzt aber auch auf diret x9 ;-) und 10...

EWeiss 27. Mai 2008 23:49

Re: DirektX als Alternative zu BitBlt
 
Hatte nicht vor um eine Funktion zu ersetzen eine komplette Komponente zu installieren.
Keine Ahnung ob man DirectX als alternative für BitBlt verwenden kann.

Was BitBlt macht weiss ich (so etwa 20 Jahre) ;) darum gehts nicht..
Mein Problem ist das ein Fenster ala Panel wenn drauf gezeichnet wird dieses
sich selbst aktualisiert bei Image oder PaintBox muss das DC immer neu gesendet werden
damit das zeichnen nicht unterbrochen wird.

Das will ich umgehen ..
Ob das was bringt mit DirectX ?? Keine ahnung.

gruss Emil

Muetze1 28. Mai 2008 00:05

Re: DirektX als Alternative zu BitBlt
 
Leite dir eine eigene Komponenten von TWinControl ab. Dort kannst du das Fensterhandle nutzen um dein DC zu bekommen (kennst du ja) und diesen musste dann zu deinem Plugin o.ä. senden für sein BitBlt. Vorteil einer eigenen Komponente: du kannst CreateWnd; überschreiben und bekommst somit mit, wenn das Control (somit das Fenster) neu erzeugt wird während der Laufzeit. Dies sollte nämlich wohl der eigentliche Grund sein, warum sich dein HDC ändert. Somit musst du das HDC nur dann neu senden, wenn es sich wirklich geändert hat und du bekommst es direkt mit. Auch halte ich nichts davon ein VCL Element zu missbrauchen (Ein Panel oder ein Image ist definitiv keine Zeichenfläche!!)

EWeiss 28. Mai 2008 00:59

Re: DirektX als Alternative zu BitBlt
 
Zitat:

Zitat von Muetze1
Leite dir eine eigene Komponenten von TWinControl ab. Dort kannst du das Fensterhandle nutzen um dein DC zu bekommen (kennst du ja) und diesen musste dann zu deinem Plugin o.ä. senden für sein BitBlt. Vorteil einer eigenen Komponente: du kannst CreateWnd; überschreiben und bekommst somit mit, wenn das Control (somit das Fenster) neu erzeugt wird während der Laufzeit. Dies sollte nämlich wohl der eigentliche Grund sein, warum sich dein HDC ändert. Somit musst du das HDC nur dann neu senden, wenn es sich wirklich geändert hat und du bekommst es direkt mit. Auch halte ich nichts davon ein VCL Element zu missbrauchen (Ein Panel oder ein Image ist definitiv keine Zeichenfläche!!)

Danke..
Wäre in Delphi eine möglichkeit
Das Problem ist nur ich habe mit vielen sprachen zu tun und muss quasi unabhängig jetzt von Delphi
(eigene anwendung) der DLL das HDC übergeben.

Wie gesagt über GetDC(Panel. bla bla) funktioniert das auch aber nicht von der PaintBox
oder ähnlichen Controls aus anderen Sprachen

Früher habe ich eine Renderfunktion übergeben..
Delphi-Quellcode:
function BASS_SONIQUEVIS_Render2(handle: HVIS;
                                 Data, fft: Pointer;
                                 canvas: DWORD;
                                 flags, pos: DWORD): boolean; stdcall;
damit war gewährt das immer ein gültiges DC übergeben wurde
Das habe ich geändert da ich festgestellt habe das es einigen Leuten extrem schwer viel die richtigen FFT Daten zu übergeben.
Das geschieht jetzt innerhalb BassVis

Das problem ist nun das ich die PaintBox refreshen muss um BitBlt immer ein aktuelles HDC zu übergeben.
Innerhalb der DLL kenn ich aber das Objekt nicht und schon gar nicht von welcher Sprache
aus auf das DC geschrieben werden soll.

Finde nicht den weg um das HDC zu übergeben.
Das Rendern wird nur einmal initialisiert und dann innerhalb BassVis in einen Thread verwaltet.

Hat auch den vorteil das man innerhalb der Anwendung nichts mehr damit zu tun hat.
Timer usw..

Hmmm .. muss mal schaun. Schwierig zu lösen.

gruss Emil

Muetze1 28. Mai 2008 01:15

Re: DirektX als Alternative zu BitBlt
 
Ich habe niemals gemeint die Komponente zu übergeben sondern immer nur das HDC (oder das HWND). Hintergedanke für die Komponente war einzig allein die direkte Notification über das Recreate des HWND, was ich als dein hauptsächliches Problem für ein ungültiges HDC vermutet hatte.

Also wenn du nun eine Benachrichtigung von deiner Komponente bekommst, dann geb das neue HDC weiter - wie du das in dein Renderer bekommst, ist doch relativ frei. Über einem memory mapped stream, Windows Botschaft (direkt oder Broadcast), Socket, etc - du hast viele Möglichkeiten.

EWeiss 28. Mai 2008 01:36

Re: DirektX als Alternative zu BitBlt
 
Zitat:

Zitat von Muetze1
Ich habe niemals gemeint die Komponente zu übergeben sondern immer nur das HDC (oder das HWND). Hintergedanke für die Komponente war einzig allein die direkte Notification über das Recreate des HWND, was ich als dein hauptsächliches Problem für ein ungültiges HDC vermutet hatte.

Also wenn du nun eine Benachrichtigung von deiner Komponente bekommst, dann geb das neue HDC weiter - wie du das in dein Renderer bekommst, ist doch relativ frei. Über einem memory mapped stream, Windows Botschaft (direkt oder Broadcast), Socket, etc - du hast viele Möglichkeiten.

Danke .. werd mal schaun wie ich das gebacken kriege ;)

gruss Emil


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:56 Uhr.
Seite 1 von 2  1 2      

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