您不能使用不受支持的擴展,驅動程序將返回編譯錯誤。但是,你能直接從GLSL代碼檢查一些擴展的可用性嗎?有沒有這樣的事情?GLSL:檢查是否支持擴展
#version XXX core
#if supported(EXT_some_extension)
#extension EXT_some_extension: enable
#endif
...
UPDATE:根據尼科爾的流星錘答案。是的,出現在我的腦海裏過,但由於某些原因,它不工作
#version 150 core
#extension ARB_explicit_attrib_location : enable
#ifdef ARB_explicit_attrib_location
#define useLayout layout(location = 2)
#else
#define useLayout //thats an empty space
#endif
in vec2 in_Position;
useLayout in vec2 in_TextureCoord;
...
宏「useLayout」始終設置爲空的空間,但如果我只剩#enable
指令無條件將使用它(我的驅動程序支持它)。看起來擴展沒有被定義,它是別的東西(可能?)(#if defined(ARB_explicit_attrib_location)
不起作用)
Nicol Bolas是對的。您只是忘記了擴展名定義的GL_'前綴... – derhass
剛剛意識到這一點。謝謝你的幫助。 – TomatoMato