¿Hay alguna manera de calcular la cantidad de actualizaciones se debe hacer para alcanzar la velocidad de fotogramas deseada, NO sistema específico?
Nº
No hay manera de calcular con precisión cuántos cambios debe ser llamado para llegar a deseao.
Sin embargo, puede medir cuánto tiempo ha pasado desde el último cuadro, calcular el framerate actual según él, compararlo con el framerate deseado, luego introducir un bit de Sleep ing para reducir el framerate actual al valor deseado. No es una solución precisa, pero funcionará.
Encontré eso para Windows, pero me gustaría saber si algo como esto existe en OpenGL. Debería ser algún tipo de temporizador.
OpenGL solo se preocupa por el procesamiento de elementos y no tiene nada que ver con los temporizadores. Además, usar temporizadores de Windows no es una buena idea. Utilice QueryPerformanceCounter, GetTickCount o SDL_GetTicks para medir cuánto tiempo ha transcurrido y para obtener la frecuencia de fotogramas deseada.
¿O de qué otra manera puedo evitar que los FPS caigan o suban drásticamente?
Evita que se levante el FPS durmiendo.
En cuanto a la prevención de la caída de FPS ...
Es increíblemente amplio tema. Veamos. Es algo como esto: use objetos de búfer Vertex o listas de visualización, profile application, no use texturas increiblemente grandes, no use demasiada mezcla alfa, evite OpenGL (sin formato) (glVertex3f), no renderice objetos invisibles (incluso si no se dibujan polígonos, procesarlos lleva tiempo), considere aprender sobre BSP u OCTrees para representar escenas complejas, en superficies y curvas paramétricas, no use innecesariamente muchas primitivas (si hace un círculo con un millón de polígonos, nadie lo hará) notar la diferencia), deshabilitar vsync. En resumen: reduzca al número mínimo absoluto de llamadas de renderizado, número de polígonos renderizados, número de píxeles renderizados, número de mensajes leídos, lea todas las documentaciones de rendimiento disponibles de NVidia, y debería obtener un aumento de rendimiento.
El primero es solo para ralentizar el FPS y es peligroso confiar en la precisión del intervalo de sueño. – young
En algunos casos simples (y el actual) es la primera solución lo suficientemente buena, porque solo necesito unir FPS mientras ejecuto la aplicación, sabiendo que mi velocidad de cuadros nunca disminuyó por debajo de 200 será eficiente. Entonces, tal vez sea peligroso pero simple ingresar a su código sin muchos cambios, es tan bueno como el segundo ... – Raven
"Luego mides la cantidad de tiempo que pasaste en el último fotograma" ¿cómo sabes que el último fotograma está terminado y es hora para medir el retraso? – Allahjane