为什么我不能在这个虚假的OpenGL上下文中检查OpenGL版本



我正在尝试检查OpenGL版本创建一个伪造的OpenGL上下文,但总是得到版本0。我用这段代码创建了一个虚假的上下文:

  PIXELFORMATDESCRIPTOR pfd;
  ZeroMemory( &pfd, sizeof( pfd ) );
  pfd.nSize = sizeof( pfd );
  pfd.nVersion = 1;
  pfd.dwFlags = PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL |
                PFD_DOUBLEBUFFER;
  pfd.iPixelType = PFD_TYPE_RGBA;
  pfd.cColorBits = 24;
  pfd.cDepthBits = 16;
  pfd.iLayerType = PFD_MAIN_PLANE;
  WINDOWINFO info;
  HWND mHWND;
 info.cbSize = sizeof(WINDOWINFO);
  GetWindowInfo(mHWND,&info);
  HDC mDC; 
  mDC = GetDC(mHWND);
  int fmt = ChoosePixelFormat( mDC, &pfd );
  SetPixelFormat( mDC, fmt, &pfd );
  HGLRC mOGLCtx;
  mOGLCtx = wglCreateContext( mDC );
  wglMakeCurrent(mDC, mOGLCtx);

并尝试用这个检查版本:

glGetString(GL_VERSION)

在获取其 DC 之前尝试获取 (GetActiveWindowGetForegroundWindow ) 或创建 (CreateWindowEx) 窗口句柄或尝试GetDC(0)

可以创建最小的 OpenGL 上下文:

HWND wnd = CreateWindow(
        "STATIC",
        "GL",
        WS_OVERLAPPEDWINDOW | WS_CLIPSIBLINGS | WS_CLIPCHILDREN,
        0, 0, 16, 16,
        NULL, NULL,
        NULL, NULL );
    HDC dc = GetDC( wnd );
    PIXELFORMATDESCRIPTOR pfd = {
        sizeof(PIXELFORMATDESCRIPTOR), 1,
        PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL,
        PFD_TYPE_RGBA, 32,
        0, 0, 0, 0, 0, 0,
        0, 0, 0, 0, 0, 0, 0,
        16, 0,
        0, PFD_MAIN_PLANE, 0, 0, 0, 0
    };
    int fmt = ChoosePixelFormat( dc, &pfd );
    SetPixelFormat( dc, fmt, &pfd );
    HGLRC rc = wglCreateContext( dc );
    wglMakeCurrent( dc, rc );

以相同的方式检查 OpenGL 版本:

glGetString(GL_VERSION)

毕竟,为了提高效率:

// Clean GL context
wglDeleteContext( rc );
ReleaseDC( wnd, dc );
DestroyWindow( wnd );

最新更新