【问题标题】:Why I cannot check OpenGL version in this fake OpenGL context?为什么我不能在这个假的 OpenGL 上下文中检查 OpenGL 版本?
【发布时间】:2015-04-13 11:38:33
【问题描述】:

我正在尝试检查 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)

【问题讨论】:

  • “我创建了一个假上下文” 创建一个真实的。
  • @LightningRacisinOrbit 有什么区别?我怎么能?

标签: c++ windows opengl opengl-es


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    可以用它创建最小的 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 );
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-06
      • 2013-11-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多