您不能使用不受支持的扩展名,驱动程序将返回编译错误.但是,您可以直接从GLSL代码检查某些扩展的可用性吗?有这样的事吗?
#version XXX core
#if supported(EXT_some_extension)
#extension EXT_some_extension: enable
#endif
...
Run Code Online (Sandbox Code Playgroud)
更新:根据Nicol的Bolas回答.是的,这也出现在我的脑海中,但由于某种原因,它不起作用
#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;
...
Run Code Online (Sandbox Code Playgroud)
宏"useLayout"总是设置为空白空间,但如果我只保留#enable指令而没有条件,它将使用它(我的驱动程序支持它).看起来没有定义扩展,它是其他东西(可能?)(#if defined(ARB_explicit_attrib_location)也不起作用)
Nic*_*las 17
#if supported(EXT_some_extension)
#extension GL_EXT_some_extension: enable
#endif
Run Code Online (Sandbox Code Playgroud)
您正在尝试编写有条件地使用某个扩展名的着色器.做你想做的事的正确方法是这样的:
#extension EXT_some_extension: enable
#ifdef GL_EXT_some_extension
//Code that uses the extension.
#endif //GL_EXT_some_extension
Run Code Online (Sandbox Code Playgroud)
每个具有GLSL功能的OpenGL扩展都将具有特定功能#define.enable如果扩展名不在,标志只会发出警告.如果它不活动,#ifdef则不会触发.
| 归档时间: |
|
| 查看次数: |
5170 次 |
| 最近记录: |