From c8cf431e389580fd94e7ce7e4c7bcefb265dd93c Mon Sep 17 00:00:00 2001 From: Mathieu Schroeter Date: Sat, 21 Oct 2017 21:30:26 +0200 Subject: [PATCH] Clear the texture when the movie is starting Otherwise it's possible to see garbage with the first frame. --- src/movie.cxx | 14 +++++++++++++- src/movie.h | 1 + 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/src/movie.cxx b/src/movie.cxx index 7b22e84..a7172bf 100644 --- a/src/movie.cxx +++ b/src/movie.cxx @@ -121,7 +121,7 @@ CMovie::fileOpenMovie (const std::string & pFilename) SDL_PauseAudioDevice (m_audioDev, 0); m_videoTex = SDL_CreateTexture ( - g_renderer, info.video.format, SDL_TEXTUREACCESS_STATIC, info.video.width, + g_renderer, info.video.format, SDL_TEXTUREACCESS_TARGET, info.video.width, info.video.height); if (m_videoTex == nullptr) @@ -146,7 +146,10 @@ CMovie::playMovie () // play/pause the AVI movie if (m_fPlaying) + { + this->starting = true; Kit_PlayerPlay (m_player); + } else Kit_PlayerPause (m_player); } @@ -290,6 +293,15 @@ CMovie::Render () SDL_SetRenderDrawColor (g_renderer, 0, 0, 0, 255); SDL_RenderClear (g_renderer); + if (this->starting) + { + SDL_SetRenderTarget (g_renderer, m_videoTex); + SDL_SetRenderDrawColor (g_renderer, 0, 0, 0, 255); + SDL_RenderClear (g_renderer); + SDL_SetRenderTarget (g_renderer, nullptr); + this->starting = false; + } + // Refresh videotexture and render it Kit_GetVideoData (m_player, m_videoTex); SDL_RenderCopy (g_renderer, m_videoTex, nullptr, nullptr); diff --git a/src/movie.h b/src/movie.h index 9c2f61d..bd9098f 100644 --- a/src/movie.h +++ b/src/movie.h @@ -60,6 +60,7 @@ protected: char m_audiobuf[AUDIOBUFFER_SIZE]; bool m_bEnable; + bool starting; bool m_fPlaying; // Play flag: true == playing, false == paused bool m_fMovieOpen; // Open flag: true == movie open, false = none };