JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.phpMedaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Darstellung und CPU Auslastung

 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> DirectX, OpenGL
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Catscratch1
Junior JLI'ler



Anmeldedatum: 20.01.2005
Beiträge: 98

Medaillen: Keine

BeitragVerfasst am: 27.03.2005, 12:58    Titel: Darstellung und CPU Auslastung Antworten mit Zitat

Hallo,

also momentan zeichne ich mein Bild prinzipiell in einer Endlosschleife. Kann man das irgendwie handhaben, dass das Bild einmal in den Rasterizer geschickt wird und erst, wenn sich was ändert, neue API Aufrufe gemacht werden, sodass nicht 100% der CPU auslastung permanent durch die Anwendung genutzt werden?
_________________
"Dispatcher und Scheduler sind wie Brüder, bloß anders"
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Patrick
Dark JLI Master



Anmeldedatum: 25.10.2004
Beiträge: 1895
Wohnort: Düren
Medaillen: Keine

BeitragVerfasst am: 27.03.2005, 13:02    Titel: Antworten mit Zitat

Die 100% kommen nicht durch das Bild sondern durch Deine Messageabfrage bei der Du sehr wahrscheinlich "::PeekMessage" benutzt.

In meinen Tutorials zeige ich wie man einen Kompromis mit "::PeekMessage" (100%) und "::GetMessage" (variabel) bewerkstelligt.

Diesen Kompromis kannst Du dann ausbauen, denn momentan sind 100% wenn das Programm im Vordergrund ist und 0-4% wenn es minimiert ist.
_________________
'Wer der Beste sein will muss nach Perfektion streben und jede Gelegenheit nutzen sich zu verbessern.' - KIA
[ German Game Dev | Boardsuche hilft sehr oft | Google rockt | Wie man Fragen richtig stellt | ICQ#: 143040199 ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
KI
JLI Master


Alter: 39
Anmeldedatum: 04.07.2003
Beiträge: 965
Wohnort: Aachen
Medaillen: Keine

BeitragVerfasst am: 27.03.2005, 13:37    Titel: Antworten mit Zitat

Wenn du willst, dass deine Anwendung das System weniger stark auslastet, kannst du auch versuchen die Priorität deiner Anwendung zu minimieren.

Schau dich mal bei SetThreadPriority, GetCurrentThread um.

Diese ganzen Thread- und Prozess-funktionen sind ein relativ komplexes Thema. siehe Übersicht

Mit den oberen beiden Funktionen dürftest du fürs erste hinkommen.
Für HANDLE hThread gibts du GetCurrentThread an...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Catscratch1
Junior JLI'ler



Anmeldedatum: 20.01.2005
Beiträge: 98

Medaillen: Keine

BeitragVerfasst am: 27.03.2005, 13:41    Titel: Antworten mit Zitat

Hmm ok.
Also müsste ich da in der Richtung Threads arbeiten.
Macht auch Sinn.
@Patrick Danke deine Abschalten im Minimierten Zustand ist auch praktisch.

Ich denke aber, dass Threads eher die Richtung ist, die ich meinte.
Mir gehts darum, dass wenn ich ein Bild 5sek statisch zeige und danach erst modifiziere, erst auch dann wieder neu zeichnen möchte und sonst eher das ganze Idle halten möchte.
_________________
"Dispatcher und Scheduler sind wie Brüder, bloß anders"
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Patrick
Dark JLI Master



Anmeldedatum: 25.10.2004
Beiträge: 1895
Wohnort: Düren
Medaillen: Keine

BeitragVerfasst am: 27.03.2005, 13:59    Titel: Antworten mit Zitat

Dafür benutzt man keine Threads sondern eine bool-variable.

Nenn diese "redraw" und setze sie nur auf true wenn es neu gerendert werden muss, wurd es gerendert setz sie auf flase. Teste das in jedem schleifendurchlauf und fertig.

Dafür extra Threads benutze ist wie mit Kanonen auf Spatzen: Sinnlos
_________________
'Wer der Beste sein will muss nach Perfektion streben und jede Gelegenheit nutzen sich zu verbessern.' - KIA
[ German Game Dev | Boardsuche hilft sehr oft | Google rockt | Wie man Fragen richtig stellt | ICQ#: 143040199 ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Catscratch1
Junior JLI'ler



Anmeldedatum: 20.01.2005
Beiträge: 98

Medaillen: Keine

BeitragVerfasst am: 27.03.2005, 14:17    Titel: Antworten mit Zitat

Stimmt schon, trotzdem wird immer die 100%ige CPU Lastung bleiben.
Das wäre das einzige, was mich stört. Aber ich werde mich damit momentan nicht weiter mit beschäftigen!!

Kurze andere Frage, habe keine Lust nen neuen Thread aufzumachen! Kennt jemand ne Seite, womit ich belegen kann, dass DirectX Zeilenvektoren statt Spaltenvektoren nutzt?
_________________
"Dispatcher und Scheduler sind wie Brüder, bloß anders"
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Patrick
Dark JLI Master



Anmeldedatum: 25.10.2004
Beiträge: 1895
Wohnort: Düren
Medaillen: Keine

BeitragVerfasst am: 27.03.2005, 14:21    Titel: Antworten mit Zitat

Catscratch1 hat Folgendes geschrieben:
Stimmt schon, trotzdem wird immer die 100%ige CPU Lastung bleiben.


Unsinn, dafür gibt es GetMessage

zum anderen: Wat? D3D benutzt Untransponierte Matrizen im gegensatz zu OpenGL! Das hat mit den Vectoren einen feuchten Futzi zu tun
_________________
'Wer der Beste sein will muss nach Perfektion streben und jede Gelegenheit nutzen sich zu verbessern.' - KIA
[ German Game Dev | Boardsuche hilft sehr oft | Google rockt | Wie man Fragen richtig stellt | ICQ#: 143040199 ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Catscratch1
Junior JLI'ler



Anmeldedatum: 20.01.2005
Beiträge: 98

Medaillen: Keine

BeitragVerfasst am: 27.03.2005, 14:33    Titel: Antworten mit Zitat

Natürlich hat das was mit Vektoren zu tun.
DirectX benutzt Zeilen Vektoren, die ein Multiplizieren von vektor * matrix erfordern. OpenGL hat Spaltenvektoren, was dazu führt das es eine matrix*vektor Multiplikation gemacht wird.
Deswegen sind ja auch die Reihenfolgen der Matrixaufrufe unterschiedlich.
_________________
"Dispatcher und Scheduler sind wie Brüder, bloß anders"
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Patrick
Dark JLI Master



Anmeldedatum: 25.10.2004
Beiträge: 1895
Wohnort: Düren
Medaillen: Keine

BeitragVerfasst am: 27.03.2005, 14:38    Titel: Antworten mit Zitat

Hast Du jemals daran gedacht, das die Mathematik bei Beiden die selbe ist, aber der einzigste Unterschied ist die Transponierte Matrix? Was meinste wohl wie so es so einfach ist für Beide die selbe Mathematik zu benutzen nur beim setzen unter OpenGL die Matrix vorher noch zu Transponieren?
_________________
'Wer der Beste sein will muss nach Perfektion streben und jede Gelegenheit nutzen sich zu verbessern.' - KIA
[ German Game Dev | Boardsuche hilft sehr oft | Google rockt | Wie man Fragen richtig stellt | ICQ#: 143040199 ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Catscratch1
Junior JLI'ler



Anmeldedatum: 20.01.2005
Beiträge: 98

Medaillen: Keine

BeitragVerfasst am: 27.03.2005, 14:45    Titel: Antworten mit Zitat

Schon klar. Durch transponieren gehen spaltenvektoren oder zeilenvektoren ineinander über. Du musst ja auch nie wirkliche matrix vektor multiplikationen machen bei OpenGL oder DirectX. In der Mathematik selbst ist das nur ein Unterschied in der Schreibweise, ob du von links oder rechts multiplizierst. Das Ergebnis ist zum schluss dasselbe.
Meinem Dozenten gehts aber darum, welche Notation verwendet wird, ob die von Encarnacao oder die rechtsseitige (hab den Erfinder vergessen, damn)
Das ist Korinthen***rei, aber das muss ich leider machen.

Habe mitlerweile was gefunden.
_________________
"Dispatcher und Scheduler sind wie Brüder, bloß anders"
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
KI
JLI Master


Alter: 39
Anmeldedatum: 04.07.2003
Beiträge: 965
Wohnort: Aachen
Medaillen: Keine

BeitragVerfasst am: 27.03.2005, 20:34    Titel: Antworten mit Zitat

Catscratch1 hat Folgendes geschrieben:
Ich denke aber, dass Threads eher die Richtung ist, die ich meinte.
Mir gehts darum, dass wenn ich ein Bild 5sek statisch zeige und danach erst modifiziere, erst auch dann wieder neu zeichnen möchte und sonst eher das ganze Idle halten möchte.

Du kannst das Bild ja einfach statisch halten indem du nicht neu renderst oder clearst. Also nur Present aufrufen.

Wenn du möchtest, dass dein Programm anderen Anwendungen mehr Zeit zum rechnen gibt, kannst du auch Sleep verwenden.
Manchmal erzielt man sogar mit Sleep(0); wahre Wundereffekte. Wink
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
AFE-GmdG
JLI MVP
JLI MVP


Alter: 45
Anmeldedatum: 19.07.2002
Beiträge: 1374
Wohnort: Irgendwo im Universum...
Medaillen: Keine

BeitragVerfasst am: 29.03.2005, 09:31    Titel: Antworten mit Zitat

Wenn man DirectX (3D) für die Ausgabe benutzt, kann man die Prozessorlast auch einschränken, indem man Present so lange warten lässt, bis ei Vertikaler Bildrücklauf erscheint (PresentParameters.PresentationIntervall nicht auf Immediate setzen)
_________________
CPP:
float o=0.075,h=1.5,T,r,O,l,I;int _,L=80,s=3200;main(){for(;s%L||
(h-=o,T= -2),s;4 -(r=O*O)<(l=I*I)|++ _==L&&write(1,(--s%L?_<(L)?--_
%6:6:7)+\"World! \\n\",1)&&(O=I=l=_=r=0,T+=o /2))O=I*2*O+h,I=l+T-r;}
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> DirectX, OpenGL Alle Zeiten sind GMT
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de

Impressum