VSYNC를 사용하지 않고 FPS를 수정하는 것에 대해 빠른 질문이 있습니다.VSYNC없이 고정 프레임 속도 드로 루프 작성에 대한 생각
현재 그리기 사이의 시간을 계산하는 draw 루프가 있습니다 ( ). 그리고 프레임 속도를 안정화하기 위해 그려야하는 시간을 뺍니다.
static clock_t dt = clock();
static clock_t startDraw;
static clock_t endDraw;
while (_running)
{
update();
// Draw after desired elapsed time
if (clock() - dt >= _timestep)
{
startDraw = clock();
draw();
_window->SwapBuffer();
endDraw = clock();
dt = clock() - (endDraw- startDraw);
}
}
_timeStep는 초당 60 프레임을 표현하기 위해 현재 16,하지만 난 나중에 초당 30 프레임으로 변경 할 수 있습니다 :
는 여기에 내가 지금 무슨이다.
VSYNC가 없으면이 값은 40 ~ 62fps 사이에서 변동되므로 접근 방식이 잘못되었거나 뭔가를 간과하고 있는지 확실하지 않습니다.
내 목표는 VSYNC 토글을 사용하는 것이므로이 기능을 추가하고 싶습니다.
참고 : 렌더링을 위해 OpenGL을 사용하고 있습니다. 대부분 OpenGL_2.0입니다.
야, 내 주요 관심사는 CPU 사용이다. 내 목표는 NDK를 통해 Android에 대한 지원을 추가하는 것입니다. 현재 SwapBuffer로 이중 버퍼링을 사용 중입니다. – redsting
당신이 고려할 수있는 한 가지는 draw() 전에 SwapBuffer를 수행하는 것입니다.그렇게하면 디스플레이가 먼저 새로 고침됩니다 (타이밍 코드로 draw() 비용이 발생하지 않음). 이렇게하면 약간 더 안정적인 재생 빈도가 제공됩니다. 유일한주의 사항은 화면 새로 고침이 항상 1 프레임 뒤가되지만 보통 30fps 또는 60fps 응용 프로그램에서 중요하지 않아야한다는 것입니다. – Skyd