Я использую Visual Studio 2013 и OpenGL для создания симуляции. И я использую вкладки keboard для внесения определенных изменений в переменные, и обновление отображается в созданном окне.CPU intesive OpenGL функции
Однако есть небольшая задержка между нажатием клавиши и измененным выходом в окне.
Я попытался использовать инструменты диагностики Visual Studio и увидел, что есть две ключевые функции, которые были интенсивными в ЦП.
Одна была пользовательская функция, которую я создал, а другой был «дисплей/главная/__ tmainCRTStartup/mainCRTStartup
Я предполагаю, что это функция GLUT. Так это нормально или я делаю что-то неправильно?
Любая помощь будет оценена по достоинству.
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
}
.
int main(int argc, char **argv)
{
IntroDisplay();
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
glutInitWindowSize(screen_width,screen_height);
glutInitWindowPosition(0,0);
glutCreateWindow("Ultrasonic Testing");
glutDisplayFunc(display);
glutIdleFunc(display);
glutReshapeFunc (resize);
glutKeyboardFunc (keyboard);
glutSpecialFunc (keyboard_s);
glutMouseFunc(mouse);
glutMotionFunc(mouseMove);
init();
glutMainLoop();
return 0;
}
'mainCRTStartup' является библиотека времени выполнения родительского функция, которая вызывает ваш' main'. Так что все это говорит вам, что «главное» занимает много времени, что разумно. –
Я бы попытался добавить Sleep (0) или Sleep (10) в этот цикл, чтобы узнать, не имеет значения, а также удалить glFlush(); –
Остановить использование фиксированного конвейера, возможно, он будет работать быстрее;) –