Wave1.0版

操作系统 云服务/平台 技术难度 关注领域
Android   Intermediate         Gaming       Embedded

任务目标

高通Adreno图形处理器具有强大的图形性能。本人希望做一款模拟波浪的应用程序,以证明该项性能,并利用骁龙Profiler软件分析中央处理器和图形处理器的性能及使用情况。

应用程序启动时可以看到上面的图片,并且它会随着时间变换颜色

所需材料/所需清单/工具

  • Adreno GPU SDK

  • Android NDK

  • Apache Ant

  • Snapdragon Profiler

源码/示例/可执行的应用程序

  • Source Code

附加资料

  • wave.apk

构建/装配说明

以下为此项目中用到的工具

1. Android device with Snapdragon SDM660 processors installed the apk compiled by Android NDK, used to run apk and see flame display effect.

2.PC with Ubuntu 14.

应用程序启动时,可以看到波浪模型,并可随时间进行翻转。

所需材料/所需清单/工具

  • Adreno GPU SDK

  • Android NDK

  • Apache Ant

  • Snapdragon Profiler

源码/示例/可执行的应用程序

  • Source Code

附加资料

  • Video Links(网盘密码:rkuj)

构建/装配说明

以下为此项目中用到的工具

1. 安装了骁龙SDM660处理器的安卓设备,利用安卓NDK软件编译的安卓应用程序包,用于运行安卓应用程序包并查看波浪显示效果。

2. 个人电脑,Ubuntu 16。

3.C型数据线。

4.Adreno图形处理器软件开发包5.0版。

5.安卓NDK r17b。

6. Apache Ant 1.9.14。

7.骁龙Profiler软件,一款可以用于实时查看安卓应用程序性能指标的工具。

 

部署项目

1. 从https://developer.qualcomm.com/software/adreno-gpu-sdk图形处理器软件开发包5.0版,并安装到个人电脑上。

2. 下载Android NDK r17b并安装到个人电脑上。

3. 下载Apache Ant 1.9.14并安装到个人电脑上。

4. 从https://developer.qualcomm.com/software/snapdragon-profiler下载骁龙Profiler软件,并安装到个人电脑上。

5. 实现波浪着色程序。

6. 在安卓应用程序包中调用波浪着色程序。

7. 在安卓应用程序包中显示FPS。

8. 逐步实现所需要的功能。

9.选择安卓平台,连接安卓设备,编译项目,然后安装安卓应用程序包。

10.打开程序,你一定会喜欢。

11.如果您关心某些性能指标,可以利用骁龙Profiler软件查看指标。

12.如果没有任何问题,将代码上传到Github。

 

工作流程

一、开始应该做些什么?

1How to realize the smoke shader?(如何实现烟雾着色程序?)

In order to enable OpenGL to achieve wave drawing, we must first create a shader.在启用OpenGL语言绘制波浪时,我们首先必须创建一个着色程序。

Vertex Shader

#version 300 es

const GLchar *vs_mesh = STRINGIZE(

   uniform mat4 MVP;

 

   out vec4 FragColor;

   layout (location = 0) in vec4 Position;

   layout (location = 1) in vec4 Color;

 

    void main(void)

   {

      FragColor = vec4(Color);

      gl_Position = MVP * vec4(Position);

   }

);

Fragment Shader:

const GLchar *fs_mesh = STRINGIZE(

    in vec4 FragColor;

 

    layout (location = 0) out vec4 Color;

 

    void main(void)

   {

       Color = FragColor;

    }

);

This code creates the vertex shader and fragment shader respectively.

该段代码分别创建了顶点着色程序和片段着色程序器。

2How to achieve the display of titles, menus, texts, etc?(如何显示标题、菜单、文本等等?)

 

Call the CFrmFontGLES and CFrmUserInterfaceGLES classes provided by the SDK framework to display the title, menu and text.(调用软件开发包框架所提供的CFrmFontGLES和CFrmUserInterfaceGLES类别,以显示标题、菜单和文本。)

 

// Create the font

m_pFont = new CFrmFontGLES();

if( FALSE == m_pFont->Create( "Samples/Fonts/Tuffy12.pak" ) )

{

   FrmLogMessage("ERROR: create m_pFont failed\n");

   return FALSE;

}

 

// Load the packed resources

CFrmPackedResourceGLES resource;

if( FALSE == resource.LoadFromFile( "Samples/Textures/Logo.pak" ) )

{

   return FALSE;

}

 

void main()

   {

       vec2 fragCoord = gl_FragCoord.xy;

       float solid = texture(Obstacles, InverseSize * fragCoord).x;

 

       if (solid > 0.0f)

       {

          FragColor = vec4(0.0f);

          return;

       }

 

       vec2 u = texture(VelocityTexture, InverseSize * fragCoord).xy;

       vec2 coord = InverseSize * (fragCoord - TimeStep * u);

       FragColor = Dissipation * texture(SourceTexture, coord);

    }

);

// Create the logo texture

m_pLogoTexture = resource.GetTexture( "Logo" );

 

// Setup the user interface

if( FALSE == m_UserInterface.Initialize( m_pFont, g_strWindowTitle ) )

{

return FALSE;

}

 

m_UserInterface.AddOverlay( m_pLogoTexture->m_hTextureHandle, -5, -5, m_pLogoTexture->m_nWidth, m_pLogoTexture->m_nHeight ); m_UserInterface.AddTextString( (char *)"Press \200 for Help", 1.0f, -1.0f );

 

The above code creates the CFrmFontGLES and CFrmUserInterfaceGLES objects, respectively, where the CFrmUserInterfaceGLES object can call the AddOverlay and AddTextString methods to display icons and text.(以上代码分别创建了CFrmFontGLES和CFrmUserInterfaceGLES对象,其中CFrmUserInterfaceGLES对象可以调用AddOverlay和AddTextString方法,以显示图标和文本。)

 

3.3、How to display the wave rate?(如何显示波速率?)

Create a CFrmTimer class object and call the CFrmUserInterfaceGLES object in the render function to display the smoke rate.(创建CFrmTimer类对象,并在Render中调用 CFrmUserInterfaceGLES对象来显示帧率)

// Update the timer

m_Timer.MarkFrame();

 

// Render the user interface

m_UserInterface.Render( m_Timer.GetFrameRate() );

 

4.4、How to compile and generate APK?(如何编译和生成安卓应用程序包?

Compile thesource code(代码编译)

cd jni//

ndk-build -B

cd ..

 

Update the resource file(更新资源)

./InstallAssets.sh

android update project -p . -t android-24

 

Generate the APK file(使用ant命令打包生成APK)

ant debug

 

5.如何使用骁龙Profiler软件分析中央处理器和图形处理器利用率?

1. 将手机连接至骁龙Profiler软件。

2.选择实时模式。

3. 在进程列表中选择中央处理器利用率和图形处理器利用率,实时利用率结果将在中间窗口中显示。

6.如何利用骁龙Profiler软件进行OpenGL分析?

1.将手机连接至骁龙Profiler软件。

2.将布局设置更改为OpenGL。

3.选择快照抓拍模式。

4.拍摄快照。

 

使用说明

1、根据https://github.com/ThunderSoft-XA/Wave1.0.git下载代码。

2、安装Adreno图形处理器软件开发包5.0版。

3、安装安卓NDK r17b。

4、安装Apache Ant 1.9.14。

5、安装骁龙Profiler。

6、编译安卓应用程序包源代码并安装到安装设备上。

7、打开安卓应用程序包,你一定会喜欢。

8、如果您关心某些性能指标,可以利用骁龙Profiler软件查看指标。

贡献者信息

姓名 公司

 

Zhen

sunzhen@thundersoft.com
Thundersoft

Rong

yangrong0925@thundersoft.com
Thundersoft

Wu

kouzw0723@thundersoft.com

Thundersoft

Bo

fangbo0326@thundersoft.com

Thundersoft

Qin

yansq0930@thundersoft.com

Thundersoft

Xu

zhangxu@thundersoft.com

Thundersoft


>>浏览更多Qualcomm硬件案例:http://qualcomm.csdn.net/m/zone/qualcomm2016/project

Qualcomm 解决方案

 

高通 AI Hub

全新高通 AI Hub 包含预优化AI模型库,支持在搭载骁龙和高通平台的终端上进行无缝部署。
该模型库为开发者提供超过75个主流的AI和生成式AI模型,比如Whisper、ControlNet、Stable Diffusion和Baichuan-7B,可在不同执行环境(runtime)中打包,能够在不同形态终端中实现卓越的终端侧AI性能、降低内存占用并提升能效。所有模型均经过优化,以充分利用高通AI引擎内所有核心(NPU、CPU和GPU)的硬件加速能力,从而使推理速度提升4倍。

了解更多

SDK 下载

本版块下载 SDK,只需简单注册,就可轻松下载。