对于正常值,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:我更喜欢非内在的方式。