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

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

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

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

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

4

Решение

Есть ли способ убрать 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 );

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

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]