图像对象可以使用如下函数来实现数据填充:
cl_int clEnqueueFillImage (cl_command_queue command_queue,
cl_mem image,
const void *fill_color,
const size_t *origin,
const size_t *region,
cl_uint num_events_in_wait_list,
const cl_event *event_wait_list,
cl_event *event)
- 参数command_queue为填充命令所要插入的队列。command_queue和image必须位于同一OpenCL上下文中。
-
参数image为一个有效的图像对象。
-
参数f ill_color为填充色。如果image通道数据类型不是归一化带符号或无符号整型,则它是4元RGBA浮点颜色值;如果image通道数据类型是非归一化带符号整型,则它是4元带符号整型值;如果image通道数据类型是非归一化无符号整型,则它是4元无符号整型值。
-
参数origin定义了所要填充区域的起始位置(x,y,z),单位为像素;3维图像阵列,定义了图像索引(2)以及图像起始位置(x,y);2维图像阵列,(x,y,z)定义的是起始位置(x,y)及图像索引;对于1维图像阵列,是(x)以及图像索引。如果image是2维图像对象,origin[2]必须是0;如果image为1维图像对象或1维图像缓冲区对象,origin[1]和origin[2]都必须是0;如果image是1维图像阵列对象,则origin[2]必须为0,origin[1]是图像在阵列中的索引;如果image是2维图像阵列对象,则origin[2]是图像在阵列中的索引。
-
参数region定义了要填充区域的大小(width,height,depth),单位为像素;3维图像阵列,定义了图像个数(depth)以及填充区域大小(width,height);2维图像阵列对象,定义了填充区域(width,height);对于1维图像阵列对象,定义了填充区域(width)。如果image是2维图像对象或1维图像阵列对象,region[2]必须是1。如果image是1维图像或2维图像缓冲区对象,region[1]和region[2]都必须是1。
如下代码分配了2维图像对象,并将所有值填充为黑色(0):
……
char fill_value = 0;
size_t origin[3] = {0, 0, 0};
size_t region[3] = { width, height, 1};
clEnqueueFillImage(context, imageobject, &fill_value, origin,
region, 0, NULL, NULL);
……