2

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

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

但是,在阅读了这一页之后,我变得更加困惑。特别是,我发现以下引文很有趣:

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

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

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

有人可以指出这个问题吗?最后一个问题应该是“采样器类型是否被认为是基本类型?”

4

1 回答 1

1

这其中的哪一部分不清楚?

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

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

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

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

于 2012-08-07T12:23:06.633 回答