Lo que podría causar OpenGL para comportan de manera diferente bajo el “Iniciar depuración” frente a “Iniciar sin depurar” opciones?

StackOverflow https://stackoverflow.com/questions/1799070

Pregunta

He escrito un programa OpenGL 3D-estéreo en C ++. Yo no perder de vista los objetos de posición en mi pantalla debe tener usando timeGetTime después de un timeBeginPeriod (1). Cuando ejecuto el programa con "Iniciar depuración" mis objetos se mueven suavemente a través de la pantalla (como debe ser). Cuando ejecuto el programa con "Iniciar sin depurar" los objetos se congelan occationally por varias actualizaciones de pantalla y luego saltar a una nueva posición. Alguna idea de lo que puede estar causando este problema y cómo solucionarlo?

Edit: Parece que las sacudidas se puede resolver después de un breve retraso cuando corro por "Iniciar sin depurar" si hago clic en el botón del ratón. Mi aplicación es una aplicación de consola (tomo en algunos parámetros cuando el programa se inicia en primer lugar). Podría haber una diferencia en el foco de la ventana entre estas dos opciones? ¿Hay una manera explícita para forzar el foco a la ventana OpenGL (en pantalla completa a través glutFullScreen ();)? Cuando he terminado la toma de entrada de la ventana de la consola

Gracias.

¿Fue útil?

Solución

Lo más común que causa cualquier programa se comporte de forma diferente mientras se está depurando y no se está depurando el uso de variables sin inicializar y especialmente la lectura de la memoria sin inicializar. Asegúrese de que no está haciendo eso.

Algo más específica OpenGL - Usted podría tener algunos problemas con el lavado de comandos. Intente insertar glFinish() después de dibujar cada cuadro.
También podría ser útil para hacer de alguna manera realmente seguro de que cuando la congelación se produce en realidad hay marcos que se queden y no que toda la aplicación está congelada. Si hay la más probable que tenga algún error en la lógica ya que parece que OpenGL hace su trabajo.

Otros consejos

La API timeGetTime solamente tiene una precisión de algo así como 10 ms. Si los intervalos de medición que está a menos de 50 ms o menos, es posible que simplemente ver los efectos de la variación esperada en el temporizador del sistema. No tengo ni idea de por qué el depurador tendría un efecto sobre esto, pero entonces todo el funcionamiento del sistema son un cuadro negro. Se podría utilizar el QueryPerformanceCounter para llegar más alto -Resolución tiempos, que pueden ayudar.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top