25

我尝试使用最新版本的 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 2010Code::Blocks上没有任何错误甚至警告

  • 是的,我确信在我的 IDE 上设置了 SFML,基本代码可以工作,但会显示这些错误,更高级的代码会将所有精灵和文本显示为框。

  • 我自己没有编译 SFML

  • 我的 gcc 版本是 4.6.2

  • 我的 gcc 是 DW2 的

我没有得到任何结果,我什至不知道如何远程接近解决这个问题,甚至不知道从哪里开始。

编辑 我无法向您展示我的所有代码,它有 20 多个文件,我几乎 90% 确定这不是我的代码,我在上面已经说过:我可以在任何 IDE 上运行此代码而不会出现任何警告甚至错误除了 qt 创建者。

4

6 回答 6

28

这是因为您没有初始化 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();

编辑 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

祝你好运 ;)

于 2013-02-24T17:40:05.233 回答
7

应用户 3648895 的要求,我将我的答案单独发布在评论之外。

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

于 2015-02-08T00:45:06.740 回答
7

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

于 2017-05-11T00:51:20.473 回答
1

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

于 2015-05-02T19:54:38.903 回答
1

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

于 2020-05-02T16:07:48.533 回答
1

它在 GLEW 的文档中明确提到

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

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

于 2021-08-16T09:39:07.630 回答