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

Aktuelle Zeit: So Jul 06, 2025 14:58

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



Ein neues Thema erstellen Auf das Thema antworten  [ 8 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Win32 GL test mit 4 RC´s
BeitragVerfasst: Sa Feb 02, 2008 13:24 
Offline
DGL Member

Registriert: Mi Okt 16, 2002 15:06
Beiträge: 1012
Serv,

ich hab mal ne kleine test application gebastelt, welche 4 Fenster erstellt und jedem einem eigenen Rendercontext zuweist.

Das funktioniert wunderbar, nur gibts da ne sache die macht mir kopfschmerzen:

Es gibt ansich bisher noch keine Renderschleife, sondern es wird zum GL zeichnen nur WM_PAINT und WM_ERASEBKGND benutzt.

Trotzdem bleibt meine CPU auslastung bei max. also bei ner Dualcore VM, 50%.
Und das ist nicht gut, da ich nur zeichnen will, wenn er aktuallsieren muss.

Woran kann das liegen ?

Ich hab mal anbei den src mit dazugepackt:
http://xenorate.com/final/xeno3_win32gl_test1.zip


Wäre super dankbar für hilfe,


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Feb 02, 2008 14:28 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Ich glaube das liegt daran, dass das WM_PAINT irgendwie speziell behandelt werden muss, da es sonst nicht aus der MessageQueue entfernt wird oder sofort wieder ausgelöst wird. Wenn ich DefWindowProc(hWnd, uMsg, wParam, lParam); vor dem PaintProc aufrufe geht es. Wobei ich aber nicht weiß ob das der Richtige weg ist. Kann auch sein, dass man BeginPaint und EndPaint benutzen sollte.

PS: Hab das Thema ins Allgemeine verschoben.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Feb 02, 2008 14:34 
Offline
DGL Member

Registriert: Mi Okt 16, 2002 15:06
Beiträge: 1012
Du hattest mit dem BeginPaint und EndPaint recht ^^

hab die zwei zeilen nachdem rendering eingefügt... geht *freu*


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Feb 04, 2008 14:21 
Offline
DGL Member

Registriert: Mi Okt 16, 2002 15:06
Beiträge: 1012
Ich hab da noch ne frage...

... was wäre der beste weg, das mit der GUI Aktuallisierung zu lösen.

Also wenn ich z.b. den Playing Title durchlaufen lassen per animation.
Dann muss da ja nen Update z.b. alle 40 ms passieren.

Wenn ich das fenster neuzeichne, dann springt die Performance kurzzeitig auf max.

Ich teste das ja in einer VMware, also OpenGL mit software rendering.
Kann das der grund sein, warum er beim Rendern auf max springt ?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Feb 04, 2008 15:57 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Das wird an der Softwareimplementation liegen. Ich denke, wenn du alle 40ms zeichnest, wirst du mit richtiger Grafikhardware keine probleme was die CPU-Auslastung betrifft haben.

Gruß Lord Horazont

_________________
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  
 Betreff des Beitrags:
BeitragVerfasst: Mo Feb 04, 2008 16:47 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Das liegt an beidem. In der VM hast du außerdem noch einen emulierten Rechner. Da laufen alle Programe langsamer als direkt auf einem Rechner. Und natürlich darfst du von einer Softwareimplementation keine Wunder erwarten. Sozusagen doppelt emuliert. Zu mal die Software implementation ja auch noch in der VM läuft.

Ich würde aber evtl sagen, dass du im Bedarfsfall die Geschwindigkeit der Animation anpassen können solltest. Denn Notebook Besitzer ohne richtige Grafikhardware werden nicht sonderlich glücklich sein, wenn das Program wegen eines Lauftextes ca 30-50% Last verursacht.

Denn ich habe gerade mal mein Text Demo probiert die liefert mit ca 70 fps in Software (VM ca 20-30 fps). Eine andere Demo lief ohne VM mit ca 30 bzw. 60 fps. Je nachdem ob eine "große" 512er Textur sichtbar war oder nicht.

Oder aber du setzt OpenGL Hardware vorraus. Wie schlecht sie ist spielt dabei wahrscheinlich kaum eine Rolle.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Feb 06, 2008 10:17 
Offline
DGL Member

Registriert: Mi Okt 16, 2002 15:06
Beiträge: 1012
Mir ists halt wichtig, das ich es performance mässig hinkriege das es nicht den rechner auf Dauer belastung hält.
Also sprich du spielst ne mp3 ab, und die CPU performance liegt bei max, nur weil er halt öfters die GUI updaten muss.

Das muss ich halt irgendwie vermeiden, somit hab ich noch kein plan wie ich z.b. nen Titel scroller, bzw Peak analyzer updaten will.
Oder ganz simple, nen blend fadein/out von buttons oder so, da brauchste ja auch nen Animationsthread oder so.

Naja, nicht so einfach das.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Feb 06, 2008 11:40 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Na ja. Mir persönlich stellt sich die Frage, ob du jetzt schon so extrem an solchen Optimierungen arbeiten solltest. Also ob das überhaupt Sinn macht. Weißt du denn überhaupt wie viele Leute es betreffen wird? Denn halbwegs aktuelle Notebooks haben eigentlich alle einen Hardwarebeschleunigten Chip dabei. Wenn dann vermute ich wird es häufiger an einem Treiber mangeln. Evtl wäre es vielleicht für den Anfang das Sinnvollste einfach einen Dialog anzuzeigen, dass keine Hardwarebeschleunigung vorliegt. Mit dem Hinweis, dass ein aktueller Treiber installiert werden sollte. Dialog natürlich zukünftig unterdrückbar. Sonst nervt so etwas.

Denn ich sehe da vielleicht das Problem, dass du dich in etwas verstrickst was nachher sowieso nur eine Hand voll Leute betreffen wird. Zu mal ich einen Player eigentlich immer in der Tray habe und damit ist sowieso kein Fenster sichtbar. Also solltest du im Auge behalten ob es sinnvoll ist, da jetzt übermäßig viel Energie rein zu stecken.

Wenn es trotzdem unbedingt Software sein muss, dann solltest du dir mal glScissor anschauen. Damit kannst du einen Bereich festlegen in dem gezeichnet werden soll. Also auch glClear. Du musst dann "nur" dafür sorgen, dass Front und Backbuffer den gleichen Inhalt haben. Also die Teile die sich nicht verändern. Und dann kannst du den Bereich in der sich die Laufschrift befindet aktualisieren wärend der Rest unverändert im Speicher bleibt. Allerdings dürfte das Handling von so etwas ziemlich übel werden. Weswegen du das wohl nur machen solltest, wenn es zwingen notwendig sein sollte.


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


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 12 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.012s | 15 Queries | GZIP : On ]