579
社区成员
发帖
与我相关
我的任务
分享
// 加入互操作相关的头文件
#include <cuda_gl_interop.h>
// 声明二维纹理,4个通道,每个通道8位,用uchar4表示
texture<uchar4, 2, cudaReadModeElementType> cuda_tex;
__global__
void Kernel ( ...... )
{
uint j = blockIdx.x;
uint i = threadIdx.x;
// 读取纹理
uchar4 texel = tex2D(cuda_tex, i, j);
}
extern "C"
void Launch_Kernel(int width, int height, GLuint gl_tex, ......)
{
// 注册和绑定cuda resource
cudaGraphicsResource *resource;
checkCudaErrors(cudaGraphicsGLRegisterImage(&resource, gl_tex, GL_TEXTURE_2D, cudaGraphicsMapFlagsNone));
checkCudaErrors(cudaGraphicsMapResources(1, &resource, NULL));
// 获得此资源地址
cudaArray_t array_d;
checkCudaErrors(cudaGraphicsSubResourceGetMappedArray(&array_d, resource, 0, 0));
// 绑定到CUDA纹理
checkCudaErrors(cudaBindTextureToArray(cuda_tex, array_d));
// 调用kernel函数
Kernel<<<height, witdh>>>( ...... )
// 释放资源
checkCudaErrors(cudaGraphicsUnmapResources(1, &resource, NULL));
checkCudaErrors(cudaGraphicsUnregisterResource(resource));
checkCudaErrors(cudaUnbindTexture(cuda_tex));
}