我用两个线程编写多窗口应用程序。首先是渲染线程,第二个是GUI。渲染线程上只有一个OpenGL上下文。 在Intel卡上,一切都是正确的,但在Nvidia上创建和关闭窗口时会出现大量内存泄漏。
渲染:
mWindowsCriticalSection.enter();
for (auto window : mWindows)
{
wglMakeCurrent(window.second->getHdc(), mContext);
//only swap buffers
SwapBuffers(window.second->getHdc());
wglMakeCurrent(0, 0);
}
mWindowsCriticalSection.leave();
创建窗口:
mHwnd = CreateWindow(
WINDOW_CLASS, mTitle.c_str(),
WS_OVERLAPPEDWINDOW,
400, 400,
400, 400, NULL, NULL,
GetModuleHandle(NULL), NULL
);
SetWindowLong(mHwnd, GWLP_USERDATA, (long)this);
mHdc = GetDC(mHwnd);
PIXELFORMATDESCRIPTOR pfd;
int pixelFormat = Renderer::getInstance().getPixelFormat();
DescribePixelFormat(mHdc, pixelFormat, sizeof(pfd), &pfd);
SetPixelFormat(mHdc, pixelFormat, &pfd);
WindowsContainer::getInstance().addWindow(shared_from_this());
在WM_DESTROY中:
ReleaseDC(mHwnd, mHdc);
此内存泄漏导致DrvPresentBuffers在20-30次创建和窗口破坏后崩溃。
有什么想法吗?