Я пытаюсь портировать на MacOS 10.11 приложение Windows, которое использует OpenCL, и мне трудно понять, как создать контекст CL, который разделяет существующий контекст GL.
Вот что мы делаем в Windows. Код написан на C ++ с использованием заголовка cl.hpp от Khronos:
cl_context_properties properties[7];
properties[0] = CL_GL_CONTEXT_KHR;
properties[1] = (cl_context_properties) wglGetCurrentContext();
properties[2] = CL_WGL_HDC_KHR;
properties[3] = (cl_context_properties) wglGetCurrentDC();
properties[4] = CL_CONTEXT_PLATFORM;
properties[5] = platform;
properties[6] = 0;
cl_device_id current_gl_device = 0;
if (clPlatformSupportsExtension(platform, "cl_khr_gl_sharing"))
{
size_t size_ret = 0;
cl_int status = clGetGLContextInfoKHR(
properties,
CL_CURRENT_DEVICE_FOR_GL_CONTEXT_KHR,
sizeof(cl_device_id),
¤t_gl_device,
&size_ret
);
}
std::vector<cl::Device> devices(1, current_gl_device);
cl::Context( devices, &properties[0]);
Проблема в том, что Apple, похоже, не поддерживает ничего выше с «khr» или «KHR».
Похоже, что Apple эквивалентен "cl_khr_gl_sharing", это "cl_APPLE_gl_sharing", поэтому я думаю, что у меня есть справка об этом.
Существует свойство CL_CONTEXT_PROPERTY_USE_CGL_SHAREGROUP_APPLE, которое можно использовать для создания общего контекста. В документах не указано, какое значение должно быть предоставлено, но я использую группу общих ресурсов текущего контекста. Это правильно?
Когда я создаю контекст CL, мне все еще нужно предоставлять свойства для контекста OpenGL и устройства, как мы делаем в Windows? Если так, то как? Я не вижу никаких параметров свойств Apple, эквивалентных CL_GL_CONTEXT_KHR и CL_WGL_HDC_KHR.
Спасибо.