AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

GraphicsContainer

Ein Thema von EWeiss · begonnen am 27. Mär 2017 · letzter Beitrag vom 28. Mär 2017
Antwort Antwort
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
10.058 Beiträge
 
Delphi 12 Athens
 
#1

AW: GraphicsContainer

  Alt 27. Mär 2017, 05:20
Und wie oft wird diese Methode aufgerufen? Nur so oft wie nötig, sprich durch die Framerate vorgegeben, hoffe ich?

Jedenfalls machst du da ja relativ viel. Verglichen mit der Bibliothek, die wir uns angeschaut hatten, deutlich mehr glaube ich. Dort läuft es mit Hardwarebeschleunigung jedenfalls mit der CPU bei unter 5%. Zumindest mit meiner Testanimation.

Ziel muss sein möglichst viel vorzubereiten und nicht so viel bei jedem Frames zu machen. Ein Profiling Tool könnte helfen um zu sehen wo wie viel Zeit liegen bleibt.

Es kommt natürlich auch auf Betriebssystem und Grafikkartentreiber an, aber ab Windows 7 sollte die Hardware auch bei GDI immer direkt benutzt werden sofern Aero aktiv ist. (Ohne wird das Rendering generell zu einem großen Teil von der CPU übernommen.)

Da aber GDI nicht komplett in der Grafikkarte arbeitet, ist es trotzdem deutlich langsamer als Direct2D usw., genauer ist das hier dokumentiert:
https://msdn.microsoft.com/en-us/lib...n_in_windows_7

Deshalb wird GDI für neue Anwendungen ja auch nicht mehr empfohlen.

In aktuellen Delphiversionen gibt es aber einen schnellen TDirect2DCanvas als schnelle Lösung, der natürlich erst ab Windows 7 funktioniert (vorher fehlten in Windows die Grundlagen dafür):
http://docwiki.embarcadero.com/RADSt...-Zeichenfläche
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#2

AW: GraphicsContainer

  Alt 27. Mär 2017, 05:24
Zitat:
Und wie oft wird diese Methode aufgerufen? Nur so oft wie nötig, sprich durch die Framerate vorgegeben, hoffe ich?
Nein durch den Timer bedingt und zwar abhängig von der Anzahl der Frames.

Zitat:
Jedenfalls machst du da ja relativ viel. Verglichen mit der Bibliothek, die wir uns angeschaut hatten, deutlich mehr glaube ich. Dort läuft es mit Hardwarebeschleunigung jedenfalls mit der CPU bei unter 5%. Zumindest mit meiner Testanimation.
Du hast also eine APNG mit 27MB und 120 Frames bei einer Auflösung von 512x512 das du behaupten kannst die andere Anwendung wäre da besser ?
Das kann man nur dann behaupten wenn man unter fast gleichen Bedingungen vergleicht.

Zitat:
Jedenfalls machst du da ja relativ viel.
Was ist viel?
Das sind doch hauptsächlich nur Ermittlungen über die Position des Bildes im Bild und die Position auf dem Container wo gezeichnet wird.
Der Container im eigentlichen sinne ein Window macht nichts.
Er ist nur zum halten des DC zuständig.. bzw. das hole ich mir von dort.

Das Bild wird im Speicher abgelegt und aus dem Speicher heraus gezeichnet.

Was CPU lastig ist ist dies hier
Delphi-Quellcode:
        
// Ausgabe von Infos
ShowPngPlayInfos(CurPngPlayInfo);
macht etwa 1 > 2% aus.
Ich baue mal ne FPS Anzeige ein.

gruss

Geändert von EWeiss (27. Mär 2017 um 05:36 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
10.058 Beiträge
 
Delphi 12 Athens
 
#3

AW: GraphicsContainer

  Alt 27. Mär 2017, 05:46
Nein durch den Timer bedingt und zwar abhängig von der Anzahl der Frames.
Das ist ungünstig. Denn wenn du gleiche Inhalte mehrfach zeichnest, geht die CPU Last natürlich nach oben.

Du hast also eine APNG mit 27MB und 120 Frames bei einer Auflösung von 512x512 das du behaupten kannst die andere Anwendung wäre da besser ?
Das kann man nur dann behaupten wenn man unter fast gleichen Bedingungen vergleicht.
Nein, es sind 570 Frames und 640×480 Auflösung bei 15fps. Aber die Anzahl der Frames spielt gar keine Rolle, wenn man nur so oft zeichnet wie nötig.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#4

AW: GraphicsContainer

  Alt 27. Mär 2017, 06:02
Zitat:
Nein, es sind 570 Frames und 640×480 Auflösung bei 15fps
Zeig mir die mal. Wo bekomme ich die her?
Wie groß ist die denn? MB

Zitat:
Aber die Anzahl der Frames spielt gar keine Rolle, wenn man nur so oft zeichnet wie nötig.
? Ich muss so lange zeichnen wie die Frames im Bild sind da führt doch wohl kein weg vorbei
schließlich müssen diese ja auch irgendwie aufs Papier gebracht werden.
Oder zeichnen die sich alleine ?

Also mit dem dicken Teil liege ich bei 12 Frames und einer FrameDimensionTime von 30ms (Wie lange ein Frame gezeichnet wird)
Irgendwas ist da im argen. Das kann ich nicht so lassen (Aber wie ändern)

Denke mal das ist so richtig.. TimerInterval = ms
1000 1 Sekunde
1000 / 60 = 16.666
1 ms = 16

FPScount := GetTickCount + 1000 + (TimerInterval * 16);

Der TimerInterval richtet sich nach der im APNG abgelegten FrameDimensionTime
Wie lange ein Frame abgespielt wird.
Bei Gif kann jedes Frame eine unterschiedliche länge haben bei APNG sind sie alle gleich.


Zitat:
Vielleicht wird die Zeit ja auch für das Aufbereiten der Bilder gebraucht.
Nö sicherlich nicht das liegt im Speicher ist ja auch nur ein Bild.
Oder kannst du da im Code etwas erkennen?

gruss

Geändert von EWeiss (27. Mär 2017 um 07:23 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
10.058 Beiträge
 
Delphi 12 Athens
 
#5

AW: GraphicsContainer

  Alt 27. Mär 2017, 07:23
Zeig mir die mal. Wo bekomme ich die her?
Wie groß ist die denn? MB
Das ist eine interne Grafik, die ich nicht hochladen kann. Ich werde nachher mal eine ähnlich große frei verfügbare Animation suchen und es damit testen.
Die ist nur 24 MiB groß. Die enthaltene Grafik ist auch nicht sonderlich aufwendig. Dass das an der Geschwindigkeit beim Zeichnen so viel ändert, vermute ich allerdings nicht.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#6

AW: GraphicsContainer

  Alt 27. Mär 2017, 07:30
Zeig mir die mal. Wo bekomme ich die her?
Wie groß ist die denn? MB
Das ist eine interne Grafik, die ich nicht hochladen kann. Ich werde nachher mal eine ähnlich große frei verfügbare Animation suchen und es damit testen.
Die ist nur 24 MiB groß. Die enthaltene Grafik ist auch nicht sonderlich aufwendig. Dass das an der Geschwindigkeit beim Zeichnen so viel ändert, vermute ich allerdings nicht.
Das kannst du gerne tun.

Nur mit meinem Format (Programm) wird sie denke ich mal nicht abspielbar sein.
Wenn du normale APNG Dateien abspielst hast du kein Standbild sie werden sofort animiert.
Ich habe das Format dahingehen modifiziert so das du das APNG als normales Bild anzeigen kannst.
Animiert wird es dann nur mit dieser Anwendung wenn du die Datei mit dem Konvertierungs Tool (GIFtoAPNG) in meinen Archiv erstellt hast.

Ich habe aber jetzt immer noch das Problem das ich nicht weiß wie man das noch optimieren kann.

gruss

Geändert von EWeiss (27. Mär 2017 um 07:32 Uhr)
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#7

AW: GraphicsContainer

  Alt 27. Mär 2017, 17:33
Kann es sein das hier niemand eine Ahnung hat (vielleicht abgesehen von Nico) wie man das System zum zeichnen effizient nutzen kann ohne das man soviel CPU last produziert.
Andere Leute können das doch auch.

Ich meine nicht der umstieg auf andere Bibliotheken sondern mit dem was man hat.
GDI+ und OpenGL mixen als Beispiel.

JA ich weis das GDI+ nicht so schnell ist wie GDI aber mit der GDI kann man nun mal nicht alles so machen wie mit GDI+
Ob man GDI+ noch verwenden soll mag dahin gestellt sein.

gruss

Geändert von EWeiss (27. Mär 2017 um 17:36 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort

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 02:18 Uhr.
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