需要源码请点赞关注收藏后评论区留言私信~~~
一、Vulkan简介
Vulkan是一个跨平台的图形绘制接口,被称为下一代OpenGL,因为尽管OpenGL提供了丰富的图形API,但他在底层实现的C代码早已封装起来,由于开发者修改不了底层代码,因此不可避免地会遇到功能与性能上的瓶颈,Vulkan正是为了解决这些问题而开发地。它提供地图形API都是C方法,开发者可以运用JIN技术自行封装Vulkan方法,使得图形编程更佳灵活,高效,下图是有关图形编程标准地发展历程
更具体地说,Vulkan充分发挥了GPU与多核CPU的性能,效率和功能优势,它在下列几个方面改善颇多
(1)重写了底层的图形绘制代码,从而降低资源开销、优化程序性能;
(2)允许开启多个线程工作,例如构建命令缓冲区等等,进而加快了程序的运行效率;
(3)支持直接访问硬件,由此获得通过OpenGL无法访问的GPU硬件特性;
进行Vulkan开发要求具备以下几个条件:
(1)Android Studio版本为4.0或者更高版本;
(2)Android的系统版本至少为7.0(API 24);
(3)Android设备的硬件必须支持Vulkan;
(4)电脑上已经安装了最新的Python,也在系统的环境变量Path中设置了Python的安装目录;
二、Vulkan实战应用
先来绘制一个简单正方体
可见无论是外观还是背景都比OpenGL绘制的更佳美观
下面是星空中旋转雷达动画实战效果演示视频
旋转雷达动画
效果图如下 支持通过触屏全方位调节时间和转速 非常美观实用
代码如下
Java类
/* * Copyright (C) 2018 by Sascha Willems - www.saschawillems.de * * This code is licensed under the MIT license (MIT) (http://opensource.org/licenses/MIT) */ package com.example.threed; import android.app.AlertDialog; import android.app.NativeActivity; import android.content.DialogInterface; import android.content.pm.ApplicationInfo; import android.os.Bundle; import java.util.concurrent.Semaphore; public class VulkanRadarActivity extends NativeActivity { static { System.loadLibrary("native-lib"); // 加载so库 } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); } // Use a semaphore to create a modal dialog private final Semaphore semaphore = new Semaphore(0, true); public void showAlert(final String message) { final VulkanRadarActivity activity = this; ApplicationInfo applicationInfo = activity.getApplicationInfo(); final String applicationName = applicationInfo.nonLocalizedLabel.toString(); this.runOnUiThread(() -> { AlertDialog.Builder builder = new AlertDialog.Builder(activity, android.R.style.Theme_Material_Dialog_Alert); builder.setTitle(applicationName); builder.setMessage(message); builder.setPositiveButton("Close", (dialog, id) -> semaphore.release()); builder.setCancelable(false); AlertDialog dialog = builder.create(); dialog.show(); }); try { semaphore.acquire(); } catch (InterruptedException e) { } } }
正方体类
package com.example.threed; import android.app.NativeActivity; import android.os.Bundle; public class VulkanCubeActivity extends NativeActivity { static { System.loadLibrary("vulkan_sample"); // 加载so库 } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); } }
创作不易 觉得有帮助请点赞关注收藏~~~