2016-05-02 9 views
0

多分、私はばかだと思うかもしれませんが、これはうまくいくはずです。X失敗した要求のエラー:BadValue(操作の整数パラメータが範囲外です)

#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(); 
} 

私はたぶん新しいものや削除するものを使ってはいけませんが、これは私のプロジェクトを進めるための簡単な設定でした。問題はそれだけで罰金コンパイルですが、私はそれを実行したとき、私はこのエラーを取得:

X Error of failed request: BadValue (integer parameter out of range for operation) 
    Major opcode of failed request: 1 (X_CreateWindow) 
    Value in failed request: 0x0 
    Serial number of failed request: 155 
    Current serial number in output stream: 168 

私は、OpenGLコンテキストのバージョンを設定せずに試してみたが、私はちょうど同じエラーを取得します。

私はGLFW3に切り替えようとしましたが、すべて正常に動作します。私はウィンドウとOpenGL 3.3のコアプロファイルコンテキストを作成します。だから、SDL2の問題だと思われます。私はubuntu 15.10を実行していて、コマンドラインでsudo apt install libsdl2-devを使ってインストールしました。

+0

スタティックリンクを試してみてください。/usr/local/bin/sdl-config --static-libsまたは何か – xaxxon

+0

私はsdl2-config --static-libsを実行し、それが出力するフラグでコンパイルしました。コンパイルはうまくいったが、私はまだ同じエラーが発生する。 – Hector

+1

非常に奇妙です。ところで、実際には、そのコマンドを直接ビルドコマンドに入れるのが一般的です。バックテックを置くだけで、そのコマンドをその出力に置き換えます。 – xaxxon

答えて

2

SDL_CreateWindowは間違って呼び出しています。 x、y、幅、高さの設定が混在しています。正しい方法は、

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

SDL_CreateWindow referenceを参照してください。それ以外は、あなたのコードは正常に見えます。

+0

私は馬鹿だと分かっていました。私は前にこのように多くのことをやったことがありますが、前回よりずっとずっと続いています。ありがとう。 – Hector

関連する問題