Не удалось инициализировать 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)".

Другие вопросы по тегам