国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

HarmonyOS:NativeWindow 開發(fā)指導(dǎo)

這篇具有很好參考價值的文章主要介紹了HarmonyOS:NativeWindow 開發(fā)指導(dǎo)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

場景介紹

NativeWindow 是 HarmonyOS 本地平臺化窗口,表示圖形隊列的生產(chǎn)者端。開發(fā)者可以通過 NativeWindow 接口進(jìn)行申請和提交 Buffer,配置 Buffer 屬性信息。

針對 NativeWindow,常見的開發(fā)場景如下:

●?通過 NativeWindow 提供的 Native?API 接口申請圖形 Buffer,并將生產(chǎn)圖形內(nèi)容寫入圖形 Buffer,最終提交 Buffer 到圖形隊列

●?在適配 EGL 層的 eglswapbuffer 接口時,進(jìn)行申請和提交 Buffer

接口說明

HarmonyOS:NativeWindow 開發(fā)指導(dǎo),華為,HarmonyOS

詳細(xì)的接口說明請參考native_window。

開發(fā)步驟

以下步驟描述了在 HarmonyOS 中如何使用 NativeWindow 提供的 Native?API 接口,申請圖形 Buffer,并將生產(chǎn)圖形內(nèi)容寫入圖形 Buffer 后,最終提交 Buffer 到圖形隊列。

添加動態(tài)鏈接庫

CMakeLists.txt 中添加以下 lib。

libace_ndk.z.solibnative_window.so

頭文件

#include?<ace/xcomponent/native_interface_xcomponent.h>#include?<native_window/external_window.h>

1.? 獲取 OHNativeWindow 實例

可在OH_NativeXComponent_Callback提供的接口中獲取 OHNativeWindow,下面提供一份代碼示例。XComponent 模塊的具體使用方法請參考XComponent開發(fā)指導(dǎo)。

a.? 在 xxx.ets 中添加一個 XComponent 組件。

XComponent({?id: 'xcomponentId',?type: 'surface',?libraryname: 'entry'})    .width(360)    .height(360)

b.? 在?native?c++?層獲取?NativeXComponent。

napi_value?exportInstance?= nullptr;//?用來解析出被wrap了NativeXComponent指針的屬性napi_get_named_property(env,?exports,?OH_NATIVE_XCOMPONENT_OBJ, &exportInstance);OH_NativeXComponent?*nativeXComponent?= nullptr;//?通過napi_unwrap接口,解析出NativeXComponent的實例指針napi_unwrap(env,?exportInstance, reinterpret_cast<void**>(&nativeXComponent));//?獲取XComponentIdchar?idStr[OH_XCOMPONENT_ID_LEN_MAX?+ 1] = {};uint64_t?idSize?=?OH_XCOMPONENT_ID_LEN_MAX?+ 1;OH_NativeXComponent_GetXComponentId(nativeXComponent,?idStr, &idSize);

c.? 定義?OH_NativeXComponent_Callback。

//?定義回調(diào)函數(shù)void OnSurfaceCreatedCB(OH_NativeXComponent*?component, void*?window){    //?可獲取?OHNativeWindow?實例????OHNativeWindow*?nativeWindow?= static_cast<OHNativeWindow*>(window);    //?...}void OnSurfaceChangedCB(OH_NativeXComponent*?component, void*?window){    //?可獲取?OHNativeWindow?實例????OHNativeWindow*?nativeWindow?= static_cast<OHNativeWindow*>(window);    //?...}void OnSurfaceDestroyedCB(OH_NativeXComponent*?component, void*?window){    //?可獲取?OHNativeWindow?實例????OHNativeWindow*?nativeWindow?= static_cast<OHNativeWindow*>(window);    //?...}void DispatchTouchEventCB(OH_NativeXComponent*?component, void*?window){    //?可獲取?OHNativeWindow?實例????OHNativeWindow*?nativeWindow?= static_cast<OHNativeWindow*>(window);    //?...}


//?初始化?OH_NativeXComponent_CallbackOH_NativeXComponent_Callback?callback;callback.OnSurfaceCreated?=?OnSurfaceCreatedCB;callback.OnSurfaceChanged?=?OnSurfaceChangedCB;callback.OnSurfaceDestroyed?=?OnSurfaceDestroyedCB;callback.DispatchTouchEvent?=?DispatchTouchEventCB;

d.? 將?OH_NativeXComponent_Callback?注冊給?NativeXComponent。

//?注冊回調(diào)函數(shù)OH_NativeXComponent_RegisterCallback(nativeXComponent, &callback);

2.? 設(shè)置 OHNativeWindowBuffer 的屬性。使用 OH_NativeWindow_NativeWindowHandleOpt 設(shè)置 OHNativeWindowBuffer 的屬性。

//?設(shè)置?OHNativeWindowBuffer?的寬高
int32_t?code?=?SET_BUFFER_GEOMETRY;
int32_t?width?= 0x100;
int32_t?height?= 0x100;
//?這里的nativeWindow是從上一步驟中的回調(diào)函數(shù)中獲得的
int32_t?ret?= OH_NativeWindow_NativeWindowHandleOpt(nativeWindow,?code,?width,?height);

3.? 從圖形隊列申請 OHNativeWindowBuffer。

OHNativeWindowBuffer*?buffer?= nullptr;int?fenceFd;//?通過?OH_NativeWindow_NativeWindowRequestBuffer?獲取?OHNativeWindowBuffer?實例OH_NativeWindow_NativeWindowRequestBuffer(nativeWindow, &buffer, &fenceFd);//?通過?OH_NativeWindow_GetBufferHandleFromNative?獲取?buffer?的?handleBufferHandle*?bufferHandle?= OH_NativeWindow_GetBufferHandleFromNative(buffer);

4.? 內(nèi)存映射 mmap。

#include?<sys/mman.h>

//?使用系統(tǒng)接口mmap將bufferHandle對應(yīng)的共享內(nèi)存映射到用戶空間,可以通過映射出來的虛擬地址向bufferHandle中寫入圖像數(shù)據(jù)
//?bufferHandle->virAddr是bufferHandle在共享內(nèi)存中的起始地址,bufferHandle->size是bufferHandle在共享內(nèi)存中的內(nèi)存占用大小
void*?mappedAddr?= mmap(bufferHandle->virAddr,?bufferHandle->size,?PROT_READ?|?PROT_WRITE,?MAP_SHARED,?bufferHandle->fd, 0);
if (mappedAddr?==?MAP_FAILED) {
    //?mmap?failed
}

5.? 將生產(chǎn)的內(nèi)容寫入 OHNativeWindowBuffer。

static uint32_t?value?= 0x00;
value++;
uint32_t *pixel?= static_cast<uint32_t?*>(mappedAddr); //?使用mmap獲取到的地址來訪問內(nèi)存
for (uint32_t?x?= 0;?x?<?width;?x++) {
    for (uint32_t?y?= 0;??y?<?height;?y++) {
        *pixel++ =?value;
    }
}

6.? 提交 OHNativeWindowBuffer 到圖形隊列。

//?設(shè)置刷新區(qū)域,如果Region中的Rect為nullptr,或者rectNumber為0,則認(rèn)為OHNativeWindowBuffer全部有內(nèi)容更改。
Region?region{nullptr, 0};
//?通過OH_NativeWindow_NativeWindowFlushBuffer?提交給消費(fèi)者使用,例如:顯示在屏幕上。
OH_NativeWindow_NativeWindowFlushBuffer(nativeWindow,?buffer,?fenceFd,?region);

7.? 取消內(nèi)存映射 munmap。文章來源地址http://www.zghlxwxcb.cn/news/detail-757774.html

//?內(nèi)存使用完記得去掉內(nèi)存映射int?result?= munmap(mappedAddr,?bufferHandle->size);if (result?== -1) {    //?munmap?failed}

到了這里,關(guān)于HarmonyOS:NativeWindow 開發(fā)指導(dǎo)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 開發(fā)指導(dǎo)—利用組件&插值器動畫實現(xiàn) HarmonyOS 動效

    開發(fā)指導(dǎo)—利用組件&插值器動畫實現(xiàn) HarmonyOS 動效

    在組件上創(chuàng)建和運(yùn)行動畫的快捷方式。具體用法請參考通用方法。 通過調(diào)用 animate 方法獲得 animation 對象,animation 對象支持動畫屬性、動畫方法和動畫事件。 說明 ●?使用 animate 方法時必須傳入 Keyframes 和 Options 參數(shù)。 ●?多次調(diào)用 animate 方法時,采用 replace 策略,即最后一

    2024年02月09日
    瀏覽(22)
  • 開發(fā)指導(dǎo)—利用CSS動畫實現(xiàn)HarmonyOS動效(一)

    開發(fā)指導(dǎo)—利用CSS動畫實現(xiàn)HarmonyOS動效(一)

    注:本文內(nèi)容分享轉(zhuǎn)載自 HarmonyOS?Developer 官網(wǎng)文檔 CSS 是描述 HML 頁面結(jié)構(gòu)的樣式語言。所有組件均存在系統(tǒng)默認(rèn)樣式,也可在頁面 CSS 樣式文件中對組件、頁面自定義不同的樣式。請參考通用樣式了解兼容 JS 的類 Web 開發(fā)范式支持的組件樣式。 ●?邏輯像素 px(文檔中以le

    2024年02月10日
    瀏覽(23)
  • HarmonyOS鴻蒙基于Java開發(fā): Java UI 動畫開發(fā)指導(dǎo)

    目錄 幀動畫 數(shù)值動畫 屬性動畫 動畫集合 多個動畫同時開始 多個動畫按順序逐個執(zhí)行 多個動畫順序執(zhí)行和同時執(zhí)行并存 動畫是組件的基礎(chǔ)特性之一,精心設(shè)計的動畫使UI變化更直觀,有助于改進(jìn)應(yīng)用程序的外觀并改善用戶體驗。

    2024年02月21日
    瀏覽(36)
  • HarmonyOS 音頻開發(fā)指導(dǎo):使用 OpenSL ES 開發(fā)音頻播放功能

    HarmonyOS 音頻開發(fā)指導(dǎo):使用 OpenSL ES 開發(fā)音頻播放功能

    OpenSL?ES 全稱為 Open?Sound?Library?for?Embedded?Systems,是一個嵌入式、跨平臺、免費(fèi)的音頻處理庫。為嵌入式移動多媒體設(shè)備上的應(yīng)用開發(fā)者提供標(biāo)準(zhǔn)化、高性能、低延遲的 API。HarmonyOS 的 Native?API 基于Khronos?Group開發(fā)的OpenSL?ES?1.0.1?API?規(guī)范實現(xiàn),開發(fā)者可以通過OpenSLES.h和O

    2024年02月03日
    瀏覽(21)
  • HarmonyOS:Neural Network Runtime 對接 AI 推理框架開發(fā)指導(dǎo)

    HarmonyOS:Neural Network Runtime 對接 AI 推理框架開發(fā)指導(dǎo)

    Neural?Network?Runtime 作為 AI 推理引擎和加速芯片的橋梁,為 AI 推理引擎提供精簡的 Native 接口,滿足推理引擎通過加速芯片執(zhí)行端到端推理的需求。 本文以圖 1 展示的 Add 單算子模型為例,介紹 Neural?Network?Runtime 的開發(fā)流程。Add 算子包含兩個輸入、一個參數(shù)和一個輸出,其

    2024年02月03日
    瀏覽(21)
  • 基于HarmonyOS的華為智能手表APP開發(fā)實戰(zhàn)——Fitness_華為手表app開發(fā)

    、 文章瀏覽閱讀8.7k次,點贊6次,收藏43次。本文針對華為HarmonyOS智能穿戴產(chǎn)品(即HUAWEI WATCH 3)開發(fā)了一款運(yùn)動健康類的游戲化APP——Fitness,旨在通過游戲化的方式,提升用戶運(yùn)動動機(jī)。_華為手表app開發(fā) **開發(fā)環(huán)境:**客戶端UI是基于HarmonyOS進(jìn)行開發(fā)的,所以IDE使用的是華為

    2024年02月01日
    瀏覽(27)
  • HarmonyOS鴻蒙原生應(yīng)用開發(fā)設(shè)計- 華為分享圖標(biāo)

    HarmonyOS鴻蒙原生應(yīng)用開發(fā)設(shè)計- 華為分享圖標(biāo)

    HarmonyOS設(shè)計文檔中,為大家提供了獨特的華為分享圖標(biāo),開發(fā)者可以根據(jù)需要直接引用。 開發(fā)者直接使用官方提供的華為分享圖標(biāo)內(nèi)容,既可以符合HarmonyOS原生應(yīng)用的開發(fā)上架運(yùn)營規(guī)范,又可以防止使用別人的內(nèi)容產(chǎn)生的侵權(quán)意外情況等,減少自主創(chuàng)作華為分享圖標(biāo)的工作量

    2024年02月08日
    瀏覽(110)
  • 【華為鴻蒙系統(tǒng)學(xué)習(xí)】- HarmonyOS4.0開發(fā)|自學(xué)篇

    【華為鴻蒙系統(tǒng)學(xué)習(xí)】- HarmonyOS4.0開發(fā)|自學(xué)篇

    ? ??個人主頁:?Aileen_0v0 ??熱門專欄:?華為鴻蒙系統(tǒng)學(xué)習(xí)|計算機(jī)網(wǎng)絡(luò)|數(shù)據(jù)結(jié)構(gòu)與算法 ??個人格言: \\\"沒有羅馬,那就自己創(chuàng)造羅馬~\\\" 目錄 HarmonyOS 4.0 技術(shù)介紹: HarmonyOS三大特征: ? ? 1.實現(xiàn)硬件互助,資源共享。 ?????2.?面向開發(fā)者,實現(xiàn)一次開發(fā),多端部署。 ?3.一套操

    2024年02月05日
    瀏覽(29)
  • 華為鴻蒙HarmonyOS應(yīng)用開發(fā)者高級認(rèn)證試題及答案

    判斷 1只要使用端云一體化的云端資源就需要支付費(fèi)用(錯) 2所有使用@Component修飾的自定義組件都支持onPageShow,onBackPress和onPageHide生命周期函數(shù)。(錯) 3 HarmonyOS應(yīng)用可以兼容OpenHarmony生態(tài)(對) 4 使用端云一體化開發(fā),無需自己搭建服務(wù)器,并進(jìn)行運(yùn)維了。(對) 5基于端

    2024年02月04日
    瀏覽(25)
  • 基于HarmonyOS的華為智能手表APP開發(fā)實戰(zhàn)——Fitness

    基于HarmonyOS的華為智能手表APP開發(fā)實戰(zhàn)——Fitness

    本文針對華為HarmonyOS智能穿戴產(chǎn)品(即 HUAWEI WATCH 3) 開發(fā)了一款運(yùn)動健康類的游戲化APP——Fitness,旨在通過游戲化的方式,提升用戶運(yùn)動動機(jī)。 開發(fā)環(huán)境: 客戶端UI是基于HarmonyOS進(jìn)行開發(fā)的,所以IDE使用的是華為的DevEco-Studio。 語言: 采用的編程語言是JavaScript,基于JS擴(kuò)展

    2024年02月08日
    瀏覽(129)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包