From ab78504ba41927ef9bf50c84ebdd4532d217b4ad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E8=BE=89?= Date: Wed, 14 May 2025 14:39:05 +0800 Subject: [PATCH] native image and vsync add interface MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 李辉 --- .../entry/src/main/cpp/render/native_render.cpp | 8 +++++--- .../entry/src/main/cpp/render/native_render.h | 3 ++- .../entry/src/main/cpp/render/render_engine.cpp | 5 ++++- .../entry/src/main/cpp/render/render_engine.h | 2 +- 4 files changed, 12 insertions(+), 6 deletions(-) diff --git a/code/BasicFeature/Native/NdkNativeImage/entry/src/main/cpp/render/native_render.cpp b/code/BasicFeature/Native/NdkNativeImage/entry/src/main/cpp/render/native_render.cpp index b3ac4ecde1..2a00c38b26 100644 --- a/code/BasicFeature/Native/NdkNativeImage/entry/src/main/cpp/render/native_render.cpp +++ b/code/BasicFeature/Native/NdkNativeImage/entry/src/main/cpp/render/native_render.cpp @@ -16,6 +16,7 @@ #include #include #include +#include #include #include #include @@ -69,7 +70,7 @@ OHNativeRender::~OHNativeRender() } } -bool OHNativeRender::SetSurfaceId(uint64_t surfaceId, uint64_t width, uint64_t height) +bool OHNativeRender::SetSurfaceWidthAndHeight(OH_NativeImage* image, uint64_t surfaceId, uint64_t width, uint64_t height) { if (nativeWindow_ != nullptr) { (void)OH_NativeWindow_NativeObjectUnreference(nativeWindow_); @@ -79,8 +80,9 @@ bool OHNativeRender::SetSurfaceId(uint64_t surfaceId, uint64_t width, uint64_t h // 保存宽度和高度 width_ = width; height_ = height; - - // 从 SurfaceId 创建 NativeWindow + //方式一: 从 NativeImage 创建 NativeWindow + nativeWindow_ = OH_NativeImage_AcquireNativeWindow(image); + //方式二: 从 SurfaceId 创建 NativeWindow int ret = OH_NativeWindow_CreateNativeWindowFromSurfaceId(surfaceId, &nativeWindow_); if (ret != SUCCESS) { OH_LOG_Print(LOG_APP, LOG_ERROR, LOG_PRINT_DOMAIN, "OHNativeRender", diff --git a/code/BasicFeature/Native/NdkNativeImage/entry/src/main/cpp/render/native_render.h b/code/BasicFeature/Native/NdkNativeImage/entry/src/main/cpp/render/native_render.h index 692e2de7ad..eed4ec671f 100644 --- a/code/BasicFeature/Native/NdkNativeImage/entry/src/main/cpp/render/native_render.h +++ b/code/BasicFeature/Native/NdkNativeImage/entry/src/main/cpp/render/native_render.h @@ -17,6 +17,7 @@ #define NATIVE_IMAGE_NATIVE_RENDER_H #include #include +#include #include #include @@ -25,7 +26,7 @@ public: OHNativeRender() = default; ~OHNativeRender(); - bool SetSurfaceId(uint64_t surfaceId, uint64_t width, uint64_t height); + bool SetSurfaceWidthAndHeight(OH_NativeImage* image, uint64_t surfaceId, uint64_t width, uint64_t height); void RenderFrame(); private: diff --git a/code/BasicFeature/Native/NdkNativeImage/entry/src/main/cpp/render/render_engine.cpp b/code/BasicFeature/Native/NdkNativeImage/entry/src/main/cpp/render/render_engine.cpp index 5b1d0762c6..b3ac18e564 100644 --- a/code/BasicFeature/Native/NdkNativeImage/entry/src/main/cpp/render/render_engine.cpp +++ b/code/BasicFeature/Native/NdkNativeImage/entry/src/main/cpp/render/render_engine.cpp @@ -20,6 +20,7 @@ #include #include #include +#include #include namespace { @@ -133,6 +134,7 @@ void RenderEngine::WaitForVsync() if (vSyncCnt_ > 0) { vSyncCnt_--; (void)OH_NativeVSync_RequestFrame(nativeVsync_, &RenderEngine::OnVsync, this); + OH_NativeVSync_GetPeriod(nativeVsync_, &period); } } @@ -327,6 +329,7 @@ void RenderEngine::DestroyNativeImage() } if (nativeImage_ != nullptr) { + OH_NativeImage_DetachContext(nativeImage_); (void)OH_NativeImage_UnsetOnFrameAvailableListener(nativeImage_); OH_NativeImage_Destroy(&nativeImage_); nativeImage_ = nullptr; @@ -346,7 +349,7 @@ bool RenderEngine::StartNativeRenderThread() return false; } - if (!nativeRender_->SetSurfaceId(nativeImageSurfaceId_, width_, height_)) { + if (!nativeRender_->SetSurfaceWidthAndHeight(nativeImage_, nativeImageSurfaceId_, width_, height_)) { OH_LOG_Print(LOG_APP, LOG_ERROR, LOG_PRINT_DOMAIN, "RenderEngine", "Failed to set SurfaceId for NativeRender"); return false; diff --git a/code/BasicFeature/Native/NdkNativeImage/entry/src/main/cpp/render/render_engine.h b/code/BasicFeature/Native/NdkNativeImage/entry/src/main/cpp/render/render_engine.h index 9a8b4a1b23..b2a57b8a57 100644 --- a/code/BasicFeature/Native/NdkNativeImage/entry/src/main/cpp/render/render_engine.h +++ b/code/BasicFeature/Native/NdkNativeImage/entry/src/main/cpp/render/render_engine.h @@ -123,7 +123,7 @@ private: void *window_ = nullptr; uint64_t width_ = 0; uint64_t height_ = 0; - + long long period = 0; // 其他状态变量 std::atomic isPaused_{false}; }; -- Gitee