获取OpenGL / OpenCL共享上下文的HDC设备上下文

我遵循OpenGL / OpenCL interop的指南:英特尔CL / GL互操作指南

它说我可以使用函数clGetGLContextInfoKHR来查找当前与我的OpenGL上下文关联的设备。 该函数需要包含用于创建OpenGL上下文的OpenCL平台,OpenGL上下文和设备上下文(HDC)的参数列表。

谷歌搜索后,我发现线程提供了一个方法来获得SDL窗口的HDC:线程他们建议使用此代码:

#ifdef _WIN32
    SDL_SysWMinfo info;
    SDL_VERSION(&info.version);
    if ( SDL_GetWMInfo(&info) < 0 )
        fail();

    hwnd = info.window;
#endif

首先,它看起来只适用于Win32。 它适用于64位Windows吗? 有没有办法在Linux / OSX上做同样的事情?

其次,当我使用MinGW-w64进行编译时,出现“未知类型名称”SDL_SysWMinfo“”的错误。 SDL_SysWMinfo可以在官方文档中找到,并且我有最新的SDL版本,因此它应该可以工作。 我猜这种类型定义不在我的SDL.h头文件中 - 是否有另一个我需要的头文件?


最可移植和框架不可知的方法是使用特定于平台的WSI函数来查询drawable和OpenGL上下文。 使用一些typedefs可以制作可移植的包装器,然后您可以使用它来查询上下文和绘制。

#if defined(_WIN32)
typedef HGLRC GLContext;
typedef HDC   GLDrawable;
typedef HWND  GLWindow;

GLContext getCurrentGLContext(void) { return wglGetCurrentContext(); }
GLDrawable getCurrentGLDrawable(void) { return wglGetCurrentDC(); }
GLWindow getCurrentGLWindow(void) { return WindowFromDC(wglGetCurrentDC()); }
#elif defined(__unix__)
/* FIXME: consider Wayland or a EGL environment */
typedef GLXContext GLContext;
typedef GLXDrawable GLDrawable;
typedef Window GLWindow;

GLContext getCurrentGLContext(void) { return glXGetCurrentContext(); }
GLDrawable getCurrentGLDrawable(void) { return glXGetCurrentDrawable(); }
GLWindow getCurrentGLWindow(void) { return glXGetCurrentDrawable(); }
#elif __APPLE__
/* FIXME: Implement this for MacOS X
#endif

在SDL窗口最新时使用它们,以便OpenGL上下文处于活动状态,并使用这些包装进行查询。 您可能会注意到,在GLX版本中,getCurrentGLDrawable和getCurrentGLWindow返回相同的结果。 也就是说,因为X11没有区分窗口和drawable。

链接地址: http://www.djcxy.com/p/38461.html

上一篇: get HDC device context for OpenGL/OpenCL shared context

下一篇: SDL Can't load OpenGL Context over 2.1 Mac OSX Yosemite