Nvidia卡上的OpenGL内存泄漏

时间:2016-10-05 11:08:16

标签: c++ opengl nvidia

我用两个线程编写多窗口应用程序。首先是渲染线程,第二个是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次创建和窗口破坏后崩溃。

有什么想法吗?

0 个答案:

没有答案