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:
parent
66a30c66f3
commit
30274f3ae8
2 changed files with 8 additions and 16 deletions
|
|
@ -75,8 +75,7 @@ EGLRenderer::EGLRenderer(IFFmpegRenderer *backendRenderer)
|
||||||
m_eglClientWaitSync(nullptr),
|
m_eglClientWaitSync(nullptr),
|
||||||
m_GlesMajorVersion(0),
|
m_GlesMajorVersion(0),
|
||||||
m_GlesMinorVersion(0),
|
m_GlesMinorVersion(0),
|
||||||
m_HasExtUnpackSubimage(false),
|
m_HasExtUnpackSubimage(false)
|
||||||
m_DummyRenderer(nullptr)
|
|
||||||
{
|
{
|
||||||
SDL_assert(backendRenderer);
|
SDL_assert(backendRenderer);
|
||||||
SDL_assert(backendRenderer->canExportEGL());
|
SDL_assert(backendRenderer->canExportEGL());
|
||||||
|
|
@ -111,10 +110,6 @@ EGLRenderer::~EGLRenderer()
|
||||||
|
|
||||||
SDL_GL_DeleteContext(m_Context);
|
SDL_GL_DeleteContext(m_Context);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (m_DummyRenderer) {
|
|
||||||
SDL_DestroyRenderer(m_DummyRenderer);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool EGLRenderer::prepareDecoderContext(AVCodecContext*, AVDictionary**)
|
bool EGLRenderer::prepareDecoderContext(AVCodecContext*, AVDictionary**)
|
||||||
|
|
@ -446,8 +441,13 @@ bool EGLRenderer::initialize(PDECODER_PARAMETERS params)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
m_DummyRenderer = SDL_CreateRenderer(m_Window, renderIndex, SDL_RENDERER_ACCELERATED);
|
// This will load OpenGL ES and convert our window to SDL_WINDOW_OPENGL if necessary
|
||||||
if (!m_DummyRenderer) {
|
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
|
// 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.
|
// events just in case SDL re-created the window before eventually failing.
|
||||||
EGL_LOG(Error, "SDL_CreateRenderer() failed: %s", SDL_GetError());
|
EGL_LOG(Error, "SDL_CreateRenderer() failed: %s", SDL_GetError());
|
||||||
|
|
@ -470,12 +470,6 @@ bool EGLRenderer::initialize(PDECODER_PARAMETERS params)
|
||||||
SDL_FlushEvent(SDL_WINDOWEVENT);
|
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_SysWMinfo info;
|
||||||
SDL_VERSION(&info.version);
|
SDL_VERSION(&info.version);
|
||||||
if (!SDL_GetWindowWMInfo(params->window, &info)) {
|
if (!SDL_GetWindowWMInfo(params->window, &info)) {
|
||||||
|
|
|
||||||
|
|
@ -68,6 +68,4 @@ private:
|
||||||
|
|
||||||
#define OVERLAY_PARAM_TEXTURE 0
|
#define OVERLAY_PARAM_TEXTURE 0
|
||||||
int m_OverlayShaderProgramParams[1];
|
int m_OverlayShaderProgramParams[1];
|
||||||
|
|
||||||
SDL_Renderer *m_DummyRenderer;
|
|
||||||
};
|
};
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue