2013-07-23 5 views
22

좋아요, 그래서 저는 왜 내가 왜 GLEW가 필요한지 알지만, 한 가지만 요.GLEW는 무엇을하고 왜 필요합니까?

아마도 최신 버전의 OpenGL을 버전 3.0 이상에서 사용하고 있거나 Core Profile을 사용하고있는 경우에는 glGenVertexArrays 같은 컴파일 오류가 발생하지 않아서 GLEW가 필요합니다.

그래서 GLEW는 우리가 사용하고자하는 현대 OpenGL 기능을 포함하여 약간의 배경 작업을 수행합니다.

그 외에도 다른 작업을 수행합니까? 또한 어떻게 작동합니까?

예를 들어, 크로스 플랫폼 컴파일 기능이 향상 되었습니까? (Linux에서 Windows 또는 OS X로 이동하는 경우 코드를 수정하지 않아도됩니까?)

그래픽 하드웨어의 "플랫폼 간 차이"가 개선 되었습니까? 예를 들어 다음과 같은 두 개의 동일한 컴퓨터가 있다고 가정 해 봅시다. OS가 하나의 시스템에서 OpenGL 4.3 명령을 사용하여 컴파일됩니다. 다른 시스템에 OpenGL 3.3 만 지원하는 그래픽 카드 또는 드라이버가 있으면 GLEW가 도움이됩니까? (OpenGL의 이전 버전에 대한 셰이더 컴파일 가능)

그래서 당신은 아마 내가 실제로 GLEW이 무엇을 모르는 볼 수 있습니다 또는 그것을 어떻게하는지

마지막 점;.? 사람이 GLFW와 GLEW를 사용하는 방법을 알고 있나요 내가 게시 할 수있는 별도의 QUES로 사실.

답변

11

GLEW는 '필수'가 아닙니다. glcorearb.h 헤더 나 그와 비슷한 것을 사용할 수 있습니다. 그러나 일부 기능과 링크하면 대상 플랫폼에 있어야하며 그렇지 않으면 프로그램이 실행되지 않습니다. GLEW 및 다른 사람들이 정확히이를 처리합니다. 즉, GL 함수와 직접 연결하지 않고 초기화 단계 후에 함수 포인터를 얻습니다. 그것은 당신이 런타임에 어떤 확장 기능이 사용되고 어떤 기능이 사용되는지를 확인할 수있게합니다.

이식성을 돕는 유일한 방법은 함수 포인터를 얻는 것입니다.이 코드는 wglGetProcAddress/glxGetProcAddress 일 수 있으며 사과 OSes와 유사합니다. 아니, 사실이 아닙니다. 그러나 다양한 GL 확장이 가능합니다.

GL은 원하는 GL 초기화 라이브러리에 터치 포인트가 필요하지 않습니다. GL 컨텍스트를 생성 한 후 glewInit을 호출하면됩니다.

+0

창을 만든 다음 glewInit()을 호출하면 segfault 오류가 발생합니까? – user3728501

+0

@EdwardBird : 해당 창에서 OpenGL 컨텍스트를 만들었습니까? glewInit을 호출 할 때 OpenGL 컨텍스트가 활성화되어 있습니까? – datenwolf

+0

그래, 그래도 문제는 해결 됐어. 어쨌든 고마워. ( – user3728501

5

제대로 초기화 내가 keltar의 대답의 의견이 점을 둘 것입니다 glewInit();

를 호출하기 전에는 OpenGL 컨텍스트 를 작성해야합니다 및wglMakeCurrent() 호출해야 glew합니다,하지만 난 방법을 볼 수 없습니다.

+0

고마워 .- upvoted – user3728501