opengl - GLSL:检查是否支持扩展

标签 opengl glsl

您不能使用不受支持的扩展名,驱动程序将返回编译错误。但是您可以直接从 GLSL 代码检查某些扩展的可用性吗?有这样的吗?

#version XXX core
#if supported(EXT_some_extension)
#extension EXT_some_extension: enable
#endif

...

更新:根据尼可波拉斯的回答。是的,这也出现在我的脑海中,但由于某种原因,它不起作用
#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) 也不起作用)

最佳答案

#if supported(EXT_some_extension)
#extension GL_EXT_some_extension: enable
#endif

您正在尝试编写一个有条件地使用某个扩展名的着色器。做你想做的事情的正确方法是这样的:
#extension EXT_some_extension: enable

#ifdef GL_EXT_some_extension
//Code that uses the extension.
#endif //GL_EXT_some_extension

每个具有 GLSL 功能的 OpenGL 扩展都有一个特定的 #define为了它。和 enable如果扩展不在附近,标志只会发出警告。如果它不活跃,#ifdef不会触发。

关于opengl - GLSL:检查是否支持扩展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18038224/

相关文章:

c++ - 无法在 OpenGL 上加载多个纹理

c++ - 为什么 Xcode 无法找到 GLEW 动态库,即使它已列在搜索路径中?

glsl - 来自同一程序的多个输出纹理

android - 黑白模式负片滤镜

c++ - "vmath.h"是什么,在哪里?

c++ - QTopengl C++ 简单的二维应用程序

c++ - 使用 OpenGL 在 SFML 中获取正确的鼠标位置

python - 使用 GLSL 进行纹理化(在 PyOpenGL 和 Pygame 中)

c - 如何显示这些小三角形或快速识别它们?

javascript - WebGL:使用两个着色器,第一个着色器的输出作为第二个着色器的输入,只能看到第二个着色器的输出