Don't keep the dummy renderer alive for EGLRenderer's lifetime

At best, it doesn't do anything other than some queue some viewport
changes via SDL_RendererEventWatch(). At worst, it can race with
the render thread and cause trouble.
This commit is contained in:
Cameron Gutman
2026-01-17 01:01:30 -06:00
parent 66a30c66f3
commit 30274f3ae8
2 changed files with 8 additions and 16 deletions

View File

@@ -75,8 +75,7 @@ EGLRenderer::EGLRenderer(IFFmpegRenderer *backendRenderer)
m_eglClientWaitSync(nullptr),
m_GlesMajorVersion(0),
m_GlesMinorVersion(0),
m_HasExtUnpackSubimage(false),
m_DummyRenderer(nullptr)
m_HasExtUnpackSubimage(false)
{
SDL_assert(backendRenderer);
SDL_assert(backendRenderer->canExportEGL());
@@ -111,10 +110,6 @@ EGLRenderer::~EGLRenderer()
SDL_GL_DeleteContext(m_Context);
}
if (m_DummyRenderer) {
SDL_DestroyRenderer(m_DummyRenderer);
}
}
bool EGLRenderer::prepareDecoderContext(AVCodecContext*, AVDictionary**)
@@ -446,8 +441,13 @@ bool EGLRenderer::initialize(PDECODER_PARAMETERS params)
return false;
}
m_DummyRenderer = SDL_CreateRenderer(m_Window, renderIndex, SDL_RENDERER_ACCELERATED);
if (!m_DummyRenderer) {
// This will load OpenGL ES and convert our window to SDL_WINDOW_OPENGL if necessary
SDL_Renderer* dummyRenderer = SDL_CreateRenderer(m_Window, renderIndex, SDL_RENDERER_ACCELERATED);
if (dummyRenderer) {
SDL_DestroyRenderer(dummyRenderer);
dummyRenderer = nullptr;
}
else {
// Print the error here (before it gets clobbered), but ensure that we flush window
// events just in case SDL re-created the window before eventually failing.
EGL_LOG(Error, "SDL_CreateRenderer() failed: %s", SDL_GetError());
@@ -470,12 +470,6 @@ bool EGLRenderer::initialize(PDECODER_PARAMETERS params)
SDL_FlushEvent(SDL_WINDOWEVENT);
}
// Now we finally bail if we failed during SDL_CreateRenderer() above.
if (!m_DummyRenderer) {
m_InitFailureReason = InitFailureReason::NoSoftwareSupport;
return false;
}
SDL_SysWMinfo info;
SDL_VERSION(&info.version);
if (!SDL_GetWindowWMInfo(params->window, &info)) {

View File

@@ -68,6 +68,4 @@ private:
#define OVERLAY_PARAM_TEXTURE 0
int m_OverlayShaderProgramParams[1];
SDL_Renderer *m_DummyRenderer;
};