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