获取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