簡體   English   中英

為什么在這種假OpenGL上下文中無法檢查OpenGL版本?

[英]Why I cannot check OpenGL version in this fake OpenGL context?

我正在嘗試檢查創建虛假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)

嘗試獲取( GetActiveWindowGetForegroundWindow )或創建( CreateWindowEx )窗口句柄,然后獲取其DC或嘗試獲取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 );

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM