将FLOAT4转换为UCHAR4的效率最高的方式

我用的一个32bit大小的struct, 然后里面的
.r = (uchar)r值;
.g= (uchar)g值;
.b= (uchar)b值;
.a = 255;

然后我看SDK里写着这样的:
((unsigned int)(rgba.w * 255.0f) << 24) |
((unsigned int)(rgba.z * 255.0f) << 16) |
((unsigned int)(rgba.y * 255.0f) << 8) |
((unsigned int)(rgba.x * 255.0f));

我是写单片机出身的,本能的喜欢后面的写法,感觉好点,但是可读性比前者太差了。哪种效率高呢?

我觉得这个提法不是很好,这不是float转uchar的问题,实际上转换过程你无法操控。这个实际上是float转成int后,如何把4个int里面的有效部分组装到uchar4里面。

楼上的分析甚是,其实这是2个问题,一个是float到char的转换,一个是4个char封装起来的问题。

如同我们老生常谈的话,使用你的以前的单片机时代的移位和按位或运算的在CPU和单片机上的确是较为优秀的方式,但是在fermi上不是。

fermi是对数学运算优化过的处理器,对于你这个运算可以考虑fermi的ISCADD(移位然后相加)或者IMAD(乘法然后相加), 他们比你的分立的移位和分立的按位或要好(移位+按位或无法被组合,没有这种组合运算)。

这是我对你的后一个问题的回答。

还是要实例啊。。。各位亲们辛苦了。。小弟不是很懂。。。有实例最好。。。