【问题标题】:How to define 2d array in GLSL ES?如何在 GLSL ES 中定义二维数组?
【发布时间】:2015-11-18 16:53:13
【问题描述】:

我试过这段代码。

varying vec2 blurCoordinates[2][2];

但它会导致错误:

顶点着色器编译失败。 错误:0:10:'[':语法错误:语法错误 错误:1 个编译错误。没有生成代码。

【问题讨论】:

    标签: opengl-es glsl glsles


    【解决方案1】:

    正如 genpfault 的回答中已经指出的那样,GLSL 从一开始就不支持多维数组。

    扩展 GL_ARB_arrays_of_arrays 确实提供了您正在寻找的功能。它在 4.3 版本中被提升为 OpenGL 核心功能,因此从 GLSL 4.30 开始,您可以在不依赖扩展的情况下使用它。

    【讨论】:

    【解决方案2】:

    没有#version 指令意味着#version 100 禁止使用多维数组:

    Section 4.1.9, "Arrays" (page 24):

    相同类型的变量可以通过声明一个名称后跟括号( [ ] )括起来的大小聚合成数组。数组大小必须是大于零的整型常量表达式(请参见第 4.3.3 节“整型常量表达式”)。使用大于或等于其声明大小的整数常量表达式对数组进行索引是非法的。使用负常量表达式索引数组也是非法的。在函数声明中声明为形式参数的数组必须指定大小。 只能声明一维数组。所有基本类型和结构都可以组成数组。

    如果你使用#version 320 es,你可以声明数组数组:

    Section 4.1.9, "Arrays" (page 40):

    相同类型的变量可以通过声明一个名称后跟括号( [ ] )包含可选大小来聚合到数组中。如果存在,数组大小必须是大于零的常量整数表达式(参见第 4.3.3 节“常量表达式”)。 size 参数的类型可以是有符号或无符号整数,类型的选择不会影响结果数组的类型。数组只有一个维度(“[ ]”中的单个数字),但是,可以声明数组的数组。任何类型都可以组成数组。

    ...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-29
      • 1970-01-01
      • 2020-08-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多