Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Cross-Platform-Entwicklung (https://www.delphipraxis.net/91-cross-platform-entwicklung/)
-   -   iOS Bitmap-Performance (https://www.delphipraxis.net/177432-bitmap-performance.html)

Union 6. Nov 2013 13:33

Bitmap-Performance
 
Ich habe festgestellt, dass die Zuweisung von Bitmaps mit einem OpenGL-Canvas unter iOS auf einem physikalischen Gerät extrem lange dauert - bis zu 5 s. Ausserdem bleiben Bitmaps mit Dimensionen > 2048*2048 (iPhone) bzw. 4096x4096 (iPad) leer.

Also habe ich Software-Rendering eingeschaltet. Und siehe da, es ward Licht und 30x schneller als mit OpenGL. Ich war schon soweit dass ich meine App updaten wollte, da habe ich das IPhone mal gedreht: Absturz.

Ich habe jetzt also zwei Möglichkeiten:
  1. Ich lasse die app wie sie ist. Lahm und reaktionsträge. Aber sie stürzt nicht ab.
  2. Ich nehme die beschleuinigte Version und riskiere Abstürze oder verbiete die Drehung.
Zu was würdet Ihr mir raten?
(Option 3: Warten auf QC-Behebung ist unrealistisch)

blackfin 6. Nov 2013 14:46

AW: Bitmap-Performance
 
Zur Texturengröße:
Du solltest vorher ermitteln, welche maximale Texturengröße das jeweilige Device überhaupt unterstützt.

Das geht z.B. mit:
Code:
 glGetIntegerv(GL_MAX_TEXTURE_SIZE, &txSize);
Texturen über 2048x2048 sind aber generell für jedes mobile Gerät schon "mächtig" groß, vor ein paar Jahren war das sogar auf PCs noch das Maximum für die meisten Grafikkarten :)

Union 6. Nov 2013 15:14

AW: Bitmap-Performance
 
Das macht das Framework. Beim Initialisieren werden die Metrics des Kontextes u.a. mit diesen Werten gefüllt. Es sollte dann eine "Zwangsverkleinerung" stattfinden (in UIImageToBitmap) wenn eine Überschreitung ermittelt wird. Leider funktioniert das nicht, daher ist das Bitmap dann mit Nullen gefüllt.

Beim Verwenden von FMX ohne OpenGL läuft alles viel flüssiger. Nur dass einige Operationen fehlschlagen, weil wohl nicht überall abgefragt wird wie gerendert werden soll. So werden dann OpenGL-Stukturen beim Software-Rendering angesprochen, die natürlich nicht initialisiert sind.

Hauptengpass bei der OpenGL-Performance in FMX ist die Verwendung von glReadPixels. Somit läuft alles über die CPU und den Hauptspeicher. Und die Bitmaps sind horizontal gespiegelt und müssen zur Verwendung erst zeilenweise umgedreht werden. Jeder Lese-Zugriff auf ein Bitmap erfordert ein entsprechendes Mapping das diese Operationen durchführt.


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:00 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