如何在 OSX 上使用 glfw3 在 OpenGL 和 OpenCL 之间创建共享上下文



我正在使用OpenGL和OpenCL构建一个粒子系统。我需要在 OpenGL 和 OpenCL 之间共享 VVO,从而创建一个具有适当属性的 OpenCL 上下文。

我知道 glfw3 公开了一些本机 API 函数,但我无法弄清楚如何访问 CGL 函数。

https://github.com/glfw/glfw/blob/master/include/GLFW/glfw3native.h

我基本上需要找到如何使用 glfw3 运行它:

CGLContextObj kCGLContext = CGLGetCurrentContext();
CGLShareGroupObj kCGLShareGroup = CGLGetShareGroup(kCGLContext);
cl_context_properties properties[] =
{
    CL_CONTEXT_PROPERTY_USE_CGL_SHAREGROUP_APPLE,
    (cl_context_properties)kCGLShareGroup,
    0
};

这个问题也在glfw github上讨论过,但没有回答OSX的问题。

一种选择是使用 Boost.Compute 库提供的opengl_create_shared_context()函数。此函数负责处理创建共享 OpenCL-OpenGL 上下文时涉及的平台特定问题。

glfw3native.h的文档在这里: http://www.glfw.org/docs/latest/glfw3native_8h.html

我不熟悉OSX,但我假设你会想使用glfwGetNSGLContext来获取GL上下文。我相信即使你使用的是GLFW,你仍然可以使用CGLGetCurrentContext,而且看起来你仍然必须使用CGLGetShareGroup

请看我对类似帖子的回答。

事实上,你不需要glfw3的方法就可以访问当前的OpenGL上下文。只需#include以下头文件,您应该就可以使用示例代码。

#include <OpenCL/opencl.h>
#include <OpenGL/OpenGL.h>

最新更新