为什么 GLFW_CONTEXT_VERSION 3.3 渲染速度比 2.0 慢?
Why does GLFW_CONTEXT_VERSION 3.3 render slower than 2.0?
我有以下代码:
#include <glad/glad.h>
#include <GLFW/glfw3.h>
#define GLFW_INCLUDE_NONE
#include <stdio.h>
#include <stdlib.h>
static void error_callback(int error, const char *description)
{
printf("Error: %s\n", description);
}
int main()
{
glfwInit();
glfwSetErrorCallback(error_callback);
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 2);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 0);
GLFWwindow *window = glfwCreateWindow(800, 600, "Learn OpenGL", NULL, NULL);
glfwMakeContextCurrent(window);
if (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress))
{
printf("Failed to initialize GLAD. Fatal error.\n");
return -1;
}
glfwSwapInterval(1);
while (!glfwWindowShouldClose(window))
{
int width, height;
glfwGetFramebufferSize(window, &width, &height);
glViewport(0, 0, width, height);
glClearColor(0.0f, 0.5f, 1.0f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT);
glfwSwapBuffers(window);
glfwPollEvents();
}
glfwDestroyWindow(window);
glfwTerminate();
return 0;
}
当代码按照上面的方式设置时,GLFW_CONTEXT_VERSION 设置为 2.0,它工作得很好。当我调整 window 大小时,一旦我停止调整大小时,它就会呈现新部分。但是,当我将版本设置为 3.3(这是我想要使用的版本)时,它在整个 window 上散布蓝色时有点滞后(即使在我停止调整它的大小之后),如此处所示: (顺便说一句,我是 运行 Windows)
版本为 2.0 时不会发生这种情况。为什么会这样,我怎样才能让它在 3.3 中呈现和在 2.0 中呈现的一样?
当我将 GLFW_OPENGL_PROFILE
设置为 GLFW_OPENGL_COMPAT_PROFILE
时,它在 3.3 中的工作方式与在 2.0 中一样,但在 GLFW_OPENGL_CORE_PROFILE
中(这是我想要使用的)它不会。我该如何修复它才能在 CORE_PROFILE
?
中正常工作
(我怀疑 GLFW 使用了某种已弃用的函数...我不知道。我使用的是 glfw3,所以它不应该没有任何已弃用的函数吗?)
以下是对我有用的方法。我有一个 Intel UHD Graphics 620 GPU,我更新了我的驱动程序,现在它可以工作了。
旧驱动程序版本为 24.something,新驱动程序版本为 30.0.101.1660。
我有以下代码:
#include <glad/glad.h>
#include <GLFW/glfw3.h>
#define GLFW_INCLUDE_NONE
#include <stdio.h>
#include <stdlib.h>
static void error_callback(int error, const char *description)
{
printf("Error: %s\n", description);
}
int main()
{
glfwInit();
glfwSetErrorCallback(error_callback);
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 2);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 0);
GLFWwindow *window = glfwCreateWindow(800, 600, "Learn OpenGL", NULL, NULL);
glfwMakeContextCurrent(window);
if (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress))
{
printf("Failed to initialize GLAD. Fatal error.\n");
return -1;
}
glfwSwapInterval(1);
while (!glfwWindowShouldClose(window))
{
int width, height;
glfwGetFramebufferSize(window, &width, &height);
glViewport(0, 0, width, height);
glClearColor(0.0f, 0.5f, 1.0f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT);
glfwSwapBuffers(window);
glfwPollEvents();
}
glfwDestroyWindow(window);
glfwTerminate();
return 0;
}
当代码按照上面的方式设置时,GLFW_CONTEXT_VERSION 设置为 2.0,它工作得很好。当我调整 window 大小时,一旦我停止调整大小时,它就会呈现新部分。但是,当我将版本设置为 3.3(这是我想要使用的版本)时,它在整个 window 上散布蓝色时有点滞后(即使在我停止调整它的大小之后),如此处所示: (顺便说一句,我是 运行 Windows)
版本为 2.0 时不会发生这种情况。为什么会这样,我怎样才能让它在 3.3 中呈现和在 2.0 中呈现的一样?
当我将 GLFW_OPENGL_PROFILE
设置为 GLFW_OPENGL_COMPAT_PROFILE
时,它在 3.3 中的工作方式与在 2.0 中一样,但在 GLFW_OPENGL_CORE_PROFILE
中(这是我想要使用的)它不会。我该如何修复它才能在 CORE_PROFILE
?
(我怀疑 GLFW 使用了某种已弃用的函数...我不知道。我使用的是 glfw3,所以它不应该没有任何已弃用的函数吗?)
以下是对我有用的方法。我有一个 Intel UHD Graphics 620 GPU,我更新了我的驱动程序,现在它可以工作了。
旧驱动程序版本为 24.something,新驱动程序版本为 30.0.101.1660。