释放超凡性能,打造鸿蒙原生游戏卓越体验
11月26日在华为Mate品牌盛典上,全新Mate70系列及多款全场景新品正式亮相。在游戏领域,HarmonyOS NEXT加持下游戏的性能得到充分释放。HarmonyOS SDK为开发者提供了软硬协同的系统级图形加速解决方案——Graphics Accelerate Kit(图形加速服务),帮助游戏应用快速集成超帧、GTX自适应稳态渲染和自适应刷新率等渲染优化能力,并解决游戏运行不流畅、卡顿掉帧等痛点体验问题,让接入HarmonyOS SDK的手游,如《决胜巅峰》等,在Mate新机上的体验实现大幅提升。
独特大视野,推塔体验细腻又流畅
《决胜巅峰》在HarmonyOS NEXT上首发,并且在Mate X6折叠屏上首次以大视野和高帧率的形式呈现给MOBA类游戏玩家。在Mate X6折叠屏手机的超大视野下,《决胜巅峰》的可视画面提升25%,能够更全面地观察战场。通过超帧技术,将帧率突破到120帧,使得每一次技能释放、每一次推塔,都显得更加细腻、顺畅,极大地提升了游戏的沉浸感,为玩家带来前所未有的对战快感。
在对快速反应要求极高的MOBA类游戏中,超帧技术带来的120帧效果让画面更为流畅,帧率也更稳定,帮助玩家更好地掌控局势,提升整体的游戏体验。在团战中,华丽的技能和流畅的动画结合,也使得战斗画面更加震撼。
优化性能开销,游戏效果不 “打折”
通过结合《决胜巅峰》游戏开发者主动提供的游戏过程关键信息,可以实现GTX自适应稳态渲染和自适应刷新率等游戏加速方案,帮助开发者打造高画质、高流畅、低功耗的非凡游戏体验。
自适应稳态渲染可根据游戏场景、GPU负载等信息,动态调整渲染负载,减少游戏掉帧,让玩家获得一个更加稳定的游戏体验。
自适应稳态渲染技术接入架构示意图
自适应稳态渲染接入代码:
// 初始化ABR实例,配置Buffer分辨率因子范围属性,结合具体游戏分辨率、画质设置合适的范围
// 例如设置ABR对Buffer分辨率进行0.8~1.0倍的自适应调整
errorCode = HMS_ABR_SetScaleRange(context_, 0.8f, 1.0f);
if (errorCode != ABR_SUCCESS) {GOLOGE("HMS_ABR_SetScaleRange execution failed, error code: %d.", errorCode);return false;
}
// 激活ABR上下文实例
errorCode = HMS_ABR_Activate(context_);
if (errorCode != ABR_SUCCESS) {GOLOGE("HMS_ABR_Activate execution failed, error code: %d.", errorCode);return false;
}
// 相机运动数据结构体,设置每帧实时相机运动数据
ABR_CameraData cameraData;
cameraData.position = static_cast<ABR_Vector3>(camera_.GetPosition());
cameraData.rotation = static_cast<ABR_Vector3>(camera_.GetRotation());
// 每帧相机运动数据更新
errorCode = HMS_ABR_UpdateCameraData(context_, &cameraData);
if (errorCode != ABR_SUCCESS) {GOLOGE("HMS_ABR_UpdateCameraData execution failed, error code: %d.", errorCode);return false;
}
//渲染前的准备,绑定目标帧缓冲索引,清空颜色缓冲 renderer_->BeginRenderTarget(fbo,BACKGROUND.x_, BACKGROUND.y_, BACKGROUND.z_, 1.0F);
//在Buffer渲染前调用,执行失败不影响Buffer正常渲染
errorCode = HMS_ABR_MarkFrameBuffer_GLES(context_);
if (errorCode != ABR_SUCCESS) {GOLOGE("HMS_ABR_MarkFrameBuffer_GLES execution failed, error code: %d.", errorCode);
}
//调用绘制方法进行渲染
opaqueLayer_Render(sceneDelta, camera_.GetviewMatrix() .lastViewProj_);
//获取每帧的缩放信息
float scale;
erorCode =HMS_ABR_GetScale(context_. &scale);
GOLOGD("Scale is %f, ". scale);
if (errorCode != ABR_SUCCESS) {
GOLOGE("HMS_ABR_GetScale execution failed, error code: %d.", errorCode);
}
//将帧缓冲索引绑定为默认值0
renderer_->EndRenderTarget();
点击查看自适应稳态渲染接入教程
据统计,多数游戏120FPS档位下,其实约70%渲染场景是没有变化的,因此主场景里将近7成的渲染都并非是必要的。
自适应刷新率可以根据游戏场景、玩家操作、CPU负载、GPU负载、手机温度等信息,智能地调整游戏帧率与屏幕刷新率,保证体验基础上实现降低功耗。在玩家休闲状态、游戏画面变化幅度小的情况下,帧率可适当调低,节省电量、控制温度;而在玩家操作剧烈、游戏画面急速变化时,帧率则提升到极致水平,保证玩家的游戏体验。
自适应刷新率接入架构示意图
自适应刷新率接入流程示意图
自适应刷新率接入代码:
//配置OpenGTX属性
errorCode=HMS_OpenGTX_SetConfiguration(contextGtx_, &configGtx);
if (errorCode != OPENGTX_SUCCESS) {GOLOGE("HMS_OPENGTX_SetConfiguration execution failed, error code: %d.", errorCode);return false;
}
//激活OpenGTX上下文实例
errorCode = HMS_OpenGTX_Activate(contextGtx_);
if (errorCode != OPENGTX_SUCCESS) {GOLOGE("HMS_OpenGTX_Activate execution failed, error code: %d.", errorCode);return false;
}
//发送游戏场景信息
OpenGTX_GameScenelnfo gameScenelnfo;
gameScenelnfo.scenelD=OTHERS_SCENE;
gameScenelnfo.description=OGBT_DESCRIPTION.data();
gameScenelnfo.recommendFPS=OGBT_RECOMMEND_FPS;
gameScenelnfo.minFPS=OGBT_MIN_FPS;
gameScenelnfo.maxFPS=OGBT_MAX_FPS;
gameScenelnfo.resolutionCurValue.height=OGBT_RES_HEIGHT;
gameScenelnfo.resolutionCurValue.width=OGBT_RES_WIDTH;
errorCode = HMS_OpenGTX_DispatchGameSceneInfo(contextGtx_, &gameSceneInfo);
if (errorCode != OPENGTX_SUCCESS) {GOLOGE("HMS_OpenGTX_DispatchGameSceneInfo execution failed, error code: %d.", errorCode);return false;
}
//发送游戏网络信息
OpenGTX_Networklnfo networklnfo;
networkInfo.networkLatency.down = OGBT_NETWORK_LATENCY_DOWN;
networklnfo.networkLatency.up= OGBT_NETWORK_LATENCY_UP;
networklnfo.networkLatency.total =OGBT_NETWORK_LATENCY_TOTAL;
networkInfo.networkServerlP=OGBT_NETWORK_SERVER_IP.data();
errorCode = HMS_OpenGTX_DispatchNetworklnfo(contextGtx_, &networklnfo);
if (errorCode != OPENGTX_SUCCESS) {GOLOGE("HMS_OpenGTX_ DispatchNetworklnfo execution failed, error code: %d.", errorCode);return false;
}
点击查看自适应刷新率接入教程
除了图形加速服务(Graphics Accelerate Kit),HarmonyOS SDK还提供更多图形开放能力,为游戏等重载应用的图形渲染提供帮助,帮助开发者打造高帧率、高画质、低功耗的用户体验。
探索更多
访问图形加速服务(Graphics Accelerate Kit),了解更多详情开始使用。
*本文所提及数据均为内部实验室测试结果
*本文引用素材来自三方授权,因版本/机型不同可能存在变化,以实际为准。
相关文章:

释放超凡性能,打造鸿蒙原生游戏卓越体验
11月26日在华为Mate品牌盛典上,全新Mate70系列及多款全场景新品正式亮相。在游戏领域,HarmonyOS NEXT加持下游戏的性能得到充分释放。HarmonyOS SDK为开发者提供了软硬协同的系统级图形加速解决方案——Graphics Accelerate Kit(图形加速服务…...

Node.js 实战: 爬取百度新闻并序列化 - 完整教程
很多时候我们需要爬取一些公开的网页内容来做一些数据分析和统计。而多数时候,大家会用到python ,因为实现起来很方便。但是其实Node.js 用来爬取网络内容,也是非常强大的。 今天我向大家介绍一下我自己写的一个百度新闻的爬虫,可…...

106.【C语言】数据结构之二叉树的三种递归遍历方式
目录 1.知识回顾 2.分析二叉树的三种遍历方式 1.总览 2.前序遍历 3.中序遍历 4.后序遍历 5.层序遍历 3.代码实现 1.准备工作 2.前序遍历函数PreOrder 测试结果 3.中序遍历函数InOrder 测试结果 4.后序遍历函数PostOrder 测试结果 4.底层分析 1.知识回顾 在99.…...

qt QToolButton详解
1、概述 QToolButton是Qt框架中的一个控件,它继承自QAbstractButton。QToolButton通常用于工具栏(QToolBar)中,提供了一种快速访问命令或选项的方式。与普通的QPushButton按钮相比,QToolButton通常只显示一个图标而不…...

2024年大热,Access平替升级方案,也适合Excel用户
欢迎各位看官,您来了,就对了! 您多半是Access忠实粉丝,至少是excel用户,亦或是WPS用户吧。那就对了,今天的分享肯定对您有用。 本文1100字,阅读时长2分50秒! 现实总是不尽人意&am…...
探索Scala的模式匹配:身份证识别与等级判定!!! #Scala # scala #匹配模式
在Scala编程语言中,模式匹配是一个强大且表达力丰富的特性,它允许我们以声明式的方式处理多种情况。今天,我们将通过两个有趣的例子来展示Scala模式匹配的魅力:身份证号识别和等级判定。 1. 身份证号识别:定位你的家乡…...
python数据分析之爬虫基础:爬虫介绍以及urllib详解
前言 在数据分析中,爬虫有着很大作用,可以自动爬取网页中提取的大量的数据,比如从电商网站手机商品信息,为市场分析提供数据基础。也可以补充数据集、检测动态变化等一系列作用。可以说在数据分析中有着相当大的作用!…...
【星海随笔】syslinux
Ubuntu相关资料 https://www.pugetsystems.com/labs/hpc/ubuntu-22-04-server-autoinstall-iso/#Step_2_Unpack_files_and_partition_images_from_the_Ubuntu_2204_live_server_ISO https://launchpad.net/ubuntu/source/squashfs-tools/1:4.6.1-1build1 sudo tar -xf my_compu…...
力扣C语言刷题记录 (二)移除元素
给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素。元素的顺序可能发生改变。然后返回 nums 中与 val 不同的元素的数量。 假设 nums 中不等于 val 的元素数量为 k,要通过此题,您需要执行以下操作: 更改…...
【Vue3】【Naive UI】<NAutoComplete>标签
【Vue3】【Naive UI】标签 <NAutoComplete> 是 Naive UI 库中的一个组件,用于实现自动完成或联想输入功能。 它允许用户在输入时看到与当前输入匹配的建议列表,从而帮助用户更快地填写表单字段。 这个组件通常用于搜索框、地址输入等场景ÿ…...
【Halcon】使用均值滤波出现假边怎么办?
在图像处理过程中,均值滤波是一种常见的平滑技术,用于减少图像中的噪声。然而,当应用于具有显著边缘或对比度变化的图像时,均值滤波可能会导致“假边”现象,即原本不存在的边缘在滤波后变得明显。以下是如何在Halcon中处理这一问题,并提供一个完整的示例代码。 示例背景…...
Flask+Minio实现断点续传技术教程
什么是MinIO MinIO是一个高性能的分布式对象存储服务,与Amazon S3 API兼容。它允许用户存储和检索任意规模的数据,非常适合于使用S3 API的应用程序。MinIO支持多租户存储,提供高可用性、高扩展性、强一致性和数据持久性。它还可以作为软件定义…...
JAVA设计模式,动态代理模式
动态代理(Dynamic Proxy)是Java中一种非常有用的设计模式。它允许在运行时创建一个实现了一组给定接口的新类。这种模式主要用于当需要为某个对象提供一个代理以控制对该对象的访问时。通过这种方式,可以添加额外的功能,如事务管理…...

HTML 快速上手
目录 一. HTML概念 二. HTML标签 1. 标题标签 2. 段落标签 3. 换行标签 4. 图片标签 5. 超链接标签 6. 表格标签 7. 表单标签 7.1 form 标签 7.2 input 标签 (1) 文本框 (2) 单选框 (3) 密码框 (4) 复选框 (5) 普通按钮 (6) 提交按钮 8. select标签 9. 无语义…...
【计算机视觉算法与应用】模板匹配、图像配准
目录 1. 基于灰度值的模板匹配 2. 基于相关性的模板匹配 3. 基于形状的模板匹配 4. 基于组件的模板识别 5. 基于形变的模板匹配 6. 基于描述符的模板匹配 7. 基于点的模板匹配 性能比较 模板匹配的算法实现需要结合具体需求和应用场景来选择方法。以下是基于 OpenCV 的…...

【Linux】设计文件系统(C实现)
要求: (1)可以实现下列几条命令 dir 列文件目录 create 创建文件 delete 删除文件 read 读文件 write 写文件 (2)列目录时要列出文件名、存取权限(八进制)、文件长度、时间(创建时间,修改时间以及…...
详解Rust多线程编程
文章目录 多线程模型创建和管理线程自定义线程行为线程传递数据线程间通信线程池错误处理与线程Condvar(条件变量)无锁并发高性能并发库 Rust的多线程编程提供了一种安全、高效的方式来进行并发操作。Rust的并发性设计原则之一是确保线程安全,同时避免运行时的开销&…...
el-upload上传多个文件,一次请求,Django接收
1、:file-list"fileList" :on-change"handleChange" 将文件赋值到fileList 2、 :auto-upload"false" 手动触发上传 写个按钮点击执行这个 this.$refs.upload.submit(); 3、自己写上传,不会再触发上传成功或失败回调 4、 request.FI…...

Python实现网站资源批量下载【可转成exe程序运行】
Python实现网站资源批量下载【可转成exe程序运行】 背景介绍解决方案转为exe可执行程序简单点说详细了解下 声明 背景介绍 发现 宣讲家网 的PPT很好,作为学习资料使用很有价值,所以想下载网站的PPT课件到本地,但是由于网站限制,一…...

《JavaScript高级程序设计》读书笔记 20
感谢点赞、关注和收藏! 原始值包装类型 为了方便操作原始值,ECMAScript 提供了 3 种特殊的引用类型:Boolean、Number 和 String。每当用到某个原始值的方法或属性时,后台都会创建一个相应原始包装类型的对象,从而暴露…...
树莓派超全系列教程文档--(62)使用rpicam-app通过网络流式传输视频
使用rpicam-app通过网络流式传输视频 使用 rpicam-app 通过网络流式传输视频UDPTCPRTSPlibavGStreamerRTPlibcamerasrc GStreamer 元素 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 使用 rpicam-app 通过网络流式传输视频 本节介绍来自 rpica…...
在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能
下面我将详细介绍如何使用HarmonyOS SDK在HarmonyOS 5中实现类似抖音的点赞功能,包括动画效果、数据同步和交互优化。 1. 基础点赞功能实现 1.1 创建数据模型 // VideoModel.ets export class VideoModel {id: string "";title: string ""…...

.Net框架,除了EF还有很多很多......
文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...

Linux相关概念和易错知识点(42)(TCP的连接管理、可靠性、面临复杂网络的处理)
目录 1.TCP的连接管理机制(1)三次握手①握手过程②对握手过程的理解 (2)四次挥手(3)握手和挥手的触发(4)状态切换①挥手过程中状态的切换②握手过程中状态的切换 2.TCP的可靠性&…...
c++ 面试题(1)-----深度优先搜索(DFS)实现
操作系统:ubuntu22.04 IDE:Visual Studio Code 编程语言:C11 题目描述 地上有一个 m 行 n 列的方格,从坐标 [0,0] 起始。一个机器人可以从某一格移动到上下左右四个格子,但不能进入行坐标和列坐标的数位之和大于 k 的格子。 例…...
在四层代理中还原真实客户端ngx_stream_realip_module
一、模块原理与价值 PROXY Protocol 回溯 第三方负载均衡(如 HAProxy、AWS NLB、阿里 SLB)发起上游连接时,将真实客户端 IP/Port 写入 PROXY Protocol v1/v2 头。Stream 层接收到头部后,ngx_stream_realip_module 从中提取原始信息…...

高危文件识别的常用算法:原理、应用与企业场景
高危文件识别的常用算法:原理、应用与企业场景 高危文件识别旨在检测可能导致安全威胁的文件,如包含恶意代码、敏感数据或欺诈内容的文档,在企业协同办公环境中(如Teams、Google Workspace)尤为重要。结合大模型技术&…...

HBuilderX安装(uni-app和小程序开发)
下载HBuilderX 访问官方网站:https://www.dcloud.io/hbuilderx.html 根据您的操作系统选择合适版本: Windows版(推荐下载标准版) Windows系统安装步骤 运行安装程序: 双击下载的.exe安装文件 如果出现安全提示&…...

令牌桶 滑动窗口->限流 分布式信号量->限并发的原理 lua脚本分析介绍
文章目录 前言限流限制并发的实际理解限流令牌桶代码实现结果分析令牌桶lua的模拟实现原理总结: 滑动窗口代码实现结果分析lua脚本原理解析 限并发分布式信号量代码实现结果分析lua脚本实现原理 双注解去实现限流 并发结果分析: 实际业务去理解体会统一注…...

QT: `long long` 类型转换为 `QString` 2025.6.5
在 Qt 中,将 long long 类型转换为 QString 可以通过以下两种常用方法实现: 方法 1:使用 QString::number() 直接调用 QString 的静态方法 number(),将数值转换为字符串: long long value 1234567890123456789LL; …...