2015-06-28 140 views
0

在雙緩衝區和預定幀速率下繪製一條線我想用兩個緩衝區編寫一個程序,並在控制檯中顯示每秒30幀的幀速率。我使用的Open GL - C++Open GL

Display() 
    { 
     glutSwapBuffers(); 
    } 

定時器FPS:

 void mytimer(int fps) 
    { 
     glutTimerFunc(1000/30 , mytimer, 0); 
     glutPostRedisplay(); 
    } 

該代碼繪製線條,但我想在一個幀速率每秒30幀畫一條線。

 void drawScene (void){ 
     glClear(GL_COLOR_BUFFER_BIT); 
     glBegin(GL_LINES); 
     glVertex2f(0.0,0.0); 
     glVertex2f(120.0,120.0); 
     glEnd(); 
     glFlush(); 
     } 

    int main (int argc ,char** argv){ 
     glutInit(&argc,argv); 
     glutInitDisplayMode(GLUT_RGB); 
     glutInitWindowSize(360,360); 
     glutCreateWindow("mohammad"); 
     initRendering(); 
     mytimer(fps); 
     //glutDisplayFunc(drawScene); 
     glutDisplayFunc(Display); 
     glutMainLoop(); 
     return (0); 
    } 
+0

Just ...在Display()的頂部調用'drawScene()'。 – genpfault

回答

0

glutTimerFunc(1000/30 , mytimer, 0);告訴過剩 「從現在起,請致電mytimer每1000/30毫秒」。您可能想從main中調用它。否則GLUT將不知道你已經寫了一個定時器功能。

0

第一步。

你的代碼中有這條代碼嗎?

glutIdleFunc(idle); 

如果是,則轉到idle()方法並評論裏面的所有內容。你需要強制glutIdleFunc()不做任何事情。通常情況下,你有這樣的:

// executes every time if there is nothing to do basically. 
void idle() 
{ 
    glutPostRedisplay(); //draw a frame 
} 
// callback 
glutIdleFunc(idle); 

由於回調(glutIdleFunc)調用閒置()每次如果有OpenGL的沒事做,那麼你就無法控制的FPS,你需要禁用此。然後,你的計時器應該完美工作。

這是我的一段代碼限制到60幀/秒。很棒。

void frame_limit(int value) 
{ 
    glutPostRedisplay(); 
    glutTimerFunc(1000/60, frame_limit, 0); 
} 

void idle() 
{ 
    //glutPostRedisplay(); 
} 



void setupCallbacks() 
{ 
    glutCloseFunc(cleanup); 
    glutDisplayFunc(display); 
    glutIdleFunc(idle); 
    glutTimerFunc(1000/60, frame_limit, 0); 
} 

void init(int argc, char* argv[]) 
{ 
    createShaderProgram(); 
    createBufferObjects(); 
    setupCallbacks(); 
} 

int main(int argc, char* argv[]) 
{ 
    init(argc, argv); 
    glutMainLoop(); 
    exit(EXIT_SUCCESS); 
}