通过 ivec4 索引访问 GLSL vec4 组件

Access GLSL vec4 components by ivec4 indices

在 GLSL 中我可以做到

vec4 data = vec4(1.0, 2.0, 3.0, 4.0);
gl_FragColor = data.xxyy;

但是我可以做些什么吗?

vec4 data = vec4(1.0, 2.0, 3.0, 4.0);
ivec4 indices = ivec4(0, 0, 1, 1);
gl_FragColor = data[indices];

不,你不能。实际上你想要 Swizzle 类似 data.indices.

的东西

你必须构造一个vec4:

gl_FragColor = 
    vec4(data[indices[0]], data[indices[1]], data[indices[2]], data[indices[3]]);

或者你可以使用矩阵乘法:

indices = mat4(vec4(1,1,0,0), vec4(0,0,1,1), vec4(0,0,0,0), vec4(0,0,0,0));
gl_FragColor = indices * data;