游戏开发者组件
1 适用于 OpenGL ES 的 Adreno SDK
1.1 适用于 OpenGL ES 的 Adreno SDK
适用于 OpenGL ES 的 Adreno SDK 包含多个涵盖 OpenGL ES 功能的工作示例、教程和演示,范围包括 OpenGL ES 2.0、3.0 + AEP 和 3.1。以下列表描述了此 SDK 中包含的示例,这些示例均构建在通用 OpenGL ES 框架之上,可用于创建新示例和原型。
1.2 OpenGL ES 2.0
1.2.1 教程
- 01_CreateWindow:用EGL创建一个空的渲染窗口。
- 02_ConfigureFrameBuffer:配置 16 位和 32 位显示器的帧缓冲区。检测当前分辨率并相应配置帧缓冲区。
- 03_DrawTriangle:使用简单的顶点和片段着色器渲染三角形。
- 04_PortraitAndLandscape:以横向和纵向模式渲染几何体。按 * 键更改方向。
- 05_NonInterleavedVBO:使用顶点缓冲区对象,其中每个顶点属性存储在单独的缓冲区中。
- 06_InterleavedVBO:使用交错顶点缓冲区对象。
- 07_Transforms:使用模型、视图和投影矩阵变换来变换 3D 对象。该程序展示了如何将变换传递到着色器程序并在顶点着色器中使用它们。
- 08_SimpleTexture:简单纹理映射。
- 09_CompressedTexture:使用ATC压缩纹理格式的纹理映射。
- 10_TextureProperties:使用各种纹理属性。
- 11_MultiTexture:多重纹理。该程序展示了如何将两个纹理应用到一个对象。
- 12_CubemapTexture:使用立方体贴图纹理。
- 13_CompressedVertices:使用 16 位浮点和 GL_INT_10_10_10_2 扩展压缩顶点数据。
- 14_StencilBuffer:使用模板缓冲区来限制渲染区域。
- 15_RenderToTexture:使用帧缓冲区对象渲染到离屏纹理。场景被渲染到颜色缓冲区和屏幕外纹理。然后纹理将显示在右上角。
1.2.2 示例
- Bloom
- 景深
- 图像效果
- 照明
- 运动模糊
- 法线贴图
- NPR
- 视差贴图
- 点阵
- 程序纹理
- 投影阴影
- 反射
- 阴影贴图
- 阴影体积
- 浅水
- 蒙皮网格
- 蒙皮网格2
1.3 OpenGL ES 3.0
1.3.1 教程
- 16_RenderToTexture30:使用帧缓冲区对象 (FBO) 渲染到使用 OpenGL ES 3.0 的纹理。
- 17_FBOTextureFormats30:使用 FBO 渲染到简单纹理时显示不同的纹理格式。
- 18_InterleavedVBO-DrawArraysInstanced30:使用顶点缓冲对象(VBO)渲染简单的四边形。该版本使用glDrawArraysInstanced。
- 19_InterleavedVBO-DrawRangeElements30:使用 VBO 渲染简单的四边形。此版本使用 glDrawRangeElements。
- 20_Texture2DArray30:使用 VBO 渲染一个简单的四边形。该版本使用glDrawArraysInstanced。
- 21_PixelBufferObject30:使用像素缓冲区对象。
- 22_TransformFeedback30:使用变换反馈返回渲染图元的数量。
- 23_BlitFramebuffer30:从一个帧缓冲区传输到另一个帧缓冲区。
- 24_MultisampleFramebuffer30:使用多个帧缓冲区。
- 25_FramebufferTextureLayer:指定单个纹理层作为帧缓冲区对象的GL_COLOR_ATTACHMENT0。
1.3.2 示例
- 级联阴影贴图
- 压缩几何
- 景深
- HDR纹理
- 非真实感渲染
- 点阵
- 基于物理的照明
- 阴影贴图
- 天穹
- 纹理合成
- 色调映射
适用于 OpenGL ES 的 Adreno GPU SDK 还包含其他几个演示和工具。您可以从 Qualcomm 开发者网络下载适用于 Vulkan 的 Adreno SDK:https://developer.qualcomm.com/software/adreno-gpu-sdk。
2 适用于 Vulkan 的 Adreno SDK
适用于 Vulkan 的 Adreno SDK 包含多个涵盖 Vulkan 功能的工作示例。无论您的图形经验水平如何,此 SDK 都是 Vulkan API 的完美介绍。您将找到有关所有基本主题的指导性和带注释的代码示例:
- 初始化Vulkan
- 设置交换链
- 创建 Vulkan 设备和队列
- 同步渲染步骤
- 画一个简单的三角形
- 创建图像处理效果
- 多通道渲染
- 编译 SPIR-V 着色器
- 使用计算着色器
- 使用推送常量
- 渲染用户界面
- 螺纹加工
- 内存管理
该 SDK 还包括一些易于阅读的指南,涉及编写简单的三角形应用程序和编译着色器等领域。该文档将帮助您了解完整的 Vulkan 开发周期。
首先,您需要 Android Studio、Android SDK 和 Android NDK。 Qualcomm 开发者网络上的视频也涵盖了这些要求。这些视频将引导您完成 Android NDK 和 Vulkan SDK 的安装、SDK 的完整内容,以及使用 Android Studio 在移动设备上构建和运行第一个 Vulkan 应用程序的分步说明。您还可以找到来自 Khronos(Vulkan 背后的标准机构)的有用信息的链接。
您可以从 Qualcomm 开发者网络下载适用于 Vulkan 的 Adreno SDK:https://developer.qualcomm.com/software/adreno-gpu-sdk。
3 Snapdragon 性能分析器
提高 3D 应用程序的性能是一个具有挑战性的过程。如果没有合适的工具,开发人员经常发现自己只能通过反复试验来识别瓶颈或视觉故障的根源。每次尝试都会强制重建应用程序。这是一个耗时且繁琐的过程。
开发人员很少能够访问应用程序发出的图形 API 命令的原始列表。这使得优化过程变得棘手。开发人员可能知道并理解他们的应用程序通常做什么,但可能无法完全了解渲染过程。
渲染性能不佳的原因一开始通常并不清楚。实时洞察详细的 GPU 利用率、纹理缓存未命中或管道停顿统计信息将更容易确定速度下降的原因。有时,渲染过程由许多绘制调用组成,因此很难具体识别哪些绘制调用负责渲染损坏的网格。突出显示由于任何特定绘制调用而绘制的几何图形的能力很有帮助。
下图显示了该工具如何在三种不同模式下工作,每种模式适合不同的用途。
3.1 实时
实时性能可视化允许实时绘制各种系统和每个进程的指标和计数器。指标类别包括: * CPU * EGL * GPU * 内存 * 网络 * 功耗 * 原始处理 * 系统内存 * 散热
3.2 追踪
跟踪允许捕获特定时间的性能,以提供系统和正在执行的驱动程序工作的详细可视化。
捕获后,用户可以放大、检查和测量详细属性。可以从以下 Android 组件捕获跟踪: * OpenGL ES * DSP * 活动管理器 * 音频 * 摄像头 * CPU * Dalvik VM * 磁盘 I/O * 图形 * 硬件模块 * 输入 * 内核工作队列 * RenderScript * 资源加载 * 同步管理器* 视频 * 视图 * WebView * 窗口管理器。
3.3 快照
快照模式为用户提供渲染帧的完整视图。有详细的绘制调用列表、资源(帧缓冲区、纹理、着色器)、着色器复杂性分析、像素历史记录、过度绘制分析、纹理预览、帧统计等。
3.4 在 Snapdragon 性能分析器中使用Vulkan
可以使用 Snapdragon Profiler 对 Vulkan 应用程序进行分析,以深入了解 Vulkan 特定的渲染信息。用户创建跟踪并选择 Vulkan 渲染阶段和 Vulkan API 跟踪指标。
捕获完成后,会显示一个包含表面和渲染阶段信息的详细图表,以及包含 Vulkan API 调用、参数和计时信息的详细表格。
您可以了解有关 Snapdragon Profiler 的更多信息,并从 Qualcomm 开发者网络下载副本:https://developer.qualcomm.com/software/snapdragon-profiler。
4 Vulkan Adreno 图形层
4.1 概述
Vulkan Adreno 层检测可在 Adreno GPU 上进行的优化,并提供有关如何通过 logcat 消息改进 Vulkan API 使用的建议。用户可以使用 vkal_config.txt 配置该层以禁用/启用规则。有关更多详细信息,请参阅 readme.txt。
您可以从 Qualcomm 开发者网络下载 Vulkan Adreno 层:https://developer.qualcomm.com/software/adreno-gpu-sdk/tools。
以下故障代码与 Vulkan Adreno 层生成的消息相关。
4.2 故障代码
故障代码 | 描述 |
---|---|
VKADRENOFAULT001 | VkCommandBufferAllocateInfo 中提供的未知结构 |
VKADRENOFAULT002 | VkSubmitInfo 中提供的未知结构 |
VKADRENOFAULT003 | VkCommandBufferBeginInfo 中提供的未知结构 |
VKADRENOFAULT004 | VkCommandBufferInheritanceInfo 中提供的未知结构 |
VKADRENOFAULT005 | VkImageViewCreateInfo 中提供了未知的结构 |
VKADRENOFAULT006 | VkPipelineLayoutCreateInfo 中提供了未知的结构 |
VKADRENOFAULT007 | https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkDescriptorSetLayoutCreateInfo.html 中提供的未知结构 |
VKADRENOFAULT008 | VkPipelineShaderStageCreateInfo 中提供的未知结构 |
VKADRENOFAULT009 | VkGraphicsPipelineCreateInfo 中提供了未知的结构 |
VKADRENOFAULT010 | VkComputePipelineCreateInfo 中提供的未知结构 |
VKADRENOFAULT011 | VkDescriptorSetLayoutCreateInfo 中提供的未知结构 |
VKADRENOFAULT012 | 不支持的 VkDescriptorType |
VKADRENOFAULT013 | VkAdrenoLayerAppStats::AddToMap 中的未知对象类型 |
VKADRENOFAULT014 | VkAdrenoLayerAppStats::AddToMapInternal 中的未知对象类型 |
VKADRENOFAULT015 | VkAdrenoLayerAppStats::PrintUsage 中的未知对象类型 |
VKADRENOFAULT016 | 层无法启用对 VK_EXT_device_memory_report 的支持 |
VKADRENOFAULT017 | 驱动程序不支持 VK_EXT_device_memory_report |
VKADRENOFAULT018 | VkDeviceMemoryReportEventTypeEXT 值无效 |
VKADRENOFAULT019 | VkObjectType 值无效 |
VKADRENOFAULT020 | VKAL_LOG 与 LogGroupsInternal 已禁用。使用 VKAL_LOG_INTERNAL 代替 |
VKADRENOFAULT021 | 禁用日志。 VKAL_LOG_INTERNAL 必须提供外部日志组 |
4.3 Vulkan 调试实用程序
以下警告和错误代码与 VK_EXT_debug_utils 生成的消息相关。
4.3.1 警告代码
警告代码 | 描述 |
---|---|
VKDBGUTILWARN001 | 帧缓冲区不适合多通道 |
VKDBGUTILWARN002 | 由于内存障碍,渲染通道中的多通道被禁用 |
VKDBGUTILWARN003 | 由于给定的子通道,渲染通道不适合多通道 |
4.3.2 错误代码
错误代码 | 描述 |
---|---|
VKDBGUTILERRO001 | 着色器编译失败 |
VKDBGUTILERRO002 | 着色器链接失败 |