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

时间:2015-03-10 02:11:21

标签: c++ macos opengl interop opencl

我正在使用OpenGL和OpenCL构建粒子系统。我需要在OpenGL和OpenCL之间共享VBO,因此创建一个具有适当属性的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
};

问题也是discussed on the glfw github,但没有回答OSX的问题。

3 个答案:

答案 0 :(得分:0)

glfw3native.h的文档位于:http://www.glfw.org/docs/latest/glfw3native_8h.html

我不熟悉OSX,但我假设您要使用glfwGetNSGLContext来获取GL上下文。即使您使用的是GLFW,我相信您仍然可以使用CGLGetCurrentContext,但无论如何您仍然必须使用CGLGetShareGroup

答案 1 :(得分:0)

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

答案 2 :(得分:0)

请查看my answer to a similar post

实际上,您不需要glfw3的方法来访问当前的OpenGL上下文。只需#include以下标题文件,您就可以使用示例代码了。

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