Как ограничить количество кадров в секунду в окне GLFW? (Используя Дорогой ImGui)C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Как ограничить количество кадров в секунду в окне GLFW? (Используя Дорогой ImGui)

Сообщение Anonymous »

В настоящее время мое приложение Dear ImGui (в основном демонстрационное окно с некоторым пользовательским рендерингом OpenGL) работает со скоростью около 2000 кадров в секунду, если мое окно достаточно маленькое. Как я могу ограничить это частотой обновления монитора (или даже просто 60 кадрами в секунду)?

Мой текущий код выглядит так:

Код: Выделить всё

static void glfw_error_callback(int error, const char * description)
{
fprintf(stderr, "Glfw Error %d: %s\n", error, description);
}

int main(int, char **)
{
// Setup window
glfwSetErrorCallback(glfw_error_callback);
if (!glfwInit())
return 1;
const char * glsl_version = "#version 150";
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 2);
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);  // 3.2+ only
glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);            // Required on Mac

glfwWindowHint(GLFW_REFRESH_RATE, 60);

// Create window with graphics context
GLFWwindow * window = glfwCreateWindow(1280, 720, "Dear ImGui GLFW+OpenGL3 example", NULL, NULL);
if (window == NULL)
return 1;
glfwMakeContextCurrent(window);
glfwSwapInterval(1);  // Enable vsync

bool err = gl3wInit() != 0;
if (err) {
fprintf(stderr, "Failed to initialize OpenGL loader!\n");
return 1;
}

// Setup Dear ImGui binding
IMGUI_CHECKVERSION();
ImGui::CreateContext();
ImGuiIO & io = ImGui::GetIO();
(void)io;
// io.ConfigFlags |= ImGuiConfigFlags_NavEnableKeyboard;  // Enable Keyboard Controls

ImGui_ImplGlfw_InitForOpenGL(window, true);
ImGui_ImplOpenGL3_Init(glsl_version);

// Other stylistic setup
...

while (!glfwWindowShouldClose(window))
{
glfwPollEvents();
// Create ImGui Windows
// Rendering
ImGui::Render();
int display_w, display_h;
glfwMakeContextCurrent(window);
glfwGetFramebufferSize(window, &display_w, &display_h);
glViewport(0, 0, display_w, display_h);
glClearColor(clear_color.x, clear_color.y, clear_color.z, clear_color.w);
glClear(GL_COLOR_BUFFER_BIT);
ImGui_ImplOpenGL3_RenderDrawData(ImGui::GetDrawData());

glfwMakeContextCurrent(window);
glfwSwapBuffers(window);
}

// Cleanup
return 0;
}
Как видите, он не отличается (почти совсем) от оригинального примера кода для GLFW и OpenGL 3, приведенного в примерах ImGui, за исключением моего неудачного попытайтесь ограничить частоту обновления с помощью glfwWindowHint(GLFW_REFRESH_RATE, 60), который, как я узнал, влияет только на окно в полноэкранном режиме. Кроме того, я думал, что glfwSwapInterval(1) может также ограничить частоту обновления частотой обновления монитора, но, похоже, он тоже этого не делает. Будем очень признательны за любую помощь.

Изменить: функция ошибки GLFW и загрузка.

Подробнее здесь: https://stackoverflow.com/questions/543 ... dear-imgui
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»