Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Fr Jul 18, 2025 11:26

Foren-Übersicht » Programmierung » OpenGL
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 10 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Textur wird nicht mehr angezeigt
BeitragVerfasst: Fr Nov 11, 2005 10:56 
Offline
Guitar Hero
Benutzeravatar

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Nov 11, 2005 12:07 
Offline
DGL Member
Benutzeravatar

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?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Nov 11, 2005 18:17 
Offline
Guitar Hero
Benutzeravatar

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Nov 11, 2005 18:41 
Offline
DGL Member

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 :-)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Nov 11, 2005 18:46 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Die Schrift wird im Fehlerfall gar nicht gerendert. Die Hintergrundtexturen werden im Fehlerfall als weißes Rechteck gerendert.... :?

Ich werds heute abend mal auf dem besonders Seltsamen rechner ausprobieren. Mal sehn ob ich dort was gebacken griege...

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Nov 12, 2005 19:27 
Offline
Guitar Hero
Benutzeravatar

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.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Nov 12, 2005 19:32 
Offline
Guitar Hero
Benutzeravatar

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... :shock:

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Nov 12, 2005 19:55 
Offline
DGL Member

Registriert: Sa Jan 22, 2005 21:10
Beiträge: 225
Für die maximale Größe der PowerOfTwo Texturen:

Code:
  1. var
  2. i : Integer;
  3. [...]
  4. glGetIntegerv(GL_MAX_TEXTURE_SIZE, @i);



Ausgeben der Extensions in ne Textdatei:

Code:
  1.  
  2. var
  3.    p : PChar;
  4.    s : String;
  5.    i : Integer;
  6.    TexFile : Textfile;
  7. begin
  8.      AssignFile(TexFile, 'Extensions.TXT');
  9.      Rewrite(TexFile);
  10.  
  11.      p := glGetString(GL_EXTENSIONS);
  12.      Writeln(TexFile, 'OpenGL extensions');
  13.      Writeln(TexFile, '-----------------');
  14.      s := p;
  15.      While Length(s) > 0 do
  16.      begin
  17.           i := Pos(' ', s);
  18.           If i = 0
  19.           then
  20.               begin
  21.                    Writeln(TexFile, s);
  22.                    s := '';
  23.               end
  24.           else
  25.               begin
  26.                    Writeln(TexFile, Copy(s, 1, i));
  27.                    Delete(s, 1, i);
  28.               end;
  29.      end;
  30.      Writeln(TexFile, '-----------------');
  31.      CloseFile(TexFile);
  32. end;
  33.  

_________________
[18:30] tomok: so wie ich das sehe : alles. was nich was anderes ist als nen Essay ist nen Essay

hi, i'm a signature viruz, plz set me as your signature and help me spread :)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Nov 12, 2005 19:57 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
http://www.realtech-vr.com/glview/

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.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Nov 13, 2005 13:55 
Offline
Guitar Hero
Benutzeravatar

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... 8)

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


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 10 Beiträge ] 
Foren-Übersicht » Programmierung » OpenGL


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 4 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.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.009s | 14 Queries | GZIP : On ]