2017-11-08 47 views
0
// SDL 2.0.6, glew 2.1.0 

SDL_Init(SDL_INIT_EVENTS | SDL_INIT_VIDEO); 

SDL_Window *w = SDL_CreateWindow("Open GL", 0, 0, 1000, 1000, SDL_WINDOW_SHOWN | SDL_WINDOW_OPENGL); 

SDL_GLContext ctx = SDL_GL_CreateContext(w); 

// values returned by SDL_GL_GetAttribute are commented 
SDL_GL_SetAttribute(SDL_GLattr::SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_CORE); // doesn't help 
SDL_GL_SetAttribute(SDL_GLattr::SDL_GL_CONTEXT_MAJOR_VERSION, 4); // 4 
SDL_GL_SetAttribute(SDL_GLattr::SDL_GL_CONTEXT_MINOR_VERSION, 5); // 5, these two accept even 10.10 without error actually, I also tried not calling them and had 2.1 in return 
SDL_GL_SetAttribute(SDL_GLattr::SDL_GL_DOUBLEBUFFER, 1); // 1 
SDL_GL_SetAttribute(SDL_GLattr::SDL_GL_RED_SIZE, 8); // 8 
SDL_GL_SetAttribute(SDL_GLattr::SDL_GL_GREEN_SIZE, 8); // 8 
SDL_GL_SetAttribute(SDL_GLattr::SDL_GL_BLUE_SIZE, 8); // 8 
SDL_GL_SetAttribute(SDL_GLattr::SDL_GL_DEPTH_SIZE, 24); // 16 
SDL_GL_SetAttribute(SDL_GLattr::SDL_GL_STENCIL_SIZE, 8); // 0 

//SDL_GLContext ctx = SDL_GL_CreateContext(w); // nothing gets rendered if this is called here instead 

//SDL_GL_MakeCurrent(w, ctx); // doesn't help 

if (ctx == 0){ // never fails 
    cout << "context creation error" << endl; 
} 

glewExperimental = true; 
GLenum e = GLEW_OK; 
e = glewInit(); 
if (e != GLEW_OK){ // never fails 
    cout << "glew error" << endl; 
} 

내 스텐실 버퍼가 작동하지 않아서 조사에 왔습니다. 모든 SDL_GL_SetAttribute 함수는 0을 반환합니다. 우분투가있는 랩톱에서 동일한 코드 (glew 제외)가 테스트되었으며 깊이/스텐실에 대해 24/8을 반환합니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?OpenGL, glew 및 SDL2를 함께 사용할 수 없습니다.

답변

4

documentation of SDL_GL_SetAttribute 상태

사용

이 기능은 윈도우 생성하기 전에 OpenGL은 윈도우 속성 을 설정합니다.

이 기능은 창을 만든 후에 호출해도 아무런 영향을주지 않습니다.

3

기존 컨텍스트의 특성을 변경할 수 없습니다. SDL_GL_SetAttribute은 다음에 GL 컨텍스트가 생성 될 때 SDL이 사용할 속성을 설정합니다.

//SDL_GLContext ctx = SDL_GL_CreateContext(w); // nothing gets rendered if this is called here instead 

가장 가능성있는 설명은의

SDL_GL_SetAttribute(SDL_GLattr::SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_CORE); // doesn't help 

실제로 작업을 수행한다는 것입니다 및 코드 :

이제 당신은 실제로 나중에 컨텍스트를 만들려고 핵심 프로필에 맞지 않습니다.

+0

답변 주셔서 감사합니다.하지만 필자는 문서를보다 철저히 읽어야합니다. 아직 그것은 내 노트북에서 잘못된 방식으로 작동합니다 ... – Alex