AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi schnelle Zeichen Routinen. Zur Zeit Canvas.Draw

schnelle Zeichen Routinen. Zur Zeit Canvas.Draw

Ein Thema von Jackie1983 · begonnen am 14. Okt 2007 · letzter Beitrag vom 16. Okt 2007
Antwort Antwort
Seite 2 von 2     12
Benutzerbild von WordsBG
WordsBG

Registriert seit: 17. Sep 2005
63 Beiträge
 
Delphi 7 Professional
 
#11

Re: schnelle Zeichen Routinen. Zur Zeit Canvas.Draw

  Alt 16. Okt 2007, 02:17
Mit Andorra würdest du einfach alles in eine TAdImageList laden und dann per Draw zeichnen. Nicht viel aufwendiger aber wahlweiße DirectX oder OpenGL beschleunigt.
  Mit Zitat antworten Zitat
Benutzerbild von Lossy eX
Lossy eX

Registriert seit: 7. Aug 2007
113 Beiträge
 
#12

Re: schnelle Zeichen Routinen. Zur Zeit Canvas.Draw

  Alt 16. Okt 2007, 07:45
GDI: Die Geschwindigkeit ist unterschiedlich. Das kommt ganz darauf an ob die Grafikkarte mit zur Beschleunigung genutzt wird oder nicht. Wenn du ein TBitmap erstellst dann solltest du in jedem Falle den HandleType auf bmDDB stellen. Dadurch weißt du der GDI mit vorhandene Hardware benutzen zu dürfen. Wenn der auf bmDIB steht dann läuft alles auf der CPU ab. Ein frisch geladenes Bit steht auf bmDIB.

PS: Den HandleType natürlich erst dann setzen wenn das Bitmap komplett geladen ist. Also fertig zum zeichnen. Ansonsten wird der womöglich wieder zurückgesetzt.

PPS: Wenn du auf die Scanlines zugreifen möchtest darfst du bmDDB nicht verwenden. Da dadurch die Scanlines nicht verfügbar sind. Du kannst es aber auch kurzzeitig umstellen.
Ich habe ja keine Vorurteile gegenüber Autofahrern ... aber Fahrer von BMW und Mercedes bestätigen diese regelmäßig.
Außerdem neue technologische Errungenschaften: Serienmäßig eingebaute Rechtsfahrsperre und der stromsparende Blinker.
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#13

Re: schnelle Zeichen Routinen. Zur Zeit Canvas.Draw

  Alt 16. Okt 2007, 12:50
Zitat von Lossy eX:
GDI: Die Geschwindigkeit ist unterschiedlich. Das kommt ganz darauf an ob die Grafikkarte mit zur Beschleunigung genutzt wird oder nicht. Wenn du ein TBitmap erstellst dann solltest du in jedem Falle den HandleType auf bmDDB stellen. Dadurch weißt du der GDI mit vorhandene Hardware benutzen zu dürfen. Wenn der auf bmDIB steht dann läuft alles auf der CPU ab. Ein frisch geladenes Bit steht auf bmDIB.
Wieso sollte DIB über die CPU ablaufen? Die Grafikkartentreiber können die GDI Befehle durch eigene, beschleunigte Funktionen ersetzen. Wenn den neuen Implementierungen was nicht passt, rufen sie die langsamen Originalroutinen auf. die Standard GDI von Windows macht eigentlich alles in Software und erst die Treiber sorgen für Geschwindigkeit. Warum aber ein DIB nicht beschleunigt werden sollte, ist mir ein Rätsel. Ein DDB bedeutet nichts weiter, als dass es ein Palette (falls benötigt) im aktuellen Context gestellt wird. Spätestens ab den nicht Paletten-basierenden Farbtiefen von 15 Bit und aufwärts ist keine mehr nötig und man hat die Pixelinformationen. Dabei rechnet der Treiber diese Informationen genauso schnell in das im Grafikkartenspeicher genutzte System um um es dann direkt zu verwenden. Bei den DDBs hast du nur mehr Probleme, u.a. bei paletten-basierenden Auflösungen etc und vor allem durch die entsprechende Anpassung der Farbpalette. Male auf einem 256 Farben Screen mit einer selbstgemischten Farbe auf einem DDB - die Farbe wird immer dem farblich nächsten Eintrag angepasst und entspricht nicht mehr deiner Mischung. Das RealizePalette() System klappt in der VCL eh nicht ganz richtig und macht hier nur mehr Probleme.

Meine App arbeitet in der gesamten Firma auf den unterschiedlichsten Rechnern und Betriebssystem und genauso Auflösungen und unterschiedlichen Farbtiefen immer ohne flackern oder Verzögerungen. Selbst ein PII muckt nicht rum...

Zitat von Lossy eX:
PPS: Wenn du auf die Scanlines zugreifen möchtest darfst du bmDDB nicht verwenden. Da dadurch die Scanlines nicht verfügbar sind. Du kannst es aber auch kurzzeitig umstellen.
Wobei dabei wieder die gesetzten (z.B. RGB Werte) der aktuellen Palette des Devices angepasst werden und somit die Farben verändert werden.
  Mit Zitat antworten Zitat
Whookie

Registriert seit: 3. Mai 2006
Ort: Graz
441 Beiträge
 
Delphi 10.3 Rio
 
#14

Re: schnelle Zeichen Routinen. Zur Zeit Canvas.Draw

  Alt 16. Okt 2007, 14:10
Zitat von Jackie1983:
habe es jetzt geändert. Soweit so gut, bei 100 Objekten ist die cpu bei 70-75%
Das ist mir leider noch zu viel. Da werde ich wohl oder übel auf opengl umsteigen.....
Hmm ... bist du dir sicher das du das ganze an der richtigen stelle machst (also im OnPaint)? Was du da schilderst klingt einwenig nach permanentem Aufrauf deiner Zeichenroutine??
Whookie

Software isn't released ... it is allowed to escape!
  Mit Zitat antworten Zitat
Benutzerbild von Lossy eX
Lossy eX

Registriert seit: 7. Aug 2007
113 Beiträge
 
#15

Re: schnelle Zeichen Routinen. Zur Zeit Canvas.Draw

  Alt 16. Okt 2007, 15:44
Muetze1: Was Palettenbilder angeht muss ich gänzlich passen. Ich arbeite aussließlich mit 24 oder 32 Bit Bildern/Farbtiefen. Und dort wo ich es bisher eingesetzt habe darf man so etwas auch erwarten. Von daher kann ich dazu gar nichts sagen.

Hardwarebeschleunigung: Was genau alles beschleunigt wird liegt voll und ganz in den Händen des Treibers. Da stimmen wir beide ja überein. Ob DIBs jetzt wirklich nur auf der CPU ausgeführt werden kann ich mit Gewissheit nicht sagen, da ich mich bisher nie so genau damit beschäftigt habe was unten drunter passiert. Allerdings habe ich damit schon sehr viele Tests gemacht und diese sprechen eindeutig dafür, dass (auf meinen bisherigen Systemen) die DDBs das gegünstigtere Format waren.

1. Versuch mal bei ein DDB eine entsprechend große Größe einzustellen. Ab einer gewissen Größe bekommst du gnadenlos nur noch Out Of Resurce Exceptions. Wärend ein DIB nur von dem verfügbaren RAM begrenzt werden. Zusätzlich dazu kann man an der Auslastung des Speichers der Anwendung gut sehen, dass sich DDBs so gut wie gar nicht bemerkbar machen. DIB hingegen vollkommen.

2. Einfacher Geschwindigkeittest. Das Zeichnen von 1000 256x256 Bitmaps (immer das selbe) auf einer 800x600 Fläche. Inklusive Bliten der Fläche auf einem Formular. Allerdings alles OHNE direkte GDI und unter der Vorraussetzung, dass der Treiber es beschleunigt.
Beide Bilder DDB = 11 ms
Beide Bilder DIB = 380 ms

In der Delphihilfe wird von geräteabhängigen (DDB) und geräteunabhängigen (DIB) Bitmaps gesprochen. Ich denke mal diese Beschreibung trifft es besser (eigentlich benutze ich auch immer das). Laut OH sind DIBs auch wesentlich kompatibler was sich aber in einer langsameren Geschwindigkeit äußert.
Ich habe ja keine Vorurteile gegenüber Autofahrern ... aber Fahrer von BMW und Mercedes bestätigen diese regelmäßig.
Außerdem neue technologische Errungenschaften: Serienmäßig eingebaute Rechtsfahrsperre und der stromsparende Blinker.
  Mit Zitat antworten Zitat
Gandalfus

Registriert seit: 19. Apr 2003
407 Beiträge
 
Delphi 2006 Professional
 
#16

Re: schnelle Zeichen Routinen. Zur Zeit Canvas.Draw

  Alt 16. Okt 2007, 16:42
Zitat:
Also wenn Du auf GDI umstellst müsstest du um einiges schneller werden.
TCanvas ist GDI bzw eine Wrapper Klasse für die GDI.
Besucht doch mal meine Homepage
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:29 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