Linux 600fps - Windows 20fps
-
Ich hab mir ne 2D-Engine mit OpenGL und SDL in C++ geschrieben, welche ich sowohl unter Windows als auch unter Linux benutzte. Dazu hab ich mir eine Netzwerk-Klasse geschrieben, die ich ebenfalls unter beiden Systemen benutzten kann.
Nun hab ich auch ein Programm geschrieben, in denen ich beide Klassen benutzte.
Unter Linux läuft mein Programm auch wunderbar und hat gut und gerne zwischen 400 und 600 Frames pro Sekunde, unter Windows jedoch hat es zwischen 8 und 60 Frames pro Sekunde (je nach Rechner)...
Nun würd ich gerne wissen, woran das liegen kann, da ich mir nicht vorstellen kann, dass OpenGL schon bei so was kleinem (so ungefär 30 Quads) schon so ausgebremst ist, und unter Linux gleichzeitig wunderbar funktioniert...
Was auch komisch ist, ist das die Windowsversion mit wine ebenfalls noch gute 400fp/s bringt....So, jetzt frag ich euch, kann das mit einer großen Textur zusammenhängen? (768x512) oder kann das mit WinSock zusammenhängen? Aber auch wenn Winsock nicht verwendet wird, ist es langsam (glaub ich...)
ein Auszug:
FD_ZERO(&fdSetRead); FD_SET(sock,&fdSetRead); timeout.tv_sec=0; timeout.tv_usec=0; #ifdef WIN32 rc=select(0,&fdSetRead,NULL,NULL,&timeout); #else rc = select(sock+1,&fdSetRead,NULL,NULL,&timeout); #endif if(rc > 0) { rc=recv(sock, data, data_len, 0); /* ... */ } /*..*/
-
Versuch mal an verschiedenen Stellen "fprintf(stderr, "Ticks : %d", SDL_GetTickCount();" einzubauen und vergleiche die Zeiten und guck, welche Pasagen am längsten dauern.
Gruß,
Domme
-
Hast du unter Windows auch die richtigen Treiber installiert?
Dark schrieb:
Versuch mal an verschiedenen Stellen "fprintf(stderr, "Ticks : %d", SDL_GetTickCount();" einzubauen und vergleiche die Zeiten und guck, welche Pasagen am längsten dauern.
Dafür gibt es doch Profiler, da muss man nichts am Code ändern und vorallem braucht printf viel Zeit und wird in C++ eigentlich nicht benutzt.
-
JOa, die idee is mir jetzt auch gekommen, aber ich machs mal mit gprof und vergeliche windows/linux ergebnisse... mal sehen
-
kingruedi schrieb:
Hast du unter Windows auch die richtigen Treiber installiert?
Dark schrieb:
Versuch mal an verschiedenen Stellen "fprintf(stderr, "Ticks : %d", SDL_GetTickCount();" einzubauen und vergleiche die Zeiten und guck, welche Pasagen am längsten dauern.
Dafür gibt es doch Profiler, da muss man nichts am Code ändern und vorallem braucht printf viel Zeit und wird in C++ eigentlich nicht benutzt.
Naja, ich verwende "fprintf" nur, wenn ich paar Werte auf ihre Richtigkeit überprüfe o.Ä. . Aber was sind Profiler? Hab ich noch nie was von gehört. Kannst du mir etwas mehr darüber erzählen?
Domme
-
Hm, ich habs jetzt mit nem Profiler versucht, aber es war sinnlos, es gab keine extremen Abweichungen...
Jetzt hab ich das noch an einem weiteren windows-rechner probiert und ebenfalls 400fps bekommen, daher vermute ich jetzt doch, dass es die treiber sein könnten (ich kann es schlecht nachprüfen, da es nicht meine rechner sind)
aber noch ne frage: kann es sein, dass irgendwie irgendwo ein falsches pixelformat ausgewählt worden ist oder ähnliches, so dass es entsprechend langsam läuft? oder kann das nicht sein?