【问题标题】:Using glew with SDL2将 glew 与 SDL2 一起使用
【发布时间】:2017-07-11 11:26:21
【问题描述】:

当我想同时使用 SDL2 和 glew 时,glewInit() 出现以下错误:

缺少 GL 版本

重现错误的示例:

#include <iostream>

#define NO_SDL_GLEXT
#include <GL/glew.h>
#include "SDL2/SDL.h"
#include "SDL/SDL_opengl.h"

int main(int argc, char **argv)
{
    if(SDL_Init(SDL_INIT_VIDEO) < 0)
    {
        std::cout << "SDL could not initialize! SDL Error: " << SDL_GetError() << std::endl;
        return -1;
    }
    SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 3); // Does nothing
    SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 3); // Does nothing
    SDL_Window *window = SDL_CreateWindow("Example for SO", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 800, 600, SDL_WINDOW_OPENGL);
    if(window == nullptr)
    {
        std::cout << "Window could not be created! SDL Error: " << SDL_GetError() << std::endl;
        return -1;
    }
    glewExperimental = GL_TRUE;
    auto init_res = glewInit();
    if(init_res != GLEW_OK)
    {
        std::cout << glewGetErrorString(glewInit()) << std::endl;
    }
    SDL_DestroyWindow(window);
    SDL_Quit();
    return 0;
}

编译:

c++ (Debian 6.3.0-11) 6.3.0 (gcc)
flags: -std=c++17
libraries:
-L/usr/local/lib -lSDL2 -Wl,-rpath=/usr/local/lib -lGLEW

【问题讨论】:

  • 尝试在glewInit 之前创建上下文auto ctx = SDL_GL_CreateContext(window);。让我知道这是否是问题所在。
  • @freakish 有帮助,谢谢!
  • #include "SDL/SDL_opengl.h" 在 Ubuntu 18.04 上给了我一个错误。我将其删除并看到与您相同的错误; @freakish 的建议随后解决了这个问题。

标签: c++ opengl sdl-2 glew


【解决方案1】:

您需要创建一个 GL 上下文。试试

auto ctx = SDL_GL_CreateContext(window);

glewInit() 通话之前。

【讨论】:

  • 即使在此更改之后,我仍然收到 Missing GL Version 错误,而我缺少的另一件事是调用带有 SDL_WINDOW_OPENGL 标志的 SDL_CreateWindow
猜你喜欢
  • 1970-01-01
  • 2015-04-08
  • 2014-09-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-10
  • 1970-01-01
相关资源
最近更新 更多