根据此处注册(khronos 网站):
如果 <hglrc> 的 OpenGL 上下文版本是 3.0 或更高版本,并且如果 wglMakeCurrent 的 <hdc> 参数为 NULL,或者 wglMakeContextCurrentARB 的 <hDrawDC> 和 <hReadDC> 参数都为 NULL,则上下文为当前,但没有定义默认的帧缓冲区。GL 上没有默认帧缓冲区的影响在 OpenGL 3.0 规范的第 4 章中定义。
相信这些信息,我创建了一个“屏幕外”的设备上下文:
HDC m_hDC = CreateCompatibleDC(NULL);
我配置了像素并使用以下SetPixelFormat
功能添加到 DC:
SetPixelFormat(m_hDC, iPixelFormat, &chosenPFD);
然后我创建了一个渲染上下文:
m_hGLRC = ::wglCreateContextAttribsARB(m_hDC, NULL, &(iAttributes[0]));
到目前为止一切顺利,它有效。现在是时候让上下文成为当前的了。
首先,我删除 DC(我不再需要它)并wglMakeCurrent
使用NULL
dc
参数调用:
DeleteDC(m_hDC);
bool ret = wglMakeCurrent(NULL, m_hGLRC);
那没有用。ret
是,我得到这个false
错误:
Win32 错误# (6): ERROR_INVALID_HANDLE