多分、私はばかだと思うかもしれませんが、これはうまくいくはずです。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
を使ってインストールしました。
スタティックリンクを試してみてください。/usr/local/bin/sdl-config --static-libsまたは何か – xaxxon
私はsdl2-config --static-libsを実行し、それが出力するフラグでコンパイルしました。コンパイルはうまくいったが、私はまだ同じエラーが発生する。 – Hector
非常に奇妙です。ところで、実際には、そのコマンドを直接ビルドコマンドに入れるのが一般的です。バックテックを置くだけで、そのコマンドをその出力に置き換えます。 – xaxxon