Я пишу игру с OGL / GLFW на C ++.
Моя игра всегда работает на скорости 60 кадров в секунду и без разрывов экрана. После некоторого исследования, кажется, что glfwSwapInterval()
Функция должна иметь возможность включать / отключать V-синхронизацию или ограничение 60 кадров в секунду.
Тем не менее, независимо от значения, которое я передаю функции, частота кадров остается заблокированной на 60, и разрывов нет. Я также проверил настройки композитора на linux и панели nvidia, и они не действуют.
Я предполагаю, что это обычная вещь, есть ли способ обойти эту кепку fps?
Есть ли способ убрать 60 кадров в секунду в GLFW?
Самый простой способ — использовать одиночную буферизацию вместо двойной буферизации. Так как при одиночной буферизации всегда используется один и тот же буфер, нет замены буфера и «vsync».
Использовать glfwWindowHint
отключить двойную буферизацию:
glfwWindowHint( GLFW_DOUBLEBUFFER, GL_FALSE );
GLFWwindow *wnd = glfwCreateWindow( w, h, "OGL window", nullptr, nullptr );
Обратите внимание, что когда вы используете одиночную буферизацию, вы должны объяснить принудительное выполнение команд GL с помощью (glFlush
) вместо замены буфера (glfwSwapBuffers
).
Другая возможность — установить количество обновлений экрана, ожидающих от времени. glfwSwapBuffers
был вызван перед заменой буферов на 0. Это может быть сделано glfwSwapInterval
, после создания текущего контекста OpenGL (glfwMakeContextCurrent
):
glfwMakeContextCurrent( wnd );
glfwSwapInterval( 0 );
Но обратите внимание, работает ли это решение или нет, может зависеть от аппаратного обеспечения и драйвера.
Других решений пока нет …