2014-01-07 26 views
0

我需要使用函數glDeleteProgram(),但編譯器告訴我該函數不存在。我覺得我的gl.h的版本太舊,但我無法找到如何在我的項目安裝的OpenGL 4.3 ...在C項目中使用OpenGL 4.3

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

我想包括glext.h,但沒有奏效。

+5

更新你的'gl.h'版本不會改變任何東西。 'glDeleteProgram(...)'是一個OpenGL 2.0函數,並且您的平臺未擴展的OpenGL實現不支持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時,你實際上是在補充(在運行時而不是編譯時)這個頭文件所屬的不靈活的庫。


平臺,如Microsoft Windows附帶一個非常原始的軟件實現的OpenGL(1.1在這種情況下),而是設計在安裝顯示驅動程序可以擴展/替換在運行時軟件實現這樣的方式。微軟將此係統稱爲I nstallable C lient D河流。

對於所有的意圖和目的,GLEW與您的顯示驅動程序接口並加載OpenGL的所有部分比1.1更新。在不使用GLEW的情況下,您僅限於軟件實現的功能,這些功能在Microsoft Windows上是在〜1997年編寫的,從此以後從未更新過。 <GL/gl.h>在Windows上始終爲1.1,因爲驅動程序負責擴展GL,並且不會將軟件直接編譯/鏈接到顯示驅動程序。你可以閱讀擴展規範here,並用你需要的所有擴展函數原型,枚舉和常量值來編寫你自己的頭文件...但是,多年來這個任務變得荒謬乏味(目前有超過120個ARB擴展)。 GLEW基本上將所有主要發佈的擴展規範打包到一個大型庫中,並將加載您的驅動程序聲稱支持的每個擴展。這實際上是GL版本控制的作用方式,每個新版本歸結爲需要的擴展。


早在一天,有這些血腥可怕的東西叫做MiniGL drivers,和遊戲一樣雷神之錘1實際上直接鏈接確實從喜歡的3Dfx以及PowerVR廠商極其原始和專有的驅動程序。幸運的是,我們已經過去了那些日子。

+0

感謝您的優秀回答,我終於明白了OpenGL兼容性限制的原因。 – neeh