gpt4 book ai didi

c++ - 如何限制 GLFW 窗口中的每秒帧数? (使用亲爱的 ImGui)

转载 作者:行者123 更新时间:2023-12-04 17:41:31 26 4
gpt4 key购买 nike

目前,如果我的窗口足够小,我的 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 错误函数和加载。

最佳答案

设置 glfwSwapInterval(0) 移除 framecap。如果您希望帧速率上限为 60fps,请将 1 传递到函数中。

关于c++ - 如何限制 GLFW 窗口中的每秒帧数? (使用亲爱的 ImGui),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54312897/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com