Autor: Markus Barkholz (---.unity-media.net)
Datum: 21.07.17 19:11
Hallo,
zu Deinen Fragen:
- eigentlich soviele Dateien, das ich einen ganzen Abend lang das Programm, z.B. auf einer Party als Hintergrundberieselung laufen lassen kann. Aber das muss jetzt auch nicht zwingend sein - wäre aber meine Idealvorstellung.
- Das Demo an sich läuft sehr flüssig. Selbst mit der Musik im Hintergrund.
- Die Musik habe ich mit MCISend abspielen lassen. Das läuft auch sehr flüssig. Selbst mit 8 Sprites, Scrollbalken und Laufschriften vollgepackt liegt die Prozessorauslastung knapp bei 15% laut Taskmanager. Das Abschalten der Musik bringt da wenig bis keine Differenzen.
- Ich habe wohl alles zum laufen gebracht indem ich die eigentliche Diashow in einen seperaten Prozess laufen lasse. Also mit pExec("|Prozedur für Diashow").
Sobald die Bilder (50Stück zu Testzwecken) im 2.Prozess geladen sind, verfrachte ich das Demo, das nur die Wartezeit überbrücken soll in den Hintergrund und alles ist gut - ersteinmal!
Das Problem dabei ist, dass das komplette oGL ein zweites Mal initialisiert werden muss und dann natürlich auch seine 15% Prozessorlast verbraucht. Das ist zwar kein Problem bei einem OctaCore AMD, ich empfinde es aber als unsauber programmiert.
Außerdem kommt es dann zu Problemen. Die Diashow wird von Minute zu Minute langsamer. Nach 10Minuten ist dann schluss mit lustig. Der PC ist blockiert, Musik läuft aber weiter. Tastatur- und Mauseingaben funktionieren nicht mehr. Resultat ist dann ein Hardreset!
Ich nehme an es liegt an der Doppelinitialisierung von OpenGL.
Ja, und genau ab hier bin ich dann ratlos.
Das Nachladen der Bilder zur Laufzeit wäre optimal aber wie erwähnt, stoppen die Animationen. Musik läuft natürlich. Wenigstens ein Anfang.
Die Idee von Dir die Bilder vorab in den Speicher zu laden wäre natürlich eine Lösung.
Aber im Grunde scheitert es genau an diesen beiden Codezeilen:
pic& = Create("hsizedPic",-1, file$,1280,780,1)
textur%[j% + 1] = oGL("getTextureBMP",pic&,1)
Die Übergabe an das oGL-Frame bei einer Bildgröße von 1280x720 Punkten braucht alleine 3Sekunden. Selbst wenn keine Beeinträchtigung durch Musik und Animationen vorhanden sind. Wenn ich nur diese Übergabe in einem eigenen Prozess legen könnte, gäbe es keine Probleme.
Und wie würdest Du das mit AddFiles, FindFirst$() und FindNext$ lösen?
Hättest Du da ein Beispiel für mich.
Gruß
Markus Barkholz
In einem anderen Forum habe ich einen Tipp zum Thema Callback bekommen. Aber damit kann ich nicht anfangen.
|
|