2014-10-17 2 views
3

Mac OSX Yosemite 버전 10.10과 최신 SDL 버전 (2.0.3)을 실행 중입니다.SDL 2.1 Mac OSX에서 OpenGL 컨텍스트를로드 할 수 없습니다. Yosemite

OpenGL 버전 3 이상을 사용하려고합니다. 아무 것도하지 않으면 내 OpenGL 버전은 2.1 INTEL-10.0.86을 반환합니다.

OpenGL 명령이 작동하지만 이것은 분명히 필요한 버전이 아닙니다.

그래서 몇 가지 조사를 한 후에 SDL로 버전을 변경하는 방법은 SDL을 초기화 한 후 컨텍스트를 정의하기 전에 SDL_GL_SetAttribute(SDL_GLattr attr, int value) 함수를 사용하는 것입니다. 그래서 여기 내 코드입니다 :

if (SDL_Init(SDL_INIT_EVERYTHING) < 0) 
{ 
    printf("Failed to initialize SDL. Error (SDL): %s.\n", SDL_GetError()); 
    return false; 
} 

SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_CORE); 
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 3); 
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 2); 
SDL_GL_SetAttribute(SDL_GL_ACCELERATED_VISUAL, 1); //I read somewhere that this may help 

window = SDL_CreateWindow("Window", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 640, 480, (SDL_WINDOW_OPENGL | SDL_WINDOW_SHOWN)); 

if (!window) 
{ 
    printf("Failed to create the window. Error (SDL): %s.\n", SDL_GetError()); 
    return false; 
} 

context = SDL_GL_CreateContext(window); 

이 코드를 사용하여 OpenGL을 버전은 4.1 INTEL-10.0.86를보고합니다. 이 잘 작동하지만 내 OpenGL 호출을 더 이상 작동하지 그래서 함수를 호출 한 후 OpenGL 오류 확인하고 1282 반환합니다.

이상한 것은 내가이

... 
SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_CORE); 
//SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 3); 
//SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 2); 
//SDL_GL_SetAttribute(SDL_GL_ACCELERATED_VISUAL, 1); //I read somewhere that this may help 
... 

에 코드를 변경할 때 그것은 동일한 출력 4.1 INTEL-10.0.86를 제공하고는 OpenGL 기능 작업 같은 OpenGL은 오류 (1282)과 없음을 반환한다는 것입니다.

마지막 시도도 다른 결과로 실패했습니다.

... 
//SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_CORE); 
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 3); 
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 2); 
SDL_GL_SetAttribute(SDL_GL_ACCELERATED_VISUAL, 1); //I read somewhere that this may help 
... 

반환 된 새의 OpenGL 버전 null하지만 난 1로 2 및 minor_version에로에서 major_version을 변경하면 내 원래 버전 2.1 INTEL-10.0.86에 반환 : 여기에 내 코드이었다.

누구든지이 문제에 대한 해결책을 알고 있습니까? 몇 가지 추가 연구를하고 후 --Edit--

, 모든 상황에 전화가 제대로 초기화되지 후에는 OpenGL은 1282을 반환합니다. 이로 인해 SDL이 컨텍스트를 제대로 만들지 못하는 버그 일 수 있다고 생각됩니다. (나는 정직하게 그다지 모른다. 그래서 나는 사지에있다). SDL에 버그를 제출하고 도움이되는지 확인해 보겠습니다.

가 ... 내 OpenGL은 통화 중에 [glMatrixMode는, glLoadIdentity 함수는, glLoadIdentity 함수가,을 glBegin가
] 더 이상 작동하지

+1

하드웨어 및 드라이버가 버전 3을 지원합니까? "인텔"은 나를 의심하게 만듭니다. – molbdnilo

+0

@molbdnilo https://developer.apple.com/opengl/capabilities/를 사용하면 4.1이 지원됩니다. HD 그래픽 4000을 사용하고 있습니다.또한 http://support.apple.com/kb/HT5942에서 Intel HD Graphics 4000을 검색하십시오. – TrevorPeyton

+0

또한 질문을 통해 내 질문을 개선하거나 문제가 무엇인지 이해하는 데 도움이됩니다. – TrevorPeyton

답변

3

SDL_GL_CONTEXT_PROFILE_CORE ...

이들 모두는 더 이상 사용되지 않으며 핵심 컨텍스트에서는 작동하지 않습니다.

코어 컨텍스트를 계속 사용하려면 더 이상 사용되지 않는 기능을 사용하지 않도록 프로그램을 다시 작성해야합니다.

+0

나는 그것들이 사용되지 않는 것을 알지 못했습니다. OpenGL 4 명령을 사용해 보겠습니다. – TrevorPeyton

+0

그게 그렇게 간단하지 않을 수 있습니다. 어리석은 실수 였지만 내가 찾은 어려움을 알지 못한다. 그래도 감사합니다! :) – TrevorPeyton

+0

@ TrevorPeyton : 문제 없습니다! 다음 번에 [SSCCE] (http://sscce.org/)를 게시해야하지만 핵심 컨텍스트/레거시 GL 명령 연결 끊김은 즉시 식별 가능할 것입니다. – genpfault

관련 문제