C++ 失败请求的X错误:BadValue(整数参数超出操作范围)

C++ 失败请求的X错误:BadValue(整数参数超出操作范围),c++,sdl-2,C++,Sdl 2,也许只是我傻了,但我相信这应该行得通 #include <SDL2/SDL.h> #include <GL/glew.h> struct Display { SDL_Window* window; SDL_GLContext context; }; Display* init() { SDL_Init( SDL_INIT_EVERYTHING ); SDL_GL_SetAttribute( SDL_GL_CONTEXT_MAJOR_VERSION

也许只是我傻了,但我相信这应该行得通

#include <SDL2/SDL.h>
#include <GL/glew.h>

struct Display
{
  SDL_Window*   window;
  SDL_GLContext context;
};

Display* init()
{
  SDL_Init( SDL_INIT_EVERYTHING );

  SDL_GL_SetAttribute( SDL_GL_CONTEXT_MAJOR_VERSION, 3 );
  SDL_GL_SetAttribute( SDL_GL_CONTEXT_MINOR_VERSION, 3 );
  SDL_GL_SetAttribute( SDL_GL_CONTEXT_PROFILE_MASK , SDL_GL_CONTEXT_PROFILE_CORE );

  SDL_Window* window = SDL_CreateWindow( "Ice Engine",
                                         800, 600,
                                         SDL_WINDOWPOS_CENTERED,
                                         SDL_WINDOWPOS_CENTERED,
                                         SDL_WINDOW_OPENGL );
  if ( !window )
  {
    printf( "%s\n", SDL_GetError() );
    return nullptr;
  }

  SDL_GLContext context = SDL_GL_CreateContext( window );

  if ( !context )
  {
    printf( "%s\n", SDL_GetError() );
    return nullptr;
  }

  glewExperimental = GL_TRUE;
  if ( glewInit() != GLEW_OK )
    return nullptr;

  return new Display{ window, context };
}

int main( int argc, char** argv )
{
  Display* display = init();

  bool running = true;
  SDL_Event e;

  while( running )
  {
    while( SDL_PollEvent( &e ) )
      if ( e.type == SDL_QUIT )
        running = false;

    SDL_GL_SwapWindow( display->window );
  }

  delete display;
  SDL_Quit();
}
我尝试过不设置OpenGL上下文版本,但是我得到了相同的错误


我试着切换到GLFW3,一切正常。它为我创建了一个窗口和一个OpenGL 3.3核心概要文件上下文。因此,SDL2似乎存在问题。我正在运行Ubuntu15.10,我通过命令行安装了它:
sudo apt install libsdl2 dev
您调用的
SDL\u CreateWindow
不正确。您混淆了x、y和宽度、高度设置。正确的方法是:

SDL_Window* window = SDL_CreateWindow("Ice Engine",
                                      SDL_WINDOWPOS_CENTERED,
                                      SDL_WINDOWPOS_CENTERED,
                                      800, 
                                      600,
                                      SDL_WINDOW_OPENGL );

看。除此之外,您的代码看起来还不错。

您调用的
SDL\u CreateWindow
不正确。您混淆了x、y和宽度、高度设置。正确的方法是:

SDL_Window* window = SDL_CreateWindow("Ice Engine",
                                      SDL_WINDOWPOS_CENTERED,
                                      SDL_WINDOWPOS_CENTERED,
                                      800, 
                                      600,
                                      SDL_WINDOW_OPENGL );

看。除此之外,您的代码看起来还不错。

如果还没有静态链接,请尝试静态链接?就像/usr/local/bin/sdl config——static libs或somethingI运行sdl2 config——static libs并使用它输出的标志进行编译。编译进行得很顺利,但我仍然得到相同的错误。非常奇怪。顺便说一下,将该命令直接放入build命令中实际上是常见的做法。。只要在它周围加上反勾号,它就会用它的输出替换该命令。如果还没有,请尝试静态链接它?就像/usr/local/bin/sdl config——static libs或somethingI运行sdl2 config——static libs并使用它输出的标志进行编译。编译进行得很顺利,但我仍然得到相同的错误。非常奇怪。顺便说一下,将该命令直接放入build命令中实际上是常见的做法。。只要在它周围加上反勾号,它就会用它的输出替换该命令。我知道我是在装傻。我以前做过很多次,但从上次开始已经有一段时间了。谢谢,我知道我是在装傻。我以前做过很多次,但从上次开始已经有一段时间了。谢谢