将 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 页。
我有一个计算像素 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 页。