OpenCL也内建了一些图像写函数,通过这些函数,我们可以直接把像素值写入到图像对象中。在下表中列出了这些内建图像写函数。
上表中的函数,参数color都是有符号的整数类型。参数color为f loat4、in4或uint4的矢量数据。
写入3D图像对象是可选特性。这个特性是通过cl_khr_3d_image_writes扩展的。因此如果内核中需要修改image3d_t数据类型,需要查询设备是否支持这个特性。同时在内核代码中添加如下语句:
#pragma OPENCL EXTENSION cl_khr_3d_image_write:enable
OpenCL 内建无采样器图像读函数中的例子,对于内核代码,我们添加写入图像操作:
kernel void ImageTest(read_only image2d_t Src,
write_only image2d_t Dst)
{
int2 coord = (int2)(get_global_id(0), get_global_id(1));
float4 p00 = read_imagef(Src , coord);
……
write_imagef(Src, coord, (float4)( p00.x, p00.y, p00.z, 1.0f ));
}