6.16. OpenGL 互操作性

本节介绍 CUDA 运行时应用程序编程接口的 OpenGL 互操作性功能。请注意,OpenGL 资源的映射是使用 图形互操作性 中描述的图形 API 不可知、资源映射接口执行的。

枚举

enum cudaGLDeviceList

函数

__host__cudaError_t cudaGLGetDevices ( unsigned int* pCudaDeviceCount, int* pCudaDevices, unsigned int  cudaDeviceCount, cudaGLDeviceList deviceList )
获取与当前 OpenGL 上下文关联的 CUDA 设备。
__host__cudaError_t cudaGraphicsGLRegisterBuffer ( cudaGraphicsResource** resource, GLuint buffer, unsigned int  flags )
注册 OpenGL 缓冲区对象。
__host__cudaError_t cudaGraphicsGLRegisterImage ( cudaGraphicsResource** resource, GLuint image, GLenum target, unsigned int  flags )
注册 OpenGL 纹理或渲染缓冲区对象。
__host__cudaError_t cudaWGLGetDevice ( int* device, HGPUNV hGpu )
获取与 hGpu 关联的 CUDA 设备。

枚举

enum cudaGLDeviceList

与当前 OpenGL 上下文对应的 CUDA 设备

cudaGLDeviceListAll = 1
当前 OpenGL 上下文使用的所有 GPU 的 CUDA 设备
cudaGLDeviceListCurrentFrame = 2
当前 OpenGL 上下文在其当前渲染帧中使用的 GPU 的 CUDA 设备
cudaGLDeviceListNextFrame = 3
当前 OpenGL 上下文在下一帧中将使用的 GPU 的 CUDA 设备

函数

__host__cudaError_t cudaGLGetDevices ( unsigned int* pCudaDeviceCount, int* pCudaDevices, unsigned int  cudaDeviceCount, cudaGLDeviceList deviceList )
获取与当前 OpenGL 上下文关联的 CUDA 设备。
参数
pCudaDeviceCount
- 返回的与当前 OpenGL 上下文对应的 CUDA 设备数量
pCudaDevices
- 返回的与当前 OpenGL 上下文对应的 CUDA 设备
cudaDeviceCount
- 输出设备数组的大小pCudaDevices
deviceList
- 要返回的设备集。此集合可以是 cudaGLDeviceListAll(用于所有设备)、cudaGLDeviceListCurrentFrame(用于渲染当前帧的设备,在 SLI 中)或 cudaGLDeviceListNextFrame(用于渲染下一帧的设备,在 SLI 中)。
描述

在以下位置返回*pCudaDeviceCount与当前 OpenGL 上下文对应的 CUDA 兼容设备的数量。还在以下位置返回*pCudaDevices至多cudaDeviceCount与当前 OpenGL 上下文对应的 CUDA 兼容设备。如果当前 OpenGL 上下文使用的任何 GPU 不支持 CUDA,则调用将返回 cudaErrorNoDevice

注意
  • Mac OS X 不支持此功能。

  • 请注意,此函数也可能返回先前异步启动的错误代码。

另请参阅

cudaGraphicsUnregisterResource, cudaGraphicsMapResources, cudaGraphicsSubResourceGetMappedArray, cudaGraphicsResourceGetMappedPointer, cuGLGetDevices

__host__cudaError_t cudaGraphicsGLRegisterBuffer ( cudaGraphicsResource** resource, GLuint buffer, unsigned int  flags )
注册 OpenGL 缓冲区对象。
参数
resource
- 指向返回的对象句柄的指针
buffer
- 要注册的缓冲区对象的名称
flags
- 注册标志
描述

注册由以下项指定的缓冲区对象buffer以供 CUDA 访问。已注册对象的句柄作为resource返回。注册标志flags指定预期用途,如下所示

注意

请注意,此函数也可能返回先前异步启动的错误代码。

另请参阅

cudaGraphicsUnregisterResource, cudaGraphicsMapResources, cudaGraphicsResourceGetMappedPointer, cuGraphicsGLRegisterBuffer

__host__cudaError_t cudaGraphicsGLRegisterImage ( cudaGraphicsResource** resource, GLuint image, GLenum target, unsigned int  flags )
注册 OpenGL 纹理或渲染缓冲区对象。
参数
resource
- 指向返回的对象句柄的指针
image
- 要注册的纹理或渲染缓冲区对象的名称
target
- 标识由以下项指定的对象的类型image
flags
- 注册标志
描述

注册由以下项指定的纹理或渲染缓冲区对象image以供 CUDA 访问。已注册对象的句柄作为resource.

target必须与对象的类型匹配,并且必须是 GL_TEXTURE_2D、GL_TEXTURE_RECTANGLE、GL_TEXTURE_CUBE_MAP、GL_TEXTURE_3D、GL_TEXTURE_2D_ARRAY 或 GL_RENDERBUFFER 之一。

注册标志flags指定预期用途,如下所示

支持以下图像格式。为了简洁起见,列表已缩写。例如,{GL_R, GL_RG} X {8, 16} 将扩展为以下 4 种格式 {GL_R8, GL_R16, GL_RG8, GL_RG16}

  • GL_RED、GL_RG、GL_RGBA、GL_LUMINANCE、GL_ALPHA、GL_LUMINANCE_ALPHA、GL_INTENSITY

  • {GL_R, GL_RG, GL_RGBA} X {8, 16, 16F, 32F, 8UI, 16UI, 32UI, 8I, 16I, 32I}

  • {GL_LUMINANCE, GL_ALPHA, GL_LUMINANCE_ALPHA, GL_INTENSITY} X {8, 16, 16F_ARB, 32F_ARB, 8UI_EXT, 16UI_EXT, 32UI_EXT, 8I_EXT, 16I_EXT, 32I_EXT}

当前不允许以下图像类

  • 带有边框的纹理

  • 多采样渲染缓冲区

注意

请注意,此函数也可能返回先前异步启动的错误代码。

另请参阅

cudaGraphicsUnregisterResource, cudaGraphicsMapResources, cudaGraphicsSubResourceGetMappedArray, cuGraphicsGLRegisterImage

__host__cudaError_t cudaWGLGetDevice ( int* device, HGPUNV hGpu )
获取与 hGpu 关联的 CUDA 设备。
参数
device
- 返回与 hGpu 关联的设备,如果 hGpu 不是计算设备,则返回 -1。
hGpu
- GPU 的句柄,通过 WGL_NV_gpu_affinity 查询
返回值

cudaSuccess

描述

如果适用,返回与 hGpu 关联的 CUDA 设备。

注意

请注意,此函数也可能返回先前异步启动的错误代码。

另请参阅

WGL_NV_gpu_affinity, cuWGLGetDevice