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);