glad 导致 glfwSwapBuffers 返回错误消息

glad causes glfwSwapBuffers to return error message

本文关键字:错误 消息 返回 glfwSwapBuffers 导致 glad      更新时间:2023-10-16

Code

#include <glad.h>
#include <glad.c>
#include <GLFW/glfw3.h>
int main()
{
glfwInit();
GLFWwindow* window = glfwCreateWindow(640, 480, "Hello World", NULL, NULL);
while (!glfwWindowShouldClose(window))
{
glClear(GL_COLOR_BUFFER_BIT);
}
return 0;
}

背景信息
My Operating System 是 Windows 10 的最新版本
我使用 Visual Studio v16.6.3 (latest(
我是新手(今天刚知道 openGL(,正在尝试学习如何使用 openGL

我尝试过的<</strong>br/>(令人惊讶地(注释掉问题代码导致程序正常运行
我已经重新安装了我的显卡驱动程序
我尝试在发电机站点上安装一堆不同的 glad 组合
我尝试过在 32 位和 64 位运行该程序(使用 cooresponse GLFW 位类型(
注释掉 #include导致程序正常运行

图像
程序属性:
.C/C++:
. .一般:https://i.stack.imgur.com/nirHo.png
.链接器:
. .一般:https://i.stack.imgur.com/zHkLT.png. .输入: https://i.stack.imgur.com/TbEiM.png
文件:
.GLFW:https://i.stack.imgur.com/DTxeX.png
.高兴:https://i.stack.imgur.com/GXNaw.png

行为是完全正确的。所以GLAD 所做的是为<glad.h>中的每个 GL 函数Foo都有一个#define glFoo glad_glFooglad_glFoo是指向适当类型的函数指针。一个;这些函数指针的 ll 初始化为NULL

因此,当您呼叫glClear(GL_COLOR_BUFFER_BIT)时,您实际上会呼叫glad_glClear(GL_COLOR_BUFFER_BIT)当然最终会呼叫地址 0:

"在 Project1 中0x0000000000000000引发异常.exe:0xC0000005:访问冲突执行位置0x0000000000000000。">

在调用 GLAD 函数指针之前,必须执行以下所有操作:

  • 已成功调用gladLoadGL,同时调用线程的 GL 上下文处于活动状态,
  • 将相同的 GL 上下文绑定到您调用 GL 函数的线程(或兼容的线程,但这是特定于平台的(
  • 确保 GL 函数实际上是由实现提供的,例如
    1. 通过检查特定的 GL 版本来保证该功能的存在 1.b( 在上下文创建时请求所需的特定 GL 版本,如果不满足,则进行救助
    2. 通过检查是否存在要求该功能可用性的 GL 扩展
    3. 使用 GLAD,您甚至可以检查NULL指针,因为 GLAD 的工作方式是,可以保证非NULL函数指针暗示函数的存在,因为 GLAD 内部基本上是 1. 和 2. 在查询函数指针之前。请注意,对于底层 GL 扩展机制,情况并非如此。您可能会查询不受支持的函数,但实现仍可能提供非NULL函数指针作为结果。调用该未定义的行为,则实现尚未通过 GL 版本或扩展字符串通告此函数的存在。

由于从一开始就存在于每个 GL 版本中glClear,因此您的所有代码都缺少一个gladLoadGL