GLSL中能否通过ivec4索引访问vec4向量的对应分量?
GLSL原生不支持你示例中data[indices]这种传入ivec4批量索引vec4分量的写法。
原因说明
GLSL中向量的[]运算符仅支持接收单个整数标量作为参数,单次调用只能取出对应位置的单个分量,例如data[0]可以取出vec4的第一个分量,没有内置语法支持一次性传入整数向量批量读取多个分量。你提到的.xxyy这类分量重排语法属于编译期静态语法,重排规则在代码写死编译时就已经确定,不支持运行期动态传入索引修改重排规则。
替代实现方案
如果需要实现运行期动态批量索引分量的效果,可以自行封装工具函数实现,示例如下:
// 动态重排vec4的工具函数 vec4 dynamic_swizzle(vec4 input_vec, ivec4 indices) { // 注意请保证indices各分量取值范围为0~3,越界会导致未定义行为 return vec4( input_vec[indices.x], input_vec[indices.y], input_vec[indices.z], input_vec[indices.w] ); }
你的需求可以调整为如下写法实现相同效果:
vec4 data = vec4(1.0, 2.0, 3.0, 4.0); ivec4 indices = ivec4(0, 0, 1, 1); gl_FragColor = dynamic_swizzle(data, indices);
内容的提问来源于stack exchange,提问作者Alexey S. Larionov
相关产品推荐
相关产品推荐

