OpenGL C++(制作简单窗口时抛出错误)

Posted

技术标签:

【中文标题】OpenGL C++(制作简单窗口时抛出错误)【英文标题】:OpenGL C++ (Error thrown while making simple window) 【发布时间】:2020-05-17 18:38:10 【问题描述】:

在 C++ 中创建一个基本的 openGL 窗口时,我得到一个错误。我在 Visual Studio 19 上使用 GLFW 和 GLAD,我很确定我的计算机规格足够好。我想我正确链接了我所有的 glfw 文件,并且 Glad 的所有内容都正确附加。

The error: Exception thrown at 0x00000000 in OpenGL.exe: 0xC0000005: Access 
           violation executing location 0x00000000.

我编写的完整代码(一些来自教程)。是的,包含很奇怪,但所有包含都正确添加,我确定。 :`

#include <GLFW/glad.h>                                       
#include <GLFW/khrplatform.h>
#include <GLFW/glfw3.h>

int main()

    GLFWwindow* window;

    /* Initialize the library */
    if (!glfwInit())
        return -1;

    /* Create a windowed mode window and its OpenGL context */
    window = glfwCreateWindow(640, 480, "Hello World", NULL, NULL);
    if (!window)
    
        glfwTerminate();
        return -1;
    

    /* Make the window's context current */
    glfwMakeContextCurrent(window);

    float vertices[] = 
    -0.5f, -0.5f, 0.0f,
     0.5f, -0.5f, 0.0f,
     0.0f,  0.5f, 0.0f
    ;

    unsigned int buffer;
    glGenBuffers(1, &buffer);

    glBindBuffer(GL_ARRAY_BUFFER, buffer);
    glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);

    /* Loop until the user closes the window */
    while (!glfwWindowShouldClose(window))
    
        /* Render here */
        glClear(GL_COLOR_BUFFER_BIT);

        /* Swap front and back buffers */
        glfwSwapBuffers(window);

        /* Poll for and process events */
        glfwPollEvents();
    

    glfwTerminate();
    return 0;

【问题讨论】:

你没有初始化 GLAD。 你试过调试吗?你在某处有一个空指针 @HolyBlackCat 哦,有什么我会怎么做的例子吗?因为,我认为没有函数可以初始化高兴,只有 glfw。 在调试器中运行你的代码,它会准确地告诉你哪个指针是空的 可能 NULL 指针是 glGenBuffer (或主要是其他 gl-call),它在初始化后不为空。 【参考方案1】:

你必须高兴:)

#include <glad/glad.h>
int main(int argc, char **argv)  
  // .. setup the context 
  if(!gladLoadGL()) 
   
   printf("Something went wrong!\n");    
   exit(-1); 
   
printf("OpenGL %d.%d\n",  GLVersion.major, GLVersion.minor);
 // .. render here .. 

【讨论】:

以上是关于OpenGL C++(制作简单窗口时抛出错误)的主要内容,如果未能解决你的问题,请参考以下文章

useEffect 用于设置输入值时抛出错误

Flutter导航到新页面时抛出错误

C# char.isupper 在将数字放入字符串索引时抛出错误 [关闭]

PouchDB 复制在复制时抛出错误

.NET 控制台应用程序在计划时抛出错误。手动执行时运行良好

Java 小程序在从迭代器数组中删除对象时抛出错误