現在、私の Dear ImGui アプリケーション (主に、いくつかのカスタム OpenGL レンダリングを含むデモ ウィンドウ) は、ウィンドウが十分に小さい場合、約 2000 fps で実行されます。これをモニターのリフレッシュ レート (または 60fps のみ) に制限するにはどうすればよいですか?
私の現在のコードは次のようになります。
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;
}
ご覧のとおり、ImGui サンプルで提供されている GLFW および OpenGL 3 の元のサンプル コードと (ほとんどまったく) 違いはありませんglfwWindowHint(GLFW_REFRESH_RATE, 60)
。フルスクリーンモードのウィンドウ。また、リフレッシュ レートをモニターのリフレッシュ レートに制限することもあると思いましたglfwSwapInterval(1)
が、それもしていないようです。どんな助けでも大歓迎です。
編集: GLFW エラー関数と読み込み。