编写 2D 纹理

要将纹理复制到设备,需要执行两个步骤

  1. 在设备上分配内存
  2. 将图像复制到设备
  _mem = clCreateImage2D($context, $mem_flags, $image_format, $width, $height, $stride, $source, &err);

$ mem_flags 定义了内存的分配方式。它可以是只读,只写或两者兼而有之。此外,你可以定义内存的分配位置和方式。 $ width,$ height 和$ stride 非常自我解释。

如果你的 mem_flags 复制数据,你就完成了。如果你希望稍后手动执行此操作,则需要在准备好时调用另一个函数。

err = clEnqueueWriteImage($queue, _mem, $blocking, $offset, $size, $stride, $slice_pitch, $source, 0, null, null);

$ offset 和$ size 定义要复制到目标内存的图像区域。 $ stride 定义一行有多少字节。通常这只是宽度*(每个像素的字节数),但是有人可能想要更改它以使数据与存储体对齐。 $ slice_pitch 也是如此,只有这个值是第三个维度。 $ stride 和$ slice_pitch 都必须匹配你的输入数据。