bmap_preload / Anwendung?

Posted By: alpha_strike

bmap_preload / Anwendung? - 04/30/12 12:25

Hallo JCL,
ich habe folgendes Problem.
Für einen Schwenk über eine 2D-Landschaft setze ich für die verschiedenen Objekte mehrere Panels mit jeweils mehreren Windows und ca 100MB Bilddaten (dds und tga) ein.

Bei diesem Schwenk ziehe ich per pan_setpos in unterschiedlichen Geschwindigkeiten die Windows mit deren Bildinhalten über den Bildschirm.

Jetzt kommt es immer, sobald eine größere Bilddatei in den Monitor tritt, zu einem Ruckeln, als würde die Datei kurz vor dem rendern geladen werden.

Um dieses Rucken zu umgehen, lade ich vor dem Schwenk alle
Bilddaten per bmap_preload ein.
Aber trotzdem hat das keine Auswirkung. Das Rucken bleibt.
In F11-Debug-Anzeige sehe ich zudem beim Anwendung von bmap-preload und anschließendem bmap_purge keine zahlenmäßige Auswirkung.

Liegt meinerseits ein Missverständnis in der Anwendung vor?

Danke im Voraus.
Posted By: Harry Potter

Re: bmap_preload / Anwendung? - 04/30/12 14:24

Originally Posted By: alpha_strike
Um dieses Rucken zu umgehen, lade ich vor dem Schwenk alle
Bilddaten per bmap_preload ein.

Das Problem kenne ich schon seit der A5! Es tritt auch bei Models auf, wenn diese eine sehr große Textur haben.
Dann kann das "Ruckeln" schon mal eine Sekunde oder auch länger dauern.

Ich habe den Verdacht, dass ENT_PRELOAD eine Entity nur von der Festplatte in den Hauptspeicher (Nexus) lädt. Sobald eine Entity aber zum ersten mal sichtbar wird, wird sie zusätzlich noch vom Hauptspeicher in den Grafikkartenspeicher kopiert. Und das verursacht dann die Verzögerung, wenn die Datenmenge sehr groß ist. Ist aber nur eine Vermutung von mir.

Habe auch schon alle Einstellungen von preload_mode ausprobiert. Aber das Ruckeln ist geblieben.

Als einzige Lösung für dieses Problem wende ich folgenden Trick an:
Ich platziere nach dem Laden des Levels, die Kamera (nach unten gerichtet) direkt über dem gesamten Level. Somit werden ALLE Entities sichtbar und geladen. Das ganze passiert hinter einem bildschirmfüllenden Panel, damit der Spieler es nicht sieht. Danach gibt es dann keine Ruckler mehr.

Wenn es eine andere Lösung geben würde, wäre ich aber sehr froh darüber.
Posted By: jcl

Re: bmap_preload / Anwendung? - 04/30/12 14:51

bmap_create lädt eine Bmap von der Harddisk in den PC-Speicher. bmap_preload lädt sie vom PC-Speicher in den Speicher der Video-Karte.

Dieser Video-Speicher wiederum unterliegt dem DirectX Memory Management. Wenn der Video-Speicher knapp wird, lagert DirectX Texturen aus und lädt sie wieder, sobald sie sichtbar werden. Das könnte theoretisch zum erwähnten Ruckeln führen. Leider haben wir auf das DirectX Memory Management wenig Einfluss.

Ich könnte mir die Sache aber gerne näher ansehen, wenn Sie uns ein Projekt hochladen, bei dem dieses Ruckeln deutlich sichtbar ist. Mit unseren Testprojekten sieht man es nämlich nicht. Ich habe nur ab und zu von Usern davon gehört.
© 2024 lite-C Forums