【问题标题】:OpenGL Shading Language basic typesOpenGL着色语言基本类型
【发布时间】:2012-08-04 07:03:04
【问题描述】:

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

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

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

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

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

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

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

【问题讨论】:

    标签: opengl glsl


    【解决方案1】:

    其中哪一部分不清楚?

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

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

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

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

    【讨论】:

    • 现在我理解了结构问题(实际上 NVIDIA 对此是允许的,而 Intel 则遵循规范)。此外,链接的 wiki 页面关于采样器数组是错误的,因为它们应该从 1.20 开始可用,不是吗?
    • @Luca:采样器数组可以在 GLSL 3.30 中声明这一事实并不妨碍它们在之前的版本中声明。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多