Registriert: Mo Dez 26, 2005 22:27 Beiträge: 117
Programmiersprache: Pascal, C++
Ich bin grad dabei Astroids nachzubauen...
Hab da ein Quad auf welches das Schiff gezeichent ist. Wenn ich das jetzt kompiliert, geht es alles wunderbar (2% Auslastung).
Wenn ich jetzt noch ein zweites Quad dazunehm, wo ich einen Asteroiden draufzeichne, ruckelt alles wie blöd und ich hab 50-60 % Systemauslastung...
Ich lade die Bilder schon im OnCreate - Teil, das ist es nicht.
Registriert: Do Sep 25, 2003 15:56 Beiträge: 7810 Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Also das was du gepostet hast sieht absolut unproblematisch aus. Der Fehler muss an anderer Stelle sein. Poste mal bitte deinen kompletten Zeichencode (ohne zu wissen wie viel das jetzt wird). Baust du das Asteroids nach was hier auf der Site vorgestellt wurde, oder komplett neu?
_________________ Blog: kevin-fleischer.de und fbaingermany.com
Registriert: Do Sep 25, 2003 15:56 Beiträge: 7810 Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Wieso benutzt du nicht direkt die glBitmap.pas? Der Code stammt da jedenfalls her, soweit ich das sehe. Da bist du jedenfalls auf der sicheren Seite. Eigentlich sieht der Code ziemlich normal aus.
Um was für ne GraKa handelt es sich denn hier? Eventuell hatt die nicht genug Speicher für 2 Texturen und lagert eine im HS aus. (Unwahrscheinlich. Aber z.B. bei OnBoard-Chips hat man es mit Konstant niedrigen Frames zu tun)
Eventuell läuft es ja nur bei dir langsam. Du kannst ja mal ne TestExe zippen und hier hochladen. Dann könnens mal paar testen. Aber sag erstmal was du für ne GraKa hast.
_________________ Blog: kevin-fleischer.de und fbaingermany.com
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Ich habe mal dein Code durch Pascal-tags ersetzt. Das kann man besser erkennen.
Flash: Der Code is das nötigste was man tun muss. Und der ist mit Sicherheit nicht aus der glBitmap. Eher aus irgendeinen SDL Sample.
Also ich würde mal sagen, dass dein OpenGL irgendwelche Schmerzen hat. Das ist das typische Schaubild. Die FPS sackt in den Keller oder die CPU-Last steigt. Überprüfe mal ob du beim Rendern irgendwelche Fehler gemacht hast.
Code:
procedure Tmain.Render;
var
Error:Cardinal;
begin
// Rendern
Error := glGetError;
if Error <> 0then
Caption := gluErrorString(Error);
SwapBuffer
end;
Außerdem wäre noch interessant wo du renderst. Was und wie wissen wir ja derzeit. Aber es kann mitunter auch sein, dass das so eine komische Windowsgeschichte. Oder, dass du da evtl auch nur nicht auf alles geachtet hast und du so zwielichtige Seiteneffekte hast die sich erst bei 2 Quads richtig bemerkbar machen.
Du kannst sogar mit keinem Quad 100 Prozent Systemauslastung haben, es kommt darauf an wie deine schleife aussieht.
Code:
while(ExitMessage =false)do Render;
Ist ein Typisches Beispiel wie du 100 Prozent auslastung bekommen kannst.
Mit einem Timer kannst du das Steuern, oder wenn du einfach die Vert. Sync abwartest( Das führt allerdings zu einem Eckelhaften Spielgefühl! )
_________________ Shareholder und Leitender Entwickler bei Pipedream-Games.
Zitat: Siehst du diesen Park da unten? Jeden Tag lernen sich darin Menschen kennen und verlassen einander. Und du hast dein ganzes Leben Zeit darin zu gehen.
Registriert: Mo Dez 26, 2005 22:27 Beiträge: 117
Programmiersprache: Pascal, C++
Okay, erst mal danke für eure schnelle antworten....
Zitat:
Außerdem wäre noch interessant wo du renderst.
Ich render auf einem Panel.... Ist das etwa nicht so günstig?
Zitat:
Wieso benutzt du nicht direkt die glBitmap.pas? Der Code stammt da jedenfalls her, soweit ich das sehe. Da bist du jedenfalls auf der sicheren Seite. Eigentlich sieht der Code ziemlich normal aus.
Hab ich auch zuerst benutzt... Da kam aber jedenfalls dauernd die Meldung: Can't use the power of two. Oder so ähnlich.. Da bin ich auf SDL umgestiegen
Zitat:
Eventuell läuft es ja nur bei dir langsam. Du kannst ja mal ne TestExe zippen und hier hochladen. Dann könnens mal paar testen. Aber sag erstmal was du für ne GraKa hast.
RADEON 9600 SERIES mit 128 MB Speicher... Sollte eigentlich langen...
100% Auslastung bedeuten doch nur das dein Programm die gesamte zur Verfügung stehenden Rechenzeit belegt. Aber man kann doch trotzdem genauso weiterarbeiten wie vorher. Wenn dann andere Programme mehr benötigen bleibt dann für dein Programm weniger. Das ist völlig in Ordnung und kein gutes Maß für die tatsächlich verwendete Leistung. Sinnvoller ist es die Zeit zu messen die pro Frame benötigt wird.
Ob Panel oder normales Fenster ist egal.
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
100% Last sind ja nichts schlimmes. Aber dann hat man IMMER 100%. Also auch, wenn gar nichts gerendet wird. Aber das ist hier ja nicht der Fall. Die Anwendung frisst ja anscheinend nur ein bisschen (zu Begin 2%) und bei einem zusätzlichen Quad dann außergewöhnlich viel mehr und ruckelt.
Schlagt mich (virtuell), wenn ich das falsch verstanden habe.
glBitmap und Fehlermeldung: Hmm. Ich kenne die Unit ein bisschen und wenn die moppert, dann hat es meist auch einen triftigen Grund (hoffe ich). Kann es sein, dass die Meldung in etwas so lautet? "TglBitmap2D.GenTexture - Rendercontex dosn't support non power of two texture." Wenn ja (und darauf tippe ich mal), dann ist deine Texturgröße keine Potenz von 2. In der aktuellen Version der glBitmap wird OpenGL 2.0 noch nicht unterstützt. Außerdem bräuchtest du dann auch einen recht aktuellen ATI Treiber um solche Texturen benutzen zu können.
Ich könnte mir gut vorstellen, dass sich OpenGL an deiner Textur verschluckt. Speziell wenn diese nicht vollständig erzeugt wurde.
Versuche es doch mal ohne das Binden der zweiten Textur? Und überprüfe mal ob OpenGL dir einen Fehler zurückgibt. Code war oben.
[edit] Aber Lars hat schon recht du solltest auf jeden Fall die Zeit zum Rendern messen und diese als Maß benutzen. Das ist wesentlich sicherere um feststellen zu können ob es langsamer läuft oder nicht.
Registriert: Mo Dez 26, 2005 22:27 Beiträge: 117
Programmiersprache: Pascal, C++
Lossy eX hat geschrieben:
glBitmap und Fehlermeldung: Hmm. Ich kenne die Unit ein bisschen und wenn die moppert, dann hat es meist auch einen triftigen Grund (hoffe ich). Kann es sein, dass die Meldung in etwas so lautet? "TglBitmap2D.GenTexture - Rendercontex dosn't support non power of two texture." Wenn ja (und darauf tippe ich mal), dann ist deine Texturgröße keine Potenz von 2. In der aktuellen Version der glBitmap wird OpenGL 2.0 noch nicht unterstützt. Außerdem bräuchtest du dann auch einen recht aktuellen ATI Treiber um solche Texturen benutzen zu können.
Stimmt, das war die Fehlermeldung. Ich wandel mal die Bilder in ein Format um das 2^n*2^n enspricht, und schau obs geht
Edit:\\ Okay, es ist warscheinlich, das es am falschen Format liegt, weil ich bin jetzt an einem etwas älteren PC und dort zeigt er mir überhaupt keine Texturen mehr an, sondern nur weiße Quadrate Ich glaube das es daran liegt
Lossy eX hat geschrieben:
Ich könnte mir gut vorstellen, dass sich OpenGL an deiner Textur verschluckt. Speziell wenn diese nicht vollständig erzeugt wurde. Versuche es doch mal ohne das Binden der zweiten Textur? Und überprüfe mal ob OpenGL dir einen Fehler zurückgibt. Code war oben.
Also, OpenGl gibt keine Fehlermeldung zurück.
Wie meinst, ich soll das mal ohne Binden der 2.Textur probieren? Versteh grad net ganz was ich probieren soll..
Registriert: Mo Dez 26, 2005 22:27 Beiträge: 117
Programmiersprache: Pascal, C++
Ach so
Das hab ich auch schon probiert, sieht dann so aus, das ich statt meinen Asteroiden mein Raumschiff in Groß habe und es trotzdem ruckelt, genauso wie als wenn ich den asteroiden einlad.
Ich probier jetzt mal die Bilder in das passende Format zu bringen
Mitglieder in diesem Forum: 0 Mitglieder und 2 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.