Не удалось инициализировать GLEW. Отсутствующая версия GL
Я попытался настроить SFML 2.0 с последней версией создателя qt, правильно настроил SFML и импортировал небольшую игру, которую написал в visual studio. После компиляции я получаю это:
Что я пробовал
- Переустановка всего пакета qt SDK и среды разработки qt с нуля
- Переустановка SFML
- переустановка mingw
- Я пытался написать простую программу, чтобы убедиться, что это не мой код, программа компилируется правильно, но когда я закрываю приложение, я получаю ошибки OpenGL, что не является нормальным
- Я пытался опубликовать тему на форумах SFML, но безрезультатно.
- Поиск в Google ошибок показывает несколько результатов, которые относятся к OpenGL и которые слишком локализованы, они не относятся ко мне, нет ответа на этот вопрос в SFML 2.0
Дополнительные детали
Я использую Windows XP SP3, последнюю версию mingw и qt SDK и SFML
Код, с которым я пытаюсь работать, работает без ошибок и даже предупреждений в Visual Studio 2010 и Code::Blocks.
- Да, я уверен, что SFML установлен в моей среде IDE, базовый код работает, но показывает эти ошибки, а более сложный код отображает все спрайты и текст в виде блоков.
Я не собирал SFML сам
Моя версия gcc 4.6.2
Мой GCC является DW2 один
Я не получаю результатов, я даже не знаю, как удаленно приблизиться к решению этой проблемы, даже с чего начать.
РЕДАКТИРОВАТЬ Я не могу показать вам весь мой код, это более 20 файлов, и я почти на 90% уверен, что это не мой код, я сказал это выше: я могу запустить этот код без каких-либо предупреждений или даже ошибок в любой IDE кроме создателя Qt.
6 ответов
Это потому, что вы не инициализируете OpenGL. Пример с избытком lib.
Неправильно:
glewInit(); // ERROR MISSING GL VERSION
glutInitDisplayMode(GLUT_RGB);
Хорошо:
glutInitDisplayMode(GLUT_RGB);
glewInit();
РЕДАКТИРОВАТЬ Я думаю, что для SFML:
sf::Window App(sf::VideoMode(400, 400, 32), "Window");
glewInit();
РЕДАКТИРОВАТЬ 2 Проверьте этот код.
#include <SFML/Window.hpp>
#include <iostream>
#include <GL/glew.h>
int
main(int, const char**)
{
GLenum err;
std::cout << "Start" << std::endl;
std::cout << "Test 1" << std::endl;
if ((err = glewInit()) != GLEW_OK)
std::cout << glewGetErrorString(err) << std::endl;
std::cout << "Init window" << std::endl;
sf::Window app(sf::VideoMode(400, 400, 32), "Windows");
std::cout << "Test 2" << std::endl;
if ((err = glewInit()) != GLEW_OK)
std::cout << glewGetErrorString(err) << std::endl;
std::cout << "End" << std::endl;
return 0;
}
Мой вывод:
Start
Test 1
Missing GL version
Init window
Test 2
End
Компилировать с: g++ -W -Wall -Werror main.cpp -lsfml-window -lGLEW
Удачи;)
По просьбе user3648895 я публикую свой ответ отдельно от комментариев.
Для тех, кто использует GLFW вместо SFML, вам нужно вызвать glewInit() после glfwMakeContextCurrent
Если вы используете glew с glfw, используйте glfwMakeContextCurrent
( https://github.com/Cloudef/glhck/issues/15)
Для тех, кто использует функции Renderer SDL2, это должно быть сразу после SDL_CreateRenderer
,
Помещаем glewInit(); после создания sf::window, которое решает мою проблему для использования glew с sfml
это четко указано в документации GLEW
«Сначала вам нужно создать допустимый контекст рендеринга OpenGL и вызвать glewInit() для инициализации точек входа расширения. Если glewInit() возвращает GLEW_OK, инициализация прошла успешно, и вы можете использовать доступные расширения, а также основные функции OpenGL»
если вы используете GLFW, вы должны вызвать эту функцию после "glfwMakeContextCurrent(window)".