0

对于正常值,1用于表示真,而0对于假:

float a = 1.0f;
float b = 2.0f;
float c = (a > b);  // this will be 0.0f

但是对于一个向量,1111...111(32个二进制1)用于表示真而0为假。对于浮点数,32 个二进制 1 是 -nan(不是带减号的数字):

typedef float v4 __attribute__((vector_size(sizeof(float)*4)));
v4 a = {1, 2, 3, 4};
v4 b = {0 ,1, 4, 5};
v4 c = (a > b); // this becomes { -nan, -nan, 0.0f, 0.0f }

我的问题是:{ 1.0f, 1.0f, 0.0f, 0.0f }是否有可能以“矢量化”的方式 “转换”c ?

事实上,我想max(min(value, maximum), minimal)为像素的 RGB 做“clamp”()。如果以上无法实现,还有其他以矢量化方式进行钳位的好方法吗?

PS:我更喜欢内在的方式。

4

0 回答 0