2010-11-30 3 views
2

문서를 확인한 결과 glGenBuffers()이 작동하려면 OpenGL 버전이 1.5 이상이어야합니다. 사용자가 버전 1.5를 가지고 있지만 함수 호출로 인해 충돌이 발생합니다. 이것은 문서의 실수입니까, 아니면 사용자의 드라이버 문제입니까?OpenGL : 사용자가 glGenBuffers()를 지원하는지 확인하는 방법?

VBO에이 glGenBuffers()을 사용하고 있는데, 사용자가 이것을 지원하는지 어떻게 확인합니까?

편집 : glewInit()로 glew을 사용 메신저 VBO

Edit2가 초기화 : 나는 glGenBuffersARB() 함수 호출을 사용자 작업을 얻었다. 하지만 메신저는 언제 내가 glGenBuffers()을 사용해야하고 언제 사용해야합니까? glGenBuffersARB() 그리고 언제 VBO 함수 호출이 지원되지 않으면 VertexArrays를 사용해야합니까?

나는 또한 if(GLEW_VERSION_1_5)이 사용자에게 false를 반환한다는 것을 알았지 만 GL_VERSION은 1.5.0을 주었다.

+0

통화하기 전에 유효한 OpenGL 컨텍스트가 있는지 확인 했습니까? – Bart

+0

나는 그것이 무엇인지, 그리고 그것이 어디에서 검사되는지 전혀 모른다. – Newbie

+0

VBO를 사용하지 않으면 OpenGL에서의 렌더링이 정상적으로 작동합니까? – Bart

답변

0

확인하십시오. link

if (GLEW_VERSION_1_5) 
{ 
    /* You have OpenGL 1.5 */ 
} 

이 glGenBuffersARB가 glGenBuffers을 insted보십시오); 아마 당신을 도울 것입니다; 나는 당신이 단지 1.5 지원을 점검 할 필요가 있다고 생각한다;

+0

VBO를 사용하기 위해 올바른 확장명을 말할 수 있습니까? 아니면 내가 이런 것들을 찾을 수있는 몇 가지 목록을 제공합니다. – Newbie

+0

@Newbie try glGenBuffersARB – Edward83

+0

다른 모든 함수 호출도 * ARB로 변환해야합니까? glBindBuffer()와 glBufferData() 등 – Newbie

2

저는 지금 GLEW 나이 라이브러리들 중 어느 곳에서나 쓸모가 없기 때문에 머물고 싶다고 말할 것입니다. 이것이 제가 항상 해왔 던 방식입니다.

#ifndef STRINGIFY 
    #define STRINGIFY(x) #x 
#endif 
#ifdef WIN32 
    #include <windows.h> 
    #define glGetProcAddress(a) wglGetProcAddress(a) 
#endif 
#ifdef X11 
    #define glGetProcAddress(a) glXGetProcAddress (\ 
    reinterpret_cast<const unsigned char*>(a)  \ 
) 
#endif 

#ifndef GetExtension 
    #define GetExtension(Type, ExtenName)  \ 
    ExtenName = (Type)      \ 
    glGetProcAddress(STRINGIFY(ExtenName)); \ 
    if(!ExtenName)       \ 
    {          \ 
     std:cout << "Your Computer Does Not " \ 
       << "Support GL Extension: " \ 
       << STRINGIFY(ExtenName)  \ 
       << std::endl;    \ 
     exit(1);        \   
    }          \ 
    else         \ 
    {          \ 
     std::cout << "Loadded Extension: " \ 
       << STRINGIFY(ExtenName)  \ 
       << std::endl;    \ 
    } 
#endif 

// then just use this :D 
GetExtension(PFNGLGENBUFFERSARBPROC, glGenBuffersARB) 
// after your done you can do this 
#undef GetExtension 
#undef glGetProcAddress 
// you can then also undef the STRINGIFY macro 
// though it does come in handy. 
+0

X11은 Linux에서와 마찬가지로 X.ORG가 사용되고 OS와 같은 유닉스에서도 GetExtension을 수행하는 MacOSX 방식이 있습니다. 단지 기억할 수 없습니다. – graphitemaster

+0

매크로를 사용하지 않고이 작업을 수행 할 수 있습니까? – Newbie

관련 문제