2017-05-14 22 views
0

最近OpenGLとLWJGL 2(Java)を使用して独自のゲームを作成しました。その後、プログラミングスキルを向上させたいと思って、C++でOpenGLを使う方法を学び始めました。 LWJGLでOpenGLのバージョンがサポートされているシェーダのバージョンと等しくない

私は#version 330を使用することができますが、C++とSDL2と私だけ#version 110を使用していますが、glGetString(GL_VERSION)戻り3.0 Mesa 12.0.6ことができます。

私はこのような私の窓の初期化:

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

SDL_Init(SDL_INIT_EVERYTHING); 

SDL_GL_SetAttribute(SDL_GL_RED_SIZE, 8); 
SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE, 8); 
SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE, 8); 
SDL_GL_SetAttribute(SDL_GL_ALPHA_SIZE, 8); 
SDL_GL_SetAttribute(SDL_GL_BUFFER_SIZE, 32); 
SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1); 
SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 24); 


m_window = SDL_CreateWindow(title.c_str(), SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, width, height, SDL_WINDOW_OPENGL|SDL_WINDOW_RESIZABLE); 
m_glContext = SDL_GL_CreateContext(m_window); 


GLenum status = glewInit(); 

if(status != GLEW_OK){ 
    std::cerr << "Glew failed!" << std::endl; 
} 

どこに問題があるの?

+0

設定してみてください 'SDL_GL_SetAttribute()' SDL_Init '後の呼び出し()' ... –

+0

何 ' glxinfo | grep "シェーディング言語バージョン"とは何ですか? – keltar

答えて

0

OpenGLコアプロファイルをリクエストする必要があります。

デフォルトでは、OpenGL互換性プロファイルが取得されます。互換性プロファイルを使用すると、Mesaで実行している場合はバージョン3.0に、MacOSで実行している場合は2.1に制限されます。コアプロファイルを使用すると、新しいバージョンにアクセスできるようになります。

LinuxまたはWindowsでAMDまたはnVidiaのドライバを使用している場合、これは不要です。あなたは、ウィンドウを作成する前に

SDLでは、この行を追加することにより、コアファイルを要求することができます。

SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_CORE); 
+0

それは部分的に働いた。今度は 'SDL_GL_CONTEXT_MAJOR_VERSION'と' SDL_GL_CONTEXT_MINOR_VERSION'をクラッシュせずに3.3に設定することができますが、シェーダで '#version 330'を使用してもエラーはスローされますが、サポートされているGLSLのバージョンは1.10,1.20,1.30,1.00 es、3.00 es –

関連する問題