Почему эта простая программа OpenGL через GLFW не работает на Intel HD P4600? - PullRequest
1 голос
/ 14 апреля 2020

Я пытаюсь запустить одну из самых простых программ OpenGL 3.3, которую когда-либо можно было запустить, но она не запустилась успешно. Программа всегда возвращает отрицательное целое число.

Вот как я попал в эту ситуацию. Я ничего не делал самостоятельно, но, следуя этому руководству LearnOpenGL - Создание окна .

  1. Я загрузил последние исходные файлы GLFW. Сгенерировал файлы проекта GLFW из приложения CMAKE GUI для Visual Studio 2019 (хотя я использую бесплатную версию Community Edition). Скомпилировал файлы проекта GLFW и получил файл библиотеки glfw3.lib . Никаких ошибок в этом процессе. CMAKE показал, что это для 64-битной сборки.
  2. Перешел на веб-сайт GLAD . Задать язык = C / C ++, Спецификация = OpenGL, API / GL = Версия 3.3; все остальное = нет, профиль = ядро. Затем веб-сайт дал мне нужные файлы (.h и. c files).
  3. Затем я создал новый пустой проект C ++. Включено расположение файлов заголовков ( glfw3.h , glad.h ) и расположение файла библиотеки GLFW ( glfw3.lib ) в каталоге VC ++ свойств проекта. , В компоновщик -> Ввод, я добавил glfw3.lib и opengl32.lib .
  4. Добавил рад. c файл в проекте как предложено. Скомпилировал этот новый проект OpenGL. Все отлично работает.
    Нет ошибки компиляции. Ошибка компоновки отсутствует.

Важное замечание: Когда вы сначала создаете программу, а затем запускаете ее в первый раз, я вижу открытие окна OpenGL, но внутри секунду он закрывается автоматически; без какого-либо взаимодействия с КБ и / или мышью, а затем я получаю отрицательное целое число в виде возврата в окне консоли. Если я продолжу запускать программу снова и снова, я не увижу это новое окно пользовательского интерфейса, пока не перестрою его, а затем снова не выполню.

Когда я использую отладку, она вызывает следующее исключение:
Необработанное исключение
Необработанное исключение в 0x0000000010002203 (EZFRD64.dll) в opengl1.exe: 0xC0000005: Место чтения нарушения доступа 0x00000000731A0090.

Что я делаю? Где я go ошибся?

Ниже приведена конфигурация моей системы:

ЦП : Intel Xeon-E3 1246 v3 (это архитектура Intel 4-го поколения / Haswell) ,
GPU : интегрированный Intel HD P4600 / P4700 (в основном это Intel HD 4600, как и все остальные 4-го поколения i5s и i7s)
Последний графический драйвер (дата драйвера в диспетчере устройств: 21- Январь-2020) был установлен.

«Средство просмотра расширений 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%.

Ниже приведен код Я пытаюсь запустить:

#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);
}

1 Ответ

2 голосов
/ 14 апреля 2020

RE: таинственная EZFRD64.dll, запись в Reddit :

Согласно упомянутому Google "EZFRD64.dll", упомянутый драйвер для некоторого общего / off- бренд "USB Vibration Controller" и, кажется, известно, что это вызывает проблемы, по крайней мере, на Windows 10.

См. 1 2 3 и еще много постов только на первой странице результатов для этой библиотеки.

Janky-код, работающий в / около ядра, может вызвать проблемы, фильм на 11 :)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...