首页 > 解决方案 > 检查是否启用了 GLSL 扩展?

问题描述

有什么方法可以检查是否启用了 GLSL 扩展?也就是说,#extension <extname> : enable在当前编译单元中的代码块之前的某个地方有一个指令:

#extension GL_OES_standard_derivatives : enable

像这样的东西:

#if extension_enabled( GL_OES_standard_derivatives )
    // do stuff with fwidth()
#else
    #error Code won't work without GL_OES_standard_derivatives!
#endif

标签: opengl-esglslpreprocessor

解决方案


每个具有 GLSL 语言对应项的 OpenGL 扩展(即:可以进入#extension声明的内容)都包含一个用于该扩展名的名称,如果该扩展名已启用,则#define该名称将被设置为。1例如,ARB_shader_image_size 扩展是针对 GLSL 的,因此如果在着色器中成功启用扩展,GL_ARB_shader_image_size#defined 为1.

所以你可以用它#ifdef GL_ARB_shader_image_size来封装需要扩展的代码。


推荐阅读