引言
CUDA相比GLSL更加灵活,逐渐成为主流的GPGPU编程技术。CUDA加速计算后的结果往往需要在显示器中绘制出来,如果我们将在显存中的计算结果拷贝到主存,然后使用QPainter绘制到窗口中,这中间的显存-主存,主存-显存的数据拷贝会显得冗余。既然CUDA计算的结果和图形绘制的内容都在显存里,那么可以通过一些技术手段直接将CUDA计算结果绘制到显示器上,即CUDA与Graphics的互操作。
相关接口介绍
注册显卡资源
__host__ cudaError_t cudaGraphicsGLRegisterBuffer(struct cudaGraphicsResource **resource, GLuint buffer, unsigned int flags);
注册一个OpenGL缓冲对象,参数说明:
resource - 指向返回的对象句柄
*buffer - 被注册的缓冲对象名
flags - 注册标识
cudaGraphicsRegisterFlagsNone: 注册的资源在CUDA程序可以进行读写,默认为该枚举
cudaGraphicsRegisterFlagsReadOnly: 指定CUDA程序只能读该资源
cudaGraphicsRegisterFlagsWriteDiscard: 指定CUDA程序不会读该资源对象,每次写资源时资源的内容完全被覆盖,不会保留之前的任何数据
取消注册函数
cudaError_t cudaGraphicsUnregisterResource(cudaGraphicsResource_t resource);
映射显卡资源
cudaError_t cudaGraphicsMapResources(int count