@@ -41,12 +41,6 @@ static DeviceProfile GetDeviceProfile() {
4141
4242TizenEmbedderEngine::TizenEmbedderEngine ()
4343 : device_profile(GetDeviceProfile()) {
44- #ifdef TIZEN_RENDERER_EVAS_GL
45- tizen_renderer = std::make_unique<TizenRendererEvasGL>(*this );
46- #else
47- tizen_renderer = std::make_unique<TizenRendererEcoreWl2>(*this );
48- #endif
49-
5044 // Run flutter task on Tizen main loop.
5145 // Tizen engine has four threads (GPU thread, UI thread, IO thread, platform
5246 // thread). UI threads need to send flutter task to platform thread.
@@ -58,7 +52,16 @@ TizenEmbedderEngine::TizenEmbedderEngine()
5852 }
5953 });
6054
55+ messenger = std::make_unique<FlutterDesktopMessenger>();
56+ messenger->engine = this ;
57+ message_dispatcher =
58+ std::make_unique<flutter::IncomingMessageDispatcher>(messenger.get ());
59+ }
60+
61+ void TizenEmbedderEngine::InitializeTizenRenderer () {
6162#ifdef TIZEN_RENDERER_EVAS_GL
63+ tizen_renderer = std::make_unique<TizenRendererEvasGL>(*this );
64+
6265 render_loop_ = std::make_unique<TizenRenderEventLoop>(
6366 std::this_thread::get_id (), // main thread
6467 [this ](const auto * task) {
@@ -67,14 +70,8 @@ TizenEmbedderEngine::TizenEmbedderEngine()
6770 }
6871 },
6972 tizen_renderer.get ());
70- #endif
71-
72- messenger = std::make_unique<FlutterDesktopMessenger>();
73- messenger->engine = this ;
74- message_dispatcher =
75- std::make_unique<flutter::IncomingMessageDispatcher>(messenger.get ());
76-
77- #ifndef TIZEN_RENDERER_EVAS_GL
73+ #else
74+ tizen_renderer = std::make_unique<TizenRendererEcoreWl2>(*this );
7875 tizen_vsync_waiter_ = std::make_unique<TizenVsyncWaiter>(this );
7976#endif
8077}
@@ -111,7 +108,7 @@ UniqueAotDataPtr LoadAotData(std::string aot_data_path) {
111108
112109bool TizenEmbedderEngine::RunEngine (
113110 const FlutterEngineProperties& engine_properties) {
114- if (!tizen_renderer->IsValid ()) {
111+ if (HasTizenRenderer () && !tizen_renderer->IsValid ()) {
115112 FT_LOGE (" The display was not valid." );
116113 return false ;
117114 }
@@ -138,40 +135,46 @@ bool TizenEmbedderEngine::RunEngine(
138135 static_cast <TizenEventLoop*>(data)->PostTask (task, target_time_nanos);
139136 };
140137 platform_task_runner.identifier = kPlatformTaskRunnerIdentifier ;
141-
142- #ifdef TIZEN_RENDERER_EVAS_GL
143- FlutterTaskRunnerDescription render_task_runner = {};
144- render_task_runner.struct_size = sizeof (FlutterTaskRunnerDescription);
145- render_task_runner.user_data = render_loop_.get ();
146- render_task_runner.runs_task_on_current_thread_callback =
147- [](void * data) -> bool {
148- return static_cast <TizenEventLoop*>(data)->RunsTasksOnCurrentThread ();
149- };
150- render_task_runner.post_task_callback =
151- [](FlutterTask task, uint64_t target_time_nanos, void * data) -> void {
152- static_cast <TizenEventLoop*>(data)->PostTask (task, target_time_nanos);
153- };
154- render_task_runner.identifier = kRenderTaskRunnerIdentifier ;
155- #endif
156-
157138 FlutterCustomTaskRunners custom_task_runners = {};
158139 custom_task_runners.struct_size = sizeof (FlutterCustomTaskRunners);
159140 custom_task_runners.platform_task_runner = &platform_task_runner;
141+
160142#ifdef TIZEN_RENDERER_EVAS_GL
161- custom_task_runners.render_task_runner = &render_task_runner;
143+ if (HasTizenRenderer ()) {
144+ FlutterTaskRunnerDescription render_task_runner = {};
145+ render_task_runner.struct_size = sizeof (FlutterTaskRunnerDescription);
146+ render_task_runner.user_data = render_loop_.get ();
147+ render_task_runner.runs_task_on_current_thread_callback =
148+ [](void * data) -> bool {
149+ return static_cast <TizenEventLoop*>(data)->RunsTasksOnCurrentThread ();
150+ };
151+ render_task_runner.post_task_callback =
152+ [](FlutterTask task, uint64_t target_time_nanos, void * data) -> void {
153+ static_cast <TizenEventLoop*>(data)->PostTask (task, target_time_nanos);
154+ };
155+ render_task_runner.identifier = kRenderTaskRunnerIdentifier ;
156+ custom_task_runners.render_task_runner = &render_task_runner;
157+ }
162158#endif
163159
164160 FlutterRendererConfig config = {};
165- config.type = kOpenGL ;
166- config.open_gl .struct_size = sizeof (config.open_gl );
167- config.open_gl .make_current = MakeContextCurrent;
168- config.open_gl .make_resource_current = MakeResourceCurrent;
169- config.open_gl .clear_current = ClearContext;
170- config.open_gl .present = Present;
171- config.open_gl .fbo_callback = GetActiveFbo;
172- config.open_gl .surface_transformation = Transformation;
173- config.open_gl .gl_proc_resolver = GlProcResolver;
174- config.open_gl .gl_external_texture_frame_callback = OnAcquireExternalTexture;
161+ if (HasTizenRenderer ()) {
162+ config.type = kOpenGL ;
163+ config.open_gl .struct_size = sizeof (config.open_gl );
164+ config.open_gl .make_current = MakeContextCurrent;
165+ config.open_gl .make_resource_current = MakeResourceCurrent;
166+ config.open_gl .clear_current = ClearContext;
167+ config.open_gl .present = Present;
168+ config.open_gl .fbo_callback = GetActiveFbo;
169+ config.open_gl .surface_transformation = Transformation;
170+ config.open_gl .gl_proc_resolver = GlProcResolver;
171+ config.open_gl .gl_external_texture_frame_callback =
172+ OnAcquireExternalTexture;
173+ } else {
174+ config.type = kSoftware ;
175+ config.software .struct_size = sizeof (config.software );
176+ config.software .surface_present_callback = SurfacePresentCallback;
177+ }
175178
176179 FlutterProjectArgs args = {};
177180 args.struct_size = sizeof (FlutterProjectArgs);
@@ -181,8 +184,11 @@ bool TizenEmbedderEngine::RunEngine(
181184 args.command_line_argv = &argv[0 ];
182185 args.platform_message_callback = OnFlutterPlatformMessage;
183186 args.custom_task_runners = &custom_task_runners;
187+
184188#ifndef TIZEN_RENDERER_EVAS_GL
185- args.vsync_callback = OnVsyncCallback;
189+ if (HasTizenRenderer ()) {
190+ args.vsync_callback = OnVsyncCallback;
191+ }
186192#endif
187193
188194 if (FlutterEngineRunsAOTCompiledDartCode ()) {
@@ -203,36 +209,40 @@ bool TizenEmbedderEngine::RunEngine(
203209 return false ;
204210 }
205211
206- std::unique_ptr<FlutterTextureRegistrar> textures =
207- std::make_unique<FlutterTextureRegistrar>();
208- textures->flutter_engine = flutter_engine;
209212 plugin_registrar_ = std::make_unique<FlutterDesktopPluginRegistrar>();
210213 plugin_registrar_->engine = this ;
211- plugin_registrar_->texture_registrar = std::move (textures);
212214
213215 internal_plugin_registrar_ =
214216 std::make_unique<flutter::PluginRegistrar>(plugin_registrar_.get ());
215217
216- key_event_channel = std::make_unique<KeyEventChannel>(
217- internal_plugin_registrar_->messenger ());
218- navigation_channel = std::make_unique<NavigationChannel>(
219- internal_plugin_registrar_->messenger ());
220218 platform_channel = std::make_unique<PlatformChannel>(
221219 internal_plugin_registrar_->messenger ());
222220 settings_channel = std::make_unique<SettingsChannel>(
223221 internal_plugin_registrar_->messenger ());
224- text_input_channel = std::make_unique<TextInputChannel>(
225- internal_plugin_registrar_->messenger (), this );
226222 localization_channel = std::make_unique<LocalizationChannel>(flutter_engine);
227223 localization_channel->SendLocales ();
228224 lifecycle_channel = std::make_unique<LifecycleChannel>(flutter_engine);
229- platform_view_channel = std::make_unique<PlatformViewChannel>(
230- internal_plugin_registrar_->messenger (), this );
231225
232- key_event_handler_ = std::make_unique<KeyEventHandler>(this );
233- touch_event_handler_ = std::make_unique<TouchEventHandler>(this );
226+ if (HasTizenRenderer ()) {
227+ std::unique_ptr<FlutterTextureRegistrar> textures =
228+ std::make_unique<FlutterTextureRegistrar>();
229+ textures->flutter_engine = flutter_engine;
230+ plugin_registrar_->texture_registrar = std::move (textures);
231+
232+ key_event_channel = std::make_unique<KeyEventChannel>(
233+ internal_plugin_registrar_->messenger ());
234+ navigation_channel = std::make_unique<NavigationChannel>(
235+ internal_plugin_registrar_->messenger ());
236+ text_input_channel = std::make_unique<TextInputChannel>(
237+ internal_plugin_registrar_->messenger (), this );
238+ platform_view_channel = std::make_unique<PlatformViewChannel>(
239+ internal_plugin_registrar_->messenger (), this );
240+ key_event_handler_ = std::make_unique<KeyEventHandler>(this );
241+ touch_event_handler_ = std::make_unique<TouchEventHandler>(this );
242+
243+ SetWindowOrientation (0 );
244+ }
234245
235- SetWindowOrientation (0 );
236246 return true ;
237247}
238248
@@ -394,6 +404,14 @@ FlutterDesktopMessage TizenEmbedderEngine::ConvertToDesktopMessage(
394404 return message;
395405}
396406
407+ bool TizenEmbedderEngine::SurfacePresentCallback (void * user_data,
408+ const void * allocation,
409+ size_t row_bytes,
410+ size_t height) {
411+ FT_LOGD (" SurfacePresentCallback" );
412+ return true ;
413+ }
414+
397415bool TizenEmbedderEngine::MakeContextCurrent (void * user_data) {
398416 return reinterpret_cast <TizenEmbedderEngine*>(user_data)
399417 ->tizen_renderer ->OnMakeCurrent ();
@@ -427,3 +445,7 @@ void* TizenEmbedderEngine::GlProcResolver(void* user_data, const char* name) {
427445 return reinterpret_cast <TizenEmbedderEngine*>(user_data)
428446 ->tizen_renderer ->OnProcResolver (name);
429447}
448+
449+ bool TizenEmbedderEngine::HasTizenRenderer () {
450+ return tizen_renderer != nullptr ;
451+ }
0 commit comments