Comment créer un contexte OpenCL basé sur le contexte openGL sur mac os x

Je crée un projet sur le système de particules sur mac os x. J’ai trouvé des questions similaires sur Internet, et ma question est la même: Comment créer un contexte partagé entre OpenGL et OpenCL avec glfw3 sur OSX? , mais je n’ai toujours pas résolu mon problème. S’il vous plaît aidez-moi, merci.

Ceci est une partie de mon code:

CGLContextObj glContext = CGLGetCurrentContext(); CGLShareGroupObj shareGroup = CGLGetShareGroup(glContext); cl_context_properties props[] = { CL_CONTEXT_PROPERTY_USE_CGL_SHAREGROUP_APPLE, (cl_context_properties)kCGLShareGroup,` 0 }; 

mes messages d’erreur sont:

particles.cpp:522:2: error: 'CGLContextObj' was not declared in this scope CGLContextObj glContext = CGLGetCurrentContext();

particles.cpp:523:2: error: 'CGLShareGroupObj' was not declared in this scope CGLShareGroupObj shareGroup = CGLGetShareGroup(glContext);

particles.cpp:527:2: error: 'CL_CONTEXT_PROPERTY_USE_CGL_SHAREGROUP_APPLE' was not declared in this scope CL_CONTEXT_PROPERTY_USE_CGL_SHAREGROUP_APPLE,

particles.cpp:528:25: error: 'kCGLShareGroup' was not declared in this scope (cl_context_properties)kCGLShareGroup,0

Quels fichiers d’en-tête incluez-vous? Emplacement des symboles dans les fichiers d’en-tête:

  • #include pour CL_CONTEXT_PROPERTY_USE_CGL_SHAREGROUP_APPLE
  • #include pour CGLGetShareGroup()
  • #include pour CGLGetCurrentContext()

Bien que vous puissiez inclure les fichiers d’en-tête ci-dessus, je trouve plus pratique d’inclure simplement les 2 fichiers d’en-tête suivants:

 #include  #include  

Exemple de code:

 CGLContextObj gl_ctx = CGLGetCurrentContext(); CGLShareGroupObj gl_sharegroup = CGLGetShareGroup(gl_ctx); cl_context default_ctx; cl_context_properties properties[] = { CL_CONTEXT_PROPERTY_USE_CGL_SHAREGROUP_APPLE, (cl_context_properties) gl_sharegroup, 0 }; cl_int err_code; default_ctx = clCreateContext( properties, 1, &device, /* cl_device */ [](const char* errinfo, const void* private_info, size_t cb, void* user_data) -> void { /* context-creation and runtime error handler */ cout << "Context error: " << errinfo << endl; }, /* C++11, this parameter can be nullptr */ nullptr /*user_data*/, &err_code);