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

Aktuelle Zeit: Mi Jul 16, 2025 13:54

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



Ein neues Thema erstellen Auf das Thema antworten  [ 6 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: FPS-Absturz
BeitragVerfasst: Sa Jun 05, 2004 22:52 
Offline
DGL Member
Benutzeravatar

Registriert: So Okt 26, 2003 20:07
Beiträge: 249
Hi,

Ich habe ein Objekt, das ich mittels untenstehenden Prozeduren
erstelle und zeichte. Es hat 32 Flächen. Insgesamt setze ich 300
davon in die Landschaft. Und jetzt das Interessante: mit 31 Flächen hatte (dazu gleich) ich ca. 100 FPS. Mit 32 Flächen habe ich ca. 12 FPS!!!
wie kann das sein??? Wenn ich das Binden von den Texturen kommentiere
gehts...
es kommt noch besser: wenn ich 262 von den Objekten in die Landschaft
setze, gehts wieder. :roll:


um nochmal auf das hatte zurückzukommen:

es geht jetzt komischerweise mit 31 Flächen auch nicht mehr.
Ich werd nochema blöde hier...

Code:
  1.  
  2. procedure DrawModel(ModelID: Integer);
  3. var
  4.    n, i: integer;
  5.    k: integer;
  6.    usedtexture: integer;
  7. begin
  8.      k := High(Models[ModelID]);
  9.      usedtexture := Models[ModelID, 0].TextureID;
  10.  
  11.      n := 0;
  12.  
  13.      glEnable(GL_TEXTURE_2D);
  14.  
  15.      Textur[Models[ModelID, 0].TextureID].Bind;
  16.  
  17.  
  18.      glBegin(GL_QUADS);
  19.  
  20.      For n := 0 to k do
  21.      begin
  22.           if usedtexture <> Models[ModelID, n].TextureID then
  23.           begin
  24.                glEnd;
  25.                Textur[Models[ModelID, n].TextureID].Bind;
  26.                usedtexture := Models[ModelID, n].TextureID;
  27.                glBegin(GL_QUADS);
  28.           end;
  29.  
  30.           glTexCoord2f(VertPos[n mod 4, 0], Vertpos[n mod 4, 1]);
  31.           glVertex3f(Models[ModelID, n].x, Models[ModelID, n].y, Models[ModelID, n].z);
  32.  
  33.  
  34.      end;
  35.  
  36.      glEnd;
  37. end;
  38.  
  39. procedure CreateModel(filename: string; ModelID: Integer);
  40. var
  41.    ModelData: TStringList;
  42.    n, k: integer;
  43.    texID: integer;
  44.    s: string;
  45.    checksum: integer;
  46. begin
  47.      Modeldata := TStringList.Create;
  48.  
  49.      n := 0;
  50.  
  51.      ModelData.LoadFromFile(filename);
  52.  
  53.      texID := 0;
  54.      checksum := 0;
  55.  
  56.      For k := 0 to ModelData.Count - 1 do
  57.        if Pos('.', ModelData.Strings[k]) <> 0 then
  58.        checksum := checksum + 1;
  59.  
  60.      SetLength(Models[ModelID], checksum);
  61.  
  62.      k := 0;
  63.  
  64.      while lowercase(ModelData.Strings[n]) <> 'eof' do
  65.      begin
  66.           s := ModelData.Strings[n];
  67.  
  68.           if (Pos('[', s) <> 0) or (Pos(',', s) <> 0) or (Pos('E', s) <> 0) or (Pos('e', s) <> 0) then
  69.           begin
  70.  
  71.           if (Pos('[', s) > 0) and (Pos(']', s) > 0) then
  72.             texID := StrToInt(copy(s, 2, Pos(']', s) - Pos('[', s) - 1))
  73.           else
  74.           begin
  75.                models[ModelID, k].TextureID := texID;
  76.                 models[ModelID, k].x := StrToFloat(copy(s, 1, Pos('.', s) - 1));
  77.  
  78.                Delete(s, 1, Pos('.', s));
  79.  
  80.                models[ModelID, k].y := StrToFloat(copy(s, 1, Pos('.', s) - 1));
  81.  
  82.                Delete(s, 1, Pos('.', s));
  83.  
  84.                models[ModelID, k].z := StrToFloat(copy(s, 1, length(s)));
  85.                k := k + 1;
  86.           end;
  87.  
  88.  
  89.           end;
  90.           n := n + 1
  91.      end;
  92.  
  93. end;
  94.  


wie unschwer zu erkennen ist, lade ich die vektoren aus ner datei,
genauso wie die Daten für die Textur. Hier noch ein kleines Beispiel
für so ne Datei:

Code:
  1.  
  2. [0]
  3.  
  4. 0,5.0,5.-0,5
  5. -0,5.0,5.-0,5
  6. -0,5.0,5.0,5
  7. 0,5.0,5.0,5
  8.  
  9. EoF
  10.  


Vielleicht auch noch interessant: Die Objekte stehen mit ner HeightMap
Auflösung 400 x 400 in ner Displayliste.

Danke im Vorraus

_________________
I'm not the signature, I'm just cleaning the floor...

Derzeitiges Projekt:
FireBlade Particle Engine (Release R2 2009.06.29)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Jun 06, 2004 10:44 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Dez 13, 2002 12:18
Beiträge: 1063
Ich würde mal glGetError verwenden - klingt doch stark danach, dass du zeitweise OpenGL Fehler en masse produzierst, was sich unter anderem auch auf die Performance negativ auswirkt.
Insbesondere muss bei Quads sichergestellt sein, dass sich zwischen glBegin und glEnd Paaren tatsächlich eine durch vier teilbare Anzahl an Schnittpunkten befindet - weshalb mir dieses Codefragment

Code:
  1.      glBegin(GL_QUADS);
  2.  
  3.      For n := 0 to k do
  4.      begin
  5.           if usedtexture <> Models[ModelID, n].TextureID then
  6.           begin
  7.                glEnd;
  8.                Textur[Models[ModelID, n].TextureID].Bind;
  9.                usedtexture := Models[ModelID, n].TextureID;
  10.                glBegin(GL_QUADS);
  11.           end;
  12.  
  13.           glTexCoord2f(VertPos[n mod 4, 0], Vertpos[n mod 4, 1]);
  14.           glVertex3f(Models[ModelID, n].x, Models[ModelID, n].y, Models[ModelID, n].z);
  15.  
  16.  
  17.      end;
  18.  
  19.      glEnd;

ein wenig suspekt vorkommt.

_________________
Viel Spaß beim Programmieren,
Mars
http://www.basegraph.com/


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Jun 06, 2004 14:25 
Offline
DGL Member
Benutzeravatar

Registriert: So Okt 26, 2003 20:07
Beiträge: 249
also ich achte schon darauf, das das nicht passiert. dafür müsste ja in der
datei was falsch sein. damit ist aber alles in ordnung. :cry:

_________________
I'm not the signature, I'm just cleaning the floor...

Derzeitiges Projekt:
FireBlade Particle Engine (Release R2 2009.06.29)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Jun 06, 2004 14:31 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Wie Mars bereits gesagt hät deutet das was du da schilderst auf einen gl-Fehler hin. Denn sobald (je nach Fehlertyp) ein Fehler in jedem Frame auftritt kann das recht heftig an der Performance zerren. Von daher rate ich dir halt ganz einfach mal am Ende eines Frames den GL-Fehler zu ermitteln und dann ggf. (!= GL_NO_ERROR) auszugeben. Dann siehst du ja obs daran liegt.

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Jun 06, 2004 14:49 
Offline
DGL Member
Benutzeravatar

Registriert: So Okt 26, 2003 20:07
Beiträge: 249
hab das Problem mittlerweile gefunden.
es lag weder an den texturen, noch an den prozeduren oder am
objekt...

Weil ich früher mal was testen wollte, habe ich 3 displaylisten vom ganzen mit
unterschiedlichen einstellungen in ein cardinal-array gehaun.
hatte vergessen das rückgängig zu machen. jetz gehts sogar mit 3000
objekten :)

aber ich frag mich trotzdem warum das so kommen kann. schließlich
hab ich nicht alle drei auf einmal gezeichnet.
mir ist auch damals schon aufgefallen, dass es bei einer "version" einen
leistungseinbruch gab. wärend die anderen zwi mit über 200 fps rannten,
lief die nur mit 40... mich würde ma interessieren woran das liegen könnte

_________________
I'm not the signature, I'm just cleaning the floor...

Derzeitiges Projekt:
FireBlade Particle Engine (Release R2 2009.06.29)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Jun 06, 2004 15:35 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Wie gesagt würde ich mal den Fehlerfall simulieren und dann via glGetError prüfen obs doch kein Fehler war, ansonsten bleibt dir wohl nur profilen und evtl. debuggen, aber hier jetzt so im Forum ne Aussage zu treffen dürfte schwierig werden.

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


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


Wer ist online?

Mitglieder in diesem Forum: Google [Bot] und 21 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:  
cron
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.010s | 16 Queries | GZIP : On ]