2014-03-24 28 views
1

我在OpenGL應用程序的初始化階段,我添加了一些代碼來檢查各種擴展。我立刻打了一個障礙點:爲什麼GLEW會說我沒有擴展名?

/* Check for EXT_texture_compression_s3tc */ 
if (GLEW_EXT_texture_compression_s3tc) 
    infomore("GL_EXT_texture_compression_s3tc supported.\n"); 
else 
    errormore("GL_EXT_texture_compression_s3tc unsupported.\n"); 

/* Check for anisotropic filtering */ 
if (GLEW_EXT_texture_filter_anisotropic) 
    infomore("GL_EXT_texture_filter_anisotropic supported.\n"); 
else 
    warnmore("GL_EXT_texture_filter_anisotropic unsupported.\n"); 

據此,雙方S3TC和各向異性過濾是通過我的顯卡不支持,即使我知道一個事實,我確實有它。在這個完全沒有問題的項目中,我使用了OpenGL。 GLEW初始化正確(使用glewExperimental = true),我的上下文設置正確,其他一切正常,但由於某種原因,glew認爲我沒有這些擴展。

這是怎麼回事?

+0

可能相關:http://stackoverflow.com/q/18447881/1072468 –

回答

3

請允許我的sume(中等)野性猜測:您是否有機會使用核心配置文件上下文?因爲這個,你使用glewExperimental = true嗎?

問題是GLEW只是關於核心配置文件中斷。它試圖使用glGetString(GL_EXTENSIONS),這在覈心配置文件中是無效的(現代方式是使用glGetIntegerv(GL_NUM_EXTENSIONS, &ext_cnt); for (i=0; i<ext_cnt; i++) glGetStringi(GL_EXTENSION,i)),並且只會產生一個錯誤。 GLEW無法查詢哪些擴展可用。現在,glewExperimental = true所做的是:忽略擴展名似乎丟失的事實,並且無論如何查詢函數指針。這只是一個大問題,而函數指針可能存在的事實並不能保證相應的GL擴展真的存在並且可用。這種混亂的另一個副作用是你正在經歷的事情:對於GLEW,這些擴展只是不存在。

我不知道爲什麼GLEW自數年以來就沒有解決這個問題(甚至有人提出補丁使其與現代核心配置文件兼容),但它看起來像這樣的行爲將長期留在我們身邊。

+0

爲什麼是我正在使用核心配置文件,爲什麼我使用的是glewExperimental。 –

+0

所以基本上,我最好的選擇是不使用glew,呃?很棒的T_T –

相關問題