我正在尝试在英特尔卡上运行着色器。我发现采样器类型不能声明为结构字段......这很令人失望。
我的着色器,在NVIDIA平台上,编译和运行正常,带有采样器字段的采样器数组和结构。我知道NVIDIA平台比其他平台更宽松,w.t.r。 GLSL语法,但我认为应该在结构和数组中允许采样器类型。
但是,在阅读了this页后,我感到更加困惑。特别是,我发现有趣的是以下引用:
采样器类型的数组是特殊的。在GLSL版本3.30下,采样器 数组可以声明
结构不能包含采样器类型的变量。
所以,我研究了GLSL规范,在搜索时我发现基本类型(para)中的采样器类型,数组可以由基本类型(para)组成,结构成员声明也是如此(第4.1.9段)。我是否误解了规范,或者英特尔驱动程序太“严格”?
有人可以指出这个问题吗?最后一个问题应该是“采样器类型被认为是基本类型?”
答案 0 :(得分:1)
这部分内容尚不清楚?
采样器是基本类型。基本类型可以在数组中。和采样器:
它们只能声明为函数参数或统一变量(参见第4.3.5节“统一”)。
结构中的字段既不是函数参数也不是统一变量。结构本身稍后可以声明为统一,但成员声明不是制服。因此,在结构中声明采样器是违法的。
最好不要将采样器和其他不透明类型视为类型,而应将其视为特殊构造的占位符(如纹理等)。