Как правильно обрабатывать закадровый EGLContext в Linux при выполнении масштабной задачи рендеринга? - PullRequest
0 голосов
/ 16 января 2019

Вот моя ситуация, я работаю над механизмом рендеринга видео, который работает на облачных серверах GPU с 64-битной ОС Ubuntu 16.04.

Движок прослушивает пользовательские запросы, когда он получает запрос на рендеринг, он запускает поток, создает pbuffer EGLContext, рендерит видеокадры с использованием вызовов opengl, кодирует кадры в видеофайл, а затем уничтожаетEGLContext.Когда получено несколько запросов на рендеринг, механизм рендеринга запустит несколько потоков и выполнит несколько задач параллельно.Кстати, я установил и уничтожил объект EGLContext, используя код из этого сообщения nvidia .
Дело в том, что после множества задач рендеринга движок рендеринга будет случайным образом зависать при вызове eglCreateContextэто происходит как для карт nVidia, так и для карт ATI.И я не знаю, потому что я делаю что-то не так с обработкой EGLContext или это просто ошибка в драйвере Linux EGL.

Итак, вместо создания EGLContext для каждой задачи рендеринга, Я повторно использую ранее созданный EGLConext, и просто для того, чтобы убедиться, что все ресурсы OpenGL удалены в конце каждой задачи рендеринга.
Но я обнаружил, что даже я удалил все ресурсы OpenGL (я проверял и проверял снова), использование памяти не упадет до исходного уровня после завершения задачи рендеринга.Только после того, как я уничтожу EGLContext, память опустится до своего начального уровня.

Теперь, для первого метода, вы когда-нибудь сталкивались с такой проблемой сбоя?Код из сообщения от nvidia - правильный способ обработки EGLContext?Или я должен сделать что-то другое, когда дело доходит до быстрого создания и уничтожения EGLContext.
Для второго метода я узнал из некоторых сообщений, что событие, которое вы назвали этими API OpenGL, чтобы удалить ваши ресурсы, и принудительно синхронизировал графический процессор, используяglFinish, EGLContext могут все еще иметь их в буфере.И я думаю, что это причина, почему использование памяти падает после каждой задачи рендеринга, если я снова использую 'EGLContext'.Но есть ли способ немедленно удалить эти ресурсы?

...