|
19 | 19 | #include "flutter/shell/platform/tizen/tizen_renderer_egl.h" |
20 | 20 | #include "flutter/shell/platform/tizen/tizen_renderer_evas_gl.h" |
21 | 21 |
|
| 22 | +#ifdef NUI_SUPPORT |
| 23 | +#include "flutter/shell/platform/tizen/tizen_renderer_nui_gl.h" |
| 24 | +#include "flutter/shell/platform/tizen/tizen_view_nui.h" |
| 25 | +#endif |
| 26 | + |
22 | 27 | namespace flutter { |
23 | 28 |
|
24 | 29 | namespace { |
@@ -79,23 +84,21 @@ FlutterTizenEngine::~FlutterTizenEngine() { |
79 | 84 | StopEngine(); |
80 | 85 | } |
81 | 86 |
|
82 | | -void FlutterTizenEngine::CreateRenderer( |
| 87 | +std::unique_ptr<TizenRenderer> FlutterTizenEngine::CreateRenderer( |
83 | 88 | FlutterDesktopRendererType renderer_type) { |
84 | | - if (renderer_type == FlutterDesktopRendererType::kEvasGL) { |
85 | | - renderer_ = std::make_unique<TizenRendererEvasGL>(); |
86 | | - |
87 | | - render_loop_ = std::make_unique<TizenRenderEventLoop>( |
88 | | - std::this_thread::get_id(), // main thread |
89 | | - embedder_api_.GetCurrentTime, |
90 | | - [this](const auto* task) { |
91 | | - if (embedder_api_.RunTask(this->engine_, task) != kSuccess) { |
92 | | - FT_LOG(Error) << "Could not post an engine task."; |
93 | | - } |
94 | | - }, |
95 | | - renderer_.get()); |
96 | | - } else { |
97 | | - renderer_ = std::make_unique<TizenRendererEgl>( |
98 | | - project_->HasArgument("--enable-impeller")); |
| 89 | + switch (renderer_type) { |
| 90 | + case FlutterDesktopRendererType::kEvasGL: |
| 91 | + return std::make_unique<TizenRendererEvasGL>(view_->tizen_view()); |
| 92 | + case FlutterDesktopRendererType::kEGL: |
| 93 | +#ifdef NUI_SUPPORT |
| 94 | + if (auto* nui_view = |
| 95 | + dynamic_cast<flutter::TizenViewNui*>(view_->tizen_view())) { |
| 96 | + return std::make_unique<TizenRendererNuiGL>( |
| 97 | + nui_view, project_->HasArgument("--enable-impeller")); |
| 98 | + } |
| 99 | +#endif |
| 100 | + return std::make_unique<TizenRendererEgl>( |
| 101 | + view_->tizen_view(), project_->HasArgument("--enable-impeller")); |
99 | 102 | } |
100 | 103 | } |
101 | 104 |
|
@@ -244,8 +247,7 @@ bool FlutterTizenEngine::RunEngine() { |
244 | 247 | internal_plugin_registrar_->messenger()); |
245 | 248 |
|
246 | 249 | if (IsHeaded()) { |
247 | | - texture_registrar_ = std::make_unique<FlutterTizenTextureRegistrar>( |
248 | | - this, project_->HasArgument("--enable-impeller")); |
| 250 | + texture_registrar_ = std::make_unique<FlutterTizenTextureRegistrar>(this); |
249 | 251 | keyboard_channel_ = std::make_unique<KeyboardChannel>( |
250 | 252 | internal_plugin_registrar_->messenger(), |
251 | 253 | [this](const FlutterKeyEvent& event, FlutterKeyEventCallback callback, |
@@ -294,8 +296,22 @@ bool FlutterTizenEngine::StopEngine() { |
294 | 296 | return false; |
295 | 297 | } |
296 | 298 |
|
297 | | -void FlutterTizenEngine::SetView(FlutterTizenView* view) { |
| 299 | +void FlutterTizenEngine::SetView(FlutterTizenView* view, |
| 300 | + FlutterDesktopRendererType renderer_type) { |
298 | 301 | view_ = view; |
| 302 | + renderer_ = CreateRenderer(renderer_type); |
| 303 | + |
| 304 | + if (renderer_type == FlutterDesktopRendererType::kEvasGL) { |
| 305 | + render_loop_ = std::make_unique<TizenRenderEventLoop>( |
| 306 | + std::this_thread::get_id(), // main thread |
| 307 | + embedder_api_.GetCurrentTime, |
| 308 | + [this](const auto* task) { |
| 309 | + if (embedder_api_.RunTask(this->engine_, task) != kSuccess) { |
| 310 | + FT_LOG(Error) << "Could not post an engine task."; |
| 311 | + } |
| 312 | + }, |
| 313 | + renderer_.get()); |
| 314 | + } |
299 | 315 | } |
300 | 316 |
|
301 | 317 | void FlutterTizenEngine::AddPluginRegistrarDestructionCallback( |
@@ -435,79 +451,17 @@ FlutterDesktopMessage FlutterTizenEngine::ConvertToDesktopMessage( |
435 | 451 | } |
436 | 452 |
|
437 | 453 | FlutterRendererConfig FlutterTizenEngine::GetRendererConfig() { |
438 | | - FlutterRendererConfig config = {}; |
439 | 454 | if (IsHeaded()) { |
440 | | - config.type = kOpenGL; |
441 | | - config.open_gl.struct_size = sizeof(config.open_gl); |
442 | | - config.open_gl.make_current = [](void* user_data) -> bool { |
443 | | - auto* engine = static_cast<FlutterTizenEngine*>(user_data); |
444 | | - if (!engine->view()) { |
445 | | - return false; |
446 | | - } |
447 | | - return engine->view()->OnMakeCurrent(); |
448 | | - }; |
449 | | - config.open_gl.make_resource_current = [](void* user_data) -> bool { |
450 | | - auto* engine = static_cast<FlutterTizenEngine*>(user_data); |
451 | | - if (!engine->view()) { |
452 | | - return false; |
453 | | - } |
454 | | - return engine->view()->OnMakeResourceCurrent(); |
455 | | - }; |
456 | | - config.open_gl.clear_current = [](void* user_data) -> bool { |
457 | | - auto* engine = static_cast<FlutterTizenEngine*>(user_data); |
458 | | - if (!engine->view()) { |
459 | | - return false; |
460 | | - } |
461 | | - return engine->view()->OnClearCurrent(); |
462 | | - }; |
463 | | - config.open_gl.present = [](void* user_data) -> bool { |
464 | | - auto* engine = static_cast<FlutterTizenEngine*>(user_data); |
465 | | - if (!engine->view()) { |
466 | | - return false; |
467 | | - } |
468 | | - return engine->view()->OnPresent(); |
469 | | - }; |
470 | | - config.open_gl.fbo_callback = [](void* user_data) -> uint32_t { |
471 | | - auto* engine = static_cast<FlutterTizenEngine*>(user_data); |
472 | | - if (!engine->view()) { |
473 | | - return false; |
474 | | - } |
475 | | - return engine->view()->OnGetFBO(); |
476 | | - }; |
477 | | - config.open_gl.surface_transformation = |
478 | | - [](void* user_data) -> FlutterTransformation { |
479 | | - auto* engine = static_cast<FlutterTizenEngine*>(user_data); |
480 | | - if (!engine->view()) { |
481 | | - return FlutterTransformation(); |
482 | | - } |
483 | | - return engine->view()->GetFlutterTransformation(); |
484 | | - }; |
485 | | - config.open_gl.gl_proc_resolver = [](void* user_data, |
486 | | - const char* name) -> void* { |
487 | | - auto* engine = static_cast<FlutterTizenEngine*>(user_data); |
488 | | - if (!engine->view()) { |
489 | | - return nullptr; |
490 | | - } |
491 | | - return engine->view()->OnProcResolver(name); |
492 | | - }; |
493 | | - config.open_gl.gl_external_texture_frame_callback = |
494 | | - [](void* user_data, int64_t texture_id, size_t width, size_t height, |
495 | | - FlutterOpenGLTexture* texture) -> bool { |
496 | | - auto* engine = static_cast<FlutterTizenEngine*>(user_data); |
497 | | - if (!engine->texture_registrar()) { |
498 | | - return false; |
499 | | - } |
500 | | - return engine->texture_registrar()->PopulateTexture(texture_id, width, |
501 | | - height, texture); |
502 | | - }; |
| 455 | + return renderer()->GetRendererConfig(); |
503 | 456 | } else { |
| 457 | + FlutterRendererConfig config = {}; |
504 | 458 | config.type = kSoftware; |
505 | 459 | config.software.struct_size = sizeof(config.software); |
506 | 460 | config.software.surface_present_callback = |
507 | 461 | [](void* user_data, const void* allocation, size_t row_bytes, |
508 | 462 | size_t height) -> bool { return true; }; |
| 463 | + return config; |
509 | 464 | } |
510 | | - return config; |
511 | 465 | } |
512 | 466 |
|
513 | 467 | void FlutterTizenEngine::DispatchAccessibilityAction( |
|
0 commit comments