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

SDL-获取OpenGL/OpenCL共享上下文的HDC设备上下文,opengl,sdl,opencl,sdl-2,mingw-w64,Opengl,Sdl,Opencl,Sdl 2,Mingw W64,我遵循以下OpenGL/OpenCL互操作指南: 它说我可以使用函数clGetGLContextInfoKHR来查找当前与OpenGL上下文关联的设备。该函数需要包含OpenCL平台、OpenGL上下文和用于创建OpenGL上下文的设备上下文(HDC)的参数列表 在谷歌搜索之后,我发现了一个线程,它提供了一种获取SDL窗口HDC的方法: 他们建议使用以下代码: #ifdef _WIN32 SDL_SysWMinfo info; SDL_VERSION(&info.ver

我遵循以下OpenGL/OpenCL互操作指南:

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

在谷歌搜索之后,我发现了一个线程,它提供了一种获取SDL窗口HDC的方法: 他们建议使用以下代码:

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

    hwnd = info.window;
#endif
\ifdef\u WIN32
SDL_SysWMinfo信息;
SDL_版本(&info.VERSION);
if(SDL_GetWMInfo(&info)<0)
失败();
hwnd=信息窗口;
#恩迪夫
首先,它看起来只适用于Win32。它适用于64位Windows吗?有没有办法在Linux/OSX上做同样的事情


其次,当我用MinGW-w64编译它时,我得到一个错误“未知类型名'SDL_SysWMinfo'”。SDL_SysWMinfo可以在官方文档中找到,我有最新的SDL版本,所以它应该可以工作。我猜类型定义不在我的SDL.h头文件中-我需要另一个头文件吗?

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

#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不区分windows和Drawable。

SDL还是?