【发布时间】:2019-01-13 06:42:55
【问题描述】:
我正在尝试使用现代 OpenGL 创建一个 GUI 库。但是我注意到,当其他游戏和程序使用我的 GPU 时间的 ~16-20% 时(当游戏未启动时,在主菜单上)我简单的 glClear() 和交换缓冲区调用使用 ~25-26%(全屏模式)。
我正在使用 glfw 并使用以下代码进行 glew:
#include <GL/glew.h>
#include <GLFW/glfw3.h>
int main() {
if(!glfwInit()) return -1;
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
glfwWindowHint(GLFW_DECORATED, false);
glfwWindowHint(GLFW_RESIZABLE, false);
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
//glfwWindowHint(GLFW_REFRESH_RATE, 60);
GLFWwindow *window = glfwCreateWindow(960, 540, "Untitled Window", nullptr, nullptr);
if(window == nullptr) return -2;
glfwMakeContextCurrent(window);
if(glewInit() != GLEW_OK) return -3;
//glfwSwapInterval(1);
glClearColor(1, 1, 1, 1);
while(!glfwWindowShouldClose(window)) {
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glfwPollEvents();
glfwSwapBuffers(window);
}
glfwTerminate();
return 0;
}
例如,Hearts of Iron IV 启动器占用了我大约 6-7% 的 GPU 时间,而我使用上述代码运行的程序占用了大约 13% 的 GPU 时间。
事实上,我的程序从 4% 开始,几秒钟后上升到 13%。
我有 NVIDIA 的 GeForce GTX 980M 和 Intel HD Graphics 4600(与 NVIDIA 不同,上述代码使用了 ~4%)。
是我的电脑有问题还是编译器/api有问题?
顺便说一句,我测试了有评论部分和没有评论部分,结果非常相似。我也尝试过使用 OpenGL 4,但完全没有影响。
为 NVIDIA 和 Intel GPU 启用了 VSync。
【问题讨论】:
-
您应该检查您的错误返回代码。可能会给你一个提示。
-
例如如果 glfwSwapInterval 由于某种原因失败。
-
这是一个奇怪的分辨率(全高清的 1/4),它不应该是任何 13%,但放大到实际分辨率时会出现一些性能损失。
-
@ZanLynx 没有错误,所有功能都按预期运行。
-
“事实上,我的程序从 4% 开始,几秒钟后上升到 13%。”是的,因为 GPU 进入省电模式并降低时钟。 “GPU利用率”只是一个没有上下文的无意义数字