如何在GLSL ES中定义2d数组?

时间:2015-11-18 16:53:14

标签: opengl-es glsl glsles

我已尝试过此代码。

varying vec2 blurCoordinates[2][2];

但它导致错误:

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

2 个答案:

答案 0 :(得分:1)

正如genpfault的回答中所提到的,GLSL从一开始就不支持多维数组。

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

答案 1 :(得分:1)

没有#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参数的类型可以是有符号或无符号整数,类型的选择不会影响结果数组的类型。数组只有一个维度(“[]”中的单个数字),但是,可以声明数组的数组。任何类型都可以形成一个数组。

     

...