与当前OpenGL上下文对应的唯一OpenCL上下文

时间:2014-05-28 08:32:51

标签: c++ opengl interop opencl

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

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

1 个答案:

答案 0 :(得分:1)

要根据最近的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,_平台你得到的平台

unsigned int platformCount;
err = clGetPlatformIDs(1, &_platform, &platformCount);

和_context是你的cl_context。