我试图找到最接近当前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()总能产生一个独特的结果?
答案 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。