문제

나는 Windows에서 Dev-C ++에서 라이브러리를 재건하려고했다. 그러나 그 동안 추가 한 셰이더 기능은 지원되지 않으며 컴파일러는 관련 기능을 찾을 수 없습니다 (:: glcreateshader (), :: glcreateprogram () 등).

인터넷과 DEV-C ++ 폴더를 파고 들면서 OpenGL 구현 (GL.H)은 v1.1이라는 것을 알았습니다. 내가 찾았 어 추천 최신 헤더를 다운로드하려면 SGI. 그러나 GL3.H가 면밀히 조사한 후 GL.H가 어쨌든 내 프로젝트에 포함되어 있지 않다는 것을 깨달았으며 SDL/SDL_OPENGL.H를보고 있어야합니다.

편집하다: sdl_opengl.h 하다 GL.H 포함 그리고 해당 기능의 프로토 타입을 선언합니다. 따라서 문제는 왜 AME가 링커 오류보다는 컴파일 타임 오류를 제공 했습니까?

(내 라이브러리는 Mingw32, libopengl32, libsdl, libsdl_image 및 libsdl_mixer에 대해서만 링크됩니다.

Dev-C ++ 및 SDL과 함께 OpenGL v2.0 셰이더를 어떻게 사용할 수 있습니까?

도움이 되었습니까?

해결책

GL.H는 OpenGL 1.1에만 해당됩니다 (경우에 따라 사용중인 파일의 버전과 운영 체제에 따라 최대 1.3). 추가로 필요한 다른 모든 것에 대해 glext.h 그리고 아마도 glxext.h (Linux/UNIX) 또는 wglext.h (창).

최신 버전의 OpenGL의 모든 기능은 런타임에 연결되어야합니다. 따라서 사용하려면 올바른 기능 주소를 가져와 기능 포인터에 할당해야합니다. 이 작업을 수행하는 가장 쉬운 방법은 글리.

수동 방식은 다음과 같습니다.

PFNGLCREATESHADERPROC glCreateShader = NULL;
glCreateShader = (PFNGLCREATESHADERPROC) wglGetProcAddress("glCreateShader");

또는 Linux의 경우 :

PFNGLCREATESHADERPROC glCreateShader = NULL;
glCreateShader = (PFNGLCREATESHADERPROC) glXGetProcAddress((GLubyte*) "glCreateShader");

glext.h를 포함하기 전에 gl_glext_prototypes를 정의하면 첫 번째 줄을 생략 할 수 있습니다.

편집하다: sdl_opengl.h에는 glext.h의 사본이 포함 된 것처럼 보입니다 (최신 정보는 아님). 따라서 사용하는 경우 위의 것이 여전히 유효해야합니다. SDL_OPENGL.H를 포함하기 전에 SEPERATE GLEXT.H를 사용하려면 NO_SDL_GLEXT를 정의해야합니다. 또한 GL_GLEXT_PROTOTYPES가 정의되지 않거나 직접 작성하는 한 기능 프로토 타입을 사용할 수 없습니다.

edit2 : 분명히 SDL에는 자체 GetProcadDress 기능이 호출됩니다 sdl_gl_getprocaddress.

다른 팁

런타임에 함수의 주소를로드 할 수 있습니까?

typedef GLhandle (APIENTRYP PFNGLCREATESHADERPROC) (GLenum shaderType);
PFNGLCREATESHADERPROC glCreateShader = NULL;
glCreateShader = (PFNGLCREATESHADERPROC)wglGetProcAddress("glCreateShader");

typedef GLhandle (APIENTRYP PFNGLCREATEPROGRAMPROC) ();
PFNGLCREATEPROGRAMPROC glCreateProgram = NULL;
glCreateProgram = (PFNGLCREATEPROGRAMPROC)wglGetProcAddress("glCreateProgram");
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top