Keep the VBO alive while the VAO references it

This commit is contained in:
Cameron Gutman committed 2026-10-24 19:39:58 -05:00
1 parent df7db4018e
commit fb9daf85ab
2 files changed
+7 -4

No files matched your search

@@ -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) {
@@ -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;