CN111414150A - 游戏引擎渲染方法、装置、电子设备及计算机存储介质 - Google Patents

游戏引擎渲染方法、装置、电子设备及计算机存储介质 Download PDF

Info

Publication number
CN111414150A
CN111414150A CN201910009517.XA CN201910009517A CN111414150A CN 111414150 A CN111414150 A CN 111414150A CN 201910009517 A CN201910009517 A CN 201910009517A CN 111414150 A CN111414150 A CN 111414150A
Authority
CN
China
Prior art keywords
data
rendering
game engine
vertex
array
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.)
Granted
Application number
CN201910009517.XA
Other languages
English (en)
Other versions
CN111414150B (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.)
Xiamen Yaji Software Co Ltd
Original Assignee
Xiamen Yaji Software 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 Xiamen Yaji Software Co Ltd filed Critical Xiamen Yaji Software Co Ltd
Priority to CN201910009517.XA priority Critical patent/CN111414150B/zh
Publication of CN111414150A publication Critical patent/CN111414150A/zh
Application granted granted Critical
Publication of CN111414150B publication Critical patent/CN111414150B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/20Software design
    • G06F8/22Procedural
    • 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/60Generating or modifying game content before or while executing the game program, e.g. authoring tools specially adapted for game development or game-integrated level editor

Landscapes

  • Engineering & Computer Science (AREA)
  • Multimedia (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Image Generation (AREA)

Abstract

本申请涉及数据处理技术领域,公开了一种游戏引擎渲染方法、装置、电子设备及计算机存储介质,其中,游戏引擎渲染方法包括:当在原生平台进行web游戏引擎的渲染时,将web游戏引擎的JavaScript脚本层的渲染数据保存至预定的数据交互区;通过web游戏引擎的C++编程语言层,对保存至数据交互区的渲染数据进行渲染处理。本申请实施例的方法,使得可以在原生平台使用C++实现Web游戏引擎的渲染处理,利用C++执行效率上的优势,极大提升由Web游戏引擎制作的游戏在原生平台上的运行性能,解决了Web游戏引擎在原生平台渲染效率低下的问题,提升Web游戏引擎的渲染性能,实现了将原生渲染系统应用于Web游戏引擎的目的。

Description

游戏引擎渲染方法、装置、电子设备及计算机存储介质
技术领域
本申请涉及数据处理技术领域,具体而言,本申请涉及一种游戏引擎渲染方法、装置、电子设备及计算机存储介质。
背景技术
近年来,随着计算机硬件、CG(Computer Graphics,计算机图形)技术、Web技术的发展,Web游戏引擎以其方便的跨平台特性,越来越受到广大的游戏开发者的青睐。Web游戏引擎是由WebGL(Web Graphics Library,Web图形库)技术针对于游戏内容而开发制作的多个核心组件有机结合组成的,这些核心组件一般包括场景、音频、物理、网络、脚本等组件。其中,WebGL是可以在网络浏览器中呈现出丰富多彩的2D和3D图像的一系列JavaScriptAPI(Application Programming Interface,应用程序编程接口),开发人员可以通过调用这些API,借助系统显卡在浏览器里面流畅地运行2D或3D游戏场景。
虽然Web游戏引擎具有方便的跨平台特性,但是在游戏的开发过程中,往往需要考虑游戏内容是运行于网络浏览器平台,还是其他的原生平台,例如IOS(苹果操作系统)、Android(安卓操作系统)、Windows(微软操作系统)等原生平台。目前,Web游戏引擎也逐渐开始提供原生平台游戏的构建和发布功能,然而,本申请的发明人在具体实施过程中发现:由于各种网络浏览器存在不同的标准和兼容性问题,导致这些浏览器对WebGL标准的支持也良莠不齐,这也导致了WebGL图形API的发展、升级及渲染能力相比原生平台相对滞后;并且由于JavaScript(Java脚本)在原生平台需要基于不同的JavaScript引擎环境来运行,所以其在原生平台上的执行效率和渲染能力不如C++编程语言,虽然这一种情况有望随着硬件多核处理器的普及和多线程带来巨大的渲染性能提升而改观,但是现有的Web游戏引擎在原生平台运行仍然存在性能制约的问题,在渲染表现的能力上也并不能满足Web游戏引擎在原生平台开发和构建的需求,因此,有必要提出一种新的技术方案。
发明内容
本申请的目的旨在至少能解决上述的技术缺陷之一,特提出以下技术方案:
第一方面,提供了一种游戏引擎渲染方法,包括:
当在原生平台进行web游戏引擎的渲染时,将web游戏引擎的JavaScript脚本层的渲染数据保存至预定的数据交互区;
通过web游戏引擎的C++编程语言层,对保存至数据交互区的渲染数据进行渲染处理。
具体地,渲染数据包括各个节点模块中的场景数据信息及脏标记位、各个渲染组件模块中的资源数据信息、各个渲染数据模块中的更新后的场景数据信息。
进一步地,将web游戏引擎的JavaScript脚本层的渲染数据保存至预定的数据交互区,包括:
通过JavaScript脚本引擎创建至少一个预定类型的数组,并将渲染数据存储至至少一个预定类型的数组中;
将至少一个预定类型的数组存储至数据交互区的数据共享缓存区。
进一步地,当渲染数据包括顶点坐标数据、顶点UV坐标数据、顶点颜色数据及顶点索引数据时,通过JavaScript脚本引擎创建至少一个预定类型的数组,并将渲染数据存储至至少一个预定类型的数组中,包括:
通过JavaScript脚本引擎创建第一预定类型的数组,并依据各个顶点的预定排列顺序,将各个顶点的顶点坐标数据及顶点UV坐标数据存储至第一预定类型的数组中;以及,
通过JavaScript脚本引擎创建第二预定类型的数组,并依据预定排列顺序,将各个顶点的顶点颜色数据存储至第二预定类型的数组中;以及,
通过JavaScript脚本引擎创建第三预定类型的数组,并依据预定排列顺序,将各个顶点的顶点索引数据存储至第三预定类型的数组中。
进一步地,在将至少一个预定类型的数组存储至数据交互区的数据共享缓存区之后,还包括:
通过预定义的C++方法,将数据共享缓存区的数据对象指针,传递到C++编程语言层。
进一步地,在通过web游戏引擎的C++编程语言层,对保存至数据交互区的渲染数据进行渲染处理之前,还包括:
在C++编程语言层为JavaScript脚本层的各个节点模块分别注册对应的节点代理对象,并通过各个节点代理对象保存对应节点模块的本地坐标矩阵、世界坐标矩阵、脏标记位及对应节点模块所属的父子关系。
进一步地,通过web游戏引擎的C++编程语言层,对保存至数据交互区的渲染数据进行渲染处理,包括:
检测各个节点代理对象的脏标记位是否发生更改,以确定相对应的JavaScript脚本层的各个节点模块中的场景数据信息是否发生更改;
若任一节点代理对象的脏标记位发生更改,则对所述任一节点代理对象所对应的节点模块的场景数据信息进行更新处理,并对更新处理后的场景数据信息进行渲染处理;
若任一节点代理对象的脏标记位未发生更改,则对所述任一节点代理对象所对应的节点模块的场景数据信息进行渲染处理。
进一步地,对场景数据信息进行渲染处理,包括:
通过模型计量器对各个节点模块进行渲染批次的合并处理;
通过线程池中的多个空闲子线程,对合并处理后的同一批次的各个节点代理对象的场景数据信息,分别进行相应缓冲区的数据填充处理;
当各个空闲子线程均完成相应缓冲区的数据填充处理后,通过主线程对数据填充处理后的各个缓冲区进行刷新处理,并通过调用渲染指令对各个缓冲区中的数据进行绑定处理;
通过正向渲染对象调用预封装的原生平台渲染指令,对绑定处理后的各个缓冲区中的数据进行渲染。
第二方面,提供了一种游戏引擎渲染装置,包括:
存储模块,用于当在原生平台进行web游戏引擎的渲染时,将web游戏引擎的JavaScript脚本层的渲染数据保存至预定的数据交互区;
处理模块,用于通过web游戏引擎的C++编程语言层,对保存至数据交互区的渲染数据进行渲染处理。
具体地,渲染数据包括各个节点模块中的场景数据信息及脏标记位、各个渲染组件模块中的资源数据信息、各个渲染数据模块中的更新后的场景数据信息。
进一步地,存储模块包括第一存储子模块与第二存储子模块;
第一存储子模块,用于通过JavaScript脚本引擎创建至少一个预定类型的数组,并将渲染数据存储至至少一个预定类型的数组中;
第二存储子模块,用于将至少一个预定类型的数组存储至数据交互区的数据共享缓存区。
进一步地,当渲染数据包括顶点坐标数据、顶点UV坐标数据、顶点颜色数据及顶点索引数据时,存储模块具体用于通过JavaScript脚本引擎创建第一预定类型的数组,并依据各个顶点的预定排列顺序,将各个顶点的顶点坐标数据及顶点UV坐标数据存储至第一预定类型的数组中;以及用于通过JavaScript脚本引擎创建第二预定类型的数组,并依据预定排列顺序,将各个顶点的顶点颜色数据存储至第二预定类型的数组中;以及用于通过JavaScript脚本引擎创建第三预定类型的数组,并依据预定排列顺序,将各个顶点的顶点索引数据存储至第三预定类型的数组中。
进一步地,还包括传输模块;
传输模块,用于通过预定义的C++方法,将数据共享缓存区的数据对象指针,传递到C++编程语言层。
进一步地,还包括注册模块;
注册模块,用于在C++编程语言层为JavaScript脚本层的各个节点模块分别注册对应的节点代理对象,并通过各个节点代理对象保存对应节点模块的本地坐标矩阵、世界坐标矩阵、脏标记位及对应节点模块所属的父子关系。
进一步地,处理模块包括检测子模块与渲染处理子模块;
检测子模块,用于检测各个节点代理对象的脏标记位是否发生更改,以确定所对应的JavaScript脚本层的各个节点模块中的场景数据信息是否发生更改;
渲染处理子模块,用于当任一节点代理对象的脏标记位发生更改时,对任一节点代理对象所对应节点模块的场景数据信息进行更新处理,并对更新处理后的场景数据信息进行渲染处理;以及用于当任一节点代理对象的脏标记位未发生更改时,对任一节点代理对象所对应的节点模块的场景数据信息进行渲染处理。
进一步地,渲染处理子模块具体用于通过模型计量器对各个节点模块进行渲染批次的合并处理;以及用于通过线程池中的多个空闲子线程,对合并处理后的同一批次的各个节点代理对象的场景数据信息,分别进行相应缓冲区的数据填充处理;以及用于当各个空闲子线程均完成相应缓冲区的数据填充处理后,通过主线程对数据填充处理后的各个缓冲区进行刷新处理,并通过调用渲染指令对各个缓冲区中的数据进行绑定处理;以及用于通过正向渲染对象调用预封装的原生平台渲染指令,对绑定处理后的各个缓冲区中的数据进行渲染。
第三方面,提供了一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行所述程序时实现上述的游戏引擎渲染方法。
第四方面,提供了一种计算机可读存储介质,计算机可读存储介质上存储有计算机程序,该程序被处理器执行时实现上述的游戏引擎渲染方法。
本申请实施例提供的游戏引擎渲染方法,通过将web游戏引擎的JavaScript脚本层的渲染数据保存至预定的数据交互区以及通过web游戏引擎的C++编程语言层,对保存至数据交互区的渲染数据进行渲染处理,不仅使得可以在原生平台使用C++实现Web游戏引擎的渲染处理,而且利用C++执行效率上的优势,极大提升由Web游戏引擎制作的游戏在原生平台上的运行性能,解决了Web游戏引擎在原生平台渲染效率低下的问题,同时也可以利用原生平台的图形渲染API,提升Web游戏引擎的渲染表现及渲染性能,从而实现了将原生渲染系统应用于Web游戏引擎的目的。
本申请附加的方面和优点将在下面的描述中部分给出,这些将从下面的描述中变得明显,或通过本申请的实践了解到。
附图说明
本申请上述的和/或附加的方面和优点从下面结合附图对实施例的描述中将变得明显和容易理解,其中:
图1为本申请实施例的游戏引擎渲染方法的流程示意图;
图2为本申请实施例的游戏引擎渲染方法的JavaScript脚本层与C++编程语言层的示意图;
图3为本申请实施例的游戏引擎渲染方法的将渲染数据存储至预定类型的数组的示意图;
图4为本申请实施例的游戏引擎渲染方法的基于JavaScript脚本层与C++编程语言层的数据交互进行渲染处理的过程示意图;
图5为本申请实施例的游戏引擎渲染装置的基本结构示意图;
图6为本申请实施例的游戏引擎渲染装置的详细结构示意图;
图7为本申请实施例的电子设备的结构示意图。
具体实施方式
下面详细描述本申请的实施例,所述实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施例是示例性的,仅用于解释本申请,而不能解释为对本申请的限制。
本技术领域技术人员可以理解,除非特意声明,这里使用的单数形式“一”、“一个”、“所述”和“该”也可包括复数形式。应该进一步理解的是,本申请的说明书中使用的措辞“包括”是指存在所述特征、整数、步骤、操作、元件和/或组件,但是并不排除存在或添加一个或多个其他特征、整数、步骤、操作、元件、组件和/或它们的组。应该理解,当我们称元件被“连接”或“耦接”到另一元件时,它可以直接连接或耦接到其他元件,或者也可以存在中间元件。此外,这里使用的“连接”或“耦接”可以包括无线连接或无线耦接。这里使用的措辞“和/或”包括一个或更多个相关联的列出项的全部或任一单元和全部组合。
为使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请实施方式作进一步地详细描述。
下面以具体地实施例对本申请的技术方案以及本申请的技术方案如何解决上述技术问题进行详细说明。下面这几个具体的实施例可以相互结合,对于相同或相似的概念或过程可能在某些实施例中不再赘述。下面将结合附图,对本申请的实施例进行描述。
实施例一
本申请实施例提供了一种游戏引擎渲染方法,如图1所示,包括:步骤S110,当在原生平台进行web游戏引擎的渲染时,将web游戏引擎的JavaScript脚本层的渲染数据保存至预定的数据交互区;步骤S120,通过web游戏引擎的C++编程语言层,对保存至数据交互区的渲染数据进行渲染处理。
其中,可以将整个Web游戏引擎切分成JavaScript脚本层和C++编程语言层,然后通过这两个层之间的渲染数据的交互,在原生平台中使用C++实现Web游戏引擎的渲染处理,从而将原生渲染系统应用于Web游戏引擎。
本申请实施例提供的游戏引擎渲染方法,与现有技术相比,通过将web游戏引擎的JavaScript脚本层的渲染数据保存至预定的数据交互区以及通过web游戏引擎的C++编程语言层,对保存至数据交互区的渲染数据进行渲染处理,不仅使得可以在原生平台使用C++实现Web游戏引擎的渲染处理,而且利用C++执行效率上的优势,极大提升由Web游戏引擎制作的游戏在原生平台上的运行性能,解决了Web游戏引擎在原生平台渲染效率低下的问题,同时也可以利用原生平台的图形渲染API,提升Web游戏引擎的渲染表现及渲染性能,从而实现了将原生渲染系统应用于Web游戏引擎的目的。
本申请实施例提供了另一种可能的实现方式,其中,渲染数据包括各个节点模块中的场景数据信息及脏标记位、各个渲染组件模块中的资源数据信息、各个渲染数据模块中的更新后的场景数据信息。
具体地,将web游戏引擎的JavaScript脚本层的渲染数据保存至预定的数据交互区,包括:
通过JavaScript脚本引擎创建至少一个预定类型的数组,并将渲染数据存储至至少一个预定类型的数组中;
将至少一个预定类型的数组存储至数据交互区的数据共享缓存区。
具体地,当渲染数据包括顶点坐标数据、顶点UV坐标数据、顶点颜色数据及顶点索引数据时,通过JavaScript脚本引擎创建至少一个预定类型的数组,并将渲染数据存储至至少一个预定类型的数组中,包括:
通过JavaScript脚本引擎创建第一预定类型的数组,并依据各个顶点的预定排列顺序,将各个顶点的顶点坐标数据及顶点UV坐标数据存储至第一预定类型的数组中;以及,通过JavaScript脚本引擎创建第二预定类型的数组,并依据预定排列顺序,将各个顶点的顶点颜色数据存储至第二预定类型的数组中;以及,通过JavaScript脚本引擎创建第三预定类型的数组,并依据预定排列顺序,将各个顶点的顶点索引数据存储至第三预定类型的数组中。
具体地,在将至少一个预定类型的数组存储至数据交互区的数据共享缓存区之后,还包括:
通过预定义的C++方法,将数据共享缓存区的数据对象指针,传递到C++编程语言层。
具体地,为保证Web游戏引擎上层面向用户开发的统一性,将场景的节点树、节点与组件等渲染数据与渲染逻辑层剥离,依然保留在JavaScript脚本层实现,并将渲染逻辑的实现由C++编程语言层来负责,即通过C++编程语言层实现一种高效的、易于扩展的原生渲染引擎,从而确保Web游戏在原生平台上具有优秀的渲染表现。
在实际应用中,可以将节点模块、渲染组件模块和渲染数据模块包含在JavaScript脚本层中,而将渲染逻辑交由C++编程语言层处理,其中,JavaScript脚本层与C++编程语言层的划分如图2所示,图2中的OpenGL为开放图形库,Metal是一种低层次的渲染应用程序编程接口,提供了软件所需的最低层,保证软件可以运行在不同的图形芯片上,Direct 3D是基于微软的通用对象模式COM(Common Object Mode)的3D图形API,Vulkan是一个跨平台的2D和3D绘图应用程序接口。
其中,上述各个节点模块用于存放场景数据信息,比如位置、旋转、缩放、纹理、颜色、文字和透明度等数据信息,渲染组件模块则会记录渲染时需要用到的图片、文字、纹理等资源数据,渲染数据模块则包含了更新后的场景的数据信息。其中,当任一节点模块中的数据信息发生改变时,会修改该任一节点模块的脏标记位,以便在后续渲染处理时进行判断更新。
具体地,当渲染数据由上述节点模块、渲染组件模块及渲染数据模块处理完毕后,可以通过JavaScript脚本引擎创建预定类型的数组,并将渲染数据存储至数据交互区中的数据共享缓存区中,即将渲染数据转入数据交互区中,以便通过数据交互区将JavaScript脚本层的渲染数据传递到C++编程语言层进行渲染处理。其中,为提高渲染系统在数据传递时的性能,通过共享内存的方式进行数据传递。此外,JavaScript脚本层的节点模块的RTS(Request To Send,请求发送数据)数据、旋转数据、位移数据及缩放数据等,也同样通过共享内存的方式从JavaScript脚本层的节点模块传递到C++层。
进一步地,在JavaScript脚本层的节点模块中保存的渲染数据主要包括顶点坐标数据、顶点UV坐标数据、顶点颜色数据以及顶点索引数据。当JavaScript脚本层的渲染数据更新完毕之后,首先通过JavaScript脚本引擎创建预定类型的数组,并将上述渲染数据填充到创建好的预定类型的数组中,接着在C++编程语言层通过该预定类型的数组获取顶点坐标数据、顶点UV坐标数据、顶点颜色数据以及顶点索引数据。具体的填充方式如图3所示,由于顶点坐标数据跟顶点颜色数据的数据格式不同,顶点数据的缓存区可以分为两部分进行填充。例如,首先创建Float32Array(浮点型32位数组),并按照各个顶点的预定排列顺序对各个顶点的顶点坐标数据和顶点UV坐标数据依次进行填充,接着,在填充完顶点坐标数据及顶点UV坐标数据之后,创建Uint32Array(无符号整型32位数组),并按照上述各个顶点的预定排列顺序进行顶点颜色数据的填充,接着创建Uint16Array(无符号整型16位数组),并按照上述各个顶点的预定排列顺序,进行各个顶点索引数据的对应填充。
进一步地,当完成数据填充之后,则将数据共享缓存区的数据对象指针通过注册好的C++方法传递到C++编程语言层。
本申请实施例提供了另一种可能的实现方式,其中,在步骤S120之前还包括步骤S111(图中未标注):在C++编程语言层为JavaScript脚本层的各个节点模块分别注册对应的节点代理对象,并通过各个节点代理对象保存对应节点模块的本地坐标矩阵、世界坐标矩阵、脏标记位及对应节点模块所属的父子关系。
其中,通过web游戏引擎的C++编程语言层,对保存至数据交互区的渲染数据进行渲染处理,包括:
检测各个节点代理对象的脏标记位是否发生更改,以确定所对应的JavaScript脚本层的各个节点模块中的场景数据信息是否发生更改;
若任一节点代理对象的脏标记位发生更改,则对任一节点代理对象所对应的节点模块的场景数据信息进行更新处理,并对更新处理后的场景数据信息进行渲染处理;
若任一节点代理对象的脏标记位未发生更改,则对任一节点代理对象所对应的节点模块的场景数据信息进行渲染处理。
对场景数据信息进行渲染处理,包括:
通过模型计量器对各个节点模块进行渲染批次的合并处理;
通过线程池中的多个空闲子线程,对合并处理后的同一批次的各个节点代理对象的场景数据信息,分别进行相应缓冲区的数据填充处理;
当各个空闲子线程均完成相应缓冲区的数据填充处理后,通过主线程对数据填充处理后的各个缓冲区进行刷新处理,并通过调用渲染指令对各个缓冲区中的数据进行绑定处理;
通过正向渲染对象调用预封装的原生平台渲染指令,对绑定处理后的各个缓冲区中的数据进行渲染。
具体地,在C++编程语言层为JavaScript脚本层的每个节点模块分别注册一个对应的节点代理(NodeProxy)对象,各个节点代理对象分别保存JavaScript脚本层中的对应节点模块所属的父子关系、本地坐标矩阵、世界坐标矩阵及脏标记位等信息。其中,当JavaScript脚本层的任一节点模块中的数据发生改变时,会通知注册好的相对应的节点代理对象。
进一步地,当渲染管线中的RenderFlow(渲染流)进行每帧渲染循环时,会对场景树的节点模块进行遍历,并更新节点模块所挂接的渲染组件的渲染数据,其中,JavaScript脚本层的渲染数据需要传递至C++编程语言层进行渲染,如图4所示。
其中,C++编程语言层在渲染开始时会遍历场景的节点树,当任一节点模块的脏标记位发生改变时,则重新更新节该任一节点模块中发生改变的场景数据信息,接着对更新处理后的场景数据信息进行渲染处理,当任一节点模块的脏标记位发生改变时,对该任一节点模块的原有场景数据信息进行渲染处理。
进一步地,采用如下方式对任一节点模块的更新处理后的场景数据信息进行渲染处理,或者对任一节点模块的原有场景数据信息进行渲染处理:
通过ModelBatcher(模型计量器)对象对各个节点模块进行渲染批次的合并处理,其中,ModelBatcher通过判断各个节点模块的材质、纹理、缓冲区的填充格式及着色器等渲染状态的一致性,确定各个节点模块的渲染批次,批量进行绘制指令的回调,从而减少渲染指令的调用次数及不必要的性能损耗。接着,将经过批次合并之后的各个节点模块的场景数据信息,利用多线程的方式进行缓冲区数据的填充,其中,利用线程池中预先创建的空闲子线程进行填充数据,并记录同一批次的节点模块的顶点数据的填充MeshBuffer(风格缓冲区)的位置偏移,同时将上述数据交互区中填充好的顶点数据,通过数据拷贝的方式进行MeshBuffer的并行拷贝处理。主线程在所有子线程执行完毕之后,再次进行刷新操作,即对数据填充处理后的各个缓冲区进行刷新处理,接着调用渲染指令对各个缓冲区中的数据进行绑定处理,其中,多线程的处理方式利用原生平台的优势,提高了节点模块的渲染数据的填充效率,避免CPU(Central Processing Unit,中央处理器)的空闲等待时间,整体提高了原生渲染引擎的性能。在对各个缓冲区中的数据绑定处理完毕后,由ForwardRender(正向渲染)对象调用封装好的原生平台渲染指令,进行渲染绘制,最终绘制出场景。
实施例二
图5为本申请实施例提供的一种游戏引擎渲染装置的结构示意图,如图5所示,该装置50可以包括存储模块51与处理模块52,其中:
存储模块51用于当在原生平台进行web游戏引擎的渲染时,将web游戏引擎的JavaScript脚本层的渲染数据保存至预定的数据交互区;
处理模块52用于通过web游戏引擎的C++编程语言层,对保存至数据交互区的渲染数据进行渲染处理。
具体地,渲染数据包括各个节点模块中的场景数据信息及脏标记位、各个渲染组件模块中的资源数据信息、各个渲染数据模块中的更新后的场景数据信息。
进一步地,存储模块51包括第一存储子模块511与第二存储子模块512,如图6所示,其中:
第一存储子模块511用于通过JavaScript脚本引擎创建至少一个预定类型的数组,并将渲染数据存储至至少一个预定类型的数组中;
第二存储子模块512用于将至少一个预定类型的数组存储至数据交互区的数据共享缓存区。
进一步地,当渲染数据包括顶点坐标数据、顶点UV坐标数据、顶点颜色数据及顶点索引数据时,存储模块51具体用于通过JavaScript脚本引擎创建第一预定类型的数组,并依据各个顶点的预定排列顺序,将各个顶点的顶点坐标数据及顶点UV坐标数据存储至第一预定类型的数组中;以及用于通过JavaScript脚本引擎创建第二预定类型的数组,并依据预定排列顺序,将各个顶点的顶点颜色数据存储至第二预定类型的数组中;以及用于通过JavaScript脚本引擎创建第三预定类型的数组,并依据预定排列顺序,将各个顶点的顶点索引数据存储至第三预定类型的数组中。
进一步地,还包括传输模块53,如图6所示,其中:
传输模块53用于通过预定义的C++方法,将数据共享缓存区的数据对象指针,传递到C++编程语言层。
进一步地,还包括注册模块54,如图6所示,其中:
注册模块54用于在C++编程语言层为JavaScript脚本层的各个节点模块分别注册对应的节点代理对象,并通过各个节点代理对象保存对应节点模块的本地坐标矩阵、世界坐标矩阵、脏标记位及对应节点模块所属的父子关系。
进一步地,处理模块52包括检测子模块521与渲染处理子模块522,如图6所示,其中:
检测子模块521用于检测各个节点代理对象的脏标记位是否发生更改,以确定所对应的JavaScript脚本层的各个节点模块中的场景数据信息是否发生更改;
渲染处理子模块522用于当任一节点代理对象的脏标记位发生更改时,对任一节点代理对象所对应节点模块的场景数据信息进行更新处理,并对更新处理后的场景数据信息进行渲染处理;以及用于当任一节点代理对象的脏标记位未发生更改时,对任一节点代理对象所对应的节点模块的场景数据信息进行渲染处理。
进一步地,渲染处理子模块522具体用于通过模型计量器对各个节点模块进行渲染批次的合并处理;以及用于通过线程池中的多个空闲子线程,对合并处理后的同一批次的各个节点代理对象的场景数据信息,分别进行相应缓冲区的数据填充处理;以及用于当各个空闲子线程均完成相应缓冲区的数据填充处理后,通过主线程对数据填充处理后的各个缓冲区进行刷新处理,并通过调用渲染指令对各个缓冲区中的数据进行绑定处理;以及用于通过正向渲染对象调用预封装的原生平台渲染指令,对绑定处理后的各个缓冲区中的数据进行渲染。
本申请实施例提供的装置,与现有技术相比,通过将web游戏引擎的JavaScript脚本层的渲染数据保存至预定的数据交互区以及通过web游戏引擎的C++编程语言层,对保存至数据交互区的渲染数据进行渲染处理,不仅使得可以在原生平台使用C++实现Web游戏引擎的渲染处理,而且利用C++执行效率上的优势,极大提升由Web游戏引擎制作的游戏在原生平台上的运行性能,解决了Web游戏引擎在原生平台渲染效率低下的问题,同时也可以利用原生平台的图形渲染API,提升Web游戏引擎的渲染表现及渲染性能,从而实现了将原生渲染系统应用于Web游戏引擎的目的。
实施例三
本申请实施例提供了一种电子设备,如图7所示,图7所示的电子设备700包括:处理器701和存储器703。其中,处理器701和存储器703相连,如通过总线702相连。进一步地,电子设备700还可以包括收发器704。需要说明的是,实际应用中收发器704不限于一个,该电子设备700的结构并不构成对本申请实施例的限定。
其中,处理器701应用于本申请实施例中,用于实现图5或图6所示的存储模块与处理模块的功能,以及图6所示的传输模块与注册模块的功能。
处理器701可以是CPU,通用处理器,DSP,ASIC,FPGA或者其他可编程逻辑器件、晶体管逻辑器件、硬件部件或者其任意组合。其可以实现或执行结合本申请公开内容所描述的各种示例性的逻辑方框,模块和电路。处理器701也可以是实现计算功能的组合,例如包含一个或多个微处理器组合,DSP和微处理器的组合等。
总线702可包括一通路,在上述组件之间传送信息。总线702可以是PCI总线或EISA总线等。总线702可以分为地址总线、数据总线、控制总线等。为便于表示,图7中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
存储器703可以是ROM或可存储静态信息和指令的其他类型的静态存储设备,RAM或者可存储信息和指令的其他类型的动态存储设备,也可以是EEPROM、CD-ROM或其他光盘存储、光碟存储(包括压缩光碟、激光碟、光碟、数字通用光碟、蓝光光碟等)、磁盘存储介质或者其他磁存储设备、或者能够用于携带或存储具有指令或数据结构形式的期望的程序代码并能够由计算机存取的任何其他介质,但不限于此。
存储器703用于存储执行本申请方案的应用程序代码,并由处理器701来控制执行。处理器701用于执行存储器703中存储的应用程序代码,以实现图5或图6所示实施例提供的游戏引擎渲染装置的动作。
本申请实施例提供的电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行程序时,与现有技术相比,可实现:通过将web游戏引擎的JavaScript脚本层的渲染数据保存至预定的数据交互区以及通过web游戏引擎的C++编程语言层,对保存至数据交互区的渲染数据进行渲染处理,不仅使得可以在原生平台使用C++实现Web游戏引擎的渲染处理,而且利用C++执行效率上的优势,极大提升由Web游戏引擎制作的游戏在原生平台上的运行性能,解决了Web游戏引擎在原生平台渲染效率低下的问题,同时也可以利用原生平台的图形渲染API,提升Web游戏引擎的渲染表现及渲染性能,从而实现了将原生渲染系统应用于Web游戏引擎的目的。
本申请实施例提供了一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该程序被处理器执行时实现实施例一所示的方法。与现有技术相比,通过将web游戏引擎的JavaScript脚本层的渲染数据保存至预定的数据交互区以及通过web游戏引擎的C++编程语言层,对保存至数据交互区的渲染数据进行渲染处理,不仅使得可以在原生平台使用C++实现Web游戏引擎的渲染处理,而且利用C++执行效率上的优势,极大提升由Web游戏引擎制作的游戏在原生平台上的运行性能,解决了Web游戏引擎在原生平台渲染效率低下的问题,同时也可以利用原生平台的图形渲染API,提升Web游戏引擎的渲染表现及渲染性能,从而实现了将原生渲染系统应用于Web游戏引擎的目的。
本申请实施例提供的计算机可读存储介质适用于上述方法的任一实施例。在此不再赘述。
应该理解的是,虽然附图的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,其可以以其他的顺序执行。而且,附图的流程图中的至少一部分步骤可以包括多个子步骤或者多个阶段,这些子步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,其执行顺序也不必然是依次进行,而是可以与其他步骤或者其他步骤的子步骤或者阶段的至少一部分轮流或者交替地执行。
以上所述仅是本申请的部分实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本申请原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本申请的保护范围。

Claims (11)

1.一种游戏引擎渲染方法,其特征在于,包括:
当在原生平台进行web游戏引擎的渲染时,将所述web游戏引擎的JavaScript脚本层的渲染数据保存至预定的数据交互区;
通过所述web游戏引擎的C++编程语言层,对保存至所述数据交互区的渲染数据进行渲染处理。
2.根据权利要求1所述的方法,其特征在于,所述渲染数据包括各个节点模块中的场景数据信息及脏标记位、各个渲染组件模块中的资源数据信息、各个渲染数据模块中的更新后的场景数据信息。
3.根据权利要求1所述的方法,其特征在于,将所述web游戏引擎的JavaScript脚本层的渲染数据保存至预定的数据交互区,包括:
通过JavaScript脚本引擎创建至少一个预定类型的数组,并将所述渲染数据存储至所述至少一个预定类型的数组中;
将所述至少一个预定类型的数组存储至所述数据交互区的数据共享缓存区。
4.根据权利要求3所述的方法,其特征在于,当所述渲染数据包括顶点坐标数据、顶点UV坐标数据、顶点颜色数据及顶点索引数据时,所述通过JavaScript脚本引擎创建至少一个预定类型的数组,并将所述渲染数据存储至所述至少一个预定类型的数组中,包括:
通过JavaScript脚本引擎创建第一预定类型的数组,并依据各个顶点的预定排列顺序,将各个顶点的顶点坐标数据及顶点UV坐标数据存储至所述第一预定类型的数组中;以及,
通过JavaScript脚本引擎创建第二预定类型的数组,并依据所述预定排列顺序,将各个顶点的顶点颜色数据存储至所述第二预定类型的数组中;以及,
通过JavaScript脚本引擎创建第三预定类型的数组,并依据所述预定排列顺序,将各个顶点的顶点索引数据存储至所述第三预定类型的数组中。
5.根据权利要求3或4所述的方法,其特征在于,在所述将所述至少一个预定类型的数组存储至所述数据交互区的数据共享缓存区之后,还包括:
通过预定义的C++方法,将所述数据共享缓存区的数据对象指针,传递到所述C++编程语言层。
6.根据权利要求1所述的方法,其特征在于,在所述通过所述web游戏引擎的C++编程语言层,对保存至所述数据交互区的渲染数据进行渲染处理之前,还包括:
在所述C++编程语言层为所述JavaScript脚本层的各个节点模块分别注册对应的节点代理对象,并通过各个节点代理对象保存对应节点模块的本地坐标矩阵、世界坐标矩阵、脏标记位及对应节点模块所属的父子关系。
7.根据权利要求6所述的方法,其特征在于,所述通过所述web游戏引擎的C++编程语言层,对保存至所述数据交互区的渲染数据进行渲染处理,包括:
检测各个节点代理对象的脏标记位是否发生更改,以确定所对应的JavaScript脚本层的各个节点模块中的场景数据信息是否发生更改;
若任一节点代理对象的脏标记位发生更改,则对所述任一节点代理对象所对应节点模块的场景数据信息进行更新处理,并对更新处理后的场景数据信息进行渲染处理;
若任一节点代理对象的脏标记位未发生更改,则对所述任一节点代理对象所对应的节点模块的场景数据信息进行渲染处理。
8.根据权利要求7所述的方法,其特征在于,对场景数据信息进行渲染处理,包括:
通过模型计量器对各个节点模块进行渲染批次的合并处理;
通过线程池中的多个空闲子线程,对合并处理后的同一批次的各个节点代理对象的场景数据信息,分别进行相应缓冲区的数据填充处理;
当各个空闲子线程均完成相应缓冲区的数据填充处理后,通过主线程对数据填充处理后的各个缓冲区进行刷新处理,并通过调用渲染指令对所述各个缓冲区中的数据进行绑定处理;
通过正向渲染对象调用预封装的原生平台渲染指令,对所述绑定处理后的各个缓冲区中的数据进行渲染。
9.一种游戏引擎渲染装置,其特征在于,包括:
存储模块,用于当在原生平台进行web游戏引擎的渲染时,将所述web游戏引擎的JavaScript脚本层的渲染数据保存至预定的数据交互区;
处理模块,用于通过所述web游戏引擎的C++编程语言层,对保存至所述数据交互区的渲染数据进行渲染处理。
10.一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现权利要求1-8任一项所述的游戏引擎渲染方法。
11.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有计算机程序,该程序被处理器执行时实现权利要求1-8任一项所述的游戏引擎渲染方法。
CN201910009517.XA 2019-01-04 2019-01-04 游戏引擎渲染方法、装置、电子设备及计算机存储介质 Active CN111414150B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201910009517.XA CN111414150B (zh) 2019-01-04 2019-01-04 游戏引擎渲染方法、装置、电子设备及计算机存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201910009517.XA CN111414150B (zh) 2019-01-04 2019-01-04 游戏引擎渲染方法、装置、电子设备及计算机存储介质

Publications (2)

Publication Number Publication Date
CN111414150A true CN111414150A (zh) 2020-07-14
CN111414150B CN111414150B (zh) 2022-10-11

Family

ID=71494059

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201910009517.XA Active CN111414150B (zh) 2019-01-04 2019-01-04 游戏引擎渲染方法、装置、电子设备及计算机存储介质

Country Status (1)

Country Link
CN (1) CN111414150B (zh)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113181657A (zh) * 2021-04-30 2021-07-30 北京读我网络技术有限公司 一种跨平台渲染方法及装置
CN113694536A (zh) * 2021-09-07 2021-11-26 北京蔚领时代科技有限公司 一种面向云游戏的场景管理方法、装置、设备及介质
WO2022032486A1 (zh) * 2020-08-11 2022-02-17 厦门雅基软件有限公司 三维游戏渲染方法、三维引擎、电子设备及可读存储介质

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20050060641A1 (en) * 1999-09-16 2005-03-17 Sezan Muhammed Ibrahim Audiovisual information management system with selective updating
CN105005473A (zh) * 2015-06-29 2015-10-28 乐道互动(天津)科技有限公司 一种用于开发3d游戏的游戏引擎系统
CN105184847A (zh) * 2015-10-16 2015-12-23 上海恺英网络科技有限公司 3d游戏渲染引擎的渲染方法
CN106445508A (zh) * 2013-07-30 2017-02-22 广州爱九游信息技术有限公司 一种游戏引擎
CN108572818A (zh) * 2017-03-08 2018-09-25 阿里巴巴集团控股有限公司 一种用户界面渲染方法及装置

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20050060641A1 (en) * 1999-09-16 2005-03-17 Sezan Muhammed Ibrahim Audiovisual information management system with selective updating
CN106445508A (zh) * 2013-07-30 2017-02-22 广州爱九游信息技术有限公司 一种游戏引擎
CN105005473A (zh) * 2015-06-29 2015-10-28 乐道互动(天津)科技有限公司 一种用于开发3d游戏的游戏引擎系统
CN105184847A (zh) * 2015-10-16 2015-12-23 上海恺英网络科技有限公司 3d游戏渲染引擎的渲染方法
CN108572818A (zh) * 2017-03-08 2018-09-25 阿里巴巴集团控股有限公司 一种用户界面渲染方法及装置

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
C92的博客: "javascript高仿热血传奇游戏", 《CSDN博客HTTPS://BLOG.CSDN.NET/WEIXIN_41754545/ARTICLE/DETAILS/79357204》, 23 February 2018 (2018-02-23), pages 1 - 9 *

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2022032486A1 (zh) * 2020-08-11 2022-02-17 厦门雅基软件有限公司 三维游戏渲染方法、三维引擎、电子设备及可读存储介质
CN113181657A (zh) * 2021-04-30 2021-07-30 北京读我网络技术有限公司 一种跨平台渲染方法及装置
CN113181657B (zh) * 2021-04-30 2024-04-05 北京读我网络技术有限公司 一种跨平台渲染方法及装置
CN113694536A (zh) * 2021-09-07 2021-11-26 北京蔚领时代科技有限公司 一种面向云游戏的场景管理方法、装置、设备及介质

Also Published As

Publication number Publication date
CN111414150B (zh) 2022-10-11

Similar Documents

Publication Publication Date Title
US8345059B2 (en) Methods, systems, and data structures for generating a rasterizer
Sellers et al. Vulkan programming guide: The official guide to learning vulkan
US10026147B1 (en) Graphics scenegraph rendering for web applications using native code modules
US8675000B2 (en) Command buffers for web-based graphics rendering
CN111414150B (zh) 游戏引擎渲染方法、装置、电子设备及计算机存储介质
KR101952983B1 (ko) 콘텐트의 타일-기반 렌더링을 위한 방법 및 콘텐트를 렌더링하기 위한 시스템
WO2010053953A2 (en) Hardware-accelerated graphics for web applications using native code modules
WO2010000126A1 (zh) 交互信息生成方法及系统
US20160140737A1 (en) Bandwidth reduction using vertex shader
US20230403437A1 (en) Graphics engine and graphics processing method applicable to player
CN111833429A (zh) 三维游戏渲染方法、三维引擎、电子设备及可读存储介质
WO2019238145A1 (zh) 一种基于WebGL的图形绘制方法、装置及系统
US9348676B2 (en) System and method of processing buffers in an OpenCL environment
US9153193B2 (en) Primitive rendering using a single primitive type
CN116503529A (zh) 渲染、3d画面控制方法、电子设备和计算机可读存储介质
CN111971655A (zh) 用于超文本标记语言图形内容的本机运行时技术
CN110038301B (zh) 数据处理方法、装置、电子设备及存储介质
CN111796812B (zh) 图像渲染的方法、装置、电子设备及计算机可读存储介质
CN115586893A (zh) 一种跨平台软件开发系统及方法
CN110852936B (zh) 对图片进行混合处理的方法和装置
CN115861505A (zh) 一种批量处理渲染物的方法、装置、设备及介质
CN114444003A (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
GR01 Patent grant
GR01 Patent grant