CN112023402B - 游戏数据处理方法、装置、设备以及介质 - Google Patents

游戏数据处理方法、装置、设备以及介质 Download PDF

Info

Publication number
CN112023402B
CN112023402B CN202010910388.4A CN202010910388A CN112023402B CN 112023402 B CN112023402 B CN 112023402B CN 202010910388 A CN202010910388 A CN 202010910388A CN 112023402 B CN112023402 B CN 112023402B
Authority
CN
China
Prior art keywords
interface
game
calling
information
rendered
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN202010910388.4A
Other languages
English (en)
Other versions
CN112023402A (zh
Inventor
王炳堪
谭文
杨榕
施帆
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Tencent Technology Shenzhen Co Ltd
Original Assignee
Tencent Technology Shenzhen Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Tencent Technology Shenzhen Co Ltd filed Critical Tencent Technology Shenzhen Co Ltd
Priority to CN202010910388.4A priority Critical patent/CN112023402B/zh
Publication of CN112023402A publication Critical patent/CN112023402A/zh
Application granted granted Critical
Publication of CN112023402B publication Critical patent/CN112023402B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • AHUMAN NECESSITIES
    • A63SPORTS; GAMES; AMUSEMENTS
    • A63FCARD, BOARD, OR ROULETTE GAMES; INDOOR GAMES USING SMALL MOVING PLAYING BODIES; VIDEO GAMES; GAMES NOT OTHERWISE PROVIDED FOR
    • A63F13/00Video games, i.e. games using an electronically generated display having two or more dimensions
    • A63F13/70Game security or game management aspects
    • A63F13/75Enforcing rules, e.g. detecting foul play or generating lists of cheating players
    • AHUMAN NECESSITIES
    • A63SPORTS; GAMES; AMUSEMENTS
    • A63FCARD, BOARD, OR ROULETTE GAMES; INDOOR GAMES USING SMALL MOVING PLAYING BODIES; VIDEO GAMES; GAMES NOT OTHERWISE PROVIDED FOR
    • A63F13/00Video games, i.e. games using an electronically generated display having two or more dimensions
    • A63F13/50Controlling the output signals based on the game progress
    • A63F13/52Controlling the output signals based on the game progress involving aspects of the displayed game scene
    • AHUMAN NECESSITIES
    • A63SPORTS; GAMES; AMUSEMENTS
    • A63FCARD, BOARD, OR ROULETTE GAMES; INDOOR GAMES USING SMALL MOVING PLAYING BODIES; VIDEO GAMES; GAMES NOT OTHERWISE PROVIDED FOR
    • A63F13/00Video games, i.e. games using an electronically generated display having two or more dimensions
    • A63F13/70Game security or game management aspects
    • A63F13/71Game security or game management aspects using secure communication between game devices and game servers, e.g. by encrypting game data or authenticating players
    • AHUMAN NECESSITIES
    • A63SPORTS; GAMES; AMUSEMENTS
    • A63FCARD, BOARD, OR ROULETTE GAMES; INDOOR GAMES USING SMALL MOVING PLAYING BODIES; VIDEO GAMES; GAMES NOT OTHERWISE PROVIDED FOR
    • A63F2300/00Features of games using an electronically generated display having two or more dimensions, e.g. on a television screen, showing representations related to the game
    • A63F2300/30Features of games using an electronically generated display having two or more dimensions, e.g. on a television screen, showing representations related to the game characterized by output arrangements for receiving control signals generated by the game device
    • A63F2300/308Details of the user interface
    • AHUMAN NECESSITIES
    • A63SPORTS; GAMES; AMUSEMENTS
    • A63FCARD, BOARD, OR ROULETTE GAMES; INDOOR GAMES USING SMALL MOVING PLAYING BODIES; VIDEO GAMES; GAMES NOT OTHERWISE PROVIDED FOR
    • A63F2300/00Features of games using an electronically generated display having two or more dimensions, e.g. on a television screen, showing representations related to the game
    • A63F2300/50Features of games using an electronically generated display having two or more dimensions, e.g. on a television screen, showing representations related to the game characterized by details of game servers
    • A63F2300/55Details of game data or player data management
    • AHUMAN NECESSITIES
    • A63SPORTS; GAMES; AMUSEMENTS
    • A63FCARD, BOARD, OR ROULETTE GAMES; INDOOR GAMES USING SMALL MOVING PLAYING BODIES; VIDEO GAMES; GAMES NOT OTHERWISE PROVIDED FOR
    • A63F2300/00Features of games using an electronically generated display having two or more dimensions, e.g. on a television screen, showing representations related to the game
    • A63F2300/60Methods for processing data by generating or executing the game program
    • A63F2300/609Methods for processing data by generating or executing the game program for unlocking hidden game elements, e.g. features, items, levels

Landscapes

  • Engineering & Computer Science (AREA)
  • Multimedia (AREA)
  • Business, Economics & Management (AREA)
  • Computer Security & Cryptography (AREA)
  • General Business, Economics & Management (AREA)
  • Processing Or Creating Images (AREA)

Abstract

本申请实施例提供了一种游戏数据处理方法、装置、设备以及介质,该方法涉及云游戏、手游、端游以及页游等游戏数据的渲染处理,该方法包括:获取第一进程中针对渲染功能接口的接口调用信息以及待渲染游戏数据,在第一进程和第二进程之间传输接口调用信息以及待渲染游戏数据;第一进程是指在黑盒中运行的用于执行游戏逻辑的进程,第二进程是指在黑盒外运行的用于执行渲染逻辑的进程;当第二进程获取到接口调用信息和待渲染游戏数据时,在第二进程中根据接口调用信息调用渲染功能接口,根据渲染功能接口对待渲染游戏数据进行渲染处理,生成用于显示的游戏界面。采用本申请实施例,可以提高游戏的安全性。

Description

游戏数据处理方法、装置、设备以及介质
技术领域
本申请涉及互联网技术领域,尤其涉及一种游戏数据处理方法、装置、设备以及介质。
背景技术
互联网技术的快速发展丰富了人们的娱乐生活,各种线上游戏的涌现,用户使用线上游戏的频率有所增加。线上游戏在运行过程中,可以调用绘图编程接口,对游戏场景中的相关数据(例如,游戏场景中的虚拟人物位置信息)进行渲染,绘制线上游戏中的虚拟人物画面,在线上游戏的客户端中显示包含虚拟人物画面的游戏场景。
现有技术中,线上游戏的游戏逻辑和渲染逻辑都是在游戏进程中完成的,即在线上游戏对应的游戏进程中可以执行游戏逻辑,当游戏进程中产生绘图编程接口调用时,可以直接在游戏进程中调用绘图编程接口进行游戏画面渲染。由于线上游戏中的虚拟人物坐标信息以及绘图编程接口调用信息均处于同一个进程(即游戏进程)空间,容易泄露虚拟人物坐标信息,进而被外挂利用,从而造成游戏安全性过低。
发明内容
本申请实施例提供一种游戏数据处理方法、装置、设备以及介质,可以提高游戏的安全性。
本申请实施例一方面提供了一种游戏数据处理方法,包括:
获取第一进程中针对渲染功能接口的接口调用信息以及待渲染游戏数据,在第一进程和第二进程之间传输接口调用信息以及待渲染游戏数据;第一进程是指在黑盒中运行的用于执行游戏逻辑的进程,第二进程是指在黑盒外运行的用于执行渲染逻辑的进程;
当第二进程获取到接口调用信息和待渲染游戏数据时,在第二进程中根据接口调用信息调用渲染功能接口,根据渲染功能接口对待渲染游戏数据进行渲染处理,生成用于显示的游戏界面。
其中,上述获取第一进程中针对渲染功能接口的接口调用信息以及待渲染游戏数据,在第一进程和第二进程之间传输接口调用信息以及待渲染游戏数据,包括:
当检测到第一进程中针对渲染功能接口的调用指令时,通过代理动态链接库从第一进程中获取调用指令对应的接口调用信息和待渲染游戏数据;
通过代理动态链接库,将接口调用信息和待渲染游戏数据传输至共享内存空间;
若第二进程监听到共享内存空间中的接口调用信息和待渲染游戏数据,则通过第二进程从共享内存空间中获取接口调用信息和待渲染游戏数据;第一进程和第二进程均具备访问共享内存空间的权限。
其中,共享内存空间包括环形队列;
通过代理动态链接库,将接口调用信息和待渲染游戏数据传输至共享内存空间,包括:
通过代理动态链接库获取渲染功能接口对应的接口标识,将接口调用信息和接口标识封装成调用数据包,获取渲染功能接口对应的接口类别信息;
若接口类别信息为异步调用接口类别,则通过代理动态链接库将调用数据包和待渲染游戏数据存储至环形队列中的空槽。
其中,该方法还包括:
若接口类别信息为顺序调用接口类别,则通过代理动态链接库监听环形队列中所包含的历史调用数据包的处理状态;
当历史调用数据包的处理状态为已处理状态时,通过代理动态链接库将调用数据包和待渲染游戏数据存储至环形队列中的空槽。
其中,历史调用数据包包括调用数据包ai和调用数据包ai+1,调用数据包ai存储至环形队列的时间早于调用数据包ai+1存储至环形队列的时间,i为小于调用数据包的数量的正整数;
该方法还包括:
通过第二进程从环形队列中获取调用数据包ai,将调用数据包ai的处理状态确定为已处理状态;
当调用数据包ai的处理状态为已处理状态时,通过第二进程从环形队列中获取调用数据包ai+1,将调用数据包ai+1的处理状态确定为已处理状态;
当调用数据包ai和调用数据包ai+1的处理状态均为已处理状态时,确定历史调用数据包的处理状态为已处理状态。
其中,异步调用接口类别包括设置接口类别;
若接口类别信息为异步调用接口类别,则通过代理动态链接库将调用数据包和待渲染游戏数据存储至环形队列中的空槽,包括:
若接口类别信息为设置接口类别,则通过动态链接库将第一进程中的接口调用信息传输至状态机,通过代理动态链接库将调用数据包和待渲染游戏数据存储至环形队列中的空槽;
根据接口调用信息确定渲染功能接口对应的接口名称和设置状态,在状态机中将接口名称和设置状态作为键值对信息进行存储;键值对信息用于指示第一进程从状态机中获取设置状态。
其中,该方法还包括:
若渲染功能接口属于顺序调用接口类别,则在第二进程中将游戏界面对应的调用结果封装为结果数据包,将结果数据包传输至共享内存空间;
若第一进程监听到共享内存空间中的结果数据包,则通过第一进程从共享内存空间中获取结果数据包,对结果数据包进行解析得到调用结果,在第一进程中根据调用结果继续执行后续游戏逻辑。
其中,通过代理动态链接库获取渲染功能接口对应的接口标识,将接口调用信息和接口标识封装成调用数据包,获取渲染功能接口对应的接口类别信息,包括:
通过代理动态链接库获取接口调用信息表;
根据接口调用信息在接口调用信息表中进行遍历,从接口调用信息表中获取与接口调用信息具有映射关系的接口标识和接口类别信息;
将接口调用信息和接口标识封装成调用数据包。
其中,该方法还包括:
获取与第一进程相关联的代理动态链接库,在第一进程中加载代理动态链接库,将第一进程对应的原始动态链接库替换为代理动态链接库;代理动态链接库用于将第一进程中的接口调用信息和待渲染游戏数据传输至共享内存空间。
其中,通过第二进程从共享内存空间中获取接口调用信息和待渲染游戏数据;包括:
通过第二进程从共享内存空间中获取调用数据包和待渲染游戏数据;
对调用数据包进行解析,得到接口调用信息和接口标识;
则在第二进程中根据接口调用信息调用渲染功能接口,根据渲染功能接口对待渲染游戏数据进行渲染处理,生成用于显示的游戏界面,包括:
在第二进程中,根据接口调用信息和接口标识调用代理动态链接库中的渲染功能接口;
根据渲染功能接口对待渲染游戏数据进行渲染处理,生成该待渲染游戏数据对应的游戏界面,在游戏应用中对游戏界面进行显示。
本申请实施例一方面提供了一种游戏数据处理装置,包括:
传输模块,用于获取第一进程中针对渲染功能接口的接口调用信息以及待渲染游戏数据,在第一进程和第二进程之间传输接口调用信息以及待渲染游戏数据;第一进程是指在黑盒中运行的用于执行游戏逻辑的进程,第二进程是指在黑盒外运行的用于执行渲染逻辑的进程;
渲染模块,用于当第二进程获取到接口调用信息和待渲染游戏数据时,在第二进程中根据接口调用信息调用渲染功能接口,根据渲染功能接口对待渲染游戏数据进行渲染处理,生成用于显示的游戏界面。
其中,传输模块包括:
调用拦截单元,用于当检测到第一进程中针对渲染功能接口的调用指令时,通过代理动态链接库从第一进程中获取调用指令对应的接口调用信息和待渲染游戏数据;
调用传输单元,用于通过代理动态链接库,将接口调用信息和待渲染游戏数据传输至共享内存空间;
调用获取单元,用于若第二进程监听到共享内存空间中的接口调用信息和待渲染游戏数据,则通过第二进程从共享内存空间中获取接口调用信息和待渲染游戏数据;第一进程和第二进程均具备访问共享内存空间的权限。
其中,共享内存空间包括环形队列;
调用传输单元包括:
调用信息封装子单元,用于通过代理动态链接库获取渲染功能接口对应的接口标识,将接口调用信息和接口标识封装成调用数据包,获取渲染功能接口对应的接口类别信息;
数据存储子单元,用于若接口类别信息为异步调用接口类别,则通过代理动态链接库将调用数据包和待渲染游戏数据存储至环形队列中的空槽。
其中,该装置还包括:
监听模块,用于若接口类别信息为顺序调用接口类别,则通过代理动态链接库监听环形队列中所包含的历史调用数据包的处理状态;
存储模块,用于当历史调用数据包的处理状态为已处理状态时,通过代理动态链接库将调用数据包和待渲染游戏数据存储至环形队列中的空槽。
其中,历史调用数据包包括调用数据包ai和调用数据包ai+1,调用数据包ai存储至环形队列的时间早于调用数据包ai+1存储至环形队列的时间,i为小于调用数据包的数量的正整数;
该装置还包括:
处理状态确定模块,用于通过第二进程从环形队列中获取调用数据包ai,将调用数据包ai的处理状态确定为已处理状态;
上述处理状态模块,还用于当调用数据包ai的处理状态为已处理状态时,通过第二进程从环形队列中获取调用数据包ai+1,将调用数据包ai+1的处理状态确定为已处理状态;
上述处理状态确定模块,还用于当调用数据包ai和调用数据包ai+1的处理状态均为已处理状态时,确定历史调用数据包的处理状态为已处理状态。
其中,异步调用接口类别包括设置接口类别;
数据存储子单元包括:
状态机传输子单元,用于若接口类别信息为设置接口类别,则通过动态链接库将第一进程中的接口调用信息传输至状态机,通过代理动态链接库将调用数据包和待渲染游戏数据存储至环形队列中的空槽;
状态机存储子单元,用于根据接口调用信息确定渲染功能接口对应的接口名称和设置状态,在状态机中将接口名称和设置状态作为键值对信息进行存储;键值对信息用于指示第一进程从状态机中获取设置状态。
其中,该装置还包括:
结果封装模块,用于若渲染功能接口属于顺序调用接口类别,则在第二进程中将游戏界面对应的调用结果封装为结果数据包,将结果数据包传输至共享内存空间;
结果获取模块,用于若第一进程监听到共享内存空间中的结果数据包,则通过第一进程从共享内存空间中获取结果数据包,对结果数据包进行解析得到调用结果,在第一进程中根据调用结果继续执行后续游戏逻辑。
其中,调用信息封装子单元包括:
信息表获取子单元,用于通过代理动态链接库获取接口调用信息表;
遍历子单元,用于根据接口调用信息在接口调用信息表中进行遍历,从接口调用信息表中获取与接口调用信息具有映射关系的接口标识和接口类别信息;
封装子单元,用于将接口调用信息和接口标识封装成调用数据包。
其中,该装置还包括:
替换模块,用于获取与第一进程相关联的代理动态链接库,在第一进程中加载代理动态链接库,将第一进程对应的原始动态链接库替换为代理动态链接库;代理动态链接库用于将第一进程中的接口调用信息和待渲染游戏数据传输至共享内存空间。
其中,调用获取单元包括:
数据获取子单元,用于通过第二进程从共享内存空间中获取调用数据包和待渲染游戏数据;
解析子单元,用于对调用数据包进行解析,得到接口调用信息和接口标识;
则渲染模块包括:
接口调用单元,用于在第二进程中,根据接口调用信息和接口标识调用代理动态链接库中的渲染功能接口;
显示单元,用于根据渲染功能接口对待渲染游戏数据进行渲染处理,生成该待渲染游戏数据对应的游戏界面,在游戏应用中对游戏界面进行显示。
本申请实施例一方面提供了一种计算机设备,包括存储器和处理器,存储器存储有计算机程序,计算机程序被处理器执行时,使得处理器执行本申请实施例中一方面中方法的步骤。
本申请实施例一方面提供了一种计算机可读存储介质,计算机可读存储介质存储有计算机程序,计算机程序包括程序指令,程序指令当被处理器执行时,执行如本申请实施例中一方面中方法的步骤。
根据本申请的一个方面,提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行上述一方面的各种可选方式中提供的方法。
本申请实施例可以通过获取第一进程中针对渲染功能接口的接口调用信息以及待渲染游戏数据,在第一进程和第二进程之间传输接口调用信息和待渲染游戏数据,其中,第一进程是指在黑盒中运行的用于执行游戏逻辑的进程第二进程是指在黑盒外运行的用于执行渲染逻辑的进程;当第二进程获取到接口调用信息和待渲染游戏数据时,可以根据接口调用信息调用渲染功能接口,采用该渲染功能接口对待渲染游戏数据进行渲染处理,生成用于显示在游戏展示页面的游戏界面。可见,通过将游戏分离为两个进程,并将第一进程封装在黑盒中运行,可以有效隐藏游戏中虚拟人物的坐标以及进程内存等信息,增加游戏外挂开发的难度,从而增强游戏的安全性。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本申请实施例提供的一种游戏处理***的架构示意图;
图2是本申请实施例提供的一种游戏数据处理场景示意图;
图3是本申请实施例提供的一种游戏数据处理方法的流程示意图;
图4是本申请实施例提供的一种游戏数据处理方法的流程示意图;
图5是本申请实施例提供的一种游戏渲染的示意图;
图6是本申请实施例提供的一种游戏渲染的示意图;
图7是本申请实施例提供的一种游戏数据处理方法的流程示意图;
图8是本申请实施例提供的一种游戏处理流程示意图;
图9是本申请实施例提供的一种游戏渲染的示意图;
图10是本申请实施例提供的一种第一进程与第二进程之间的通信示意图;
图11是本申请实施例提供的一种游戏数据处理装置的结构示意图;
图12是本申请实施例提供的一种计算机设备的结构示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
本申请实施例涉及云技术(cloud technology),云计算(cloud computing)和云游戏(cloud gaming)。其中,云技术是指在广域网或局域网内将硬件、软件、网络等系列资源统一起来,实现数据的计算、储存、处理和共享的一种托管技术。云技术是基于云计算商业模式应用的网络技术、信息技术、整合技术、管理平台技术、应用技术等的总称,可以组成资源池,按需所用,灵活便利。云计算是一种计算模式,它将计算任务分布在大量计算机构成的资源池上,使各种应用***能够根据需要获取计算力、存储空间和信息服务。作为云计算的基础能力提供商,会建立云计算资源池(简称云平台,一般称为IaaS(Infrastructureas a Service,基础设施即服务)平台,在资源池中部署多种类型的虚拟资源,供外部客户选择使用。云计算资源池中主要包括:计算设备(为虚拟化机器,包含操作***)、存储设备、网络设备。本申请提供的游戏数据处理方案涉及游戏场景中的数据处理,对于具有大型任务场景(如游戏场景为需要上万玩家虚拟人物参与的大型任务)的游戏,可以从云计算资源池中获取计算设备对游戏中所产生的游戏数据进行运算和渲染,例如,执行游戏逻辑的进程可以从云计算资源池中获取计算设备,对大型任务中玩家虚拟人物的动作、作为位置等信息进行运算,执行渲染逻辑的进程可以从云计算池中获取计算设备对大型任务进行画面渲染处理,可以降低游戏后台的数据运算压力,增强游戏中的画面渲染能力,进而可以增强游戏的流畅性。
云游戏又可称为游戏点播(gaming on demand),是一种以云计算技术为基础的在线游戏技术。云游戏技术使图形处理与数据运算能力相对有限的轻端设备(thin client)能运行高品质游戏。在云游戏场景下,游戏并不在玩家游戏终端,而是在云服务器中运行,在云服务器中可以运行游戏进程和渲染进程,游戏进程可以运行于云服务器所构成的黑盒中,用于执行游戏逻辑,渲染进程可以运行于黑盒外(例如,另一个云服务器),用于执行渲染逻辑;其中,游戏进程和渲染进程可以运行于不同的云服务器中,或者可以运行于同一个云服务器的两个容器中,以实现游戏进程与渲染进程之间的内存隔离,由运行渲染进程的云服务器将游戏场景渲染为视频音频流,通过网络传输给玩家游戏终端。玩家游戏终端无需拥有强大的图形运算与数据处理能力,仅需拥有基本的流媒体播放能力与获取玩家输入指令并发送给云服务器的能力即可。玩家试玩云游戏时,本质是在对游戏画面的流(音频流和视频流)数据进行操作。
本申请实施例还涉及如下几个概念:
Direct3D:Direct3D(3D绘图编程接口)是DirectX中的子模块,Direct3D可以用于提供图形接口,DirectX是一系列专为多媒体以及游戏开发的应用程序接口(ApplicationProgramming Interface,API),API可以是指一些预先定义的函数,或者是指软件***不同组成部分衔接的约定。API的目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问原码,或理解内部工作机制的细节;Direct3D可以包括一个或者多个API。本申请中,Direct3D中的API均以渲染功能接口进行描述。
虚拟机:虚拟机可以是指计算机***的仿真器,可以通过软件模拟具有完整硬件***功能的、运行在一个完全隔离环境中的完整计算机***,虚拟机可以提供物理计算机的功能。
外挂:外挂是指利用电脑技术针对一个或多个网络游戏,通过改***件的部分程序制作而成的作弊程序。游戏玩家使用外挂程序后,会极大影响游戏的平衡性。
动态链接库:动态链接库(Dynamic Link Library,DLL)一般不能直接执行,也不接收消息。动态链接库可以是包含许多函数的独立文件,这些函数可以被应用程序和其他DLL调用以完成某些特定的工作,一个动态链接库只有在另外一个模块调用其所包含的函数时才被启动。
请一并参见图1,图1是本申请实施例提供的一种游戏处理***的架构示意图。如图1所示,该游戏处理***可以包括终端设备10a和服务器10b,该游戏处理***中所包含的终端设备和服务器的数量可以为一个或多个,本申请不对终端设备和服务器的数量进行限定。其中,终端设备10a可以是指游戏玩家所使用的设备,此处的游戏玩家可以是指正在体验游戏的用户。终端设备10a可以包括:智能手机、平板电脑、笔记本电脑、掌上电脑、移动互联网设备(mobile internet device,MID)、可穿戴设备(例如智能手表、智能手环等)以及智能电视等具有游戏数据渲染功能的智能终端。服务器10b可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式***,还可以是提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、CDN、以及大数据和人工智能平台等基础云计算服务的云服务器。终端设备10a和服务器10b之间可以进行直接或者间接地通信连接,本申请对终端设备10a和服务器10b之间的具体连接方式不做具体限定。
在图1所示的游戏处理***中,终端设备10a可以获取游戏相关的各种页面展示数据,并对页面展示数据进行渲染生成该游戏相应的页面(例如,游戏开始页面、游戏设置页面以及游戏结束页面等),并在终端屏幕中向游戏玩家展示上述页面。另外,终端设备10a可以响应游戏玩家针对上述页面的各种操作(例如,功能设置操作、虚拟人物对抗操作等),并将这些操作发送至服务器10b。服务器10b通过与终端设备进行交互,根据游戏玩家的各种操作执行游戏逻辑,为终端设备10a提供相应的待渲染游戏数据和接口调用信息,使得终端设备10a可以根据接口调用信息调用对应的渲染功能接口对待渲染游戏数据进行渲染处理,生成用于向游戏玩家展示的游戏界面。渲染功能接口可以是指用于进行3D绘图的应用程序接口,接口调用信息可以是指调用渲染功能接口时所需的参数。
请参见图2,图2是本申请实施例提供的一种游戏数据处理场景示意图。如图2所示的终端设备20a为游戏玩家所使用的设备,该终端设备20a可以为上述图1所对应实施例中的游戏处理***中的终端设备,该终端设备20a中可以运行进程20c,该进程20c可以用于执行游戏中的渲染逻辑,即在进程20c中可以对游戏中的游戏数据进行渲染,生成用于向游戏玩家展示的游戏界面。
当游戏玩家对终端设备20a中的游戏A执行启动操作时,终端设备20a可以获取该游戏A的登录页面数据(如游戏A的图标、账号输入控件、密码输入控件以及登录控件等),在终端设备20a的进程20c中对登录页面数据进行渲染处理,生成登录页面20b,并在终端设备20a中为游戏玩家展示该登录页面20b。游戏玩家可以对账号输入控件执行触发操作,在账号输入控件对应的输入框中输入账号信息(例如,账号为123xx567),对密码输入控件执行触发操作,在密码输入控件对应的输入框中输入密码信息。当用户对登录页面20b中的登录控件执行触发操作(例如,点击等)时,终端设备20a中的进程20c可以获取该游戏玩家的登录操作数据,该登录操作数据可以包括上述账号、密码等信息,并将登录操作数据写入共享内存20d中,即将登录操作数据存放在共享内存空间20d中。共享内存空间20d可以表示为一块内存区域,可以同时被两个或者多个进程进行访问,如图1所示的进程20c和进程20f均可以访问共享内存空间20d,该共享内存空间20d可以为该游戏A对应的云存储空间,或者为物理内存空间等,本申请对此不做具体限定。可以理解的是,当游戏玩家启动游戏A时,终端设备20a也可以自动获取该游戏玩家在其余关联应用中的账号(例如,即时通信应用账号)作为该游戏A的登录账号,或者根据游戏玩家的历史登录信息获取其登录账号以及密码等信息,通过进程20c将登录操作数据写入至共享内存控件20d,无需游戏玩家手动输入登录账号和密码等信息。
当进程20f监听到共享内存空间20d中增加了上述登录操作数据时,可以从共享内存空间20d中获取登录操作数据,根据登录操作数据执行相应的游戏逻辑,例如,检验游戏玩家所输入的账号和密码是否正确,检验游戏玩家的账号是否具有游戏体验权限(例如,检验该游戏玩家的账号是否被封号)等,当进程20f确定上述登录操作数据满足登录条件(例如,该游戏玩家的账号、密码均正确,且该账号具有游戏体验权限)时,则可以向终端设备20a返回登录成功提示信息。需要说明的是,进程20f可以运行在虚拟机20e中,该进程20f可以用于执行游戏逻辑,此时的虚拟机20e可以看成是一个黑盒,进程20e和进程20c可以共同实现游戏A,进程20e和进程20c之间可以通过共享内存控件20d进行通信。本申请中的黑盒可以是指仅知道输入输出关系而不知道内部结构的***或设备,对于运行在黑盒中的进程,在输入数据之后可以输出相应的结果,至于该进程对数据的具体处理过程是不清楚的,这样可以防止数据处理过程中的信息泄露。
其中,当进程20f根据登录操作数据执行游戏逻辑,得到该登录操作数据对应的登录结果为登录成功时,进程20f可以根据登录成功结果产生渲染功能接口调用,如需要调用渲染功能接口1对登录成功结果进行渲染,以对登录页面20b进行更新切换。在进程20f中,可以将渲染功能接口1的调用信息以及登陆成功结果写入共享内存控件20d中,此时的共享内存空间20d可以包括渲染功能接口1的调用信息以及登陆成功结果。可选的,在进程20f在共享内存空间20d中获取到该登录操作数据后,可以将登录操作数据从共享内存空间20d中删除,或者也可以在共享内存空间20d中暂时保留该登录操作数据,但将该登录操作数据由未处理状态切换为已处理状态,可以每隔一段时间清理一次共享内存空间20d中已经处理过的数据。
当进程20c监听到共享内存空间20d中增加了新的数据时,可以从共享内存空间20d中获取渲染功能接口1的调用信息以及登陆成功结果,在进程20c中可以根据获取到的调用信息调用渲染功能接口1,根据该渲染功能接口对登陆成功结果进行渲染处理,生成游戏开始页面20g,并在终端设备20a中对该游戏开始页面20g进行展示,该游戏开始页面20g可以包括游戏A的名称、图标、开始游戏功能控件以及登录成功提示信息等。换言之,进程20e在执行游戏逻辑时,可以产生渲染功能接口调用,进而可以将渲染功能接口调用对应的调用信息以及待渲染游戏数据(例如,上述登录成功结果)存放在共享内存空间20d中,进程20c可以从共享内存空间20d中的获取调用参数信息和待渲染游戏数据,根据调用参数信息调用相应的渲染功能接口,对待渲染游戏数据进行渲染处理生成游戏界面,该游戏界面可以在终端设备20a中进行显示,这样可以将游戏逻辑和渲染逻辑进行分离,且游戏逻辑的运行处于虚拟机20e这一黑盒中,可以有效隐藏游戏中的虚拟人物坐标信息、进程内存信息等,避免虚拟人物的坐标信息被外挂利用,进而提高游戏的安全性。
请参见图3,图3是本申请实施例提供的一种游戏数据处理方法的流程示意图。可以理解地,该游戏数据处理方法可以由计算机设备执行,计算机设备可以为服务器,或者为终端设备,或者为服务器和终端设备组成的***,该计算机设备可以包括用于执行游戏逻辑的第一进程和用于执行渲染逻辑的第二进程。如图3所示,该游戏数据处理方法可以包括以下步骤:
步骤S101,获取第一进程中针对渲染功能接口的接口调用信息以及待渲染游戏数据,在第一进程和第二进程之间传输接口调用信息以及待渲染游戏数据;第一进程是指在黑盒中运行的用于执行游戏逻辑的进程,第二进程是指在黑盒外运行的用于执行渲染逻辑的进程。
具体的,本申请实施例中,第一进程(如上述图2所对应实施例中的进程20f,也可以称为游戏进程)是指在黑盒中运行的用于执行游戏逻辑的进程,第二进程(如上述图2所对应实施例中的进程20c,也可以称为渲染进程)是指在黑盒外运行的用于执行渲染逻辑的进程,第一进程可以产生Direct3D调用(也可以称为D3D调用),且第一进程所产生的Direct3D可以传输至第二进程,在第二进程中调用Direct3D中的渲染功能接口对游戏中的待渲染游戏数据进行渲染处理;第一进程可以运行在黑盒(例如,虚拟机,或者服务器)中,第二进程可以运行在用户的物理机(如上述图2所对应实施例中的终端设备20a,即游戏玩家所使用的设备)中,即第二进程运行于黑盒外,可以达到黑盒中运行的游戏在黑盒外进行画面展示的效果,既能保证游戏的安全性,又不影响游戏玩家的使用效果。
在执行步骤S101之前,计算机设备可以获取与第一进程相关联的代理动态链接库,在第一进程中加载代理动态链接库,将第一进程对应的原始动态链接库替换为代理动态链接库。为了在第一进程和第二进程之间传输Direct3D调用,计算机设备需要将游戏中的原始动态链接库更换为新的动态链接库,将新的动态链接库称为代理动态链接库。游戏发开人员可以使用模块定义(.def)文件创建代理动态链接库(例如,代理动态链接库可以表示为代理d3d9.dll),在创建了代理动态链接库之后,计算机设备可以让第一进程对该代理动态链接库进行加载,可以将游戏中的原始动态链接库(例如,原始代理链接库可以表示为d3d9.dll)替换成代理动态链接库,当第一进程加载了代理动态链接库之后,在第一进程中所产生的所有Direct3D调用均可以传输至第二进程中进行调用渲染。其中,代理动态链接库与代理动态链接库可以包含相同的渲染功能接口,即对于Direct3D中所包含的渲染功能接口的调用,上述两者均可以实现,只是原始动态链接库只能在产生Direct3D调用的进程中完成渲染功能接口的调用过程,即在第一进程中产生Direct3D调用时,可以直接在第一进程中调用相应的渲染功能接口进行图像渲染;而代理动态链接库可以监控并拦截第一进程中所产生的Direct3D调用,并将Direct3D调用传输至第二进程。通过代理动态链接库可以确保第一进程和第二进程的正常运行。
其中,代理动态链接库的加载方式可以包括隐式链接方式和显示加载方式。隐式链接方式是指在游戏启动时,将代理动态链接库加载到内存中,并映射到调用进程的地址空间,在需要调用的时候直接调用即可;显示加载方式是指代理动态链接库只有在需要调用的时候才会被加载到内存中。
可以理解的是,在游戏启动时,计算机设备可以首先对游戏的运行环境进行初始化处理,并为第一进程和第二进程准备共享内存空间,该共享内存空间可以允许第一进程和第二进程访问;与此同时,可以对第一进程的状态机进行初始化处理,这里的状态机可以理解为第一进程的信息备份区(也可以称为本地缓存)。
在第一进程执行游戏逻辑的过程中,第一进程可以基于游戏进度以及游戏玩家在游戏展示页面中的操作,产生针对Direct3D中某渲染功能接口的调用,此时的计算机设备可以通过代理动态链接库,获取第一进程中针对渲染功能接口的接口调用信息以及待渲染游戏数据,并将接口调用信息存放在共享内存空间中,第二进程可以实时监听共享内存空间中所存放的数据,当共享内存空间中增加了接口调用信息和待渲染游戏数据时,第二进程就可以感知到,并可以从共享内存空间中获取接口调用信息和待渲染游戏数据,待渲染游戏数据可以是指游戏中所产生的用于进行游戏画面渲染的数据。例如,游戏中的虚拟人物A的肩部被射中时,需要调用相应的渲染功能接口渲染出虚拟人物A被击中的游戏画面(例如,在虚拟人物A的肩部渲染出中枪出血的画面),此时需要获取虚拟人物A在游戏中的坐标信息等游戏数据,才能绘制出虚拟人物A中枪出血的游戏画面,因此代理动态链接库不仅需要获取针对渲染功能接口的接口调用信息,还需要获取虚拟人物A在游戏中的坐标信息等游戏数据,此时虚拟人物A的坐标信息等游戏数据可以称为待渲染游戏数据。
步骤S102,当第二进程获取到接口调用信息和待渲染游戏数据时,在第二进程中根据接口调用信息调用渲染功能接口,根据渲染功能接口对待渲染游戏数据进行渲染处理,生成用于显示的游戏界面。
具体的,当第二进程从共享内存空间中获取接口调用信息和待渲染游戏数据时,在第二进程中可以根据接口调用信息从代理链接库中调用相应的渲染功能接口,根据渲染功能接口对待渲染游戏数据机型渲染处理,生成游戏界面,在游戏应用(也可以为游戏客户端)中对该游戏界面进行显示。需要说明的是,本申请实施例所生成的游戏界面可以为游戏应用中所展示的完整页面(如游戏应用启动时所展示的游戏开始页面,或者游戏应用中所展示的设置页面,或者游戏应用中所展示的大型任务场景等),也可以为游戏应用的某个游戏界面元素(如游戏过程中闪现的虚拟人物,或者虚拟人物被击中后的伤口等)。当第二进程获取到的待渲染游戏数据为游戏页面对应的全部展示内容数据时,第二进程通过调用渲染功能接口对待渲染游戏数据进行渲染处理,可以生成一个完整的游戏页面,并在游戏应用中对所生成的游戏页面进行展示;当第二进程获取到的待渲染游戏数据为游戏页面的局部展示内容数据时,第二进程通过调用渲染功能接口对待渲染游戏数据进行渲染处理,可以生成游戏界面元素,并在游戏应用所展示的当前页面中对游戏界面元素进行显示。
可选的,第二进程在获取到接口调用信息后,可以确定该接口调用信息对应的调用结果是否需要返回给第一进程;当接口调用信息指示第二进程需要将调用结果返回至第一进程时,在第二进程中根据接口调用信息完成渲染功能接口的调用之后,可以将该渲染功能接口对应的调用结果通过共享内存空间传输至第一进程;当接口调用信息指示第二进程不需要将调用结果返回至第一进程时,在第二进程中根据接口调用信息完成渲染功能接口的调用之后,可以继续执行后续渲染逻辑,无需将调用结果存放至共享内存空间。
可选的,游戏玩家在玩游戏的过程中,可以观看该游戏应用中所显示的游戏界面,该用户还可以触发该游戏展示页面中的功能控件(如触发游戏中的射击功能、自动追随功能等),进而第二进程可以根据用户针对功能控件的触发操作生成对应的操作指令,第二进程可以通过内存共享空间将操作指令传输至第一进程,此时的第一进程可以从共享内存空间中获取操作指令,根据该操作指令执行游戏逻辑,可以继续产生Direct3D调用,进而重复上述渲染功能接口的调用流程。
需要说明的是,本申请中所涉及的游戏可以为手游、端游、页游以及云游戏等,本申请对游戏的类型不做限定。
本申请实施例中,可以将游戏分离为游戏逻辑和渲染逻辑,在两个不同的进程中分别执行游戏逻辑和渲染逻辑,且游戏逻辑可以在黑盒中执行,可以有效隐藏游戏中的虚拟人物信息以及进程内存信息,进而增加外挂开发的难度,从而提高游戏的安全性。
请参见图4,图4是本申请实施例提供的一种游戏数据处理方法的流程示意图。可以理解地,该游戏数据处理方法可以由计算机设备执行,计算机设备可以为服务器,或者为终端设备,或者为服务器和终端设备组成的***,该计算机设备可以包括用于执行游戏逻辑的第一进程和用于执行渲染逻辑的第二进程。如图4所示,该游戏数据处理方法可以包括以下步骤:
步骤S201,当检测到第一进程中针对渲染功能接口的调用指令时,通过代理动态链接库从第一进程中获取调用指令对应的接口调用信息和待渲染游戏数据。
具体的,计算机设备检测到第一进程中针对渲染功能接口的调用指令,可以理解为第一进程向代理动态链接库调用渲染功能接口时,通过代理动态链接库可以获取第一进程针对上述渲染功能接口的接口调用参数和待渲染游戏数据。其中,通过代理动态链接库获取接口调用信息和待渲染游戏数据的具体过程可以参见上述图3所对应实施例中对步骤S101的描述,这里不再进行赘述。
步骤S202,通过代理动态链接库获取渲染功能接口对应的接口标识,将接口调用信息和接口标识封装成调用数据包,获取渲染功能接口对应的接口类别信息。
具体的,计算机设备通过代理动态链接库获取到接口调用信息和待渲染游戏数据之后,可以在代理动态链接库中获取渲染功能接口的接口标识,将接口调用信息和接口标识封装成调用数据包,进而获取渲染功能接口对应的接口类别信息。需要说明的是,代理动态链接库可以包括接口调用信息表,该接口调用信息表可以包括Direct3D中所包含的所有渲染功能接口分别对应的相关信息,如每个渲染功能接口的接口名称、接口标识、接口类别信息以及接口程序代码等信息。在创建代理动态链接库时,可以对Direct3D中所包含的渲染功能接口进行预先分类,将Direct3D中所包含的渲染功能接口分为至少两个类别,如将Direct3D中所包含的渲染功能接口异步调用接口类别(无需考虑共享内存空间中已经存在的调用数据包的处理情况,即无需考虑当前调用包与其余调用数据包的调用顺序)和顺序调用接口类别(需要考虑共享内存空间中已经存在的调用数据包的处理情况,即需要按照调用数据包对应的时间顺序进行调用),或者将Direct3D中所包含的渲染功能接口分为A类接口类别、B类接口类别以及C类接口类别等,本申请对接口类别的数量以及接口类别的划分原则不做限定,接口标识可以是指为每个渲染功能接口分配的编号,如数字1,2,3,……。
进一步地,计算机设备可以从代理动态链接库中获取接口调用信息表,根据接口调用信息在该接口调用信息表中进行遍历,从该接口调用信息表中获取与接口调用信息具有映射关系的接口标识和接口类别信息,进而可以将接口调用信息和接口标识封装成调用数据包。若接口调用信息中可以包括渲染功能接口的接口名称,则可以根据接口名称在接口调用信息表中进行遍历,获取与接口名称对应的接口标识和接口类别信息,通过接口调用信息表可以快速定位到接口调用信息所对应的渲染功能接口,可以提高渲染功能接口的查找效率。
举例来说,当Direct3D中所包含的渲染功能接口划分为A类调用类别、B类调用类别以及C类调用类别时,代理动态链接库中的接口调用信息表所包含的信息如下表1所示:
表1
接口标识 接口名称 接口类别信息 ……
1 XXXXXX1 A类调用类别 ……
2 XXXXXX2 B类调用类别 ……
3 XXXXXX3 B类调用类别 ……
4 XXXXXX4 C类调用类别 ……
5 XXXXXX5 B类调用类别 ……
6 XXXXXX6 A类调用类别 ……
…… …… …… ……
如上述表1所示,当通过代理动态链接库获取到的接口调用信息中包括接口名称“XXXXXX1”时,可以从接口调用信息表中获取与接口调用信息具有映射关系的接口标识为编号1,接口类别信息为A类调用类别。
步骤S203,若接口类别信息为异步调用接口类别,则通过代理动态链接库将调用数据包和待渲染游戏数据存储至环形队列中的空槽。
具体的,共享内存空间可以包括环形队列,若接口类别信息为异步调用接口类别,则可以从环形队列中找到当前队头的空槽,直接将调用数据包和待渲染游戏数据存储至环形队列中的空槽,并返回第一进程继续执行后续渲染逻辑,无需等待环形队列中已经存在的调用数据包被清空。在共享内存空间中创建环形队列,可以对固定大小的内存空间反复使用,无需进行动态的内存释放和分配,可以提高第一进程和第二进程之间的通信效率。
可选的,异步调用接口类别可以包括设置接口类别,若接口类别信息为设置接口类别,则可以通过代理动态链接库将第一进程中的接口调用信息传输至状态机,与此同时,可以通过代理动态链接库将调用数据包和待渲染游戏数据存储至环形队列的空槽中。其中,状态机可以包括获取(get)和设置(set)两个状态,当渲染功能接口为状态类函数(例如,高清晰度的开和关两个状态),且状态为set状态时,可以确定渲染功能接口对应的接口类别信息为设置接口类别,此时该渲染功能接口对应的接口调用信息需要传输至状态机进行记录,以供后续查询。
计算机设备可以从接口调用信息中确定渲染功能接口对应的接口名称和设置状态,在状态机中将接口名称和设置状态作为键值对信息进行存储,即在状态集中将接口名称作为键(key),设置状态作为值(value)进行存储,该键值对信息可以用于指示第一进程从状态机中获取该设置状态。例如,设置接口类别的渲染功能接口所对应的接口调用信息中的设置状态为关闭高分辨率,接口名称为xxxa,则可以将xxxa和“关闭高分辨率”状态作为键值对信息进行存储。设置接口类别的渲染功能接口的目的在于设置游戏中某个功能控件的状态,对于该类渲染功能接口的调用结果可以看成是已知的,因此第二进程对该类渲染功能接口的调用结果无需返回至第一进程。
可选的,状态机中还包括get状态,当渲染功能接口为状态类函数,且状态为get状态时,此时的渲染功能接口的接口类别信息可以称为获取接口类别,该渲染功能接口对应的接口调用信息同样需要传输至状态机进行记录,以供后续查询。与此同时,可以直接从状态机中获取相应的信息直接返回至第一进程,在第一进程中继续执行后续游戏逻辑。例如,获取接口类别的渲染功能接口的目的在于获取功能控件A的当前状态,则可以直接将接口调用信息记录在状态机中,并从状态机所缓存的数据中获取功能控件A的状态(例如,“开”状态),从状态机中获取到功能控件A的状态之后,在第一进程中可以继续执行后续游戏逻辑。应当理解的是,get接口类别的渲染功能接口在调用过程中,直接在状态机中完成,第一进程与第二进程之间无需进行通信,即get接口类别的渲染功能接口直接在第一进程中完成调用过程。
步骤S204,当第二进程获取到接口调用信息和待渲染游戏数据时,在第二进程中根据接口调用信息调用渲染功能接口,根据渲染功能接口对待渲染游戏数据进行渲染处理,生成用于显示的游戏界面。
具体的,第二进程可以一直循环监听环形队列,当代理动态链接库将调用数据包和待渲染游戏数据存储至环形队列中的空槽时,第二进程可以感知到环形队列中数据的变化,进而可以从环形队列中获取调用数据包和待渲染游戏数据。在第二进程中对调用数据包进行解析,得到接口调用信息和接口标识,在第二进程中可以根据接口调用信息和接口标识,从代理动态链接库中调用渲染功能接口,根据该渲染功能接口对待渲染游戏数据进行渲染处理,生成待渲染游戏数据对应的游戏界面,在游戏应用中对该游戏界面进行显示。
请一并参见图5,图5是本申请实施例提供的一种游戏渲染的示意图。如图5所示的第一进程在虚拟机30a中运行,第二进程在游戏玩家的终端设备中运行(虚拟机外)。
如图5所示,在游戏的有些场景中需要开启高分辨率,此时的第一进程可以产生针对Direct3D中的渲染功能接口2(以下简称接口2,该接口2可以用于开启高分辨率并对游戏中的当前数据进行渲染,绘制高分辨率情况下的游戏界面)的接口调用信息,即第一进程可以向代理动态链接库传输接口调用信息,通过代理动态链接库获取针对接口2的接口调用信息和待渲染数据1(可以理解为上述待渲染游戏数据),并获取接口2对应的接口标识和接口类别信息。
若从代理动态链接库中获取得到接口2的接口类别信息为设置接口类别,则可以将接口2对应的接口调用信息传输至状态机30b,在状态机30b中记录该接口调用信息,并在状态机30b中将接口2的名称和开启高分辨率状态作为键值对信息进行存储。与此同时,还可以将接口调用信息和接口标识打包成调用数据包1,从共享内存空间的环形队列中查找空槽,当查找到槽30c为空槽时,可以将调用数据包1和待渲染数据1存储至该槽30c,如图5所示的环形队列中已经存在11个数据包,如数据包a1-a11,可以将调用数据包1和待渲染数据1存放在数据包a11的相邻空槽中。
第二进程可以实时监听共享内存空间中的环形队列,当监听到该环形队列中增加了调用数据包1和待渲染数据1时,可以从环形队列中获取该调用数据包1和待渲染数据1,对该调用数据包1进行解析,得到接口调用信息和接口标识,根据解析得到的接口调用信息和接口标识,可以在代理动态链接库中调用上述接口2,根据接口2对待渲染数据1进行渲染处理,生成页面30e,并在游戏对页面30e进行展示,页面30e中所显示的内容为第二进程调用接口2进行渲染处理后的游戏界面元素,页面30d为第二进程对待渲染数据1进行渲染之前的游戏显示数据。换言之,该游戏未开启高分辨率时的显示内容如页面30d所示,开启高分辨率时的显示内容如页面30e所示。
请一并参见图6,图6是本申请实施例提供的一种游戏渲染的示意图。如图6所示的第一进程在虚拟机40a中运行,第二进程在游戏玩家的终端设备中运行(虚拟机外)。
如图6所示,游戏玩家在取得了一局游戏的胜利时,第一进程可以获取游戏胜利时的待渲染数据2,向代理动态链接库传输针对Direct3D中渲染功能接口3(以下简称接口3)的接口调用信息,通过代理动态链接库获取针对接口3的接口调用信息和待渲染数据2(可以理解为待渲染游戏数据),并获取接口3对应的接口标识和接口类别信息。
若从代理动态链接库中获取得到接口3的接口类别信息为异步调用接口类别(此处默认接口3不属于设置接口类别),则可以将接口3对应的接口调用信息和接口标识打包成调用数据包2,从共享内存空间的环形队列中查找空槽,当查找到槽40b为空槽时,可以将调用数据包2和待渲染数据2存储至该槽40b,如图6所示的环形队列中已经存在11个数据包,如数据包a1-a11,可以将调用数据包2和待渲染数据2存放在数据包a11的相邻空槽中。
第二进程可以实时监听共享内存空间中的环形队列,当监听到该环形队列中增加了调用数据包2和待渲染数据2时,可以从环形队列中获取该调用数据包2和待渲染数据2,对该调用数据包2进行解析,得到接口调用信息和接口标识,根据解析得到的接口调用信息和接口标识,可以在代理动态链接库中调用上述接口3,根据接口3对待渲染数据2进行渲染处理,生成页面40d,并在游戏中对页面40d进行展示,页面40d中所显示的内容为第二进程调用接口3进行渲染处理后的游戏界面元素,该页面40d也可以称为游戏结束页面,在该页面40d中可以包括胜利提示动效40e、游戏名称(例如,沙漠保卫战)以及游戏结束时的游戏显示数据,页面40c为第二进程对待渲染数据2进行渲染之前的游戏显示数据。由于接口3对待渲染数据2的调用结果只是为了提示游戏玩家本局游戏的结束场景画面,对第一进程中游戏逻辑的执行没有影响,即第一进程无需获取接口3对待渲染数据2的调用结果,因此接口3对待渲染数据2的调用结果无需返回至第一进程。
本申请实施例中,可以将游戏分离为游戏逻辑和渲染逻辑,在两个不同的进程中分别执行游戏逻辑和渲染逻辑,且游戏逻辑可以在黑盒中执行,可以有效隐藏游戏中的虚拟人物信息以及进程内存信息,进而增加外挂开发的难度,从而提高游戏的安全性;对渲染功能接口进行分类,可以根据渲染功能接口的类别确定调用该渲染功能接口的进程,可以提高渲染功能接口的调用处理效率。
请参见图7,图7是本申请实施例提供的一种游戏数据处理方法的流程示意图。可以理解地,该游戏数据处理方法可以由计算机设备执行,计算机设备可以为服务器,或者为终端设备,或者为服务器和终端设备组成的***,该计算机设备可以包括用于执行游戏逻辑的第一进程和用于执行渲染逻辑的第二进程。如图7所示,该游戏数据处理方法可以包括以下步骤:
步骤S301,当检测到第一进程中针对渲染功能接口的调用指令时,通过代理动态链接库从第一进程中获取调用指令对应的接口调用信息和待渲染游戏数据。
步骤S302,通过代理动态链接库获取渲染功能接口对应的接口标识,将接口调用信息和接口标识封装成调用数据包,获取渲染功能接口对应的接口类别信息。
其中,步骤S301-步骤S302的具体实现方式可以参见上述图4所对应实施例中对步骤S201-步骤S202的描述,这里不再进行赘述。
步骤S303,若接口类别信息为顺序调用接口类别,则通过代理动态链接库监听环形队列中的历史调用数据包的处理状态,当历史调用数据包的处理状态为已处理状态时,通过代理动态链接库将调用数据包和待渲染游戏数据存储至环形队列中的空槽。
具体的,共享内存空间可以包括环形队列,若接口类别信息为顺序调用接口类别,则需要监听共享内存空间中已经存在的历史调用数据包的处理状态,当共享内存空间的环形队列中不存在历史调用数据包,或者共享内存空间的环形队列中的历史调用数据包均为已处理状态,即第二进程已经从共享内存空间中读取了历史调用数据包时,代理动态链接库可以在环形队列中查找空槽,将调用数据包和待渲染游戏数据存储至环形队列中的空槽。
当环形队列中存在未处理的历史调用数据包时,顺序调用接口类别的渲染功能接口所对应的调用数据包和待渲染游戏数据不能直接存储至环形队列的空槽,而是需要等待环形队列中已经存在的历史调用数据包(即历史调用数据包,在当前调用数据包之前存储至环形队列中的调用数据包)被第二进程所清空,才能存储至环形队列中的空槽,并等待第二进程返回该渲染功能接口对待渲染游戏数据的调用结果。换言之,顺序调用接口类别的渲染功能接口在调用时,需要确保环形队列中不存在未处理的历史调用数据包。
可选的,若共享内存空间的环形队列中包括N(N为正整数)个未处理的历史调用数据包,则代理动态链接库需要等待上述N个未处理的历史调用数据包均被第二进程所清空,对于N个未处理的历史调用数据包中的任意两个历史调用数据包:调用数据包ai和调用数据包ai+1,调用数据包ai存储至环形队列的时间早于调用数据包ai+1存储至环形队列的时间,i为小于N的正整数。换言之,调用数据包ai在环形队列中处于调用数据包ai+1的前面位置,因此第二进程从环形队列可以先从环形队列中获取调用数据包ai,当第一进程监听到第二进程获取了调用数据包ai时,可以将调用数据包ai的处理状态确定为已处理状态;随后第二进程从环形队列可以继续从环形队列中获取调用数据包ai+1,当第一进程监听到第二进程从环形队列中获取了调用数据包ai+1,可以将调用数据包ai+1的处理状态确定为已处理状态,当N个未处理的历史调用数据包的处理状态均为已处理状态时,可以通过代理动态链接库将调用数据包和待渲染游戏数据存储至环形队列的空槽中,并继续等待第二进程返回针对上述接口调用信息和待渲染游戏数据的调用结果。通过等待环形队列中的历史调用数据包被清空,可以确保第二进程中渲染功能接口的调用顺序保持不变,使得游戏可以正常运行。
需要说明的是,在第二进程中可以同时处理多个渲染功能接口的调用过程,也可以根据调用数据包存储至环形队列的时间,依次处理渲染功能接口的调用过程。换言之,在本申请中,调用渲染功能接口对待渲染游戏数据进行渲染处理的过程可以为并行处理过程,也可以为串行处理过程,本申请不做具体限定。顺序调用接口类别的渲染功能接口所对应的接口调用信息无需传输至状态机。
步骤S304,当第二进程获取到接口调用信息和待渲染游戏数据时,在第二进程中根据接口调用信息调用渲染功能接口,根据渲染功能接口对待渲染游戏数据进行渲染处理,生成用于显示的游戏界面。
其中,步骤S304的具体实现方式可以参见上述图4所对应实施例中对步骤S204的描述,这里不再进行赘述。
步骤S305,若渲染功能接口属于顺序调用接口类别,则在第二进程中将游戏界面对应的调用结果封装为结果数据包,将结果数据包传输至共享内存空间。
步骤S306,若第一进程监听到共享内存空间中的结果数据包,则通过第一进程从共享内存空间中获取结果数据包,对结果数据包进行解析得到调用结果,在第一进程中根据调用结果继续执行后续游戏逻辑。
具体的,若渲染功能接口属于顺序调用接口类别,则在第二进程中完成对渲染功能接口的调用之后,可以将渲染功能接口对渲染游戏数据的调用结果打包成结果数据包,并将结果数据包传输至共享内存空间。由于第一进程一直在循环监听共享内存空间中的环形队列,在等待第二进程返回针对该渲染功能接口的调用结果,因此在第二进程将结果数据包传输至共享内存空间的环形队列后,第一进程可以监听到环形队列中添加了该结果数据包,并从环形队列中取出该结果数据包,对结果数据包解析之后得到调用结果,在第一进程中根据该调用结果继续执行后续游戏逻辑。
请一并参见图8,图8是本申请实施例提供的一种游戏处理流程示意图。如图8所示,以第一进程运行在虚拟机中,第二进程运行在用户所使用的终端设备上为例,对游戏处理流程进行说明。
计算机设备首先可以初始化游戏(例如,穿越火线)的运行环境,为第一进程和第一进程准备共享内存空间,该共享内存空间可以用于建立环形队列,同时初始化状态机。
为了达到监控并传输调用Direct3D的目的,需要创建一个代理d3d9.dll(即代理动态链接库),并让游戏加载,用以替换原来***的d3d9.dll(即原始动态链接库)。当游戏加载代理d3d9.dll之后,所有的Direct3D调用均会被代理d3d9.dll拦截并传输至第二进程。
当代理d3d9.dll发现第一进程调用了渲染功能接口1(例如,Direct3DCreate9接口,该接口可以为游戏调用中的第一个应用程序接口)之后,可以拦截并分析第一进程调用Direct3DCreate9时传来的调用参数1(可以称为接口调用信息),然后把调用参数1和调用ID(也可以称为接口标识)封装成调用数据包,从环形队列中找到当前队头的空槽,把封装好的调用数据包放到槽中。
从代理d3d9.dll中得知Direct3DCreate9属于顺序调用接口类别,第一进程将调用数据包放到环形队列的槽中后会进入等待状态,等待环形队列中历史调用数据包被第二进程清空,同时检查是否有返回在环形队列中的新数据。
第二进程会一直循环检查环形队列,当第一进程将调用数据包放到环形队列的槽中后,环形队列中添加了新的数据,这时第二进程就会监听到环形队列中所增加的调用数据包。第二进程从环形队列中取出调用数据包,并根据调用数据包中的调用ID和调用参数1,在第二进程中调用d3d9.dll中的Direct3DCreate9。第二进程调用结束后,会把Direct3DCreate9返回的调用结果1进行封装,将封装好的调用结果1存放至环形队列的槽中。
由于第一进程一直处于等待状态,当第二进程将封装好的调用结果1存放至环形队列的槽中,第一进程可以监听到有返回调用结果1存入环形队列。第一进程可以从环形队列中取出返回的调用结果1,并保存该调用结果1,将调用结果1返回至第一进程。
上述是对图8中调用流1的完整处理流程,在完成调用流1的处理后,可以继续对图8中的调用流2进行处理,调用流2的处理过程与调用流1的处理过程类似,这里不再进行赘述。
需要说明的是,对于第一进程而言,渲染功能接口的调用传输过程是不可见的,第一进程会以为自己是正常调用d3d9.dll中的渲染功能接口,从而保证游戏的正常运行,可以实现跨进程Direct3D异步调用。
请一并参见图9,图9是本申请实施例提供的一种游戏渲染的示意图。如图9所示的第一进程在虚拟机50a中运行,第二进程在游戏玩家的终端设备中运行(虚拟机外)。
如图9所示,游戏玩家在游戏过程中,击中了敌方阵营队员的肩部,此时的第一进程可以获取包含上述敌方阵营队员坐标的待渲染数据3,向代理动态链接库传输针对Direct3D中渲染功能接口4(以下简称接口4)的接口调用信息,通过代理动态链接库获取针对接口4的接口调用信息和待渲染数据3(可以理解为上述待渲染游戏数据),并获取接口4对应的接口标识和接口类别信息。
若从代理动态链接库中获取得到接口4的接口类别信息为顺序调用接口类别,则可以将接口4对应的接口调用信息和接口标识打包成调用数据包3,此时需要等待环形队列中已经存放的历史调用数据包被清空,当环形队列中不包含历史调用数据包时,可以在环形队列中查找与队首相邻的空槽(例如,槽50b)可以将调用数据包3和待渲染数据3存储至该槽50b。
第二进程可以实时监听共享内存空间中的环形队列,当监听到该环形队列中增加了调用数据包3和待渲染数据3时,可以从环形队列中获取该调用数据包3和待渲染数据3,对该调用数据包3进行解析,得到接口调用信息和接口标识,根据解析得到的接口调用信息和接口标识,可以在代理动态链接库中调用上述接口4,根据接口4对待渲染数据3进行渲染处理,生成页面50d,并在游戏中对页面50d进行展示,页面50d中所显示的内容为第二进程调用接口4进行渲染处理后的游戏界面元素,在该页面50d中可以包括敌方阵营队员50e肩部的伤口显示数据50f,页面50c为第二进程对待渲染数据3进行渲染之前的游戏显示数据。第二进程在完成接口4的调用后,可以将调用结果打包成结果数据包存储至环形队列中,并返回至第一进程继续执行后续渲染逻辑,当第二进程从环形队列中查找到槽50g时,可以将结果数据包存储在槽50g中。
由于第一进程一直处于等待状态,当第二进程将结果数据包存储至环形队列中时,第一进程可以监听到环形队列中增加了结果数据包,从环形队列中获取结果数据包,对结果数据包进行解析之后得到调用结果,在第一进程中可以根据该调用结果继续执行后续游戏逻辑。
请一并参见图10,图10是本申请实施例提供的一种第一进程与第二进程之间的通信示意图。如图10所示,第一进程可以用于执行游戏逻辑,在执行游戏逻辑的过程中可以产生Direct3D调用(该Direct3D调用中可以包括多个应用程序接口),也可以称为绘图编程接口中的应用程序接口流,当第一进程调用Direct3D中的渲染功能接口A时,可以判断渲染功能接口A是否为状态类函数,若渲染功能接口A为状态类函数(用于表征状态的函数,如“开”状态或“关”状态),则可以将该渲染功能接口A对应的接口调用信息记录到状态机中;状态机中包括获取和设置两个状态,当渲染功能接口A属于获取状态时(此时的渲染功能接口A属于获取接口类别),可以从状态机中获取渲染功能接口A对应的调用结果,即属于获取接口类别的渲染功能接口A可以在第一进程中完成调用过程;当渲染功能接口A属于设置状态时(此时的渲染功能接口A属于设置接口类型),可以在状态机中将接口名称和设置状态作为键值对信息进行存储,与此同时,可以将渲染功能接口A对应的接口调用信息和接口标识封装成调用数据包存放在共享内存空间的环形队列中,并返回第一进程。
若渲染功能接口A不是状态类函数,则可以进一步确定是否需要等待,当渲染功能接口A无需等待环形队列清空时(此时的渲染功能接口A属于异步调用接口类型),可以将渲染功能接口A对应的接口调用信息和接口标识封装成调用数据包存放在共享内存空间的环形队列中,并返回第一进程。
当渲染功能接口A需要等待环形队列清空时(此时的渲染功能接口A属于顺序调用接口类型),可以将渲染功能接口A对应的接口调用信息和接口标识封装成调用数据包存放在共享内存空间的环形队列中,并等待第二进程返回渲染功能接口A的调用结果。
第二进程用于执行渲染逻辑,第二进程可以一直监听环形队列,当监听到环形队列中增加的新的数据时,可以从环形队列中获取调用数据包,并在第二进程中调用渲染功能接口A,得到调用结果,将渲染生成的游戏界面元素在游戏的图形用户界面中进行展示。换言之,第二进程可以不断地从共享内存空间中读取接口调用信息,并根据接口调用信息调用相应的渲染功能接口,若第一进程需要获取调用结果,则第二进程可以将得到的调用结果存储至共享内存空间。这样可以实现在游戏逻辑和渲染逻辑分离的情形下,还能确保游戏的正常运行。
本申请实施例中,可以将游戏分离为游戏逻辑和渲染逻辑,在两个不同的进程中分别执行游戏逻辑和渲染逻辑,且游戏逻辑在黑盒中执行,可以有效隐藏游戏中的虚拟人物信息以及进程内存信息,进而增加外挂开发的难度,从而提高游戏的安全性;对渲染功能接口进行分类,可以根据渲染功能接口的类别确定调用该渲染功能接口的进程,且不同类别的渲染功能接口对应不同的通信方式,可以提高渲染功能接口的调用处理效率。
请参见图11,图11是本申请实施例提供的一种游戏数据处理装置的结构示意图。如图11所示,该游戏数据处理装置1可以包括:传输模块11,渲染模块12;
传输模块11,用于获取第一进程中针对渲染功能接口的接口调用信息以及待渲染游戏数据,在第一进程和第二进程之间传输接口调用信息以及待渲染游戏数据;第一进程是指在黑盒中运行的用于执行游戏逻辑的进程,第二进程是指在黑盒外运行的用于执行渲染逻辑的进程;
渲染模块12,用于当第二进程获取到接口调用信息和待渲染游戏数据时,在第二进程中根据接口调用信息调用渲染功能接口,根据渲染功能接口对待渲染游戏数据进行渲染处理,生成用于显示的游戏界面。
其中,传输模块11,渲染模块12的具体功能实现方式可以参见上述图3所对应实施例中的步骤S101-步骤S102,这里不再进行赘述。
请一并参见图11,传输模块11可以包括:调用拦截单元111,调用传输单元112,调用获取单元113;
调用拦截单元111,用于当检测到第一进程中针对渲染功能接口的调用指令时,通过代理动态链接库从第一进程中获取调用指令对应的接口调用信息和待渲染游戏数据;
调用传输单元112,用于通过代理动态链接库,将接口调用信息和待渲染游戏数据传输至共享内存空间;
调用获取单元113,用于若第二进程监听到共享内存空间中的接口调用信息和待渲染游戏数据,则通过第二进程从共享内存空间中获取接口调用信息和待渲染游戏数据;第一进程和第二进程均具备访问共享内存空间的权限。
其中,调用拦截单元111,调用传输单元112,调用获取单元113的具体功能实现方式可以参见上述图3所对应实施例中的步骤S101,这里不再进行赘述。
其中,共享内存空间包括环形队列;调用传输单元112可以包括:调用信息封装子单元1121,数据存储子单元1122;
调用信息封装子单元1121,用于通过代理动态链接库获取渲染功能接口对应的接口标识,将接口调用信息和接口标识封装成调用数据包,获取渲染功能接口对应的接口类别信息;
数据存储子单元1122,用于若接口类别信息为异步调用接口类别,则通过代理动态链接库将调用数据包和待渲染游戏数据存储至环形队列中的空槽。
其中,调用信息封装子单元1121,数据存储子单元1122的具体功能实现方式可以参见上述图4所对应实施例中的步骤S202-步骤S203,这里不再进行赘述。
请一并参见图11,该游戏数字处理装置1还可以包括:监听模块13,存储模块14;
监听模块13,用于若接口类别信息为顺序调用接口类别,则通过代理动态链接库监听环形队列中所包含的历史调用数据包的处理状态;
存储模块14,用于当历史调用数据包的处理状态为已处理状态时,通过代理动态链接库将调用数据包和待渲染游戏数据存储至环形队列中的空槽。
其中,历史调用数据包包括调用数据包ai和调用数据包ai+1,调用数据包ai存储至环形队列的时间早于调用数据包ai+1存储至环形队列的时间,i为小于调用数据包的数量的正整数;
该游戏数字处理装置1还可以包括:处理状态确定模块15;
处理状态确定模块15,用于通过第二进程从环形队列中获取调用数据包ai,将调用数据包ai的处理状态确定为已处理状态;
上述处理状态模块15,还用于当调用数据包ai的处理状态为已处理状态时,通过第二进程从环形队列中获取调用数据包ai+1,将调用数据包ai+1的处理状态确定为已处理状态;
上述处理状态确定模块15,还用于当调用数据包ai和调用数据包ai+1的处理状态均为已处理状态时,确定历史调用数据包的处理状态为已处理状态。
其中,监听模块13,存储模块14,处理状态确定模块15的具体功能实现方式可以参见上述图7所对应实施例中的步骤S303,这里不再进行赘述。
请一并参见图11,异步调用接口类别包括设置接口类别;数据存储子单元1122可以包括:状态机传输子单元11221,状态机存储子单元11222;
状态机传输子单元11221,用于若接口类别信息为设置接口类别,则通过动态链接库将第一进程中的接口调用信息传输至状态机,通过代理动态链接库将调用数据包和待渲染游戏数据存储至环形队列中的空槽;
状态机存储子单元11222,用于根据接口调用信息确定渲染功能接口对应的接口名称和设置状态,在状态机中将接口名称和设置状态作为键值对信息进行存储;键值对信息用于指示第一进程从状态机中获取设置状态。
其中,状态机传输子单元11221,状态机存储子单元11222的具体功能实现方式可以参见上述图4所对应实施例中的步骤S203,这里不再进行赘述。
请一并参见图11,该游戏数据处理装置1还可以包括:结果封装模块17,结果获取模块18;
结果封装模块17,用于若渲染功能接口属于顺序调用接口类别,则在第二进程中将游戏界面对应的调用结果封装为结果数据包,将结果数据包传输至共享内存空间;
结果获取模块18,用于若第一进程监听到共享内存空间中的结果数据包,则通过第一进程从共享内存空间中获取结果数据包,对结果数据包进行解析得到调用结果,在第一进程中根据调用结果继续执行后续游戏逻辑。
其中,结果封装模块17,结果获取模块18的具体功能实现方式可以参见上述图7所对应实施例中的步骤S305-步骤S306,这里不再进行赘述。
请一并参见图11,调用信息封装子单元1121可以包括:信息表获取子单元11211,遍历子单元11212,封装子单元11213;
信息表获取子单元11211,用于通过代理动态链接库获取接口调用信息表;
遍历子单元11212,用于根据接口调用信息在接口调用信息表中进行遍历,从接口调用信息表中获取与接口调用信息具有映射关系的接口标识和接口类别信息;
封装子单元11213,用于将接口调用信息和接口标识封装成调用数据包。
其中,信息表获取子单元11211,遍历子单元11212,封装子单元11213的具体功能实现方式可以参见上述图4所对应实施例中的步骤S202,这里不再进行赘述。
请一并参见图11,该游戏数据处理装置1可以包括:替换模块16;
替换模块16,用于获取与第一进程相关联的代理动态链接库,在第一进程中加载代理动态链接库,将第一进程对应的原始动态链接库替换为代理动态链接库;代理动态链接库用于将第一进程中的接口调用信息和待渲染游戏数据传输至共享内存空间。
其中,替换模块16的具体功能实现方式可以参见上述图3所对应实施例中的步骤S101,这里不再进行赘述。
请一并参见图11,调用获取单元113可以包括:数据获取子单元1131,解析子单元1132;
数据获取子单元1131,用于通过第二进程从共享内存空间中获取调用数据包和待渲染游戏数据;
解析子单元1132,用于对调用数据包进行解析,得到接口调用信息和接口标识;
则渲染模块12可以包括:接口调用单元121,显示单元122;
接口调用单元121,用于在第二进程中,根据接口调用信息和接口标识调用代理动态链接库中的渲染功能接口;
显示单元122,用于根据渲染功能接口对待渲染游戏数据进行渲染处理,生成待渲染游戏数据对应的游戏界面,在游戏应用中对游戏界面进行显示。
其中,数据获取子单元1131,解析子单元1132,接口调用单元121,显示单元122的具体功能实现方式可以参见上述图3所对应实施例中的步骤S204,这里不再进行赘述。
本申请实施例中,可以将游戏分离为游戏逻辑和渲染逻辑,在两个不同的进程中分别执行游戏逻辑和渲染逻辑,且游戏逻辑在黑盒中执行,可以有效隐藏游戏中的虚拟人物信息以及进程内存信息,进而增加外挂开发的难度,从而提高游戏的安全性;对渲染功能接口进行分类,可以根据渲染功能接口的类别确定调用该渲染功能接口的进程,且不同类别的渲染功能接口对应不同的通信方式,可以提高渲染功能接口的调用处理效率。
请参见图12,图12是本申请实施例提供的一种计算机设备的结构示意图。如图12所示,该计算机设备1000可以包括:处理器1001,网络接口1004和存储器1005,此外,上述计算机设备1000还可以包括:用户接口1003,和至少一个通信总线1002。其中,通信总线1002用于实现这些组件之间的连接通信。其中,用户接口1003可以包括显示屏(Display)、键盘(Keyboard),可选用户接口1003还可以包括标准的有线接口、无线接口。网络接口1004可选的可以包括标准的有线接口、无线接口(如WI-FI接口)。存储器1005可以是高速RAM存储器,也可以是非不稳定的存储器(non-volatile memory),例如至少一个磁盘存储器。存储器1005可选的还可以是至少一个位于远离前述处理器1001的存储装置。如图12所示,作为一种计算机可读存储介质的存储器1005中可以包括操作***、网络通信模块、用户接口模块以及设备控制应用程序。
在如图12所示的计算机设备1000中,网络接口1004可提供网络通讯功能;而用户接口1003主要用于为用户提供输入的接口;而处理器1001可以用于调用存储器1005中存储的设备控制应用程序,以实现:
获取第一进程中针对渲染功能接口的接口调用信息以及待渲染游戏数据,在第一进程和第二进程之间传输接口调用信息以及待渲染游戏数据;第一进程是指在黑盒中运行的用于执行游戏逻辑的进程,第二进程是指在黑盒外运行的用于执行渲染逻辑的进程;
当第二进程获取到接口调用信息和待渲染游戏数据时,在第二进程中根据接口调用信息调用渲染功能接口,根据渲染功能接口对待渲染游戏数据进行渲染处理,生成用于显示的游戏界面。
应当理解,本申请实施例中所描述的计算机设备1000可执行前文图3、图4以及图7任一个所对应实施例中对游戏数据处理方法的描述,也可执行前文图11所对应实施例中对游戏数据处理装置1的描述,在此不再赘述。另外,对采用相同方法的有益效果描述,也不再进行赘述。
此外,这里需要指出的是:本申请实施例还提供了一种计算机可读存储介质,且计算机可读存储介质中存储有前文提及的游戏数据处理装置1所执行的计算机程序,且计算机程序包括程序指令,当处理器执行程序指令时,能够执行前文图3、图4以及图7任一个所对应实施例中对游戏数据处理方法的描述,因此,这里将不再进行赘述。另外,对采用相同方法的有益效果描述,也不再进行赘述。对于本申请所涉及的计算机可读存储介质实施例中未披露的技术细节,请参照本申请方法实施例的描述。作为示例,程序指令可被部署在一个计算设备上执行,或者在位于一个地点的多个计算设备上执行,又或者,在分布在多个地点且通过通信网络互连的多个计算设备上执行,分布在多个地点且通过通信网络互连的多个计算设备可以组成区块链网络。
此外,需要说明的是:本申请实施例还提供了一种计算机程序产品或计算机程序,该计算机程序产品或者计算机程序可以包括计算机指令,该计算机指令可以存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器可以执行该计算机指令,使得该计算机设备执行前文图3、图4以及图7任一个所对应实施例中对游戏数据处理方法的描述,因此,这里将不再进行赘述。另外,对采用相同方法的有益效果描述,也不再进行赘述。对于本申请所涉及的计算机程序产品或者计算机程序实施例中未披露的技术细节,请参照本申请方法实施例的描述。
需要说明的是,对于前述的各个方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本申请并不受所描述的动作顺序的限制,因为依据本申请,某一些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本申请所必须的。
本申请实施例方法中的步骤可以根据实际需要进行顺序调整、合并和删减。
本申请实施例装置中的模块可以根据实际需要进行合并、划分和删减。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,计算机程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,存储介质可为磁碟、光盘、只读存储存储器(Read-Only Memory,ROM)或随机存储存储器(Random Access Memory,RAM)等。
以上所揭露的仅为本申请较佳实施例而已,当然不能以此来限定本申请之权利范围,本领域普通技术人员可以理解实现上述实施例的全部或部分流程,并依本申请权利要求所作的等同变化,仍属于发明所涵盖的范围。

Claims (13)

1.一种游戏数据处理方法,其特征在于,包括:
获取第一进程中针对渲染功能接口的接口调用信息以及待渲染游戏数据,通过共享内存空间,在所述第一进程和第二进程之间传输所述接口调用信息以及所述待渲染游戏数据;所述第一进程是指在黑盒中运行的用于执行游戏逻辑的进程,所述第二进程是指在黑盒外运行的用于执行渲染逻辑的进程,所述游戏逻辑和所述渲染逻辑属于相同的游戏,所述第一进程和所述第二进程之间的内存是相互隔离的,所述黑盒包括虚拟机或服务器,所述共享内存空间用于传输所述第一进程和所述第二进程之间的数据;
当所述第二进程在所述共享内存空间中,获取到所述接口调用信息和所述待渲染游戏数据时,在所述第二进程中根据所述接口调用信息调用所述渲染功能接口,根据所述渲染功能接口对所述待渲染游戏数据进行渲染处理,生成用于显示的游戏界面;所述渲染功能接口是指由所述第二进程所调用的用于进行绘图的应用程序接口。
2.根据权利要求1所述的方法,其特征在于,所述获取第一进程中针对渲染功能接口的接口调用信息以及待渲染游戏数据,通过共享内存空间,在所述第一进程和第二进程之间传输所述接口调用信息以及所述待渲染游戏数据,包括:
当检测到所述第一进程中针对渲染功能接口的调用指令时,通过代理动态链接库从所述第一进程中获取所述调用指令对应的接口调用信息和待渲染游戏数据;
通过所述代理动态链接库,将所述接口调用信息和所述待渲染游戏数据传输至共享内存空间;
若所述第二进程监听到所述共享内存空间中的所述接口调用信息和所述待渲染游戏数据,则通过所述第二进程从所述共享内存空间中获取所述接口调用信息和所述待渲染游戏数据;所述第一进程和所述第二进程均具备访问所述共享内存空间的权限。
3.根据权利要求2所述的方法,其特征在于,所述共享内存空间包括环形队列;
所述通过所述代理动态链接库,将所述接口调用信息和所述待渲染游戏数据传输至共享内存空间,包括:
通过所述代理动态链接库获取所述渲染功能接口对应的接口标识,将所述接口调用信息和所述接口标识封装成调用数据包,获取所述渲染功能接口对应的接口类别信息;
若所述接口类别信息为异步调用接口类别,则通过所述代理动态链接库将所述调用数据包和所述待渲染游戏数据存储至所述环形队列中的空槽。
4.根据权利要求3所述的方法,其特征在于,还包括:
若所述接口类别信息为顺序调用接口类别,则通过所述代理动态链接库监听所述环形队列中所包含的历史调用数据包的处理状态;
当所述历史调用数据包的处理状态为已处理状态时,通过所述代理动态链接库将所述调用数据包和所述待渲染游戏数据存储至所述环形队列中的空槽。
5.根据权利要求4所述的方法,其特征在于,所述历史调用数据包包括调用数据包ai和调用数据包ai+1,所述调用数据包ai存储至所述环形队列的时间早于所述调用数据包ai+1存储至所述环形队列的时间,i为小于所述调用数据包的数量的正整数;
所述方法还包括:
通过所述第二进程从所述环形队列中获取所述调用数据包ai,将所述调用数据包ai的处理状态确定为已处理状态;
当所述调用数据包ai的处理状态为已处理状态时,通过所述第二进程从所述环形队列中获取所述调用数据包ai+1,将所述调用数据包ai+1的处理状态确定为已处理状态;
当所述调用数据包ai和所述调用数据包ai+1的处理状态均为已处理状态时,确定所述历史调用数据包的处理状态为已处理状态。
6.根据权利要求3所述的方法,其特征在于,所述异步调用接口类别包括设置接口类别;
所述若所述接口类别信息为异步调用接口类别,则通过所述代理动态链接库将所述调用数据包和所述待渲染游戏数据存储至所述环形队列中的空槽,包括:
若所述接口类别信息为所述设置接口类别,则通过所述动态链接库将所述第一进程中的所述接口调用信息传输至状态机,通过所述代理动态链接库将所述调用数据包和所述待渲染游戏数据存储至所述环形队列中的空槽;
根据所述接口调用信息确定所述渲染功能接口对应的接口名称和设置状态,在所述状态机中将所述接口名称和所述设置状态作为键值对信息进行存储;所述键值对信息用于指示所述第一进程从所述状态机中获取所述设置状态。
7.根据权利要求4所述的方法,其特征在于,还包括:
若所述渲染功能接口属于所述顺序调用接口类别,则在所述第二进程中将所述游戏界面对应的调用结果封装为结果数据包,将所述结果数据包传输至所述共享内存空间;
若所述第一进程监听到所述共享内存空间中的所述结果数据包,则通过所述第一进程从所述共享内存空间中获取所述结果数据包,对所述结果数据包进行解析得到所述调用结果,在所述第一进程中根据所述调用结果继续执行后续游戏逻辑。
8.根据权利要求3所述的方法,其特征在于,所述通过所述代理动态链接库获取所述渲染功能接口对应的接口标识,将所述接口调用信息和所述接口标识封装成调用数据包,获取所述渲染功能接口对应的接口类别信息,包括:
通过所述代理动态链接库获取接口调用信息表;
根据所述接口调用信息在所述接口调用信息表中进行遍历,从所述接口调用信息表中获取与所述接口调用信息具有映射关系的接口标识和接口类别信息;
将所述接口调用信息和所述接口标识封装成所述调用数据包。
9.根据权利要求2所述的方法,其特征在于,还包括:
获取与所述第一进程相关联的所述代理动态链接库,在所述第一进程中加载所述代理动态链接库,将所述第一进程对应的原始动态链接库替换为所述代理动态链接库;所述代理动态链接库用于将所述第一进程中的所述接口调用信息和所述待渲染游戏数据传输至所述共享内存空间。
10.根据权利要求3所述的方法,其特征在于,所述通过所述第二进程从所述共享内存空间中获取所述接口调用信息和所述待渲染游戏数据;包括:
通过所述第二进程从所述共享内存空间中获取所述调用数据包和所述待渲染游戏数据;
对所述调用数据包进行解析,得到所述接口调用信息和所述接口标识;
则所述在所述第二进程中根据所述接口调用信息调用所述渲染功能接口,根据所述渲染功能接口对所述待渲染游戏数据进行渲染处理,生成用于显示的游戏界面,包括:
在所述第二进程中,根据所述接口调用信息和所述接口标识调用所述代理动态链接库中的所述渲染功能接口;
根据所述渲染功能接口对所述待渲染游戏数据进行渲染处理,生成所述待渲染游戏数据对应的游戏界面,在游戏应用中对所述游戏界面进行显示。
11.一种游戏数据处理装置,其特征在于,包括:
传输模块,用于获取第一进程中针对渲染功能接口的接口调用信息以及待渲染游戏数据,通过共享内存空间,在所述第一进程和第二进程之间传输所述接口调用信息以及所述待渲染游戏数据;所述第一进程是指在黑盒中运行的用于执行游戏逻辑的进程,所述第二进程是指在黑盒外运行的用于执行渲染逻辑的进程,所述游戏逻辑和所述渲染逻辑属于相同的游戏,所述第一进程和所述第二进程之间的内存是相互隔离的,所述黑盒包括虚拟机或服务器,所述共享内存空间用于传输所述第一进程和所述第二进程之间的数据;
渲染模块,用于当所述第二进程在所述共享内存空间中,获取到所述接口调用信息和所述待渲染游戏数据时,在所述第二进程中根据所述接口调用信息调用所述渲染功能接口,根据所述渲染功能接口对所述待渲染游戏数据进行渲染处理,生成用于显示的游戏界面;所述渲染功能接口是指由所述第二进程所调用的用于进行绘图的应用程序接口。
12.一种计算机设备,其特征在于,包括存储器和处理器,所述存储器存储有计算机程序,所述计算机程序被所述处理器执行时,所述处理器执行权利要求1至10中任一项所述方法的步骤。
13.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有计算机程序,所述计算机程序包括程序指令,所述程序指令被处理器执行时,执行权利要求1至10中任一项所述方法的步骤。
CN202010910388.4A 2020-09-02 2020-09-02 游戏数据处理方法、装置、设备以及介质 Active CN112023402B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202010910388.4A CN112023402B (zh) 2020-09-02 2020-09-02 游戏数据处理方法、装置、设备以及介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202010910388.4A CN112023402B (zh) 2020-09-02 2020-09-02 游戏数据处理方法、装置、设备以及介质

Publications (2)

Publication Number Publication Date
CN112023402A CN112023402A (zh) 2020-12-04
CN112023402B true CN112023402B (zh) 2021-07-27

Family

ID=73592239

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202010910388.4A Active CN112023402B (zh) 2020-09-02 2020-09-02 游戏数据处理方法、装置、设备以及介质

Country Status (1)

Country Link
CN (1) CN112023402B (zh)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113377451B (zh) * 2021-06-09 2024-03-12 北京千丁互联科技有限公司 应用程序重启方法、装置、计算机设备和可读存储介质
CN113515396B (zh) * 2021-07-09 2024-01-30 北京字节跳动网络技术有限公司 图形渲染方法、装置、电子设备与存储介质
CN116233520B (zh) * 2023-05-06 2023-07-25 海马云(天津)信息技术有限公司 传递和获取视频数据的方法及装置、服务器设备和存储介质

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103176854A (zh) * 2011-12-26 2013-06-26 腾讯科技(深圳)有限公司 一种进程间通信方法、装置及***
CN108595177A (zh) * 2018-04-28 2018-09-28 广东电网有限责任公司 界面开发方法及装置
CN111158866A (zh) * 2019-12-30 2020-05-15 珠海金山网络游戏科技有限公司 一种引擎***及其渲染方法
CN111544886A (zh) * 2020-04-30 2020-08-18 腾讯科技(深圳)有限公司 一种画面显示的方法以及相关装置

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102542129A (zh) * 2010-12-08 2012-07-04 杭州格诚网络科技有限公司 一种3d场景展示***
US9772889B2 (en) * 2012-10-15 2017-09-26 Famous Industries, Inc. Expedited processing and handling of events
KR102263326B1 (ko) * 2014-09-18 2021-06-09 삼성전자주식회사 그래픽 프로세싱 유닛 및 이를 이용한 그래픽 데이터 처리 방법
CN105005473B (zh) * 2015-06-29 2018-02-23 乐道互动(天津)科技有限公司 一种用于开发3d游戏的游戏引擎***
CN110362405B (zh) * 2019-07-02 2023-06-20 Oppo广东移动通信有限公司 应用程序的线程分配方法、装置、设备及可读存储介质
CN110860086B (zh) * 2019-11-08 2023-08-15 武汉微派网络科技有限公司 数据处理方法、可读存储介质和电子设备
CN111265883A (zh) * 2019-12-24 2020-06-12 武汉勾勾互娱科技有限公司 一种pc游戏反外挂***及方法

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103176854A (zh) * 2011-12-26 2013-06-26 腾讯科技(深圳)有限公司 一种进程间通信方法、装置及***
CN108595177A (zh) * 2018-04-28 2018-09-28 广东电网有限责任公司 界面开发方法及装置
CN111158866A (zh) * 2019-12-30 2020-05-15 珠海金山网络游戏科技有限公司 一种引擎***及其渲染方法
CN111544886A (zh) * 2020-04-30 2020-08-18 腾讯科技(深圳)有限公司 一种画面显示的方法以及相关装置

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
"使用 Electron 在两个进程 (主进程和渲染进程) 之间进行通讯";DemoPark;《https://segmentfault.com/a/1190000011507250》;SegmentFault论坛;20171011;1-5 *

Also Published As

Publication number Publication date
CN112023402A (zh) 2020-12-04

Similar Documents

Publication Publication Date Title
CN112023402B (zh) 游戏数据处理方法、装置、设备以及介质
EP4122568A1 (en) Data processing method and device and storage medium
CN111767503B (zh) 一种游戏数据处理方法、装置、计算机及可读存储介质
AU2019233201B2 (en) Resource configuration method and apparatus, terminal, and storage medium
US11977918B2 (en) Methods, systems and computer program products for optimizing computer system resource utilization during in-game resource farming
CN111736850B (zh) 图像处理方法、装置、服务器及介质
CN109032793B (zh) 资源配置的方法、装置、终端及存储介质
US9349201B1 (en) Command sentinel
CN107018191B (zh) 一种控制游戏的方法和装置
CN112988400B (zh) 显存优化方法、装置、电子设备以及可读存储介质
JP7412594B2 (ja) データ処理方法、データ処理装置、コンピュータ機器、及びコンピュータプログラム
CN113034629B (zh) 图像处理方法、装置、计算机设备及存储介质
CN110399214B (zh) 一种优化显卡负载的方法、装置及计算机设备
CN110968395B (zh) 一种在模拟器中处理渲染指令的方法及移动终端
CN110213265B (zh) 图像获取方法、装置、服务器及存储介质
CN115065684B (zh) 数据处理方法、装置、设备以及介质
CN115292020B (zh) 一种数据处理方法、装置、设备以及介质
CN112316433A (zh) 游戏画面渲染方法、装置、服务器和存储介质
CN115794139B (zh) 镜像数据处理方法、装置、设备以及介质
CN115955590A (zh) 视频处理方法、装置、计算机设备、介质
US20120100912A1 (en) Method of reusing physics simulation results and game service apparatus using the same
CN115512019A (zh) 渲染方法、装置以及***
US20240165513A1 (en) Data processing method and apparatus for virtual scene, electronic device, computer-readable storage medium, and computer program product
CN118312297A (zh) 云终端的渲染方法及装置
CN118092922A (zh) 图像渲染程序的编译方法、装置、设备及可读存储介质

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
REG Reference to a national code

Ref country code: HK

Ref legal event code: DE

Ref document number: 40035259

Country of ref document: HK

GR01 Patent grant
GR01 Patent grant