Android NDK开发详解Vulkan 图形之使用Vulkan

Android NDK开发详解Vulkan 图形之使用Vulkan

Android 平台包括来自 Khronos Group 的 Vulkan API 规范的 Android 专属实现。Vulkan 是用于高性能 3D 图形的低开销、跨平台 API。它提供用于在应用中创建高质量实时图形的工具。Vulkan 还具有诸多优势,例如降低 CPU 开销以及支持 SPIR-V 二进制文件中间语言。

本部分首先介绍如何开始在您的 Android 应用中使用 Vulkan。接下来将介绍 Android 平台上的一些 Vulkan 设计指南,这些是您需要了解的实用信息。您将通过这些信息了解如何使用 Vulkan 的着色器编译器。最后,我们将向您介绍如何使用验证层协助确保使用 Vulkan 的应用的稳定性。

如需详细了解此跨平台 API 规范的相关常规信息,请参阅 Khronos 的 Vulkan 概览。您也可以通过 Vulkan 新闻页面了解 Vulkan 相关开发工作的最新动态。

Vulkan 使用入门
注意:虽然本页面包含 NativeActivity 说明,但 AGDK Jetpack 库中的 GameActivity 是经过更新且维护良好的 NativeActivity 实现,具有更多功能和更快的发布周期。我们强烈建议您在新项目中使用 GameActivity。

本文档将通过下载、编译和运行 Khronos© 示例应用的方式,介绍如何开始使用 Vulkan 图形库。
前提条件

首先,请确保您已准备好合适的硬件和平台版本。 您应使用支持 Vulkan 且搭载 Android 7.0 (Nougat)(API 级别 24 或更高级别)的设备或模拟器。

您可以前往设置菜单并依次选择关于手机 > Android 版本,确认您的 Android 版本。确认设置好合适的硬件和平台版本后,您可以下载所需的软件。
下载

首先,您必须下载多个工具和其他软件。请注意,在 Windows 主机上,建议您不要为工具和源代码使用深层文件路径层次结构;这样做是为了绕开部分 Windows 操作系统版本对文件路径的限制。

如果您还没有 Android Studio,请下载。这将包含最新的 Android SDK。
从 Android Studio 中安装 NDK 和 CMake,或单独下载并安装它们。
构建并运行 Hello JNI 示例,确保 Android Studio 正常运行。
为您的主机平台安装 build.md 中列出的 python3 和其他组件。

导入

在本部分中,您将下载 Khronos© Vulkan© 示例代码库,生成一个 Android Gradle 项目,然后使用 Android Studio IDE 打开该项目。

设置以下环境变量:
export ANDROID_HOME=/path/to/sdk-directory
export ANDROID_NDK_HOME=$ANDROID_HOME/ndk/{your-ndk-version-dir}

将 CMake 添加到用于生成 Android 构建脚本的 $PATH:


export PATH=$PATH:$ANDROID_HOME/cmake/{your-cmake-version}/bin

打开终端并将源代码下载到您的开发目录:

cd dev-directory
git clone --recursive https://github.com/KhronosGroup/Vulkan-Samples.git

请按照以下说明(来自 Build.md)生成 Android 示例项目:

    cd Vulkan-Samples
    ./scripts/generate.py android
打开 Android Studio。依次选择 File > Open,然后再选择 Vulkan-Samples/build/android_gradle/build.gradle。 在 Android Studio 加载项目后,系统会显示类似于下图所示的窗口:
将示例项目导入 Studio。

在这里插入图片描述

图 1. Android Studio 中的示例项目。

编译

此代码库中的所有示例会划归到一个 Android 项目中。如需编译项目,请执行以下任一操作:

如果只需编译源代码,请使用菜单依次选择 Build > Make Project,或按下 Ctrl-F9 快捷键。
如需生成示例 APK,请依次选择菜单 Build > Build Bundle(s)/APK(s) > Build APK(s)。

您应该会在 Android Studio 的 Build 窗口中看到构建成功的消息。如果窗口中显示错误消息,请修复错误并重新编译。
使用 Studio 编译示例项目。
在这里插入图片描述

图 2. 示例构建成功。

执行

在运行示例项目之前,请确保 Android Studio 可识别您连接的 Vulkan 设备或 Android 模拟器。您应该会看到类似下图所示的内容:
将测试设备连接到 Studio。
在这里插入图片描述

图 3. 将测试设备连接到 Android Studio。

如需运行项目,请执行以下操作:

请依次使用菜单 Run > Run vulkan_sample,或点击工具栏中的“Run”按钮 ,然后等待示例在已连接的设备上安装并启动。
在已连接的 Android 设备上,授权所需的访问权限请求。
    启用 Allow access to manage all files,然后点按箭头 Back button 以返回示例的主开始屏幕。
    允许磁盘访问:
    允许磁盘访问。

![在这里插入图片描述](https://img-blog.csdnimg.cn/516ce6047160433b8fe99b51c1dcffba.png#pic_center

    图 4. 启用磁盘访问权限。

您应该会看到类似于下图所示的示例主菜单屏幕:
示例主菜单。

在这里插入图片描述
图 5. 示例主菜单。

浏览示例列表,然后选择几项运行。 如果您不熟悉 Vulkan 开发,可以从“API”示例着手。例如,点按“Hello Triangle”后,系统应该会显示一个经过渲染的三角形,类似下图所示:
三角形

在这里插入图片描述

图 6. Hello Triange 示例。

您的开发系统现已设置为在测试设备上运行示例。

Vulkan 示例是面向多种操作系统开发的,包括桌面设备和移动设备的操作系统。Performance、Extensions 和 Tooling 下的部分示例在您的设备上运行时可能会不稳定并发生崩溃。这可能是由各种原因造成的,例如:

特定的 Vulkan 功能并非面向 Android 设计。
Android 操作系统版本不受支持。
硬件平台的 GPU 功能。

探索

Vulkan 示例的 Java 部分派生自 NativeActivity 类。该类会将典型的应用生命周期事件(如应用的创建、启动、停止和销毁)传递给 C/C++ 代码。在示例的 C/C++ 部分中,有一个示例框架可实现运行时子示例切换功能。大体上讲,Android 系统事件/消息会经过以下路径传递给示例应用的 Vulkan 代码:

NativeSampleActivity Java 部分
NativeSampleActivity C/C++ 部分
android_native_glue 代码
android_main
示例框架
各个子示例的代码

android_main 是 NativeSampleActivity 与应用代码之间的桥梁,可作为遵守示例代码的着手点。如果您只想关注特定的 Vulkan 源代码,则可以浏览 Vulkan_Samples\samples 下的代码,其中包含以下内容:

“API”类别示例。
“Performance”类别示例。
“Extensions”类别示例。
“Tooling”示例。

Vulkan_Samples\shaders 是所有着色器的存储位置。

您可以从浏览“API”类别的示例开始,逐步熟悉 Vulkan 的基本用法和示例框架。然后,您可以继续探索“Performance”和“Extenstions”类别的示例。如需了解着色器代码,您可以使用 Android Studio 中的 Project 视图。
三角形着色器。
在这里插入图片描述

图 7. 使用 Studio 探索着色器。

其他资源

Vulkan API 已经历了几个版本,因此日趋成熟。Vulkan 标准委员会和 Vulkan 社区已经创建了一组内容丰富的 Vulkan 资料,其中演示了该 API 的用法和最佳做法。以下列表包含一些关于 Vulkan 应用开发的资源:

Vulkan 规范。 Khronos Group 会维护 Vulkan 规范。如需查看完整规范、培训、指南和教程,请参阅 Vulkan 首页。

验证层。验证层对于应用开发至关重要。如需了解详情,请参阅 Android 上的 Vulkan 验证层文档。

Shaderc。 NDK 中的 Shaderc 代码是 Shaderc 代码库的下游代码。如需查看用法文档和最新版本的获取说明,请参阅着色器编译器。

本页面上的内容和代码示例受内容许可部分所述许可的限制。Java 和 OpenJDK 是 Oracle 和/或其关联公司的注册商标。

最后更新时间 (UTC):2023-07-12。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Android NDK开发是指利用NDK(Native Development Kit)将C/C++开发的代码编译成so库,然后通过JNI(Java Native Interface)让Java程序调用。在Android开发中,默认使用的是Android SDK进行Java语言的开发,而对于一些需要使用C/C++的高性能计算、底层操作或跨平台需求的场景,可以使用NDK进行开发。 在Android Studio中进行NDK开发相对于Eclipse来说更加方便,特别是在Android Studio 3.0及以上版本中,配置更加简化,并引入了CMake等工具,使得开发更加便捷。首先要进行NDK开发,需要配置环境,包括导入NDK、LLDB和CMake等工具。可以通过打开Android Studio的SDK Manager,选择SDK Tools,在其中选中相应的工具进行导入。 在项目的build.gradle文件中,可以配置一些NDK相关的参数,例如编译版本、ABI过滤器等。其中,可以通过externalNativeBuild配置CMake的相关设置,包括CMakeLists.txt文件的路径和版本号。此外,在sourceSets.main中还可以设置jniLibs.srcDirs,指定so库的位置。 在进行NDK开发时,可以在jni文件夹中编写C/C++代码,并通过JNI调用相关的函数。通过JNI接口,可以实现Java与C/C++之间的相互调用,从而实现跨语言的开发。 综上所述,Android NDK开发是指利用NDK将C/C++开发的代码编译成so库,并通过JNI实现与Java的相互调用。在Android Studio中进行NDK开发相对方便,可以通过配置环境和相应的参数来进行开发。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

五一编程

程序之路有我与你同行

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值