2016-07-11 11 views
0

Ich verwende Visual Studio 2013 und OpenGL, um eine Simulation zu erstellen. Und ich benutze die keboard Eingänge, um bestimmte Änderungen in den Variablen vorzunehmen und das Update wird in dem Fenster angezeigt, das erstellt wurde.CPU-intensive OpenGL-Funktionen

Es gibt jedoch eine kleine Verzögerung zwischen dem Drücken der Taste und der geänderten Ausgabe im Fenster.

Ich habe versucht, mit den Visual Studio Diagnostic Tools und sah, dass es 2 wichtige Funktionen, die CPU-intensiv war.

Eine war eine Benutzerfunktion, die ich erstellt und eine andere war ‚Anzeige/main/__ tmainCRTStartup/mainCRTStartup

ich dies ein GLUT-Funktion gehe davon aus. Ist das normal oder mache ich etwas falsch?

Jede Hilfe wäre willkommen.

void keyboard (unsigned char key, int x, int y) 
{ 
switch (key) 
{ 
    case 'r': case 'R': 
    if (filling==0) 
    { 
     glPolygonMode (GL_FRONT_AND_BACK, GL_FILL); 
     filling=1; 
    } 
    else 
    { 
     glPolygonMode (GL_FRONT_AND_BACK, GL_POINT); 
     filling=0; 
    } 
    break; 
    case 27: 
    exit(0); 
    break; 
} 
} 

.

void display(void) 
{ 
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 
glMatrixMode(GL_MODELVIEW); 
glLoadIdentity(); 
glRotatef(-90,0.0,1.0,0.0); 
glRotatef(-90,1.0,0.0,0.0); 

rotation_x = rotation_x + (rotation_x_increment - rotation_x)/50; 
rotation_y = rotation_y + (rotation_y_increment - rotation_y)/50; 
rotation_z = rotation_z + rotation_z_increment; 

if (rotation_x > 359) rotation_x = 0; 
if (rotation_y > 359) rotation_y = 0; 
if (rotation_z > 359) rotation_z = 0; 

if(rotation_x_increment > 359) rotation_x_increment = 0; 
if(rotation_y_increment > 359) rotation_y_increment = 0; 
if(rotation_z_increment > 359) rotation_z_increment = 0; 

glRotatef(rotation_x,1.0,0.0,0.0); 
glRotatef(rotation_y,0.0,1.0,0.0); 
glRotatef(rotation_z,0.0,0.0,1.0); 

glTranslatef(x_translate,0.0,0.0); 
glTranslatef(0.0,y_translate,0.0); 
glTranslatef(0,0,z_translate); 


glEnd(); 
glutSwapBuffers(); 
glFlush(); // This force the execution of OpenGL commands 
} 

.

+1

'mainCRTStartup' die übergeordnete Funktion Laufzeitbibliothek, die Ihr' main' nennt. Alles, was Ihnen sagt, ist, dass 'main' viel Zeit in Anspruch nimmt, was vernünftig ist. –

+0

Ich würde versuchen, einen Schlaf (0) oder Schlaf (10) zu dieser Schleife hinzufügen, um zu sehen, ob es einen Unterschied macht, und auch die glFlush() zu entfernen; –

+0

Stoppe feste Pipeline, vielleicht wird es schneller laufen;) –

Antwort

2

Ich habe den Code in ein neues Projekt kopiert, ich habe die Anzeigefunktion geändert, um ein Dreieck zu zeichnen, und es funktioniert sehr schnell.

(Ich weiß, es sollte ein Kommentar sein, keine Antwort, aber ich habe nicht genug Ruf, um Kommentare hinzuzufügen).

PD: Sie können

ändern
glTranslatef(x_translate,0.0,0.0); 
glTranslatef(0.0,y_translate,0.0); 
glTranslatef(0,0,z_translate); 

zu

glTranslatef(x_translate,y_translate,z_translate);