Performance - OpenGL

H.Stony

Aktives Mitglied
Thread Starter
Dabei seit
27.03.2004
Beiträge
562
Reaktionspunkte
0
Code:
#ifdef _WIN32
	#include <windows.h>
	#include <gl\gl.h>
	#include <gl\glut.h>
#endif

#ifndef _WIN32
	#include <glut/glut.h>
#endif

#include <stdlib.h>
#include <iostream.h>

void init(void) 
{
   glClearColor (0.0, 0.0, 0.0, 0.0);
   glShadeModel (GL_SMOOTH);
   glEnable(GL_LIGHTING);
   glEnable(GL_LIGHT0);
   glEnable(GL_DEPTH_TEST);						
   glDepthFunc(GL_LEQUAL);	
}

GLfloat spin=0.0;

void display(void)
{
   glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);	
   glColor3f (1.0, 1.0, 1.0);
   glLoadIdentity ();             /* clear the matrix */
           /* viewing transformation  */
   gluLookAt (0.0, 0.0, 5.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);
   glScalef (1.0, 2.0, 1.0);      /* modeling transformation */ 
   spin+=0.2;
   if(spin>=360) spin=0;
   glRotatef(spin,1.0,1.0,1.0);
   glutSolidCube (1.0);
   glFlush();
   glutSwapBuffers();
}

void reshape (int w, int h)
{
   glViewport (0, 0, (GLsizei) w, (GLsizei) h); 
   glMatrixMode (GL_PROJECTION);
   glLoadIdentity ();
   glFrustum (-1.0, 1.0, -1.0, 1.0, 1.5, 20.0);
   glMatrixMode (GL_MODELVIEW);
}

void keyboard(unsigned char key, int x, int y)
{
   switch (key) {
      case 27:
         exit(0);
         break;
   }
}

void animation(void)
{
   glutPostRedisplay();
}

int main(int argc, char** argv)
{
   glutInit(&argc, argv);
   glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);	
   glutInitWindowSize (500, 500); 
   glutInitWindowPosition (100, 100);
   glutCreateWindow (argv[0]);
   init();
   glutDisplayFunc(display); 
   glutReshapeFunc(reshape);
   glutIdleFunc(animation);
   glutKeyboardFunc(keyboard);
   glutMainLoop();
   return 0;
}

dieser code ist aus einem tutorial aus meinem opengl buchh (ein bisschen modifiziert) die animatin läuft auf mac gewaltig gut...jedoch auch windows total langsam... obwohl der pc um einiges schneller ist...kapier das einfach nicht.....falls jemand einen fehler sieht bitte melden...

PS.: auf mac opengl entwickleln -> unmöglich weil da funktioniert immer alles sofort ;-)
 
kann man das irgendwo mal testen? würde mir das gerne mal anschauen!

was stellt denn das dar? welche grafikkarten haben die beiden rechner?

gruß
mick
 
auf den mac wird der opengl kram mit hilfe der grafikkarte hardware beschleunigt. welches opengl hast du denn da auf windows? wird das auch von der grafikkarte unterstützt? (du könntest jetzt natürlich auch behaupten M$ macht opengl absichtlich langsam auf windows, damit die leute directx benutzen ;))
 
Aus welchem Buch stammt denn der Sourcecode ?
 
opengl programming guide...ich hab das mit der animation aber selber hinzugefügt....ok ein bisschen unsauber...aber das kann nicht das problem sein
hardware problem schließe ich aus! pc geforce 4TI mac: ibook G3
PC schafft ca. 100 fps wobei ibook 800 macht oder so!! prozessor ist am win zu 7% ausgelastet....eher ein treiberproblem oder eben ein problem in meinem code...ich glaub die glu funktion schränkt so ein weil ich hab schon andere programme auf win portiert und die sind super gelaufen

das problem ist: ich hab dieses shema für mein spiel verwendet und das läuft unter windows mies...dann hab ich meine code vereinfacht und hier gepostet....kein opengl programmier?
 
Zuletzt bearbeitet:
Kann mir jemand sagen wie ich diesen Code in Xcode kompiliere?! Irgendwie habe ich keinen Plan wie ich diese GLUT libarys richtig include?!
 
Also erst mal reicht bei

glFlush();
glutSwapBuffers();

nur das glutSwapBuffers(). Das glFlush brauchst du dann nicht mehr machen.

Aber ansonsten... OK. Der Code ist sehr, naja... überfüllt. Viel unnützes Zeug drinnen , aber sollte eigentlich laufen. Läuft denn unter Windows anderes OpenGL-Zeugs gut? Welcher Compiler?

Achja. Ich würde kein Spiel mit GLUT programmieren... Da hast du zu viel Arbeit. SDL ist da leichter.
 
am einfachsten-> c++ tool machen -> add existing framework -> glut und opengl framework inkludieren -> sollte gehen....
aber das nützt eh nichts...auf mac gehts ja super....windows memmt da nur irgendwo :-((((((((((((((((((((((((((
 
wieso zuviel arbeit...und hab noch nie was von sdl gehört...

anderes zeug läuft..wenn ich nur glOrtho verwende läuft alles...kapier es einfach nicht.....
 
also bis jetzt bin ich von glut begeistert...was ist an sdl besser?
 
Naja. Dann kannst du dich ja mal über SDL informieren. SDL ist so etwas wie GLUT nur halt besser mit mehr Möglichkeiten. Auf Spieleprogrammierung optimiert. Z.B. Funktion zum laden von Bitmaps schon integriert.

Naja. Mir ist es egal wie du es machst. War nur ein kleiner Tipp von mir... ;)
 
Zuletzt bearbeitet:
hmmm..hab schon fkt die .raw liest.... is sdl plattformunabhängig... ich schau einfach mal...leider weiß ich immer noch nicht warum auf windows mein zeug so scheiße leuft.... :-(
 
guck doch mal gegen welche windows gl lib du linkst, vielleicht brauchst du eine die für den hersteller deiner grafik-karte...
 
@oneOeight: wenn ich es dann auf einem anderen rechner laufen lasse geht wieder nichts...
 
Hi.

Ich bin's noch mal.

Also das ist jetzt nur ne Vermutung von mir. Ich habe es jetzt nicht getestet.

Dein Programm läuft ja in dem Sinne nicht "ruckliger", sondern einfach nur langsamer. In deinem Programm setzt du spin immer um 0.2 höher. Das heißt bei jedem Zeichenvorgang.

Was ist jetzt wenn GLUT unter OS X das Bild schneller aktualisiert, als das GLUT unter Windows? Richtig. Der Würfel dreht sich schneller. Du hast nämlich keinen Timer drinnen. D.h. auf jedem Rechner dreht sich der Würfel unterschiedlich schnell. Je nach Leistung/GLUT-Version.

Zum Test schreibe mal statt:
glutIdleFunc(animation);

einfach mal:
glutIdleFunc(display);
 
ich hab ja sogar eine fps anzeige......die spricht für sich...nur 200fps und mein ibook 370 und das powerbook 700
ich hab jetzt die displaymode auf single gestellt -> 2500fps am pc aber mit flimmern und schlechter darstellung
--> diese hohe fps würde bedeuten dass es nicht an der glut aktualisierungsgeschwindigkeit liegt
 
Zuletzt bearbeitet:
noch interessant: wenn ich statt diesem cube 230 000 dreicke darstelle läufts unwesentlich langsamer...
 
muss ich eigentlich für jede neuen listenaufruf matrix push und pop matrix aufzurufen?

glPushMatrix();
glRotatef(...);
glCallList(....);
glPopMatrix();
glPushMatrix();
glTranslatef(...);
glCallList(...);
glPopMatrix();
.
.
.

---> sollte das eigentlich nicht nach jedem listenaufruf mit glLoadIdentity aufrufen funktionieren? .. geht nicht...kann mir da jemand ein gutes beispiel geben?


danke mfg h.stony
 
außerdem: auf windows war mein code aufgrund von vsync so langsam...wenn man das ausschaltet -> monster performance
 
Ein bsichen OT: von Pangea Software gibt es neuerdings ein Buch zur Spieleentwicklung auf dem Mac:

http://www.pangeasoft.net/book/index.html

Ich würde mir das Buch gerne zulegen. Im Online-Shop kostet es 39.95 US$.
Durch den sehr niedrigen US$ kriegt man es ja recht günstig, allerdings schrecken mich die 19.95 US$ Versandkosten ab. Ich weiss auch nicht wieso die keine Flaschenpost anbieten ;)

Hat jemand Interesse an einer Sammelbestellung teilzunehmen ? So könnte man sich die Transportkosten teilen um auf ein vernünftiges Maß zu kommen.
 
Zurück
Oben Unten