From 6c3e32ffbab7b596705d9e2d92b031f45c9edf30 Mon Sep 17 00:00:00 2001 From: jiangwenyu1 Date: Mon, 17 Jul 2023 16:40:38 +0800 Subject: [PATCH] draw pointer by gpu --- build/prebuild.sh | 1 + window_manager/ft_pointer_draw/BUILD.gn | 7 +++++++ .../ft_pointer_draw/pointer_draw_manager.cpp | 11 +++++++++++ window_manager/ft_pointer_draw/pointer_draw_manager.h | 6 ++++++ 4 files changed, 25 insertions(+) diff --git a/build/prebuild.sh b/build/prebuild.sh index 17c255d..d06ed04 100755 --- a/build/prebuild.sh +++ b/build/prebuild.sh @@ -105,6 +105,7 @@ cd ${PROJECT_DIR} # copy FT sa file to /usr/local/share/ft/ sudo mkdir -p /usr/local/share/ft sudo cp -fr ${PROJECT_DIR}/etc/ft.xml /usr/local/share/ft/ +sudo cp -fr ${PROJECT_DIR}/etc/icon /usr/local/share/ft/ # copy config files to /usr/local/share/ft/window_manager sudo mkdir -p /usr/local/share/ft/window_manager diff --git a/window_manager/ft_pointer_draw/BUILD.gn b/window_manager/ft_pointer_draw/BUILD.gn index 5a6635a..c4a28a1 100644 --- a/window_manager/ft_pointer_draw/BUILD.gn +++ b/window_manager/ft_pointer_draw/BUILD.gn @@ -13,6 +13,7 @@ import("//build/gn/fangtian.gni") import("//config.gni") +import("//display_server/ft_build/ds_config.gni") config("pointer_draw_config") { visibility = [ ":*" ] @@ -21,8 +22,14 @@ config("pointer_draw_config") { "-Wno-c++11-narrowing", ] + if (ds_enable_gpu) { + defines = [ "ENABLE_GPU" ] + libs = [ "EGL", "GLESv2" ] + } + include_dirs = [ "$window_manager_path/interfaces/innerkits/dm", + "$display_server_root/rosen/modules/2d_graphics/src", ] } diff --git a/window_manager/ft_pointer_draw/pointer_draw_manager.cpp b/window_manager/ft_pointer_draw/pointer_draw_manager.cpp index 795cd85..0d0df6c 100644 --- a/window_manager/ft_pointer_draw/pointer_draw_manager.cpp +++ b/window_manager/ft_pointer_draw/pointer_draw_manager.cpp @@ -151,6 +151,17 @@ WMError PointerDrawingManager::InitLayerNode(int32_t x, int32_t y) return WMError::WM_ERROR_NULLPTR; } +#ifdef ENABLE_GPU + renderContext_ = std::make_unique(); + if (renderContext_ != nullptr) { + WLOGFD("create renderContext success"); + renderContext_->InitializeEglContext(); + rsSurface_->SetRenderContext(renderContext_.get()); + } else { + WLOGFE("create renderContext fail"); + } +#endif + auto framePtr = rsSurface_->RequestFrame(ICON_WIDTH, ICON_HEIGHT); if (framePtr == nullptr) { WLOGFE("RequestFrame fail"); diff --git a/window_manager/ft_pointer_draw/pointer_draw_manager.h b/window_manager/ft_pointer_draw/pointer_draw_manager.h index 8bda51d..cc70812 100644 --- a/window_manager/ft_pointer_draw/pointer_draw_manager.h +++ b/window_manager/ft_pointer_draw/pointer_draw_manager.h @@ -23,6 +23,9 @@ #include "ui/rs_surface_node.h" #include "pixel_map.h" #include "event_handler.h" +#ifdef ENABLE_GPU +#include "render_context/render_context.h" +#endif static constexpr unsigned int HILOG_DOMAIN_WINDOW = 0xD004200; @@ -160,5 +163,8 @@ private: std::shared_ptr rsSurface_ = nullptr; std::shared_ptr runner_ = nullptr; std::shared_ptr handler_ = nullptr; +#ifdef ENABLE_GPU + std::unique_ptr renderContext_ = nullptr; +#endif }; #endif // POINTER_DRAW_H -- Gitee