diff --git a/framework/render/video/SdlAFVideoRender.cpp b/framework/render/video/SdlAFVideoRender.cpp index 7141a247b..62072cbd3 100644 --- a/framework/render/video/SdlAFVideoRender.cpp +++ b/framework/render/video/SdlAFVideoRender.cpp @@ -405,7 +405,12 @@ SDL_Rect SdlAFVideoRender::getSnapRect() int SdlAFVideoRender::setDisPlay(void *view) { - if (mCurrentView == view) { + auto *display = static_cast(view); + if (mCurrentView == display->view) { + return 0; + } + mCurrentView = display->view; + if (mCurrentView == nullptr) { return 0; } if (mVideoWindow != nullptr) { @@ -416,19 +421,21 @@ int SdlAFVideoRender::setDisPlay(void *view) SDL_DestroyRenderer(mVideoRender); mVideoRender = nullptr; } - mCurrentView = view; - if (mCurrentView == nullptr) { - return 0; - } if (SDL_WasInit(SDL_INIT_VIDEO) != SDL_INIT_VIDEO) { SDL_Init(SDL_INIT_VIDEO); mInitByMe = true; } - mVideoWindow = SDL_CreateWindowFrom(view); - SDL_ShowWindow(mVideoWindow); + if (display->type == CicadaSDLViewType_NATIVE_WINDOW) { + mVideoWindow = SDL_CreateWindowFrom(display->view); + SDL_ShowWindow(mVideoWindow); + } else + mVideoWindow = static_cast(display->view); if (mVideoWindow) { - mVideoRender = SDL_CreateRenderer(mVideoWindow, -1, 0); + mVideoRender = SDL_GetRenderer(mVideoWindow); + if (mVideoRender == nullptr) { + mVideoRender = SDL_CreateRenderer(mVideoWindow, -1, 0); + } } return 0; diff --git a/framework/render/video/SdlAFVideoRender.h b/framework/render/video/SdlAFVideoRender.h index 9d252901f..3e08dc7f5 100644 --- a/framework/render/video/SdlAFVideoRender.h +++ b/framework/render/video/SdlAFVideoRender.h @@ -9,6 +9,13 @@ #include #include +enum CicadaSDLViewType { CicadaSDLViewType_SDL_WINDOW, CicadaSDLViewType_NATIVE_WINDOW }; + +typedef struct CicadaSDLView_t { + void *view; + CicadaSDLViewType type; +} CicadaSDLView; + class SdlAFVideoRender : public IVideoRender, private IVSync::Listener { public: SdlAFVideoRender();