远程渲染方法、装置、电子设备及可读存储介质与流程
本申请涉及游戏画面渲染技术领域,具体而言,涉及一种远程渲染方法、装置、电子设备及可读存储介质。
背景技术:
传统的客户端游戏架构中,整个游戏客户端运行在用户侧设备上,为了能够流畅渲染游戏画面,用户侧设备必须有支持硬件加速的显卡,显卡的核心为gpu(graphicsprocessingunit,图形处理器),这限制了游戏客户端的广泛应用。
为了解放游戏客户端对gpu的算力需求,一些常用的做法是在云端服务器部署完整的游戏客户端及一个代理程序,该代理程序用于接收用户侧设备的控制指令并转发给游戏客户端进行处理,在渲染得到相应的游戏画面后,再将游戏画面编码成视频码流返回给用户侧设备进行解码播放。然而,这种方式的硬件成本及开发成本均非常高。
技术实现要素:
有鉴于此,本申请的目的包括提供一种远程渲染方法、装置、电子设备和可读存储介质,其能够降低游戏服务器的硬件成本及开发成本。
为了达到上述目的,本申请的实施例可以这样实现:
第一方面,本申请实施例提供一种远程渲染方法,应用于安装有游戏客户端的电子设备,所述电子设备与游戏服务器通信连接,所述方法包括:
拦截所述游戏客户端基于用户输入的控制指令发起的图形api指令序列,所述图形api指令序列包括所述游戏客户端对图形api的调用指令、调用参数及调用顺序;
按照拦截顺序将拦截的图形api指令序列发送给所述游戏服务器,使所述游戏服务器的gpu执行该图形api指令序列,得到渲染的游戏画面。
第二方面,本申请实施例提供一种远程渲染装置,应用于安装有游戏客户端的电子设备,所述电子设备与游戏服务器通信连接,所述装置包括:
拦截模块,用于拦截所述游戏客户端基于用户输入的控制指令发起的图形api指令序列,所述图形api指令序列包括所述游戏客户端对图形api的调用指令、调用参数及调用顺序;
渲染模块,用于按照拦截顺序将拦截的图形api指令序列发送给所述游戏服务器,使所述游戏服务器的gpu执行该图形api指令序列,得到渲染的游戏画面。
第三方面,本申请实施例提供一种电子设备,包括存储器、处理器及存储在所述存储器中并在所述处理器中被执行的机器可执行指令,所述机器可执行指令被所述处理器执行时实现前述实施方式中任意一项所述的远程渲染方法。
第四方面,本申请实施例提供一种可读存储介质,其上存储有机器可执行指令,所述机器可执行指令被执行时实现前述实施方式中任意一项所述的远程渲染方法。
本申请实施例的提供的一种远程渲染方法、装置、电子设备及可读存储介质,通过拦截游戏客户端基于用户输入的控制指令而发起的图形api指令序列,并按照拦截顺序将拦截的图形api指令发送给游戏服务器,使游戏服务器的gpu执行该图形api指令序列得到渲染的游戏画面,将可以由cpu处理的逻辑从游戏服务器中独立出来,并放到用户侧的电子设备运行,降低了游戏服务器的硬件成本,并且使得后续的程序升级、兼容、环境隔离等更为容易,从而降低了开发成本。
附图说明
为了更清楚地说明本申请实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本申请的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
图1为本实施例提供的一种云端游戏系统的架构示意图;
图2为本实施例提供的一个电子设备与游戏服务器内部模块的通信关系框架示意图;
图3为本实施例提供的一种电子设备的结构示意图;
图4为本实施例提供的一种远程渲染方法的流程示意图;
图5为本实施例提供的远程渲染方法的又一流程示意图;
图6为本实施例提供的远程渲染方法的又一流程示意图;
图7为本实施例提供的远程渲染装置的功能模块框图。
具体实施方式
为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本申请实施例的组件可以以各种不同的配置来布置和设计。
因此,以下对在附图中提供的本申请的实施例的详细描述并非旨在限制要求保护的本申请的范围,而是仅仅表示本申请的选定实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。此外,若出现术语“第一”、“第二”等仅用于区分描述,而不能理解为指示或暗示相对重要性。
经研究发现,游戏客户端在运行时的处理流程如下:按照游戏逻辑对用户输入的控制指令进行处理,确定该控制指令触发的游戏画面,再确定渲染该游戏画面所需的图形api(applicationprogramminginterface,应用程序编程接口),调用确定的图形api来与所在设备的底层硬件(如,gpu)的驱动程序通信,从而启动gpu的相应功能来渲染得到该游戏画面。上述处理流程中,处理控制指令以确定所需调用的图形api依赖于cpu(centralprocessingunit,中央处理器)实现,调用图形api以实现相应的渲染依赖于gpu实现。
基于上述发现,本申请实施例巧妙地将游戏客户端的处理流程解耦为cpu处理流程和gpu处理流程两部分,将cpu处理流程部署在用户侧的电子设备上,将gpu处理流程部署在服务器上,并在服务器部署渲染所需的gpu。如此,相较于现有的在服务器部署完整游戏的方式,能够在不改变服务器硬件配置的情况下减少服务器所需执行的处理操作,大大降低对服务器的性能要求。由于解耦后的程序复杂度降低,后续对程序的升级和维护也将变得更加简单。并且,按照游戏逻辑处理控制指令所需的算力较小,只需一般的电子设备(如,个人计算机、智能终端等)即可满足,因此本方案几乎不会增加用户侧的设备成本。
基于此,本申请实施例提供了一种远程渲染方法、装置、电子设备及可读存储介质,下面将对该内容进行阐述。
值得说明的是,上述对现有游戏客户端的研究和发现,及基于该发现所提出的解决方案,均是发明人在经过实践并仔细研究后得出的结果,都应该是发明人在发明过程中对本申请所作出的贡献。
请参考图1和图2,图1为本申请实施例提供的一种云端游戏系统的架构示意图。所述云端游戏系统包括多个电子设备100以及与所述多个电子设备100通信连接的游戏服务器200,图2为其中一个电子设备100和游戏服务器200的内部模块的通信关系示意图。
其中,所述电子设备100可以是任意具有数据处理功能和显示功能、且与游戏服务器200通信连接的设备,例如,笔记本电脑、平板电脑、电视机、智能终端等具备简单数据处理、视频解码播放能力,但渲染能力弱,难以直接运行大型游戏的设备。
所述电子设备100包括游戏客户端110、代理(proxy)程序120及第一图形api(applicationprogramminginterface,应用程序编程接口)库130。其中,游戏客户端110可以是基于3d(3-dimension,三维)引擎开发的3d游戏应用程序,所述3d引擎例如可以是ue4(unrealengine4,虚幻引擎4)、unity等。代理程序120设置于游戏客户端110中,换言之,游戏客户端110是代理程序120的宿主程序。
游戏服务器200包括第二图形api库230、gpu240、硬件驱动程序250以及与每个游戏客户端的代理程序通信的存根程序。例如,与图1所示的代理程序120通信的存根程序220。其中,所述gpu240可以支持硬件加速,特别地,当所述游戏客户端110是3d游戏应用时,所述gpu240可以支持3d硬件加速。
本实施例中,第一图形api库130和第二图形api库230为相同的图形api库,例如可以是opengl、directx、vulkan等,其中包括用于渲染二维、三维矢量图形的api,通过调用这些api可以与底层硬件(如,gpu)的驱动程序进行通信,从而启动底层硬件的图形处理功能。
请参照图3,图3是本实施例提供的电子设备100的示例性硬件结构示意图,电子设备100包括存储器101和处理器102,存储器101和处理器102经由系统总线103通信连接,以实现数据传输。存储器101存储有机器可执行指令,处理器102通过读取并执行该机器可执行指令,可以实现下文描述的远程渲染方法。其中,存储器101中的机器可执行指令可以包括用于实现上文描述的游戏客户端110、代理程序120及第一图形api库130的指令。
值得说明的是,图3所示的结构仅为示意,电子设备100还可以包括比图3所示更多或更少的组件,或是具有与图3所示完全不同的配置。
请参照图4,图4是本实施例提供的一种远程渲染方法的流程示意图,该远程渲染方法可以应用于图2所示的电子设备100。下面对所述远程渲染方法包括的各个步骤进行描述。
步骤41,拦截游戏客户端110基于用户输入的控制指令发起的图形api指令序列。
步骤42,按照拦截顺序将拦截的图形api指令序列发送给游戏服务器200,使游戏服务器200的gpu240执行该图形api指令序列,得到渲染的游戏画面。
在本实施例中,用户可以通过键盘、鼠标、摇杆、语音输入器件等将控制指令输入给电子设备100中的游戏客户端110,游戏客户端110按照预先设定的游戏逻辑对控制指令进行处理,可以确定与该控制指令对应的游戏画面。
例如,当用户输入用于控制游戏人物形象a抬手的控制指令c1时,控制指令c1对应的游戏画面即为游戏人物形象a抬手的画面;又如,当用户输入控制游戏人物形象a使用游戏技能t1的控制指令c2时,控制指令c2对应的游戏画面为游戏人物形象a使用游戏技能t1并产生相应特效的画面。
在确定用户输入的控制指令对应的游戏画面后,游戏客户端110可以进一步确定渲染该游戏画面所需调用的图形api及确定的图形api的调用参数,针对确定的每个图形api,可以生成用于调用该图形api的调用指令。该调用指令及对应的调用参数通常会被发给所在设备的gpu的硬件驱动程序,从而将该调用指令转换为相应的gpu指令以供gpu执行,从而渲染得到游戏画面。其中,每帧游戏画面通常需要按照一定顺序调用多个图形api才能渲染得到,因此游戏客户端110生成并发起的通常为图形api指令序列,该图形api指令序列包括多个图形api的调用指令、调用参数及所述多个图形api的调用顺序。
本实施例中,电子设备100通常不具有支持3d硬件加速的gpu,即无法执行上述的图形api指令序列。因此,本实施例通过代理程序120拦截其宿主程序(即,游戏客户端110)发起的所有图形api指令序列,具体可以通过钩子(hook)接口来进行拦截,如此,游戏客户端110发起的所有图形api指令序列将不会被发送至电子设备100的硬件驱动程序,而是会按照该hook接口中定义的处理流程来进行处理。
详细地,考虑到游戏客户端110通常是按照实际执行顺序依次发起图形api指令序列,因此通过hook接口拦截到图形api指令序列的拦截顺序即为所述实际执行顺序。则,可以在所述hook接口中定义如步骤42所示的处理流程,从而按照拦截的先后顺序,依次将拦截的每个图形api指令序列发送至游戏服务器200执行。
考虑到游戏客户端110进行图形api调用的次数非常频繁,相应地,代理程序120需要非常频繁地通过网络发送拦截的图形api指令序列,即需要进行大量的网络io(inputoutput,输入输出)操作,而游戏客户端110属于计算密集型程序,即调用线程在电子设备100的处理器102中所占负载很高,为了避免影响到电子设备100的其他线程,本实施例可以通过一个独立的网络io(inputoutput,输入输出)线程来实现对拦截的图形api指令序列的发送。
详细地,代理程序120可以将拦截的每个图形api指令序列封装任务(task),并将封装的任务按照拦截顺序添加到一工作队列中,例如,假定依次拦截到图形api指令序列s1、s2和s3,则可以分别将s1封装为task1,将s2封装成task2,将s3封装成task3,再依次将task1、task2和task3添加到工作队列中。如此,工作队列中的任务的排列顺序与各个任务中的图形api指令序列的实际需要的执行顺序一致。
在此基础上,通过一个与电子设备100中的其他线程相互独立的网络io线程来依次执行该工作队列中的任务,将每个任务中的图形api指令序列发往游戏服务器200,则既可以确保游戏服务器200接收并执行图形api指令序列的顺序与实际需要的执行顺序一致,又可以避免对电子设备100中的其他线程造成影响。
为了避免频繁地进行网络io操作,本实施例可以对拦截的图形api指令序列进行合并发送。详细地,上述独立的网络io线程在执行每个任务时,可以将该任务中的图形api指令序列处理成待发送数据包并缓存,当缓存一定间隔时长后,将该间隔时长内缓存的待发送数据包一并发往游戏服务器200。
实际应用中,游戏客户端通常会不定时地对其命令队列进行刷新(例如,通过调用opengl的gflush指令实现刷新操作),以将当前发起并缓存的所有图形api指令序列发往其所在设备的gpu的硬件驱动程序。基于此,本实施例可以将对游戏客户端110的命令队列的刷新操作作为界定上述间隔时长的触发信号,例如,电子设备100可以在检测到所述游戏客户端110的命令队列被刷新时,通过所述独立的网络io线程将当前缓存的待发送数据包一并发往游戏服务器200。
游戏客户端在渲染过程中通常会调用的一些图形api需要使用到之前调用的图形api的调用处理结果,针对这些图形api的调用指令通常为同步调用指令。因此,本实施例可以将游戏客户端110发起的同步调用指令作为界定上述间隔时长的触发信号。例如,本实施例可以在拦截到的图形api指令序列中包含同步调用指令时,将当前已缓存的所有待发送数据包发往游戏服务器200,从而使得游戏服务器200可以在执行同步调用指令前,获得该同步调用指令前的其他调用指令并执行。
此外,电子设备100可以在上述两种情况中的任意一种发生时,例如在拦截到包含同步调用指令的图形api指令序列、或者在检测到游戏客户端110的命令队列被刷新时,将当前缓存的待发送数据包一并发往游戏服务器200。
在实际应用中,由于同步调用指令的开销过大,大部分图形api的调用指令都是异步调用指令,只存在少量需要使用同步调用指令的图形api,例如,用于生成资源标识(id)的api。
游戏客户端110在发送同步调用指令及其调用参数给相应的硬件驱动程序后,会等待响应参数返回再发送后续的调用指令,但有时因为网络缓慢或故障等问题,会导致同步调用指令的响应参数的返回存在延时。经研究,网络问题通常会导致游戏服务器返回的同步调用指令的响应参数存在至少一次网络往返时延(round-triptime,rtt),这将严重影响渲染得到的游戏画面的fps(framespersecond,每秒传输帧数),从而影响游戏的视觉效果。
基于此,本实施例提供的远程渲染方法还可以包括图5所示的步骤。
步骤51,在拦截的图形api指令序列包含同步调用指令时,生成所述同步调用指令的伪响应参数返回给游戏客户端110。
步骤52,将所述伪响应参数发生给游戏服务器200,使游戏服务器200建立所述伪响应参数与所述同步调用指令的实际响应信息的对应关系并保存。
其中,所述伪响应参数可以称为存根。将生成的伪响应参数发生给游戏客户端110的步骤与将所述伪响应参数发送给游戏服务器200的步骤并没有执行顺序的限制。
本实施例中,代理程序120在拦截到包含同步调用指令的图形api指令序列时,在未执行该同步调用指令的情况下,立即向游戏客户端110返回指定信息作为针对该同步调用指令的响应参数。代理程序120返回的所述指定信息即为所述伪响应信息,其可以是预设的参数,也可以按照预先配置的指令生成的随机参数,本实施例对此没有限制。
当所述同步调用指令被发送至游戏服务器200,并被游戏服务器200执行后产生的响应参数即为所述实际响应参数。
以上述资源id生成api为例,在将包含所述资源id生成api的调用指令in1的图形api指令序列发往游戏服务器200后,代理程序120可以立即生成第一资源id返回给游戏客户端110,以及将该第一资源id发送给游戏服务器200。包含所述资源id生成api的调用指令in1的图形api指令序列将按照图4所示流程被发送至游戏服务器200,当该调用指令in1被执行后,将生成第二资源id。游戏服务器200建立该第一资源id与第二资源id的对应关系。后续过程中,当游戏服务器200接收到需要使用所述第一资源id的调用指令时,将按照建立的所述对应关系查找到所述第一资源id进行使用。
其中,第一资源id可以充当上述的伪响应参数,第二资源id可以充当上述的实际响应参数。
如此,可以减少同步调用指令所需的等待时长,降低渲染所需时长,提高游戏画面的fps,从而达到较好的游戏显示效果。
可选地,本实施例中的游戏客户端110发往游戏服务器200的流量较大,通常会耗费较长时间。为了减少通过网络传输的流量大小,电子设备100可以将待发送数据包压缩编码后再通过所述独立的网络io线程发往游戏服务器200。其中,压缩编码的方式可以是,但不限于,帧内压缩、帧间压缩等。
本实施例中,为了进一步减少通过网络传输流量大小,可以将一些变化较小或静态的调用参数预先缓存在游戏服务器200中,例如,纹理参数、材质参数着色器(shader)等。当然,这些参数也可以由游戏客户端110通过网络实时发送给游戏服务器200,本实施例对此没有限制。
本实施例中,游戏客户端110可以包括多个游戏线程,上述的图形api指令序列中通常携带了同一游戏线程发起的不同调用指令的调用顺序,因此游戏服务器200可以依照该调用顺序确保同一游戏线程发起的各个调用指令的执行顺序。然而,当不同游戏线程间存在执行顺序的限制时,由于拦截的图形api指令序列并不包含不同游戏线程的时序信息,游戏服务器200将无法确保不同游戏线程的调用指令的执行顺序正确。
为了解决上述问题,本实施例提供的远程渲染方法还可以包括图6所示的步骤,具体描述如下。
步骤61,当检测到游戏客户端110进行游戏线程切换时,在所述工作了中添加包含同步指令的同步任务。
步骤62,通过所述独立的网络io线程将所述同步任务中的所述同步指令发往游戏服务器200,使游戏服务器200的gpu240基于所述同步指令创建同步对象,并在将所述同步对象之前的图形api指令序列执行完毕时,再执行所述同步对象之后的图形api指令序列。
其中,对于具有执行顺序限制的两个游戏线程thread1和thread2,假定thread1中的调用指令需要在thread2之前执行,则游戏客户端110会先运行thread1,thread1会发起相应的图形api指令序列{x,y},然后切换至thread2,由thread2发起相应的图形api指令序列{z,m}。
基于此,当电子设备100检测到游戏客户端110的游戏线程从thread1切换至thread2时,立即生成用于创建同步对象的同步指令,并将其封装成一个任务(即,所述同步任务)添加到所述工作队列中。生成的所述同步任务将被添加到工作队列中包含图形api指令序列{x,y}的任务与包含图形api指令序列{z,m}的任务之间。
如此,游戏服务器200的gpu在开始执行调用指令x和调用指令y之后,会立即执行所述同步指令,创建所述同步对象。
其中,所述同步指令例如可以是opengl提供的eglcreatesynckhr指令,其创建的同步对象相当于在thread1发起的调用指令和thread2发起的调用指令之间设置的一个栅栏(fence)。在设置该同步对象后,gpu会通过一个等待接口(例如,eglclientwaitsynckhr)对thread2的调用指令进行阻塞,当gpu执行至所述同步对象处时,表示该栅栏之前的所有调用指令(例如,上述的x和y)均被执行完毕,从而会发给一个信号给所述等待接口,所述等待接口停止阻塞,线程thread1发起的调用指令(例如,上述的z和m)得以被gpu继续执行。
通过图6所示的步骤,可以确保游戏服务器200对不同游戏线程的调用指令的执行顺序与游戏客户端110一致。
按照上述流程,游戏服务器200可以渲染得到控制指令对应的游戏画面。在实施过程中,游戏服务器200可以捕捉渲染得到的游戏画面,并将捕捉的游戏画面编码成视频流通过存根程序220发送给游戏客户端110。游戏客户端110通过代理程序120接收所述视频流,并对所述视频流进行解码播放,即可实现对游戏客户端110的画面的远程渲染。
通过本实施例提供的远程渲染方法,实现了现有技术中游戏服务器的gpu资源和cpu资源的解耦,从而降低了对游戏服务器的cpu资源的硬件需求。
此外,现有技术中将完整的游戏客户端均运行在游戏服务器上,游戏服务器作为一个庞大的整体,对硬件的要求非常高,且软件程序体量庞大,后续维护升级非常困难。相较于现有技术,本实施例由于将游戏客户端的处理逻辑部分部署在了用户侧设备上,降低了游戏服务器一侧的程序复杂度,使得后续对游戏服务器中的程序升级、兼容、环境隔离等都变得比较容易,从而降低了对游戏服务器中程序进行开发的成本。
为了使本领域技术人员更好地理解本方案,下面结合图2所示的游戏客户端110给出一个具体示例,以对本实施例提供的远程渲染方法做进一步的阐述。
假定游戏客户端110包括上述的游戏线程thread1和thread2。其中,游戏客户端110首先运行游戏线程thread1,游戏线程thread1基于用户输入的控制指令a1发起上述的图形api指令序列{x,y},其中包括依次排列的调用指令x和y;然后从游戏线程thread1切换至游戏线程thread2,游戏线程thread2基于用户输入的控制指令a2发起上述的图形api指令序列{z,m},其中包括依次排列的调用指令z和m;游戏线程thread2基于用户输入的控制指令a3发起图形api指令序列{v,w},其中包括依次排列的调用指令v和w,且调用指令v为同步调用指令。
则,本实施例提供的远程渲染方法可以包括如下流程:
第一、游戏客户端110中设置的代理程序120拦截图形api指令序列{x,y},并将其封装成任务t1,添加到工作队列中。
第二、代理程序120检测到游戏客户端110从游戏线程thread1切换到游戏线程thread2,生成用于创建同步对象的同步指令k,将同步指令k封装成一个同步任务t2,将同步任务t2添加到工作队列中。可以理解,同步任务t2的顺序在任务t1之后。
第三、代理程序120拦截图形api指令序列{z,m},将其封装成任务t3,添加到工作队列中。当前,工作队列中依次排列有任务t1、t2和t3。
第四、通过独立的网络io线程依次执行工作队列中的任务,首先将任务t1中的图形api指令序列打包成待发送数据包data1并缓存,然后将任务t2中封装的同步指令k打包成待发送数据包data2并缓存,然后将任务t3中封装的图形api指令序列打包成待发送数据包data3并缓存。
值得说明的是,代理程序120拦截图形api指令序列并将其封装成任务添加到工作队列的操作,与通过独立的网络io线程执行工作队列中的任务的操作是并行执行的。
第五、代理程序120拦截图形api指令序列{v,w},检测到其中包含同步调用指令v,因此将当前缓存的待发送数据包data1、data2和data3发送出去,其中,待发送数据包data1、data2和data3的发送顺序与其中包含的图形api指令序列被拦截的顺序一致。
第六、代理程序120将图形api指令序列{v,w}封装成任务t4并添加到工作队列中。代理程序120将按照上述步骤四执行任务t4,并在下一次拦截到同步调用指令或游戏客户端110刷新命令队列时将任务t4对应的待发送数据包data4发往游戏服务器200。
第七、游戏服务器200通过存根程序220依次接收待发送数据包data1、data2、data3和data4,并从data1中解析出图形api指令序列{x,y},从data2中解析出同步指令k,从data3中解析出图形api指令序列{z,m},从data4中解析出图形api指令序列{v,w}。
第八、按照对解析出的指令或指令序列所在数据包的接收顺序,游戏服务器200的gpu240依次开始执行上述指令x、y、k。其中,在执行至指令k时,由于指令k为同步指令,gpu会创建一个同步对象,该同步对象可以起到阻塞作用,gpu240在该同步对象之前的全部指令被执行完毕时,再开始执行后续的指令z、m、v和w。
第九、通过执行上述指令可以不断渲染得到对应的游戏画面。游戏服务器200通过视频编码程序对渲染出的游戏画面进行捕捉,并将捕捉的游戏画面编码成视频流后返回给游戏客户端110,通过游戏客户端110所在的电子设备100显示。
请参照图7,图7示出了本实施例提供的一种远程渲染装置140,远程渲染装置140包括至少一个可以以机器可执行指令的形式存储于存储器101中的功能模块。从功能上划分,远程渲染装置140可以包括拦截模块141和渲染模块142。
拦截模块141用于拦截所述游戏客户端基于用户输入的控制指令发起的图形api指令序列,所述图形api指令序列包括所述游戏客户端对图形api的调用指令、调用参数及调用顺序。
渲染模块142用于按照拦截顺序将拦截的图形api指令序列发送给所述游戏服务器,使所述游戏服务器200的gpu执行该图形api指令序列,得到渲染的游戏画面。
可选地,所述拦截模块141还用于当检测到所述游戏客户端110进行游戏线程切换时,在所述工作队列中添加包含同步指令的同步任务,通过所述独立的网络io线程将所述同步任务中的所述同步指令发往所述游戏服务器200,使所述游戏服务器200的gpu240基于所述同步指令创建同步对象,并在将所述同步对象之前的图形api指令序列执行完毕时,再执行所述同步对象之后的图形api指令序列。
所述渲染模块142还用于在拦截的图形api指令序列包含同步调用指令时,生成所述同步调用指令的伪响应信息返回给所述游戏客户端110,以及将所述伪响应信息发送给所述游戏服务器200,使所述游戏服务器200建立所述伪响应信息与所述同步调用指令的实际响应信息的对应关系并保存。
关于上述功能模块的描述具体可以参照前文对相关步骤的详细描述。
本实施例还提供一种可读存储介质,其上存储有机器可执行指令,该机器可执行指令被执行时实现本实施例提供的远程渲染方法。
综上所述,本实施例提供一种远程渲染方法、装置、电子设备及可读存储介质,通过拦截游戏客户端基于用户输入的控制指令而发起的图形api指令序列,并按照拦截顺序将拦截的图形api指令发送给游戏服务器,使游戏服务器的gpu执行该图形api指令序列得到渲染的游戏画面,将可以由cpu处理的逻辑从游戏服务器中独立出来,并放到用户侧的电子设备运行,降低了游戏服务器的硬件成本,并且使得后续的程序升级、兼容、环境隔离等更为容易,从而降低了开发成本。
在本申请所提供的实施例中,应该理解到,所揭露的装置和方法,也可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,附图中的流程图和框图显示了根据本申请的多个实施例的装置、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现方式中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
以上所述,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以所述权利要求的保护范围为准。
起点商标作为专业知识产权交易平台,可以帮助大家解决很多问题,如果大家想要了解更多知产交易信息请点击 【在线咨询】或添加微信 【19522093243】与客服一对一沟通,为大家解决相关问题。
此文章来源于网络,如有侵权,请联系删除