代码
#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;
}
背景信息
我的操作系统是windows 10的最新版本
我使用visual studio V16.6.3(最新版本)
我很新(今天才知道openGL),正在尝试学习如何使用openGL制作图形
我使用glad和GLFW
问题
该程序应生成一个空白的无响应窗口
除非在运行该程序时,创建了该窗口,但glClear命令返回错误“Project1.exe中0x0000000000000000处抛出的异常:0xC0000005:访问冲突执行位置0x000000000000000000”。
我所做的尝试
(毫不奇怪)注释掉问题代码导致程序正确运行
我已经重新安装了我的图形卡驱动程序
我已经尝试在生成器站点上安装了一组不同的glad组合
我已经尝试在32位和64位(使用COOResponse GLFW位类型)中运行程序
注释掉#include
图像
程序属性:
。 C/C++:
。 。general:https://i.stack.imgur.com/nirho.png
。 链接器:
。 。general: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所做的是为
中的每个GL函数foo
使用一个#define glFoo glad_glfoo
,wighglad_glfoo
作为指向适当类型的函数指针。 所有这些函数指针都初始化为null
。
因此,当您调用GLCLEAR(GL_COLOR_BUFFER_BIT);
时,您实际上调用的是``GLAD_GLCLEAR(GL_COLOR_BUFFER_BIT)`,当然,它以调用地址0结束:
“在Project1.exe中的0x0000000000000000处引发异常:0xC0000005:执行位置0x0000000000000000的访问冲突。”
在调用glad函数指针之前,必须指向以下所有内容:
GladInit
,null
指针,因为glad的工作方式是,保证非null
函数指针暗示函数的存在,因为glad在内部基本上是1。 和2。 在查询函数指针之前。 请注意,对于基础总帐扩展机制,这是不正确的。 您可能查询一个不受支持的函数,结果实现仍然可能提供一个非null
函数指针。 如果实现没有通过GL版本或扩展字符串通告此函数的存在,则调用此函数是未定义的行为。由于glclear
从一开始就存在于每个GL版本中,所以您的所有代码都缺少gladinit
。