編寫 2D 紋理
要將紋理複製到裝置,需要執行兩個步驟
- 在裝置上分配記憶體
- 將影象複製到裝置
_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 都必須匹配你的輸入資料。