如何在 linux 执行大量渲染任务时正确处理屏幕外 EGLContext?

How to handle offscreen EGLContext properly on linux when doing massive rendering task?

这是我的情况,我正在开发 运行 在具有 Ubuntu 16.04 64 位 OS 的 GPU 云服务器上的视频渲染引擎。

引擎监听用户请求,当它收到渲染请求时,它会启动一个线程,创建一个pbuffer EGLContext,使用opengl调用渲染视频帧,将帧编码为视频文件,然后销毁 EGLContext。当接收到多个渲染请求时,渲染引擎将启动多个线程并运行 并行执行多个任务。顺便说一句,我使用 nvidia post.
中的代码设置并销毁了 EGLContext 对象 问题是,在大量渲染任务之后,渲染引擎在调用 eglCreateContext 时会随机崩溃,nVidia 卡和 ATI 卡都会发生这种情况。我不知道是因为我在 EGLContext 处理上做错了什么,还是只是 Linux EGL 驱动程序的错误。

因此,我没有为每个渲染任务创建 EGLContext,而是重复使用之前创建的 EGLConext,只是为了确保在每个渲染任务结束时删除所有 OpenGL 资源。
但是,我发现即使我删除了所有的OpenGL资源(我检查了又检查了一遍),渲染任务完成后内存使用率不会下降到初始水平。只有在我摧毁 EGLContext 之后,内存才会下降到它的初始水平。

现在第一种方法,你们遇到过这样的闪退问题吗?来自 nvidia post 的代码是处理 EGLContext 的正确方法吗?或者我应该在快速创建和销毁 EGLContext 时做些不同的事情。
对于第二种方法,我从一些 post 中了解到你调用了那些 OpenGL api 来删除你的资源,并使用 glFinish 强制 GPU 同步,EGLContext 可能仍然有它们缓冲区。我认为这就是如果我重用 'EGLContext',那么在每次渲染任务后内存使用量都会下降的原因。但是有没有办法立即删除这些资源?

我们最终为每个渲染任务创建了一个新进程,一切都很好!感谢@datenwolf!