Есть ли способ убрать 60 кадров в секунду в GLFW? - PullRequest
0 голосов
/ 18 мая 2018

Я пишу игру с OGL / GLFW на c ++.

Моя игра всегда работает со скоростью 60 кадров в секунду и без разрывов экрана.После некоторых исследований кажется, что функция glfwSwapInterval() должна включать / отключать V-синхронизацию или ограничение 60 кадров в секунду.

Тем не менее, независимо от значения, которое я передаю функции, частота кадров остается заблокированной на уровне 60, и разрыв отсутствует.Я также проверил настройки композитора на linux и на панели nvidia, и они не действуют.

Я предполагаю, что это обычная вещь, есть ли способ обойти эту ограничение fps?

1 Ответ

0 голосов
/ 19 мая 2018

Есть ли способ удалить ограничение 60 кадров в секунду в GLFW?

Самый простой способ - использовать одиночную буферизацию вместо двойной буферизации.Так как при одиночной буферизации всегда используется один и тот же буфер, нет замены буфера и нет "vsync".

Используйте glfwWindowHint для отключения двойной буферизации:

glfwWindowHint( GLFW_DOUBLEBUFFER, GL_FALSE );
GLFWwindow *wnd = glfwCreateWindow( w, h, "OGL window", nullptr, nullptr );

Обратите внимание, что когда вы используете одиночную буферизацию, вы должны объяснить принудительное выполнение команд GL с помощью (glFlush) вместо замены буфера (glfwSwapBuffers).


Другая возможность - установить количество экранных обновлений, ожидающих от момента вызова glfwSwapBuffers до замены буферов на 0. Это можно сделать с помощью * 1025.*glfwSwapInterval, после создания текущего контекста OpenGL (glfwMakeContextCurrent):

glfwMakeContextCurrent( wnd );
glfwSwapInterval( 0 );

Но учтите, работает это решение или нет, может зависеть от аппаратного обеспеченияи водитель.

...