将 float4 组件转换为 uchars 的 OpenCL 转换

OpenCL casting to convert float4 components into uchars

我有一个计算像素 RGB 值的 OpenCL 程序。声明如下。

__kernel void pixel_kernel( __global uchar* r,
                        __global uchar* g,
                        __global uchar* b, 
                        __global uchar* a,
                        __global int* width,
                        __global int* height)

在程序中创建并计算了一个 float4 col 变量。所以我想提取 RGB 分量并将它们 return 作为 r g b 和 uchar 类型。

在代码的末尾我有

r[x]=255;
g[x]=0;
b[x]=0;

编译成功,returned 颜色为红色。

如果我尝试将 float4 值转换为 RGB,我似乎不知道如何转换它们。例如,以下结果会导致编译错误,而 cl 不会 运行

r[x]=(uchar)(col[0]*255);
g[x]=(uchar)(col[1]*255);
b[x]=(uchar)(col[2]*255);

我错过了什么?应如何声明此转换,以便将浮点 RGB 组件正确转换为 0 到 255 之间的 uchar 值?

一定是一个简单的修复,但我已经尝试了我能想到的所有转换排列,其中 none 似乎想要工作。感谢您的任何提示。

OpenCL float4 数据类型包含 4 float。要解决这些组件,您可以使用 .x.y.z.w.s0.s1.s2 , .s3:

float4 col = (float4)(0.1f, 0.2f, 0.3f, 0.4f);
r[x]=(uchar)(col.s0*255);
g[x]=(uchar)(col.s1*255);
b[x]=(uchar)(col.s2*255);
a[x]=(uchar)(col.s3*255);

float4 col; 与 4 向量 float col[4]; 不同,但更像是 C99 结构;这就是为什么像 col[0] 这样的寻址不适用于 float4。另请参阅 OpenCL 1.2 Reference Card 第 3 页。