2015-01-05 3 views
2

OSX OpenGL 프로젝트를 OpenGL 4.1로 업데이트하려고합니다. 내 셰이더는 #version 410을 사용하며 모든 것이 효과적이며 꽤 멋지다. 오늘 나는 새로운 NSOpenGLPFAOpenGLProfile 값이 4.1이므로 픽셀 형식 프로필을 NSOpenGLProfileVersion3_2Core에서 NSOpenGLProfileVersion4_1Core으로 업데이트했으며, 이제는 렌더링이 으로 매우 어둡습니다.은 느립니다. 내 픽셀 형식 초기화 코드는 다음과 같습니다.OSX에서 OpenGL 4.1로 프로젝트 업그레이드 - NSOpenGLProfileVersion4_1Core를 사용하면 렌더링 속도가 느려짐

NSOpenGLPixelFormatAttribute attrs[] = 
{ 
    NSOpenGLPFADoubleBuffer, 
    NSOpenGLPFADepthSize, 24, 
    NSOpenGLPFAOpenGLProfile, NSOpenGLProfileVersion4_1Core, 
    0 
}; 

NSOpenGLPixelFormat *pf = 
    [[NSOpenGLPixelFormat alloc] initWithAttributes:attrs]; 

아무도 왜 이렇게 느린 지 알 것입니다. 업데이트 할 항목이 있습니까?

+0

내가 그 일정에 익숙하지 않은입니다. 10.9가 릴리즈되고 GL 4.1 컨텍스트를 도입했을 때, 상수는 여전히 'NSOpenGLProfileVersion3_2Core'이었으며 상수가 플랫폼이 지원하는 가장 높은 버전 컨텍스트를 제공한다는 것이 이해되었습니다. 마치 하드웨어 대신 레퍼런스 소프트웨어 렌더 경로를 제공하는 것처럼 들립니다. –

+0

답장을 보내 주셔서 감사합니다! 나는이 상수를 사용하기 위해 [glfw] (https://github.com/glfw/glfw) 프로젝트가 업데이트 된 것을 보았다. 그래서 나는 그것이 작동하고 있다고 가정했다 ... 나는 당신이 정확하다고 믿는다. 4_1 상수. 어쩌면 요세미티에만 유효 할 것입니다 ... –

+0

아, 당신은 절대적으로 옳습니다. 나는 github을 확인하고 ['nsgl_context.m'] (https://github.com/glfw/glfw/blob/439417a22c584360775ce89450c3548a7a4d28fc/src/nsgl_context.m)의 131 행을 보았습니다. OS X 10.10에서만 작동하는 프리 프로세서 지시문이 있습니다. 그래서 그것은 10.10에 특정한 변화처럼 보입니다. –

답변

1

매버릭스에서 NSOpenGLProfileVersion4_1Core을 사용하면 전체 소프트웨어 폴백이 발생합니다. 이것은 요세미티에는 문제가되지 않습니다.

0

NSOpenGLPFApenGLProfile을 사용하면 NSOpenGLProfileVersion3_2Core (10.9 또는 10.10)에서 실제로 OpenGL 및 GLSL 버전 4.1을 사용할 수 있습니다. 두 경우 모두 나 자신을 사용했습니다.

NSOpenGLProfileVersion3_2Core는 잘못된 이름입니다. 실제로 3.2가 아닌 최신 버전을 사용할 수 있습니다.

확인이 당신의 prepareOpenGL 방법에서 다음 호출로 사실 수 있습니다 :

NSLog(@"OpenGL version = %s", glGetString(GL_VERSION)); 
NSLog(@"GLSL version = %s", glGetString(GL_SHADING_LANGUAGE_VERSION)); 
+0

이것은 괜찮은 정보입니다 (NSOpenGLProfileVersion3_2Core는 잘못된 버전 IMO가 아닌 최신 버전 3.2 이상을 지원합니다). 그러나 질문에 대답하지 않습니다. NSOpenGLProfileVersion4_1Core가 나를 위해 속도 저하를 유발 한 이유는 NSOpenGLProfileVersion4_1Core on Mavericks의 문제입니다 (Apple 개발자에 따르면). –

+0

죄송합니다. 문제가 발생하지 않고 버전 4.1을 구현할 대안을 제공한다고 생각했습니다. 사실 NSOpenGLProfileVersion4_1Core가 유효한 프로필 옵션으로 Apple docs에 나열되지 않습니다. – jwlaughton

+0

'NSOpenGLProfileVersion3_2Core'는 의미 상 * 최신 버전을 사용 가능하게하지 않습니다. 3.2와 호환되는 GL 엔진을 의미합니다. 현재 OS X의 모든 드라이버에 구현 된 최신 버전은 4.1과 호환되며 3.2 버전과 호환됩니다. 그러나 Apple이 4.2 이상을 구현하면 더 이상 3과 호환되지 않습니다.2) a) Apple은 사용되지 않는 기능이 실제로 제거 된 순방향 호환 컨텍스트를 사용하고 b) 4.2는 3.2에있는 기능을 사용하지 않기 때문에. NSOpenGLProfileVersion4_1Core''에 대해 혼동 사람들을 위해 –