Oli*_*ver 3 opengl-es glsl ios glsles
我试图在iPhone上为OpenGL ES应用程序编写一个简单的顶点着色器,但是我的数组构造函数给我带来了麻烦.
attribute vec4 normal;
attribute vec4 position;
void main(void){
const vec4 vertices[3] = vec4[](vec4(0.25, -0.25, 0.5, 1.0),
vec4(-0.25, -0.25, 0.5, 1.0),
vec4(0.25, 0.25, 0.5, 1.0));
gl_Position = vertices[gl_VertexID];
}
Run Code Online (Sandbox Code Playgroud)
使用此代码时,着色器无法编译,并向我提供了以下错误消息:
错误:0:13:'(':语法错误:数组大小必须出现在变量名后面
与ES 2.0一起使用的GLSL版本不支持常量数组.从规范第30页的"4.3.2恒定限定符"部分:
包含数组的数组和结构可能不会被声明为常量,因为它们无法初始化.
此限制在ES 3.0中解除,在相应部分中说明:
const限定符可以与任何非void透明基本数据类型以及这些的结构和数组一起使用.
作为替代方案,您应该能够使用非常量数组,您可以逐个分配值(未经测试):
vec4 vertices[3];
vertices[0] = vec4(0.25, -0.25, 0.5, 1.0);
vertices[1] = vec4(-0.25, -0.25, 0.5, 1.0);
vertices[2] = vec4(0.25, 0.25, 0.5, 1.0);
Run Code Online (Sandbox Code Playgroud)
或者你可以使用一系列的if陈述.
Ian*_*ald -1
你尝试过戴牙套吗?
const vec4 vertices[3] = {vec4(0.25, -0.25, 0.5, 1.0),
vec4(-0.25, -0.25, 0.5, 1.0),
vec4(0.25, 0.25, 0.5, 1.0)};
Run Code Online (Sandbox Code Playgroud)