Registriert: Do Sep 25, 2003 15:56 Beiträge: 7810 Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
So, ich hab mal ein etwas verzwickteres Problem. Wie der Titel schon sagt gehts um Texturen.
Hier mal meine Leidensgeschichte:
Im Rahmen der Entwicklung von meinem Spiel "PBall Manager 2" kam es hin und wieder auf manchen Systemen zu Texturausfällen. Dies äußerte sich darin, dass z.B: keine Schrift sichtbar war (ich verwende Texturfonts). Manchmal kam es noch grasser: Die Hintergrundtextur war weg, dafür waren alle Buttons und Texte schön zu lesen. Es trat aber pro Rechner immer nur einer dieser Effekte auf.
Als Lösung gab ich bisher immer an, einen aktuellen Grafikkartentreiber zu installieren. Das funktionierte auch bisher auf 95% aller Rechner.
Nun kam aber die Wendung zum bösen: In der letzten (noch nicht veröffentlichten) Version des PBM2 wurden neue Texturen hinzugefügt. Bisher verfolgte ich das Prinzip "Alle Texturen werden am Anfang geladen" (Deshalb dauerte der programmstart auch 20 Sec. )
Als nun durch die neue Version noch weitere Texturen hinzukamen traten die oben bestehenden Fehler auch auf einem PC auf der bisher diese Fehler nicht kannt (zumindest nichtmehr kannte, nachdem der Treiber geupdatet wurde)
Ich vermute mal, dass der Speicher auf der Grafikkarte nicht ausreicht für alle Bilder, und diese AUsgelagert werden, dann aber nicht mehr korrekt "wiedergefunden" werden.
Mein kleiner Bruder spielte daraufhin mal bisl an der GraKa-Einstellung des Rechners, mit dem Effekt dass bei voller Hardwarebschleunigung die Hintergründe fehlten, bei fast keienr Hardwarebeschleuingung diese wieder da waren, dafür aber die Texte fehlten.
Ich glaubte nun mit einem Texturmanager das Problem umgehen zu können. Mein Manager behält immer nur 15 Texturen (Statt über 30) im Speicher, welche nach der letzten Benutzung geordnet sind. Tests verliefen bisher erfolglos. (Auf dem Rechner der durch das Update schonmal funktioniert hat konnte bisher nicht getestet werden.)
Habt ihr Ideen wie es zu diesem Fehler kommen kann? Auf meinem Acer Laptop mit altem Intel Onboard Chip (Laptop is von 2003) habe ich keine Fehler gehabt. Nicht mal ansatzweise. Mein kleiner Bruder hat einen neuen Acer mit neuem IntelChip (Laptop is von 2005) und da gehts net.
Ich komm also im Moment der Lösung nicht näher
(Zumindest hat der Manager den Programmstart beschleunigt...)
_________________ Blog: kevin-fleischer.de und fbaingermany.com
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Hmmm. Das ist in der Tat merkwürdig. Aber ehrlich würde es mich auch nicht wundern, wenn die Intel implementation da mist baut. Habe auf Laptops damit schon ein paar mal merkwürdige Effekte gehabt.
Ich an deiner Stelle würden den Manager sehr ristriktiv aufbauen. Also so, dass er wirklich nur das Lädt was benötigt wird und auch sofort wieder raus schmeißt, wenns nicht mehr benötigt wird. Du brauchst dann halt ne Referenzzählung.
Evtl solltest du auch mal schauen ob du die Texturen nicht Testweise ein bisschen verringerst und ob es dann geht. Du solltest auch mal schauen wie viel Speicher die Chips haben bzw wie viel AGP Speicher im Bios einstellt ist. Vielleicht ist das ja schon die Lösung. Dann solltest du auf jeden Fall sowieso deine Texturen dahingehend optimieren, dass unnötige Verschwendung vermieden wird. Also deine Fonts waren da wohl auch so ein Punkt. (Meine ich) Die hatten ja nach unten hin recht viel Luft. Evtl solltest du die Buttons so anpassen, dass du nur noch eine Textur hast und die mehrfach zeichnest.
Hast du auch mal geschaut ob da andere Spiele sinnvoll drauf funktionieren?
Registriert: Do Sep 25, 2003 15:56 Beiträge: 7810 Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Der Rechner bei dem es nach dem Treiberpatch ging und jetzt nicht mehr is ein PC mit ner GeForce 6xxx glaub ich.
Mich wundert nur, dass bei meinem nicht mehr taufrischen Laptop keinerlei Probleme auftreten
_________________ Blog: kevin-fleischer.de und fbaingermany.com
Registriert: So Sep 26, 2004 05:57 Beiträge: 190 Wohnort: Linz
Also ich bezweifle dass das allzu viel mitm Treiber zu tun hat. Texturspeicher sollte schon ausreichen für ein 2D Spiel, und für den Fall das er nicht ausreicht werden Texturen auch im RAM abgelegt. glBindTexture is ja genau aus diesem Grund manchmal langsam, also weil er sich bei zu vielen Texturen des öfteren ne Textur ausm RAM ziehen muss.
Da es aber offensichtlich irgendwas mitm Treiber zu tun hat, wenn das der einzige Unterschied zwischen 2 Testläufen mit unterschiedlichen Ergebnissen war, kann ich mir 2 Sachen vorstellen:
1. die Treiber haben Unterschiede was vom Standard nicht genau definiert ist. Beispielsweise Textur-IDs bei glGenTextures, dass er manchmal mit dem Wert 1 anfängt, aber es nicht zwingend so sein muss.
2. Irgendwelche Initialisierungen sind unterschiedlich. Vor allem bei Glut hatte ich mal den Fall, dass ich bei mir nicht extra angeben musste, das ich nen Tiefenbuffer haben will, auf nem anderen Rechner allerdings schon.
Du sagst die Texturen werden überhaupt nicht angezeigt? Also nicht mal als weiße Rechtecke? Denn dann hängt es höchst wahrscheinlich eher weniger mit den Texturen zusammen. Wenn du Texturierung eingeschalten hast und eine ungültige Textur gebunden ist, dann reagiert OGL mit den Standardeinstellungen indem er ein Rechteck mit der aktuellen Farbe zeichnet. Wenn er überhaupt nichts zeichnet, dann würde ich zuerst alles checken was mit Backface Culling oder dem Tiefenpuffer zu tun hat, und vor allem diese Sachen auch explizit irgendwo initialisieren, nicht darauf vertrauen dass alle Treiber die gleichen Initialwerte haben, auch wenn diese zu einem sehr großen Teil standardisiert sind.
Und Extensions wirst nehm ich an eh nicht allzu viele verwenden? Bzw. immer ein Fallback haben wenn eine nicht existiert?
Aber ich muss zugeben so ganz schlau werde ich aus diesem Fehlerverhalten auch nicht :-)
Registriert: Do Sep 25, 2003 15:56 Beiträge: 7810 Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Schätze es liegt an deinem Loader Lossy, oder besser an den Extensions die er nutzt. Es ist mir nämlich aufgefallen, dass nur JPGs nicht dargestellt werden. Manche JPGs gehen, andere nicht. Ich kanns mir net erklären. Ich hab mal an einer Stelle wo's immer ging eine Textur genommen die nicht geht, und tatsächlich funktionierte Sie auch an der anderen Stelle nicht. Ich kann mir das nur durch Extensions erklären.
Hast du ne Idee woran das liegen könnte, dass manche JPG-Texturen gehen, und manche nicht? (Sind beides 24 Bit JPGs)
_________________ Blog: kevin-fleischer.de und fbaingermany.com
Zuletzt geändert von Flash am So Nov 13, 2005 13:53, insgesamt 1-mal geändert.
Registriert: Do Sep 25, 2003 15:56 Beiträge: 7810 Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Mir is gerade nochne Möglichkeit eingefallen... Könnte es sein, dass die Texturen zu groß sind? Wie kann ich prüfen, ob die Texturgröße unterstützt wird....
Oder...
ich verwende ja NonPowerOf2 Texturen...warscheinlich werden die nicht korrekt geladen...hmmmm
Werd mal die Extensions vergleichen...
Edit: Wo gabs das Tool zum Extensioncheck (Steht nicht im Wiki )
_________________ Blog: kevin-fleischer.de und fbaingermany.com
Also bei NPOT kann es natürlich sein, dass die auf der ein oder anderen Hardware nicht sauber unterstützt werden. Damit wäre ich bei Anwendungen mit sonst geringen Anforderungen eh ein bisschen vorsichtig. Das Einzige was ich machen kann ist verschiedene Parameter abzuprüfen und das auch nur, wenn es bei GenTexture aktiviert ist. Sonst macht er stumpf das was du ihm sagst. Die maximal mögliche Texturgröße wir bei der Prüfung natürlich auch abgeprüft und ob alles unterstützt wird was benötigt wird.
Ich benutze für JPGs die Klasse aus Delphi. Wenn der Probleme mit den Bildern hätte würdest du das früher merken. Denke aber mal, dass das mit den Extensions nicht ganz so klasse hinhaut. Also klingt fast nach NPOT. Du solltest da evtl. auch mal schauen ob es dort andere Texturen gibt die eigentlich auch nicht funktionieren müssten, weil sie in etwas gleich groß sind. Wenn sie es dennoch tun ist womöglich noch etwas anderes. Was wir aber nicht hoffen wollen.
Registriert: Do Sep 25, 2003 15:56 Beiträge: 7810 Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Ja die NPoT waren der Grund. Jetzt sollte der PBall Manager bei allen Leuten laufen...
Schon grass, dass mein alter Acer Laptop das korrekt unterstützt. Wurde wohl damals einfach testweise in den Treiber geschrieben, und sit dann bei neueren Versionen wieder raus geflogen...
_________________ Blog: kevin-fleischer.de und fbaingermany.com
Mitglieder in diesem Forum: 0 Mitglieder und 5 Gäste
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.