OpenGL着色语言基本类型

OpenGL着色语言基本类型,opengl,glsl,Opengl,Glsl,我正在尝试在英特尔卡上运行我的着色器。我发现采样器类型不能声明为结构字段。。。这令人失望 我的着色器,在NVIDIA平台上,使用采样器数组和带采样器字段的结构,编译和运行良好。我知道NVIDIA平台比其他平台更宽松,即GLSL语法,但我认为结构和数组中应该允许使用采样器类型 但是,读完这一页后,我感到更加困惑。特别是,我发现以下引语很有趣: 取样器类型的数组是特殊的。在GLSL版本3.30下,采样器 可以声明数组 结构不能包含采样器类型的变量 因此,我对GLSL规范进行了调查,在搜索时,我发现基

我正在尝试在英特尔卡上运行我的着色器。我发现采样器类型不能声明为结构字段。。。这令人失望

我的着色器,在NVIDIA平台上,使用采样器数组和带采样器字段的结构,编译和运行良好。我知道NVIDIA平台比其他平台更宽松,即GLSL语法,但我认为结构和数组中应该允许使用采样器类型

但是,读完这一页后,我感到更加困惑。特别是,我发现以下引语很有趣:

取样器类型的数组是特殊的。在GLSL版本3.30下,采样器 可以声明数组

结构不能包含采样器类型的变量

因此,我对GLSL规范进行了调查,在搜索时,我发现基本类型中的采样器类型(第4.1段),数组可以由基本类型组成(第4.1段),结构成员声明也是如此(第4.1.9段)。是我误解了规范,还是英特尔驱动程序太“严格”


有人能在这个问题上指出一点吗?最后一个问题应该是“采样器类型被视为基本类型?”

这其中哪一部分不清楚

采样器是基本类型。基本类型可以是数组。和采样器:

它们只能声明为函数参数或统一变量(见第4.3.5节“统一”)

结构中的字段既不是函数参数,也不是统一变量。结构本身稍后可以声明为统一,但成员声明还不是统一的。因此,在结构中声明采样器是非法的


最好不要将采样器和其他不透明类型视为类型,而是将其视为特殊构造(如纹理等)的占位符。

现在我理解了结构问题(的确,NVIDIA允许这样做,而Intel则遵循规范)。此外,链接的wiki页面关于采样器数组是错误的,因为它们应该可以从1.20中获得,不是吗?@Luca:采样器数组可以在GLSL 3.30中声明,这一事实并不妨碍它们在以前的版本中声明。