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

Aktuelle Zeit: Sa Jul 19, 2025 23:36

Foren-Übersicht » Programmierung » Einsteiger-Fragen
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 26 Beiträge ]  Gehe zu Seite Vorherige  1, 2
Autor Nachricht
BeitragVerfasst: Do Feb 04, 2010 23:23 
Offline
DGL Member

Registriert: Do Jan 07, 2010 21:58
Beiträge: 240
also als cpu nutze ich ein
-AMD Athlon X2 Dual Core 4400+ (2x2,3GhZ)
dieser sitzt auf einem Asus M2N SLI Deluxe

ich hab Windows7 Ultimate 64Bit was meine treiber automatisch aktuell hält,

meine fps berechnung sieht wiefolgt aus

jedes mal wenn Render(); ausgeführt wird wird die variable "steps" um 1 erhöht, alle 500ms wird dieser wert mal 2 genommen und an die variable FPS übergeben, danach wird er auf 0 gesetzt um wieder von vorn zählen zu können

das mit dem mal 2 hab ich gerade gemacht manschmal frag ich mich echt was mit mir los ist^^ jetzt haben wir schon 50fps :) aber auch das is ja ni wirklich viel

dann hab ich den fullscreen rausgenommen und mit gluErrorString(glGetError); zu arbeiten

diese sagt mir ungültiger wert, nun muss ich aber gestehen das mir das überhaupt nichts sagt ich hab einige werte
aber ich weiß unterdessen genau was den fehler hervorruft

Code:
  1. procedure DrawGameMenueSzeneOne;
  2. var x : Integer;
  3. begin
  4.   glEnable(GL_LIGHTING);
  5.  
  6.   CalcNewPositions();
  7.  
  8.   for x := 1 to AnzahlObjecte do begin
  9.     gltranslatef(Startszene.posX[x],Startszene.posY[x],Startszene.posZ[x]);
  10.     glrotatef(StartSzene.Rot[x],0,1,0);
  11.       Startszene.Objecte[x].Render(); <<<<----  Genau da ist der ursprung
  12.     glrotatef((360 - StartSzene.Rot[x]),0,1,0);
  13.     gltranslatef(Startszene.posX[x] * -1,Startszene.posY[x] * -1,Startszene.posZ[x] * -1);
  14.   end;
  15.  
  16. end;


{ wir errinern uns StartSzene ist ein record objecte ein array of TWFObject und Render der aufruf für den WFObjectLoader das object zu malen }

kommentiere ich das aus gibt das zwar kein fpsschub aber es kommt kein error mehr

ich hab auch immer weiter auskommentiert bis ich schließlich alles rausgenommen habe sodass nur das notwenidigste ausgeführt wird und selbst da bekomme ich nur max 62fps

€ meine Texturen haben alle eine größe von 128x128 bzw 256x256


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Fr Feb 05, 2010 01:26 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Aug 18, 2007 18:47
Beiträge: 694
Wohnort: Köln
Programmiersprache: Java
Zitat:
ich hab Windows7 Ultimate 64Bit was meine treiber automatisch aktuell hält

Sowas gibts? Und der holt sich wirklich den neuesten von NVidia?

Was macht denn der Loader in der Render-Prozedur?

Wieviele Polygone haben die Objekte?

_________________
Es werde Licht.
glEnable(GL_LIGHTING);
Und es ward Licht.


Zitat aus einem Java Buch: "C makes it easy to shoot yourself in the foot; C++ makes it harder, but when you do it blows your whole leg off"

on error goto next


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Fr Feb 05, 2010 08:26 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Jan 04, 2008 21:29
Beiträge: 419
Wohnort: Lübeck
62fps ist arg verdächtig. Ist dein VSync eingeschaltet? Bei mir hab ich mit eingeschaltetem vsync konstant 62,5 fps.

Zum Loader würde ich sagen, dass da etwas scheif gelaufen ist. Hast du den selbst geschrieben, oder ist der von wo anders? Haben die Objekte die du zeichnest evtl. Fehler, die der Loader nicht berücksichtigt kann?

_________________
Klar Soweit?


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Fr Feb 05, 2010 09:20 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Sleep: Ich weiß nicht wie das Früher war aber mittlerweile ist das eine Methode die Direkt von Windows (Windows API) kommt. Das Sleep eine richtig schlechte Auflösung haben soll habe ich auch schon oft gehört. Mag sein, dass Sleep früher eine sehr schlechte Auflösung hatte und deswegen aktuell mit GetTickCount in einen Topf geworfen wird. GetTickCount hat in der Tat eine Auflösung von 16ms. Bei Test vor 1-2 Jahren lagen meine Messungen von Sleep(1) aber im Bereich von 0.95 -1.95 ms. Tendenziell eher im oberen Bereich.

Windows 7: Ich fand das auch sehr erfrischend als ich Windows 7 bei mir installiert hatte. Der hat direkt einen recht aktuellen Treiber installiert. Allerdings auch wirklich nur den Treiber. Da ich aber gerne das CCC (AMD) haben will habe ich recht schnell den originalen Treiber installiert. Deswegen kann ich nicht sagen wie aktuell der Treiber gehalten wird. Aber ich denke das ist nicht immer der Neuste. Selbst wenn ich nach erscheinen eines neuen Treibers lange warte bietet er mir aktuell keinen neuen Treiber an. Entweder hat er mitbekommen, dass ich einen eigenen installiert habe oder die haben nicht immer den neusten. Gezogen wird der im übrigen immer über das WindowsUpdate. Ich persönlich ziehe aber immer den originalen Treiber vor.

Dropye: Ich tippe auch auf V-Sync. Ohne das Einstellungspanel von NVidia kannst du das vermutlich nicht überprüfen. Und das wird bei dem Windowstreiber wohl nicht dabei sein. Was mich auch etwas irritiert ist, dass du wo du deine Objekte nicht mehr zeichnest keinen signifikanten Unterschied gemerkt hast. Und wenn ich das Richtig verstanden habe, dann sollte da nichts weiter gemacht werden außer Text ausgegeben werden. Das wiederrum lässt darauf schließen, dass dein Treiber keine richtige OpenGL Unterstützung hat (ich würde ms durchaus zutrauen, dass die einen Treiber ohne OpenGL ausliefern. Selbst wenn er von NV kommt). Kannst ja auch testweise mal das TextSuite beispiel BlockLoop_VCL starten. Im Softwaremodus läuft das mit schlappen 80fps wärend in Hardware locker 800+ fps drin sein sollten.


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Fr Feb 05, 2010 09:40 
Offline
DGL Member
Benutzeravatar

Registriert: Di Mai 18, 2004 16:45
Beiträge: 2623
Wohnort: Berlin
Programmiersprache: Go, C/C++
Man kann die genauigkeit nachträglich hoch stellen, dafür gibt es 3 Windowsbefehle.
-timeBeginPeriod
-timeEndPeriod
und der 3. fällt mir gerade nicht ein, der ist zum abfragen welche Auflösung die Sleepfunktion aktuell nutzt(sollte default bei 16,2quetsch liegen, da sie default die gleiche Auflösung wie ein Tick hat) und welche maximal möglich ist(maximal kann man eine genauigkeit von 1Milisekunde erreichen, das kann eigentlich auch jedes System, daher sollten die betroffenen mal in die funktionen oben rein gucken).

_________________
"Wer die Freiheit aufgibt um Sicherheit zu gewinnen, der wird am Ende beides verlieren"
Benjamin Franklin

Projekte: https://github.com/tak2004


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Fr Feb 05, 2010 10:26 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Thomas das ist doch endlich mal eine Aussage. Die Methoden waren mir so nicht bekannt. Aber damit steht ja dann fest, dass die Auflösung von Sleep variable und vom Entwickler manipulierbar ist. Die Methode die du meinst ist wahrscheilich timeGetDevCaps. Minimum liegt bei mir dort direkt bei 1. Denke, dass Laptops da eher einen höheren Wert haben werden.


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Fr Feb 05, 2010 12:41 
Offline
DGL Member

Registriert: Mo Aug 31, 2009 13:19
Beiträge: 151
Die Funktionen sagen mir tatsächlich auch überhaupt nichts...
Nebenbei hab ich gerade mal in der Wiki geschaut ob man da was zum Thema "FPS begrenzen" findet, und siehe da...nichts.
Vielleicht sollte man mal nen kleinen Übersichtsartikel zum Thema Zeitmessung, Framezahlbegrenzung und was damit zusammen hängt verfassen. Immerhin kommen dazu öfter mal Fragen hier im Forum, und es sind ja nu Themen, die in der Grafikentwicklung nicht ganz unwichtig sind...


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Fr Feb 05, 2010 12:52 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Fühl dich frei das zu tun. Ich denke im "Hintergrundwissen" Bereich ist das gut untergrebracht.

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Fr Feb 05, 2010 13:24 
Offline
DGL Member
Benutzeravatar

Registriert: Di Mai 18, 2004 16:45
Beiträge: 2623
Wohnort: Berlin
Programmiersprache: Go, C/C++
Im Prinzip existiert das Problem ja auch nur auf Windows Systemen, da MacOS(UNIX) und Linux Systeme die maximale Auflösung nutzen und die liegt aktuell im Micro/Nanosekunden(teilweise) Bereich und entsprechend hat man auf den Systemen auch eine gute Präzision.
Windows nutzt Milisekunden und mit ein bischen Arbeit bekommt man bei der Zeitmessung noch Microsekunden(QueryPerformanceCounter).
Daher denke ich, dass es bisher nichts ins Wiki gewandert ist, bzw. viele (inkl. mir) lassen es ohne sleep laufen.

_________________
"Wer die Freiheit aufgibt um Sicherheit zu gewinnen, der wird am Ende beides verlieren"
Benjamin Franklin

Projekte: https://github.com/tak2004


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Fr Feb 05, 2010 16:14 
Offline
DGL Member

Registriert: Do Jan 07, 2010 21:58
Beiträge: 240
ahaa^^

ich hab mir gerade eben den neuesten treiber manuel gezogen und dadaaa ich hab wieder alle einstellungen die ich vermisst habe, also merke: Graka treiber aktualisierung über windoof is quatsch...

ich hab herumexperimentiert und bemerkt das ich die einstellngen auf Threaded Optimation (Multiprozzesoring) an hatte und sowie ich das ausmache hab ich gleich 115 fps das sieht schonmal viel besser aus

vsync hab ich auch ausgemacht, aber jetzt war es mir möglich über den treiber eine antisotropische filterung und ein antializing anzuschalten was die ganze zene um ein vielfaches aufwertet ohne viel fps zu verschleudern

€ ich hab blokloop_vcl angemacht das läuft mit 46fps irgendwie fühl ich mich veralbert^^


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Fr Feb 05, 2010 16:22 
Offline
DGL Member
Benutzeravatar

Registriert: Di Mai 18, 2004 16:45
Beiträge: 2623
Wohnort: Berlin
Programmiersprache: Go, C/C++
:shock: Was glaubst du, wo der Treiber wohl her kommt.
Windows baut den sich alle paar monate/größeren Versionen mal neu und dann auch nur WHQL Zertifizierte.
Die hängen immer weiter hinterher, je länger das OS raus ist und keine neuen Service Packs kommen.
Ich glaube aber eher, dass du nur ein NV Display driver hattest und kein richtigen OpenGL Treiber, der bei NV Graphic Driver dabei ist.

_________________
"Wer die Freiheit aufgibt um Sicherheit zu gewinnen, der wird am Ende beides verlieren"
Benjamin Franklin

Projekte: https://github.com/tak2004


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 26 Beiträge ]  Gehe zu Seite Vorherige  1, 2
Foren-Übersicht » Programmierung » Einsteiger-Fragen


Wer ist online?

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