【问题标题】:Failed to Initialize GLEW. Missing GL version [closed]无法初始化 GLEW。缺少 GL 版本 [关闭]
【发布时间】:2012-12-25 22:24:32
【问题描述】:

我尝试使用最新版本的 qt creator 设置 SFML 2.0,我已经正确设置了 SFML,并导入了我在 Visual Studio 中编写的一个小游戏。编译后,我得到了这个:

我尝试了什么

  • 从头开始重新安装整个 qt SDK 和 qt creator IDE
  • 重新安装 SFML
  • 重新安装mingw
  • 我尝试编写一个简单的程序以确保它不是我的代码,程序可以正确编译,但是当我关闭应用程序时,出现不正常的 OpenGL 错误
  • 我尝试在 SFML 论坛上发帖,但无济于事。
  • 谷歌搜索错误会显示一些结果,这些结果是 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 创建者。

【问题讨论】:

  • 您的代码初始化有问题。当 GLContext 无效时,GLEW 会抛出此错误。在初始化中检查对象的生命周期,以确保在初始化 GLEW 之前未释放 SFML。
  • @dans3itz 它不可能是我的代码,这在我尝试过的几乎所有 IDE 上都 100% 有效,SFML 从来没有对我这样做过,它通常是 openGL 的东西,我不必担心它
  • 那么错误是 GLEW_ERROR_NO_GL_VERSION - 这意味着 GLContext 要么 A) 未加载,B) 不再有效 - GL 上下文需要在调用 glewInit() 之前创建和验证;不确定自从你搬家后发生了什么变化,但我敢肯定,考虑到它是多么令人沮丧,这很愚蠢:D
  • 在 SFML 中编写一个 hello world 程序会显示相同的错误。这不是肯定的代码,我敢肯定这也很愚蠢,但我什至无法远程知道出了什么问题
  • @Bugster:然后发布hello world程序。

标签: c++ opengl qt-creator sfml glew


【解决方案1】:

这是因为您没有初始化 OpenGL。 以 lib glut 为例。

错误:

 glewInit();  // ERROR MISSING GL VERSION
 glutInitDisplayMode(GLUT_RGB); 

好:

 glutInitDisplayMode(GLUT_RGB);
 glewInit();

编辑我认为是 SFML:

 sf::Window   App(sf::VideoMode(400, 400, 32), "Window");
 glewInit();

EDIT 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

祝你好运;)

【讨论】:

  • 我不应该初始化那个,SFML 应该为我做,我正在使用一个应该初始化 openGL 的库,我不知道如何在 OpenGL 中工作,但我知道如何在 SFML 中工作,但由于此错误而无法正常工作。
  • 我通过将上述解决方案中的glutInitDisplayMode(GLUT_RGB);修改为glutInit(&amp;argc, argv);glutCreateWindow("GLEW Test");得到了GLEW_OK。希望对你有帮助~
  • 对于使用 GLFW 而不是 SFML 的用户,您需要在 glfwMakeContextCurrent 之后调用 glewInit()
  • @syler 应该让您的评论成为单独的问答;吃了我的时间!
  • @Syler 你先生是 WinRar。
【解决方案2】:

应 user3648895 的要求,我将我的答案单独发布到 cmets 之外。

对于使用 GLFW 而不是 SFML 的用户,您需要在 glfwMakeContextCurrent 之后调用 glewInit()

【讨论】:

    【解决方案3】:

    如果您将 glew 与 glfw 一起使用,请使用 glfwMakeContextCurrent (https://github.com/Cloudef/glhck/issues/15)

    【讨论】:

    • 您可以通过描述您认为是提问者问题的原因以及您的回答如何解决此问题来提高回答的质量。
    【解决方案4】:

    对于那些使用 SDL2 的 Renderer 功能的人,它需要在 SDL_CreateRenderer 之后。

    【讨论】:

    • SDL_CreateRenderer 不适用于 openGL,对吧?因为对于 GL,您需要创建一个上下文。
    • 我的代码中没有 SDL_CreateRenderer 调用,但这是一个有用的提示。在创建一些 SDL 之后必须调用 glew 初始化。
    【解决方案5】:

    把 glewInit();在 sf::window 创建解决了我在 sfml 中使用 glew 的问题之后

    【讨论】:

      【解决方案6】:

      它在 GLEW 的文档中明确提到

      “首先您需要创建一个有效的 OpenGL 渲染上下文并调用 glewInit() 来初始化扩展入口点。如果 glewInit() 返回 GLEW_OK,则初始化成功,您可以使用可用的扩展以及核心 OpenGL 功能”

      如果您使用的是 GLFW,那么您必须在“glfwMakeContextCurrent(window)”之后调用 这个函数。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-11-17
        • 2021-07-16
        相关资源
        最近更新 更多