如何在GLSL ES中定义二维数组



我试过这个代码。

varying vec2 blurCoordinates[2][2];

但它导致了错误:

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

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

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

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

第4.1.9节;数组"(第24页):

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

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

第4.1.9节;数组"(第40页):

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

最新更新