2014-01-07 1 views
0

glDeleteProgram() 함수를 사용해야하지만 컴파일러에서 함수가 존재하지 않는다고 알려줍니다.C 프로젝트에서 OpenGL 4.3 사용

#include <stdlib.h> 
#include <stdio.h> 
#include <math.h> 
#include <gl/gl.h> 

나는 glext.h을 포함하도록 시도했지만 작동하지 않았다 ... 나는 gl.h의 내 버전이 너무 오래 생각하지만 난 내 프로젝트에서의 OpenGL 4.3을 설치하는 방법을 찾을 수 없습니다.

+5

'gl.h'의 버전을 업데이트해도 아무 것도 변경하지 않습니다. 'glDeleteProgram (...)'은 OpenGL 2.0 함수이며 OpenGL 2.0의 확장되지 않은 구현은 OpenGL 2.0을 지원하지 않습니다. 확장은 런타임에 발생하므로 헤더를 포함하면 호출 할 유효한 함수 포인터가 아닌 함수 프로토 타입 만 제공됩니다. 가장 쉬운 해결책은 [GLEW] (http://glew.sourceforge.net/)와 같은 것을 사용하여 런타임 확장 로딩을 처리하는 것입니다. –

+0

감사합니다. 시도해 보겠습니다. – neeh

+0

OpenGL 버전 관리에 대해 정말로 이해하지 못합니다. 내 컴퓨터에 OpenGL 4.3이 설치되어 있는데, 왜 내 GL/gl.h 버전 1.1에 아직도 남아 있습니까? GLEW가 해결하기 위해 무엇을합니까? 당신은 GLEW가 "확장 기능을로드"하지만 확장 기능은 어디에 있다고 말합니까? 이것들을 다운로드합니까? – neeh

답변

1

플랫폼과 함께 제공되는 gl.h 헤더의 목적이 정확히 무엇인지 혼란스러워합니다. 나는 아래에서 더 잘 설명하려고 노력할 것이다. 그러나이 헤더와 플랫폼의 OpenGL 라이브러리는 매우 관련이 있고 (기본적으로 불변)주의해야한다. OpenGL 4.3을 "설치"한다고하면이 헤더가 속한 비정상적인 라이브러리를 실제로 보완하는 것입니다 (런타임에는 컴파일 타임이 아닌). 이러한하지만 OpenGL은 매우 원시적 소프트웨어 구현 (이 경우 1.1)와 마이크로 소프트 윈도우 배 등


플랫폼은/확장 런타임의 소프트웨어 구현을 대체 할 수있는 디스플레이 드라이버를 설치하는 방식으로 설계되어 있습니다. Microsoft는 I nstallable C lient D 강으로이 시스템을 참조합니다.

GLEW는 디스플레이 드라이버와 인터페이스하여 1.1 이상의 새로운 OpenGL 부분을 모두로드합니다. GLEW를 사용하지 않으면 Microsoft Windows에서 ~ 1997 년에 작성된 소프트웨어 구현의 기능에 국한되며 이후로 업데이트 된 적이 없습니다. <GL/gl.h>은 Windows에서 항상 1.1이됩니다. 드라이버가 GL 확장을 담당하고 디스플레이 드라이버 에 직접 소프트웨어를 컴파일/링크하지 않기 때문입니다.

GLEW는 특별한 것이 아닙니다. 확장 사양 here을 읽고 필요한 모든 확장 기능 프로토 타입, 열거 형 및 상수 값이 포함 된 고유 헤더를 작성할 수 있습니다. 그러나 수년 동안이 작업은 엄청나게 지루했습니다. 현재 120 개가 넘는 ARB 확장이 있음). GLEW는 기본적으로 공개 된 모든 주요 확장 사양을 하나의 방대한 라이브러리에 패키지화하고 드라이버가 지원한다고 주장하는 모든 확장을로드합니다. 이것은 GL 버전 관리가 효과적으로 작동하는 방식입니다. 그런데 새로운 버전은 이 필요합니다. 확장자가 필요합니다. †


위로 하루에, MiniGL drivers라고이 피비린내 나는 끔찍한 일들이 있었고, 퀘이크 1 같은 게임은 실제로 링크를 직접했다 3Dfx의와 파워 VR 같은 공급 업체의 매우 원시적이고 독점적 인 드라이버. 다행히도, 우리는 그 당시의 길입니다.

+0

훌륭한 대답을 해주신 덕분에, 필자는 마침내 OpenGL 호환성 제한의 이유를 이해하게되었습니다. – neeh

관련 문제