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

Aktuelle Zeit: Di Jul 15, 2025 11:41

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



Ein neues Thema erstellen Auf das Thema antworten  [ 5 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Systemauslastung
BeitragVerfasst: Fr Feb 04, 2011 20:31 
Offline
DGL Member

Registriert: Fr Feb 04, 2011 19:05
Beiträge: 13
Hallo,

ich mache gerade meine ersten Gehversuche mit OpenGl. Ich programmiere mit Lazarus 0.9.28.2 64 mit Bit FPC 2.2.4 unter Windows 7 Pro 64 Bit.

Nun habe ich habe folgenden Code geschrieben:
Code:
glDisable(GL_BLEND);
  glBindTexture(GL_TEXTURE_2D, MyTex1);
  glBegin(GL_QUADS);
    glcolor4f(1,1,1,1);
    glTexCoord2f(0,1); glVertex3f(0    , 0     , -1);
    glTexCoord2f(1,1); glVertex3f(width, 0     , -1);
    glTexCoord2f(1,0); glVertex3f(width, height, -1);
    glTexCoord2f(0,0); glVertex3f(0    , height, -1);
  glEnd;

  glEnable(GL_BLEND);
  glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
  glBindTexture(GL_TEXTURE_2D, MyTex2);
  glBegin(GL_QUADS);
    glcolor4f(1,1,1,Progress);
    glTexCoord2f(0,1); glVertex3f(0    , 0     , -1);
    glTexCoord2f(1,1); glVertex3f(width, 0     , -1);
    glTexCoord2f(1,0); glVertex3f(width, height, -1);
    glTexCoord2f(0,0); glVertex3f(0    , height, -1);
  glEnd;

Nun habe ich bei der Ausführung bemerkt, dass wenn nicht überblendet wird (im Endeffekt also der zweite Block fehlt) die CPU-Auslastung bei etwa 10% liegt, die GPU Auslastung bei 95%. Mit sieht es dagegen aber anders aus: CPU:85%, GPU 60%. Die Framerate sinkt von ca. 900FPS auf 120FPS. Wieso bremst die CPU die GPU aus (zumindest scheint dies so)? Nahezu genau so ist dies, wenn ich Multitexturing benutze. Dabei wäre es ja noch logisch, dass die CPU belastet wird, da der Alpha-Wert jedes mal neu in die zweite Textur (TglBitmap2D) geschrieben werden muss.

Ich hoffe jemand kann mir erklären, woran dies liegt.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Systemauslastung
BeitragVerfasst: Fr Feb 04, 2011 21:30 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Zitat:
Dabei wäre es ja noch logisch, dass die CPU belastet wird, da der Alpha-Wert jedes mal neu in die zweite Textur (TglBitmap2D) geschrieben werden muss.

MyTex2 ist kein TglBitmap2D sondern die ID des Texturobjektes im Speicher der Grafikkarte. Die gesamte Blending-Operation geschieht auf der Grafikkarte. Die CPU sagt der GPU nur was zu tun ist und muss nach jedem Frame warten bis die GPU fertig ist.

Die Auslastungsangaben sind wahrscheinlich nicht wirklich verlässlich, weil du weder CPU noch GPU wirklich was zu arbeiten gibst. Diese langweilen sich eigentlich nur ;)

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Systemauslastung
BeitragVerfasst: Sa Feb 05, 2011 00:33 
Offline
DGL Member

Registriert: Fr Feb 04, 2011 19:05
Beiträge: 13
Du hast recht. Der gepostete Code ist nicht mit TglBitmap2D. Aber der mit multitexturing, da ich die Texturen so einfacher animieren könnte (Berechnung eines Teils der Texturen auf der CPU). Das tut aber auch nichts zur Sache. Ich frage deshalb, weil ich nun Schiss habe, dass das die CPU so belastet wird, dass ich keine Rechenzeit mehr für das berechnen z.B. einer Alpha-Map habe. Und Multithreading möchte ich mir diesmal ersparen.

Zweitens wundert mich, dass ich beim Überblenden nur noch 120FPS bekomme. Auf der CPU schaffe ich mit vier Kernen bei gleicher Auflösung 33 FPS und wenn ich das ganze mit der opBitmap realisieren würde könnte ich sogar noch 30-40% Rechenzeit pro Frame sparen (habe ich einzeln schon ausgetestet aber nicht in diesem Kontext - hängt auch von der Belastung des GUI-Threads ab). Dies würde etwa 45-55 FPS machen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Systemauslastung
BeitragVerfasst: Sa Feb 05, 2011 01:04 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Zeig vielleicht mal den gesamten Code (als Dateianhang oder so). Vielleicht machst du irgend etwas was man nicht tun sollte, aber da gibt es 1000 Sachen. Ferndiagnose ist da etwas schwer ohne Grundlage. ;)

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Systemauslastung
BeitragVerfasst: Sa Feb 05, 2011 11:23 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Ich möchte da mal auf diesen Artikel in unserem Wiki verweisen, der auch in dem angepinnten Thread erwähnt ist. Vielleicht findest du da ja was hilfreiches.

greetings

_________________
If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung.
current projects: ManiacLab; aioxmpp
zombofant networkmy photostream
„Writing code is like writing poetry“ - source unknown


„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 5 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 | 17 Queries | GZIP : On ]