[英]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)
嘗試獲取( GetActiveWindow
, GetForegroundWindow
)或創建( 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.