与当前OpenGL Context对应的唯一OpenGL Context

Unique OpenCL Context corresponding with a current OpenGL Context

本文关键字:OpenGL Context 唯一      更新时间:2023-10-16

我试图找到最接近当前OpenGL上下文的OpenCL设备来做OpenCL/OpenGL互操作。通过OpenCL扩展clGetGLContextInfoKHR()和CL_CURRENT_DEVICE_FOR_GL_CONTEXT_KHR参数,我可以为特定的OpenCL平台和特定的(当前)OpenGL上下文请求此设备。

我的MacBook Pro上有两个OpenCL平台(OpenCL 1.1 (NVIDIA)和OpenCL 1.2 (Intel))。奇怪的是,对于这两个平台clGetGLContextInfoKHR()返回一个结果,即使OpenGL上下文运行在NVIDIA上。是我做错了什么,还是clGetGLContextInfoKHR()总是产生唯一的结果?

要根据最近的MBP上的当前显卡获取当前上下文,您可以使用:

CGLShareGroupObj kCGLShareGroup = CGLGetShareGroup(cgl_ctx);
cl_context_properties props[] =
{
    CL_CONTEXT_PROPERTY_USE_CGL_SHAREGROUP_APPLE, (cl_context_properties)kCGLShareGroup,
    CL_CONTEXT_PLATFORM, (cl_context_properties)_platform,
    0
};
_context = clCreateContext(props, 0, NULL, NULL, NULL, &err);
err = clGetGLContextInfoAPPLE(_context, cgl_ctx, CL_CGL_DEVICE_FOR_CURRENT_VIRTUAL_SCREEN_APPLE, sizeof(_deviceID), &_deviceID, NULL);

其中cgl_ctx是你的CGLContextObj, _platform是你使用

得到的平台
unsigned int platformCount;
err = clGetPlatformIDs(1, &_platform, &platformCount);

and _context是你的cl_context