一、例子 1:fluidsGL 中:
(一)host 端
1)声明实际纹理数据
oat2 *hveld = NULL;
oat2 *dveld = NULL;
2) 对 host 数据和 device 数据进行初始化
hveld = (cData*)malloc(sizeof(cData) * DS);
memset(hveld, 0, sizeof(cData) * DS);
// Allocate and initialize device data
cudaMallocPitch((void**)&dveld, &tPitch, sizeof(cData)*DIM, DIM);
cudaMemcpy(dveld, hveld, sizeof(cData) * DS,
cudaMemcpyHostToDevice);
3) 调用 device 端函数,建立并绑定纹理数据
setupTexture(DIM, DIM);
bindTexture(); //注意,其中将 array 和纹理标识 texref
绑定
(二)device 端
1)声明纹理对象标识,以及纹理实际数据数组
texture<oat2, 2> texref;
static cudaArray *array = NULL;
2)实现纹理建立、绑定函数
void setupTexture(int x, int y) {
// Wrap mode appears to be the new default
texref.lterMode = cudaFilterModeLinear;
cudaChannelFormatDesc desc = cudaCreateChannelDesc<oat2>();
cudaMallocArray(&array, &desc, y, x);
CUT_CHECK_ERROR("cudaMalloc failed");
}
void bindTexture(void) {
cudaBindTextureToArray(texref, array);
CUT_CHECK_ERROR("cudaBindTexture failed");
}
void unbindTexture(void) {
cudaUnbindTexture(texref);