diff --git a/app/streaming/video/ffmpeg-renderers/eglvid.cpp b/app/streaming/video/ffmpeg-renderers/eglvid.cpp index bb9e8904..bb2f2036 100644 --- a/app/streaming/video/ffmpeg-renderers/eglvid.cpp +++ b/app/streaming/video/ffmpeg-renderers/eglvid.cpp @@ -63,6 +63,7 @@ EGLRenderer::EGLRenderer(IFFmpegRenderer *backendRenderer) m_Window(nullptr), m_Backend(backendRenderer), m_VideoVAO(0), + m_VideoVBO(0), m_BlockingSwapBuffers(false), m_LastRenderSync(EGL_NO_SYNC), m_glEGLImageTargetTexture2DOES(nullptr), @@ -100,6 +101,7 @@ EGLRenderer::~EGLRenderer() SDL_assert(m_glDeleteVertexArraysOES != nullptr); m_glDeleteVertexArraysOES(1, &m_VideoVAO); } + glDeleteBuffers(1, &m_VideoVBO); glDeleteTextures(EGL_MAX_PLANES, m_Textures); glDeleteTextures(Overlay::OverlayMax, m_OverlayTextures); @@ -646,13 +648,12 @@ bool EGLRenderer::setupVideoRenderingState() { }; // Setup the VAO and VBO - unsigned int VBO; m_glGenVertexArraysOES(1, &m_VideoVAO); - glGenBuffers(1, &VBO); + glGenBuffers(1, &m_VideoVBO); m_glBindVertexArrayOES(m_VideoVAO); - glBindBuffer(GL_ARRAY_BUFFER, VBO); + glBindBuffer(GL_ARRAY_BUFFER, m_VideoVBO); glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW); // compileShader() ensures that aPosition and aTexCoord are indexes 0 and 1 respectively @@ -664,7 +665,8 @@ bool EGLRenderer::setupVideoRenderingState() { glBindBuffer(GL_ARRAY_BUFFER, 0); m_glBindVertexArrayOES(0); - glDeleteBuffers(1, &VBO); + // The VBO is kept alive as a member since the VAO still references it. + // It is deleted in ~EGLRenderer() alongside the other GL resources. GLenum err = glGetError(); if (err != GL_NO_ERROR) { diff --git a/app/streaming/video/ffmpeg-renderers/eglvid.h b/app/streaming/video/ffmpeg-renderers/eglvid.h index 4528dc7b..f3467d82 100644 --- a/app/streaming/video/ffmpeg-renderers/eglvid.h +++ b/app/streaming/video/ffmpeg-renderers/eglvid.h @@ -44,6 +44,7 @@ private: SDL_Window *m_Window; IFFmpegRenderer *m_Backend; unsigned int m_VideoVAO; + unsigned int m_VideoVBO; bool m_BlockingSwapBuffers; EGLSync m_LastRenderSync; PFNGLEGLIMAGETARGETTEXTURE2DOESPROC m_glEGLImageTargetTexture2DOES;