c++ - 为什么通过GLFW进行的这个简单的OpenGL程序在Intel HD P4600上不起作用?

标签 c++ opengl visual-studio-2019

我正在尝试运行一种曾经可以运行但无法成功运行的最简单的OpenGL 3.3程序。程序始终以负整数返回。

这就是我遇到这种情况的方法。除了遵循本指南LearnOpenGL - Creating a window之外,我没有做任何其他事情。

  • 我下载了GLFW的最新源文件。从Visual Studio 2019的CMAKE GUI应用程序生成了GLFW项目文件(尽管我正在使用免费的Community Edition)。编译了GLFW项目文件,并获得了 glfw3.lib 库文件。在此过程中没有任何错误。 CMAKE显示这是针对64位版本的。
  • 转到GLAD web service website。设置语言= C / C++,规范= OpenGL,API / GL =版本3.3;其他所有内容=无,个人资料=核心。然后网站给了我高兴的文件(.h和.c文件)。
  • 然后,我创建了一个新的C++空项目。在项目的属性的VC++目录中包括头文件的位置( glfw3.h glad.h )和GLFW库文件的位置( glfw3.lib )。在链接器->输入中,我添加了 glfw3.lib opengl32.lib
  • 根据建议在项目中添加了 glad.c 文件。编译了这个新的OpenGL项目。一切正常。
    没有编译错误。没有链接错误。

  • 重要提示:当您第一次构建程序然后第一次运行它时,我可以看到OpenGL窗口的打开,但是在一秒钟之内它会自动关闭。没有任何KB和/或Mouse交互,然后在控制台窗口中得到一个负整数作为返回值。如果我一次又一次地运行程序,除非重新构建然后再次运行它,否则不会看到新的UI窗口。

    使用调试时,它将调用以下异常:
    未处理的异常
    opengl1.exe中0x0000000010002203(EZFRD64.dll)的未处理异常:0xC0000005:访问冲突读取位置0x00000000731A0090。

    我在做什么错?我哪里做错了?

    以下是我的系统配置:

    CPU :Intel Xeon-E3 1246 v3(这是Intel的第4种Geneartion / Haswell架构),
    GPU :集成的Intel HD P4600 / P4700(基本上像所有第4代i5和i7一样,都是Intel HD 4600)
    已安装最新的图形驱动程序(设备管理器中的驱动程序日期:2020年1月21日)。

    “OpenGL扩展查看器”显示了以下核心功能支持:
    OpenGL 3.0:100%支持。
    OpenGL 3.1:100%支持。
    OpenGL 3.2:100%支持。
    OpenGL 3.3:100%支持。
    OpenGL 4.0:100%支持。
    OpenGL 4.1:100%支持。
    OpenGL 4.2:100%支持。
    OpenGL 4.3:100%支持。
    OpenGL 4.4:80%支持。
    OpenGL 4.5:18%支持。
    OpenGL 4.6:9%支持。
    OpenGL ARB 2015:8%的支持。

    以下是我尝试运行的code:
    #include <glad/glad.h>
    #include <GLFW/glfw3.h>
    #include <iostream>
    
    void framebuffer_size_callback(GLFWwindow* window, int width, int height);
    void processInput(GLFWwindow* window);
    
    const unsigned int SCR_WIDTH = 800;
    const unsigned int SCR_HEIGHT = 600;
    
    int main()
    {
        glfwInit();
        glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
        glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 2);
        glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);
        glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
        glfwWindowHint(GLFW_RESIZABLE, GL_FALSE);
    
        GLFWwindow* window = glfwCreateWindow(SCR_WIDTH, SCR_HEIGHT, "LearnOpenGL", NULL, NULL);
        if (window == NULL)
        {
            std::cout << "Failed to create GLFW window" << std::endl;
            glfwTerminate();
            return -1;
        }
        glfwMakeContextCurrent(window);
        glfwSetFramebufferSizeCallback(window, framebuffer_size_callback);
    
        if (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress))
        {
            std::cout << "Failed to initialize GLAD" << std::endl;
            return -1;
        }
    
        while (!glfwWindowShouldClose(window))
        {
            glfwSwapBuffers(window);
            processInput(window);
    
            glClearColor(0.2f, 0.3f, 0.3f, 1.0f);
            glClear(GL_COLOR_BUFFER_BIT);
    
    
            glfwPollEvents();
        }
        glfwTerminate();
        return 0;
    }
    
    void processInput(GLFWwindow* window)
    {
        if (glfwGetKey(window, GLFW_KEY_ESCAPE) == GLFW_PRESS)
            glfwSetWindowShouldClose(window, true);
    }
    
    void framebuffer_size_callback(GLFWwindow* window, int width, int height)
    {
        glViewport(0, 0, width, height);
    }
    

    最佳答案

    RE:那个神秘的EZFRD64.dlla post on Reddit:

    According to google "EZFRD64.dll" mentioned there is a driver for some generic/off-brand "USB Vibration Controller" and appears to be known to cause issues at least on Windows 10.

    See 1 2 3 and many more posts just on the first page of results for that dll.



    在内核中/内核附近运行的垃圾代码可能会导致问题,请在11 :)处拍摄

    关于c++ - 为什么通过GLFW进行的这个简单的OpenGL程序在Intel HD P4600上不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61216788/

    相关文章:

    user-interface - 使用 OpenGL 绘制一个点,但不是在即时模式下

    c# - Visual Studio 2019 社区版是否支持 MVC 5 项目?

    visual-studio-2019 - 如何在 Visual Studio 2019 中自动将分号添加到行尾

    c++ - 为什么修改指向字符串文字的指针的内容是错误的?

    c++ - 为 Google 测试夹具指定构造函数参数

    c - 我的 GLFW 窗口正在显示它后面的内容

    c++ - opengl 中的着色器应该做多少工作?

    ios - 无法弄清楚如何在 Visual Studio 2019 上使用 Xamarin 将 iOS Apps Ad Hoc 发送到某些 iPhone

    c++ - 线程可以混合写入值吗?

    c++ - 在 C++ 中通过指针设置/获取值