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

Android OpenGL 教程——Native 工程初始化

這篇具有很好參考價(jià)值的文章主要介紹了Android OpenGL 教程——Native 工程初始化。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

NativeActivity

NDK 的適用場(chǎng)景官方給出三點(diǎn):

  1. 平臺(tái)間的 App 移植
  2. 復(fù)用現(xiàn)有庫(kù)
  3. 對(duì)軟件性能要求較高的場(chǎng)合比如游戲等

有兩種方式可以實(shí)現(xiàn) native activity。

  1. native_activity.h
  2. android_native_app_glue

由于第二種方法啟用另一個(gè)線(xiàn)程處理回調(diào)和輸入事件,NDK 的例子中就采用了這個(gè)實(shí)現(xiàn)方式。

工程初始化

創(chuàng)建 NDK 工程

Android OpenGL 教程——Native 工程初始化,Android OpenGL,android??Android OpenGL 教程——Native 工程初始化,Android OpenGL,android??Android OpenGL 教程——Native 工程初始化,Android OpenGL,android

NDK 工程創(chuàng)建完成會(huì)生成一個(gè)帶有 JNI 調(diào)用 c++ 返回 HelloWorld 字符串的一個(gè)初始化工程

配置 NativeActivity

首先在? AndroidManifest.xml 文件中添加 Name 為 android.app.lib_name(不可更改) 的 MetaData

<activity
    android:name=".MainActivity"
    android:exported="true">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>

    <meta-data android:name="android.app.lib_name" android:value="OpenGLDemo" />

</activity>

將我們 MainActivity 改為繼承?NativeActivity,并加載 native 生成的?OpenGLDemo.so

import android.app.NativeActivity
class MainActivity : NativeActivity() {
    companion object {
        init {
            System.loadLibrary("OpenGLDemo")
        }
    }
}

?配置 CMakeList 文件

cmake_minimum_required(VERSION 3.22.1)

# 與之前在 Manifest 文件中配置的一樣
project("OpenGLDemo")

# 添加 native_app_glue
set(APP_GLUE_DIR ${ANDROID_NDK}/sources/android/native_app_glue)
include_directories(${APP_GLUE_DIR})
add_library(app-glue STATIC ${APP_GLUE_DIR}/android_native_app_glue.c)
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -u ANativeActivity_onCreate")

# 添加源碼和頭文件
file(GLOB LOCAL_SOURCE  "${CMAKE_SOURCE_DIR}/*.cpp")
file(GLOB LOCAL_HEADER "${CMAKE_SOURCE_DIR}/*.h")
add_library(${CMAKE_PROJECT_NAME} SHARED
        ${LOCAL_HEADERS}
        ${LOCAL_SOURCE})

# 指定 CMake 應(yīng)鏈接到您的目標(biāo)庫(kù)的庫(kù)
target_link_libraries(${CMAKE_PROJECT_NAME}
        android
        EGL
        GLESv3
        jnigraphics
        app-glue
        log)

創(chuàng)建 main.cpp 的 native 入口文件

#include <android_native_app_glue.h>
#include <jni.h>

static int32_t handle_input(struct android_app* app, AInputEvent* event) {
    return 0;
}

static void handle_cmd(struct android_app *app, int32_t cmd) {
    switch (cmd) {
        case APP_CMD_RESUME: {
            break;
        }
        case APP_CMD_PAUSE: {
            break;
        }
        default:
            break;
    }
}

void android_main(struct android_app *app) {
    app->onAppCmd = handle_cmd;
    app->onInputEvent = handle_input;
    // 循環(huán)等待要做的事情。
    while (!app->destroyRequested) {
        int events;
        struct android_poll_source *source;
        // 獲取需要處理的事件
        if (ALooper_pollAll(0, nullptr, &events, (void **) &source) >= 0) {
            if (source) {
                source->process(app, source);
            }
        }
    }
}

?至此我們的 native 工程就配置完成了,運(yùn)行后你會(huì)看到一個(gè)純黑的窗口,那是因?yàn)槲覀儧](méi)有為當(dāng)前 MainActivity 創(chuàng)建的 Window 繪制任何東西

要想繪制東西,需要初始化 OpenGL?,創(chuàng)建對(duì)應(yīng)的 Display 與 Surface 與當(dāng)前的 window 進(jìn)行綁定

詳見(jiàn)?Android OpenGL 教程——窗口初始化

OpenGLDemo 源碼的 init_native_activity 分支?文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-599688.html

到了這里,關(guān)于Android OpenGL 教程——Native 工程初始化的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • android系列-init 初始化日志

    1.FirstStageMain 2.InitKernelLogging? 3.KernelLogger? 4.OpenKmsg?

    2024年02月02日
    瀏覽(32)
  • android 添加ro屬性字段并初始化

    硬件平臺(tái):QCS6125 軟件平臺(tái):Android11 需求:硬件需通過(guò)硬件電路區(qū)分為多款型號(hào),需要初始化到相應(yīng)的系統(tǒng)屬性字段展示。 ? 這種型號(hào)屬性適合做成ro類(lèi)型,類(lèi)似于原生系統(tǒng)的ro.product.model,由于android層面拿到這個(gè)具體的型號(hào)值是內(nèi)核通過(guò)傳遞cmdline而獲取的,內(nèi)核層面拿到硬

    2024年01月16日
    瀏覽(28)
  • Android12 P2P 初始化

    目錄 ?學(xué)習(xí)資料:Android Miracast 投屏 1. 開(kāi)機(jī)log 2.?WifiP2pService 啟動(dòng)

    2024年02月06日
    瀏覽(48)
  • Android性能優(yōu)化之游戲引擎初始化ANR

    Android性能優(yōu)化之游戲引擎初始化ANR

    近期,著手對(duì)bugly上的anr 處理,記錄下優(yōu)化的方向。 借用網(wǎng)上的一張圖: 這里的anr 問(wèn)題是屬于主線(xiàn)程的call 耗時(shí)操作。需要使用trace 來(lái)獲取發(fā)生anr前一些列的耗時(shí)方法調(diào)用時(shí)間,再次梳理業(yè)務(wù),才可能解決。 問(wèn)題1 java 調(diào)用棧: 從調(diào)用棧中發(fā)現(xiàn)onActivityResult()執(zhí)行對(duì)游戲側(cè)的

    2024年02月15日
    瀏覽(25)
  • Android13音頻子系統(tǒng)分析(二)---初始化

    Android13音頻子系統(tǒng)分析(二)---初始化

    目錄 一、AudioPolicyService初始化 1.1 AudioPolicyService::onFirstRef()函數(shù) 1.2 AudioCommandThread線(xiàn)程 1.3 AudioPolicyManager初始化 1.3.1 解析audio_policy_configuration.xml配置文件 1.3.2 解析audio_policy_engine_configuration.xml配置文件 1.3.3 AudioPolicyManager::onNewAudioModulesAvailableInt()函數(shù) 1.3.4 AudioPolicyManager::updateDe

    2024年02月03日
    瀏覽(18)
  • android存儲(chǔ)3--初始化.unlock事件的處理

    android存儲(chǔ)3--初始化.unlock事件的處理

    android版本:android-11.0.0_r21 http://aospxref.com/android-11.0.0_r21 概述:SystemServiceManager收到unlock事件后,遍歷service鏈表,執(zhí)行各個(gè)service的onUserUnlocking。對(duì)于存儲(chǔ)service,執(zhí)行的是StorageManagerService$Lifecycle中的 onUserUnlocking,在這個(gè)方法中,存儲(chǔ)的 StorageSessionController、vold、storaged模塊進(jìn)行

    2024年02月10日
    瀏覽(42)
  • android存儲(chǔ)4--初始化.emulated設(shè)備的掛載

    android存儲(chǔ)4--初始化.emulated設(shè)備的掛載

    android版本:android-11.0.0_r21 http://aospxref.com/android-11.0.0_r21 android手機(jī)的掛載非常復(fù)雜。這篇文章針對(duì)emulated存儲(chǔ),介紹它的掛載過(guò)程。 android早期,手機(jī)內(nèi)部flash容量比較小,為了能讓手機(jī)存放更多的文件,需要通過(guò)外部存儲(chǔ)(如SD卡)來(lái)擴(kuò)展存儲(chǔ)容量。隨著技術(shù)的進(jìn)步,大容量

    2024年02月15日
    瀏覽(28)
  • Android 11 Ethernet以太網(wǎng)架構(gòu)分析(1)——初始化

    android中以太網(wǎng)常被用作共享網(wǎng)絡(luò),或者是定制化設(shè)備連接網(wǎng)線(xiàn)的需求。 本章將會(huì)詳細(xì)分析該模塊對(duì)以太網(wǎng)的邏輯實(shí)現(xiàn),是大家對(duì)此有更深入認(rèn)識(shí)。 初始化 Systemserver 在安卓系統(tǒng)中有一個(gè)關(guān)于以太網(wǎng)的服務(wù),在systemserver中啟動(dòng) frameworks/base/services/java/com/android/server/SystemServer.j

    2024年02月04日
    瀏覽(83)
  • Android 自定義view 中增加屬性,初始化時(shí)讀取

    因?yàn)樽远xView 有正向和反向兩個(gè)狀態(tài),所以需要在初始化時(shí)區(qū)分加載哪個(gè)layout 在Android中,要在自定義View中增加屬性,你需要完成以下步驟: 在res/values/attrs.xml文件中定義屬性。 在自定義View的構(gòu)造函數(shù)中獲取這些屬性。 在布局文件中使用這些屬性。 attrs.xml: 自定義VIEW 中

    2024年04月25日
    瀏覽(26)
  • Git的安裝與初始化配置教程

    Git的安裝與初始化配置教程

    Git是一個(gè)版本控制系統(tǒng)。版本控制系統(tǒng)可以使多個(gè)終端同時(shí)在線(xiàn)對(duì)一個(gè)文件或者數(shù)據(jù)進(jìn)行更改而不用每次更改時(shí)重復(fù)創(chuàng)建多余的副本,或者造成不必要的存儲(chǔ)空間浪費(fèi)。 版本控制系統(tǒng)有兩種類(lèi)型: 一種是集中式版本控制系統(tǒng): 比如SVN、CVS等等。集中式版本控制系統(tǒng)中,所有

    2024年03月16日
    瀏覽(26)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包