一种游戏引擎加载资源文件的方法、装置和计算机的制作方法

文档序号:6373756阅读:289来源:国知局
专利名称:一种游戏引擎加载资源文件的方法、装置和计算机的制作方法
技术领域
本发明涉及一种游戏引擎加载资源文件的方法、装置和计算机。
背景技术
计算机游戏,作为人们娱乐的一种方式,已经越来越受到人们的关注。为了满足人们的需求,使用户能够得到更好的游戏体验,计算机游戏的设计也越来越多样化。无论是基于桌面平台还是移动嵌入式平台,计算机游戏程序的设计都越来越复杂,为了达到逼真的游戏效果,计算机游戏所用的资源,如纹理、模型、游戏脚本等等,也都越来越庞大、越来越复杂。庞大、复杂的资源文件是实现逼真游戏效果所付出的必然代价,动辄上百兆字节的文件加载直接导致了一系列问题诸如游戏启动慢、场景切换慢、关卡加载慢等等。这些问题直接影响计算机的运行速度、效率,同时造成资源浪费。

发明内容
本发明主要解决的技术问题是提供一种游戏引擎加载资源文件的方法、装置和计算机,能够提高游戏资源的加载速度,使计算机资源得到较充分的使用。为解决上述技术问题,本发明采用的一个技术方案是提供一种游戏引擎加载资源文件的方法,包括开启线程以预载预定的资源文件,其中,所述预定的资源文件包括纹理类资源文件,还包括结构类资源文件、模型类资源文件中的至少一种资源文件;通过内存映射的方式读取所述结构类资源文件、模型类资源文件中的至少一种资源文件并进行加载。其中,所述通过内存映射的方式读取所述结构类资源文件、模型类资源文件中的至少一种资源文件并进行加载的步骤包括读取所述结构类资源文件、模型类资源文件中的至少一种资源文件的文件头以获取所述结构类资源文件、模型类资源文件中的至少一种资源文件的所有小结构体(Struct)的预设地址,其中,所述小结构体是将所述结构类资源文件、模型类资源文件中的至少一种资源文件切分得到的小结构体,所述小结构体的表述方式与游戏引擎在内存中表述相应资源的表述方式一致;将包含小结构体的所述结构类资源文件、模型类资源文件中的至少一种资源文件映射到所述预设地址;在映射到所述预设地址后读取所述结构类资源文件、模型类资源文件中的至少一种资源文件的所有小结构体;在读取完所有所述小结构体后取消所述包含小结构体的所述结构类资源文件、模型类资源文件中的至少一种资源文件映射与所述预设地址的映射关系,完成所述结构类资源文件、模型类资源文件中的至少一种资源文件的加载。其中,所述方法包括判断所述读取结构类资源文件、模型类资源文件中的至少一种资源文件的文件头是否为第一次读取;若不是第一次读取,则进行所述读取结构类资源文件、模型类资源文件中的至少一种资源文件的文件头的步骤及其后续步骤,直至完成所述结构类资源文件、模型类资源文件中的至少一种资源文件加载;若为第一次读取,则将所述结构类资源文件、模型类资源文件中的至少一种资源文件切分成小结构体(Struct),所述切分成的小结构体的表述方式与游戏引擎在内存中表述相应资源的表述方式一致;将所述包含小结构体的所述结构类资源文件、模型类资源文件中的至少一种资源文件映射到内存中的预设地址,使得所述结构类资源文件、模型类资源文件中的至少一种资源文件中每个小结构体的起始地址为所述小结构体在结构类资源文件或模型类资源文件中的位置偏移值与预设地址的和;将所述结构类资源文件、模型类资源文件中的至少一种资源文件的每个小结构体的预设地址与位置偏移值的和一一写回相应小结构体的指针中;在写回相应所述小结构体的指针后取消将所述包含小结构体的结构类资源文件、模型类资源文件中的至少一种资源文件与内存中的预设地址的映射关系,完成所述结构类资源文件、模型类资源文件中的至少一种资源文件的加载。其中,所述通过内存映射的方式读取所述结构类资源文件、模型类资源文件中的至少一种资源文件并进行加载之后还包括同时开启多个线程进行场景重组、着色器编译以及所述纹理类资源文件的异步加载。其中,所述同时开启多个线程进行所述纹理类资源文件的异步加载的步骤包括·同时开启多个所述线程以创建相应的多个共享上下文(share context);读取所述纹理类资源文件至所述共享上下文;通过解码器对所述纹理类资源文件进行解码得到显存内的二维纹理对象(texlmage2D);根据所述显存内的二维纹理对象自动生成多层纹理缩略图(mipmap);完成所述纹理类资源文件的异步加载。其中,同时读取至少两个所述纹理类文件至所述共享上下文,其中,每一个共享上下文对应一个所述纹理类文件,所述纹理类资源文件包括压缩成能被3D硬件直接使用的格式的压缩纹理数据。其中,通过解码器对所述纹理类资源文件进行解码得到显存内的二维纹理对象的步骤包括判断硬件解码器是否空闲;若所述硬件解码器空闲,则通过硬件解码器对所述纹理类资源文件进行解码,得到显存内的二维纹理对象;若所述硬件解码器不空闲,则通过软件解码器对所述纹理类资源文件进行解码,得到显存内的二维纹理对象。其中,所述开启线程以预载预定的资源文件的步骤包括开启线程将预定的资源文件预载至页高速缓冲存储器(page cache),同时使CPU进行初始化以加快所述进行场景重组、着色器编译的速度。其中,所述使CPU进行初始化以加快所述进行场景重组、着色器编译的速度的步骤包括使CPU加载动态库、使CPU初始化后台服务、使CPU构建场景以及使CPU加载网络以加快所述进行场景重组、着色器编译的速度。其中,所述进行着色器编译的步骤包括软件发布之前在离线状态完成着色器编译并保存至所述结构类资源文件。为了解决上述技术问题,本发明提供的另一技术方案为提供一种资源文件的加载装置,包括预载模块,用于通过开启线程预载预定的资源文件,其中,所述预定的资源文件包括纹理类资源文件,还包括结构类资源文件、模型类资源文件中的至少一种资源文件;第一加载模块,用于通过内存映射的方式读取所述预载模块预载的所述结构类资源文件、模型类资源文件中的至少一种资源文件并进行加载。其中,所述第一加载模块包括第一读取单元,用于读取所述预载模块预载的所述结构类资源文件、模型类资源文件中的至少一种资源文件的文件头,以获取所述结构类资源文件、模型类资源文件中的至少一种资源文件的所有小结构体(Struct)的预设地址,其中,所述小结构体是将所述结构类资源文件、模型类资源文件中的至少一种资源文件切分得到的小结构体,所述小结构体的表述方式与游戏引擎在内存中表述相应资源的表述方式一致;第一文件映射单元,用于将包含小结构体的所述结构类资源文件、模型类资源文件中的至少一种资源文件映射到所述第一读取单元获取的所述预设地址;第二读取单元,用于在第一文件映射单元完成映射之后读取所述结构类资源文件、模型类资源文件中的至少一种资源文件的所有小结构体;第一加载单元,用于在所述第二读取单元读取完所有所述小结构体后取消将包含小结构体的所述结构类资源文件、模型类资源文件中的至少一种资源文件与预设地址的映射关系,完成所述结构类资源文件、模型类资源文件中的至少一种资源文件加载。其中,所述第一加载模块还包括判断单元,用于判断所述第一读取单元读取结构类资源文件、模型类资源文件中的至少一种资源文件的文件头是否为第一次读取,将判断结果输出;文件切分单元,用于当判断单元输出的判断结果为第一次读取时,将所述结构类资源文件、模型类资源文件中的至少一种资源文件切分成小结构体(Struct),并使所述切分成的小结构体的表述方式与游戏引擎在内存中表述相应资源的表述方式一致;第二文件 映射单元,用于将所述包含小结构体的所述结构类资源文件、模型类资源文件中的至少一种资源文件映射到内存中的预设地址,并获取所述结构类资源文件、模型类资源文件中的至少一种资源文件中每个小结构体的起始地址,其中所述每个小结构体的起始地址为所述小结构体在结构类资源文件或模型类资源文件中的位置偏移值与预设地址的和;指针编辑单元,用于将所述结构类资源文件、模型类资源文件中的至少一种资源文件的每个小结构体的预设地址与位置偏移值的和一一写回相应小结构体的指针中;第二加载单元,用于在所述指针编辑单元完成小结构体的指针编辑后取消将所述包含小结构体的结构类资源文件、模型类资源文件中的至少一种资源文件与内存中的预设地址的映射关系,完成所述结构类资源文件、模型类资源文件中的至少一种资源文件的加载。其中,所述资源文件的加载装置包括第二加载模块,用于在所述第一加载模块完成加载之后,同时开启多个线程进行场景重组、着色器编译以及所述纹理类资源文件的异步加载。其中,所述第二加载模块包括平台创建单元,用于同时开启多个所述线程以创建相应的多个共享上下文;第三读取单元,用于读取所述纹理类资源文件至共享上下文;解码单元,用于对所述纹理类资源文件进行解码而得到显存内的二维纹理对象(texlmage2D);第三加载单元,用于根据所述显存内的二维纹理对象自动生成多层纹理缩略图(mipmap),完成所述纹理类资源文件的异步加载。其中,所述第三读取单元用于读取至少两个纹理类资源文件至共享上下文,其中每个共享上下文对应一个纹理类资源文件。其中,所述预载模块用于开启线程将预定的资源文件预载至页高速缓冲存储器,同时使CPU进行初始化以加快所述进行场景重组、着色器编译的速度。为了解决上述技术问题,本发明提供的还有一技术方案为提供一种包括上述的资源文件的加载装置。本发明的有益效果是区别于现有技术的情况,本发明通过预载方式加速文件系统的读写性能。另外,对资源文件本身采用内存映射的方式,提高文件读取的速度。通过上述两种方式的结合,在加载过程中充分利用软硬件系统中的所有资源,极大的提高游戏资源文件加载的速度,使计算机资源得到充分的利用。


图I是本发明游戏引擎加载资源文件的方法一实施方式的流程图;图2是本发明游戏引擎加载资源文件的方法另一实施方式的流程图;图3是本发明游戏引擎加载资源文件的方法一实施方式中通过内存映射的方式读取结构类资源文件、模型类资源文件中的至少一种资源文件并进行加载的流程图;图4是本发明游戏引擎加载资源文件的方法另一实施方式中通过内存映射的方
式读取结构类资源文件、模型类资源文件中的至少一种资源文件并进行加载的流程图;图5是本发明游戏引擎加载资源文件的方法一实施方式中同时开启多个线程进行纹理类资源文件的异步加载的流程图;图6是本发明加载资源文件的装置一实施方式的原理框图;图7是本发明加载资源文件的装置一实施方式中第一加载模块的原理框图;图8是本发明加载资源文件的装置一实施方式中第二加载模块的原理框图。
具体实施例方式参阅图1,本发明游戏引擎加载资源文件的方法一实施方式包括步骤SlOl :开启线程以预载预定的资源文件;在本发明的实施方式中,结构类资源主要是指包括游戏资源文件中的3D场景的描述(包括场景中各个节点的信息)、渲染时用到的着色器以及游戏/用户界面(UI)的执行脚本等的资源文件,这类资源文件本身的体积并不庞大,但是结构复杂,加载时需要复杂的算法来解析,同时这类资源文件加载时也会给CPU带来很重的负担;纹理类资源文件主要是指包含物质材质、纹理等的资源文件,纹理通常为一张张的图片文件。纹理类资源文件一般体积都比较大,加载过程既有漫长的文件系统加载过程,也会有硬件/软件上的解码过程,有时甚至会有图形处理器(GPU)自动生成多层纹理缩略图(mipmap)的过程;模型类资源文件主要是指包含所有物体的3D模型的资源文件,这类文件的体积大小处于结构类资源文件和纹理类资源文件的中间状态,这类文件的加载过程主要是文件读取和内存拷贝(mem-copy)过程。首先,开启一个线程来逐一预载预定的资源文件,预定的资源文件包括纹理类资源文件,还包括结构类资源文件、模型类资源文件中的至少一种资源文件。因为在整个加载的过程中,不论是结构类资源文件还是纹理类资源文件,都会有大量文件读写的操作,通过预载的方式可以将一些资源文件预读到内存中。比如以Linux系统为例,Linux文件系统都会有页高速缓冲存储器(page cache),这样只要预读一次资源文件,文件内容就会在pagecache中,第二次读取文件时的读写速度就能大幅提高,从而能加速加载过程。而预载的同时,可以使CPU做一些初始化动作,比如加载动态库、初始化后台服务、构建场景以及加载网络等等,这样可以为后续的场景重组以及着色器编译做好准备,从而加快加载速度;步骤S102 :通过内存映射的方式读取结构类资源文件、模型类资源文件中的至少一种资源文件并进行加载;针对结构类和模型类资源文件,由于其体积并不巨大,因此不需要针对它们进行压缩,通过内存映射的方式,使得读取相应的结构类资源文件、模型类资源文件中的至少一种资源文件就像直接访问内存中的数据完全一样,从而省掉文件解析的过程,加快这类文件的加载速度;其中,通过内存映射的方式读取结构类资源文件、模型类资源文件中的至少一种资源文件的步骤请参阅图3,主要包括以下子步骤子步骤S301 :读取结构类、模型类资源文件中的至少一种资源文件的文件头以获取相应资源文件的所有小结构体的预设地址;其中,小结构体是将结构类资源文件、模型类资源文件中的至少一种资源文件切分得到的小结构体,这些小结构体的表述方式与游戏引擎在内存中表述相应资源的表述方式一致; 子步骤S302 :将包含小结构体的资源文件映射到预设地址;将包含小结构体的结构类、模型类资源文件中的至少一种资源文件映射到所获取的预设地址;子步骤S303 :读取相应资源文件的所有小结构体;读取结构类、模型类资源文件中的至少一种资源文件中的所有小结构体;子步骤S304 :取消将包含小结构体的资源文件映射到预设地址,完成资源文件的加载;取消将包含小结构体的结构类、模型类资源文件中的至少一种资源文件映射到预设地址,完成结构类、模型类资源文件中的至少一种资源文件的加载。上述通过内存映射方式读取结构类、资源类资源文件中的至少一种资源文件的方法,主要是针对读取的结构类、资源类资源文件中的至少一种资源文件不是第一次读取的情况,如果无法判定相应的读取是否是第一次读取,则加载的过程请参阅图4,其包括子步骤S401 :读取结构类资源文件、模型类资源文件中的至少一种资源文件;子步骤S402 :判断是否为第一次读取;判断是否为第一次读取,如果是第一次读取则执行子步骤S403,如果不是第一次读取则执行子步骤S407 ;子步骤S403 :将相应资源文件切分成小结构体;将所读取的结构类、模型类资源文件中的至少一种资源文件切分成一个一个的小结构体,切分成的小结构体的表述方式与游戏引擎在内存中表述相应资源的表述方式一致,它们在资源文件中的排列结构也跟引擎在内存中保存相应资源的结构完全一致;子步骤S404 :将包含小结构体的相应资源文件映射到一预设地址,获取每个小结构体的起始地址;将包含小结构体的结构类、模型类资源文件中的至少一种资源文件映射到内存中的一预设地址,获取经切分后得到的每个小结构体的起始地址,小结构体的起始地址为小结构体在结构类资源文件或模型类资源文件中的位置偏移值与预设地址的和,如果预设地址已被占用,则自动寻找另一合适地址,相应每个小结构体的起始地址为小结构体在结构类资源文件或模型类资源文件中的位置偏移值与寻找到的另一合适地址的和。其中,对于模型类资源文件切分得到的小结构体,其结构体中的指针指向的是一些保存在文件中的文件缓存(buffer),则由模型类资源文件切分得到的小结构体的起始地址为小结构体在模型类资源文件中buffer的位置偏移值与预设地址的和;子步骤S405 :将小结构体的起始地址写回相应结构体的指针中;将结构类资源文件、模型类资源文件中的至少一种资源文件的所有小结构体的预设地址与位置偏移值的和一一写回相应小结构体的指针中;子步骤S406 :取消将包含小结构体的相应资源文件映射到预设地址,完成资源文件的加载;取消将包含小结构体的结构类资源文件、模型类资源文件中的至少一种资源文件映射到内存中的预设地址,完成结构类资源文件、模型类资源文件中的至少一种资源文件的加载;
子步骤S407 :读取结构类、模型类资源文件中的至少一种资源文件的文件头以获取相应资源文件的所有小结构体的预设地址;子步骤S408 :将包含小结构体的资源文件映射到预设地址;子步骤S409 :读取相应资源文件的所有小结构体;子步骤S410 :取消将包含小结构体的资源文件映射到预设地址,完成资源文件的加载。通过上述游戏引擎加载资源文件的方法一实施方式的阐述,可以理解,本发明通过预载方式加速文件系统的读写性能,在加载过程中充分利用软硬件系统中的所有资源,有效节约加载时间。另外,对资源文件本身采用内存映射的方式,提高了文件读取的速度。通过上述两种方式的结合,极大的提高游戏资源文件加载的速度,使计算机资源得到充分的利用。请参阅图2,为本发明游戏引擎加载资源文件的方法另一实施方式的流程图,包括步骤S201 :开启线程以预载预定的资源文件;在预载预定资源文件的同时,CPU可以进行一些初始化动作,以为加速后续的资源文件加载过程以及着色器编译等过程做好准备工作;在本实施方式中,可以预载所有的纹理类资源文件、结构类资源文件、模型类资源文件;步骤S202 :通过内存映射的方式读取结构类资源文件、模型类资源文件中的至少一种资源文件并进行加载;通过内存映射的方式读取体积相对不算庞大的结构类资源文件或模型类资源文件,这种方式可能不能加快第一次加载这类文件的速度,但是,第一次加载过程将所有由相应的结构类或资源类资源文件切分得到的小结构体的指针都解除以后,只要平台不发生迁移或者运行环境不发生巨变,后面的每次加载这类文件时的速度都能得到加快。因为经第一次加载后游戏引擎可以完全像访问内存一样读取这类文件,而省掉了解析过程,如果平台迁移或运行环境发生变化,则相应的第一次加载过程需要重新进行一次。同时,由于有了前面预载过程,这一步的资源文件加载也会得到进一步的加快,这里通过内存映射的方式读取结构类或模型类资源文件的方法可参阅图4以及上述关于图4相应的描述,这里不再详述;
步骤S203 :同时开启多个线程进行场景重组、着色器编译以及纹理类资源文件的异步加载;在上述步骤S201以及S202完成之后,一方面,CPU需要把各个资源重组成游戏引擎用来渲染场景的表达结构,另一方面,游戏引擎还需要准备纹理资源和编译着色器。由于重组3D场景和着色器编译主要是CPU进行,而加载纹理资源主要是硬件解码器(HWdecoder)以及图形处理器(GPU)进行。因此,可以开启多个线程,通过异步加载的方式将几个加载过程并行进行。这样,开启多个线程,让HW decoder.GPU以及CPU并行运行,当需要渲染场景的时候,通过同步机制来确保所有的相关资源已经加载完毕。其中,一般的纹理类资源通常会采用jpg之类的格式来保存,但是这个格式不能被3D硬件直接使用,必须要解压成位图(bipmap)才能被引擎使用,这样既浪费内存也增加了加载的时间。因此,可以对一些可以使用压缩纹理的纹理资源,先将这些纹理资源压缩成能被3D硬件直接使用的压缩纹理,通常根据硬件的限制,会选取ETCl或DXTn等格式。同时提前将这类压缩纹理放入文件系统中,这样既减少了文件尺寸,也有效解放更多硬件解码器的资源。 另外,游戏引擎加载着色器也是一个比较费时的过程,因为引擎需要CPU来编译着色器,有些引擎甚至需要运行期(runtime)产生着色器,然后再编译着色器,这个过程CPU负担比较重。在游戏或者n不需要考虑跨平台的情况下,可以在软件发布之前就把着色器在离线状态编译好,然后保存到结构类资源文件,这样可以省去着色器编译过程,加快加载速度。其中,同时开启多个线程进行纹理类资源文件的异步加载包含的子步骤请参阅图5,包括子步骤S501 :同时开启多个线程以创建相应的多个共享上下文;采用多个共享上下文的方式,可以解决多个线程进行纹理类资源文件的加载时,某些环境下的openGL或D3D有可能产生平台和线程绑定的问题而导致纹理加载失败的问题;子步骤S502 :读取纹理类资源文件至共享上下文;同时读取至少两个纹理类资源文件至共享上下文,其中,每一个共享上下文对应一个纹理类资源文件,纹理类资源文件包括压缩成能被3D硬件直接使用的格式的压缩纹理;子步骤S503 :通过解码器对纹理类资源文件进行解码得到显存内的二维纹理对象;可以通过硬件解码器或者软件解码器对纹理类资源文件进行解码。解码时,先判读硬件解码器是否空闲,如果硬件解码器空闲,则通过硬件解码器对纹理类资源文件进行解码得到teXmage2D ;如果硬件解码器不空闲,则通过软件解码器对纹理类资源文件进行解码得到显存内的二维纹理对象;子步骤S504 :根据显存内的二维纹理对象自动生成多层纹理缩略图;子步骤S505 :完成纹理类资源文件的加载。请参阅图6,为本发明资源文件的加载装置一实施方式的原理框图,资源文件的加载装置包括
预载模块61,用于通过开启线程预载预定的资源文件,其中,预定的资源文件包括纹理类资源文件,还包括结构类资源文件、模型类资源文件中的至少一种资源文件;预载模块61用于开启线程将预定的资源文件预载至页高速缓冲存储器,同时使(PU进行初始化,比如加载动态库、初始化后台服务、构建场景以及加载网络等,以加快进行场景重组、着色器编译的速度;第一加载模块62,用于通过内存映射的方式读取预载模块61预载的结构类资源文件、模型类资源文件中的至少一种资源文件并进行加载;第一加载模块62主要用于加载结构类或模型类资源文件;请继续参阅图6,在另一实施方式中,本发明资源文件的加载装置还包括第二加载模块63,用于在第一加载模块62完成加载之后,同时开启多个线程进行场景重组、着色器编译以及纹理类资源文件的异步加载;
第二加载模块63可以实现场景重组、着色器编译以及纹理类资源文件的同时并行加载,在游戏或者UI不需要考虑跨平台的情况下,第二加载模块63还可以用于在软件发布之前就把着色器在离线状态编译好,然后保存到结构类资源文件,这样可以省去着色器编译过程,加快加载速度。请参阅图7,为本发明资源文件的加载装置一实施方式中第一加载模块的原理框图,第一加载模块包括第一读取单兀71、第一文件映射单兀72、第二读取单兀73以及第一加载单元74,其中第一读取单元71,用于读取预载模块预载的结构类资源文件、模型类资源文件中的至少一种资源文件的文件头,以获取结构类资源文件、模型类资源文件中的至少一种资源文件的所有小结构体(Struct)的预设地址,其中,小结构体是将结构类资源文件、模型类资源文件中的至少一种资源文件切分得到的小结构体,小结构体的表述方式与游戏引擎在内存中表述相应资源的表述方式一致;第一文件映射单元72,用于将包含小结构体的结构类资源文件、模型类资源文件中的至少一种资源文件映射到第一读取单元71获取的预设地址;第一文件映射单元72根据第一读取单元71所获取得到的预设地址,将包含小结构体的结构类或模型类资源文件映射到该预设地址,映射完成后通知第二读取单元73执行动作;第二读取单元73,用于在第一文件映射单元72完成映射之后读取结构类资源文件、模型类资源文件中的至少一种资源文件的所有小结构体;第二读取单元73所读取的是完成映射之后相应结构类资源文件或模型类资源文件的所有小结构体,并且在读取完成后通知第一加载单元74进行下一步操作;第一加载单元74,用于在第二读取单元73读取完所有小结构体后取消将包含小结构体的结构类资源文件、模型类资源文件中的至少一种资源文件与预设地址的映射关系,完成结构类资源文件、模型类资源文件中的至少一种资源文件加载。第一加载单元74在第二读取单元73读取完所有小结构体之后,通过解除资源文件与预设地址的映射关系,以完成结构类或模型类资源文件的加载。请继续参阅图7,第一加载模块包括判断单元75、文件切分单元76、第二文件映射单元77、指针编辑单元78以及第二加载单元79,其中
判断单元75,用于判断第一读取单元71读取结构类资源文件、模型类资源文件中的至少一种资源文件的文件头是否为第一次读取,将判断结果输出;判断单元75通过判断第一读取单元71读取文件头是否为第一次读取,并根据判断结果,通知第一文件映射72单元或文件切分单元76执行动作。如果判断结果为第一次读取,则通知第一文件映射单元72执行其相应的动作;如果判断结构为不是第一次读取,则通知文件切分单元76执行相应的动作;文件切分单元76,用于当判断单元75输出的判断结果为第一次读取时,将结构类资源文件、模型类资源文件中的至少一种资源文件切分成小结构体(Struct),并使切分成的小结构体的表述方式与游戏弓I擎在内存中表述相应资源的表述方式一致;文件切分单元76根据判断单元75的通知,将结构类或模型类资源文件切分成一个一个的小结构体,并使每一个小结构体的表述方式与游戏引擎在内存中表述相应资源的 表述方式完全一致,并且使它们在资源文件中的排列结构也跟引擎在内存中保存相应资源的结构也完全一致,切分完成后将切分得到的小结构体输出给第二文件映射单元77 ;第二文件映射单元77用于将包含小结构体的结构类资源文件、模型类资源文件中的至少一种资源文件映射到内存中的预设地址,并获取结构类资源文件、模型类资源文件中的至少一种资源文件中每个小结构体的起始地址,其中每个小结构体的起始地址为小结构体在结构类资源文件或模型类资源文件中的位置偏移值与预设地址的和,第二文件映射单元77还用于当预设地址已被占用时,则自动寻找另一合适地址,并将将包含小结构体的结构类资源文件、模型类资源文件中的至少一种资源文件映射到寻找到的另一合适地址,使相应每个小结构体的起始地址为小结构体在结构类资源文件或模型类资源文件中的位置偏移值与寻找到的另一合适地址的和;第二文件映射单元77完成文件映射之后,获取每个小结构体的起始地址,其中,对于模型类资源文件切分得到的小结构体,其结构体中的指针指向的是一些保存在文件中的文件缓存(buffer),则由第二文件映射单元77获取得到的小结构体的起始地址为小结构体在模型类资源文件中buffer的位置偏移值与预设地址的和,将获取得到的每个小结构体的起始地址输出给指针编辑单元78 ;指针编辑单元78,用于将结构类资源文件、模型类资源文件中的至少一种资源文件的每个小结构体的预设地址与位置偏移值的和一一写回相应小结构体的指针中;指针编辑单元78根据第二文件映射单元77获取的小结构体的原始地址对小结构体的指针进行编辑,并在完成指针编辑之后通知第二加载单元79执行相应的动作;第二加载单元79,用于在指针编辑单元78完成小结构体的指针编辑后取消将包含小结构体的结构类资源文件、模型类资源文件中的至少一种资源文件与内存中的预设地址的映射关系,完成结构类资源文件、模型类资源文件中的至少一种资源文件的加载;第二加载单元79通过解除相应文件与预设地址的映射关系以完成结构类或模型类资源文件的加载。请参阅图8,为本发明资源文件的加载装置一实施方式中第二加载模块的原理框图,第二加载模块包括平台创建单元81、第三读取单元82、解码单元83以及第三加载单元84,其中平台创建单元81,用于同时开启多个所述线程以创建相应的多个共享上下文;
平台创建单元81用于开启多个线程以创建多个共享上下文,其中,每个线程对应创建一个共享上下文,平台创建单元81通过采用多个共享上下文的方式,可以解决多个线程进行纹理类资源文件的加载时,某些环境下的openGL或D3D有可能产生平台和线程绑定的问题而导致纹理加载失败的问题;第三读取单元82,用于读取纹理类资源文件至共享上下文;第三读取单元82可以同时读取多个纹理类资源文件至共享上下文,每个共享上下文对应读取一个纹理类资源文件,同时,读取的纹理类资源文件中包括通过压缩得到的能够被3D硬件直接使用的压缩纹理数据;解码单元83,用于对纹理类资源文件进行解码而得到显存内的二维纹理对象(texlmage2D);
解码单元83可以同时对多个纹理类资源文件进行解码,并在解码后输出显存内的二维纹理对象(texlmage2D)给第三加载单元84 ;第三加载单元84,用于根据显存内的二维纹理对象(texlmage2D)自动生成多层纹理缩略图(mipmap),完成纹理类资源文件的异步加载;第三加载单元84根据解码单元83输出的显存内的二维纹理对象(texlmage2D)自动生成多层纹理缩略图(mipmap)。在本发明的另一实施方式中,还提供了一种计算机,包括上述任一实施方式中的资源文件的加载装置。通过上述实施方式的阐述,相对于现有技术,本发明的优点在于通过使用预载的方法来加速文件系统的读写性能,并结合使用内存映射文件的方式来优化结构类和模型类资源文件,极大的提高了游戏引擎加载资源文件的速度。同时,对纹理类资源文件进行压缩并采用多线程异步加载的方式,在加载纹理类资源文件的同时开启多个线程进行着色器编译和场景重组,使CPU、GPU、硬件解码器以及文件读取都能同时尽可能地满负荷运行,让整个资源文件的加载过程充分利用软硬件系统中所有的资源文件,极大的提高游戏资源文件加载的速度,使计算机资源得到充分的利用。在一个拥有lGhz,双核CPU的平台上对本发明的游戏引擎加载资源文件的方法一实施方式进行了测试原始的加载过程需要9-10秒,而本发明的游戏引擎加载资源文件的方法一实施方式的加载过程只用了 2. 5秒,可见采用本发明游戏引擎加载资源文件的方法,资源文件的加载速度得到了极大的提高。在本申请所提供的几个实施方式中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施方式仅仅是示意性的,例如,所述模块或单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施方式方案的目的。
另外,在本申请各个实施方式中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。以上所述仅为本发明的实施方式,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的 技术领域,均同理包括在本发明的专利保护范围内。
权利要求
1.一种游戏引擎加载资源文件的方法,其特征在于,包括 开启线程以预载预定的资源文件,其中,所述预定的资源文件包括纹理类资源文件,还包括结构类资源文件、模型类资源文件中的至少一种资源文件; 通过内存映射的方式读取所述结构类资源文件、模型类资源文件中的至少一种资源文件并进行加载。
2.根据权利要求I所述的方法,其特征在于所述通过内存映射的方式读取所述结构类资源文件、模型类资源文件中的至少一种资源文件并进行加载的步骤包括 读取所述结构类资源文件、模型类资源文件中的至少一种资源文件的文件头,以获取所述结构类资源文件、模型类资源文件中的至少一种资源文件的所有小结构体(Struct)的预设地址,其中,所述小结构体是将所述结构类资源文件、模型类资源文件中的至少一种资源文件切分得到的小结构体,所述小结构体的表述方式与游戏引擎在内存中表述相应资源的表述方式一致; 将包含小结构体的所述结构类资源文件、模型类资源文件中的至少一种资源文件映射到预设地址; 在映射到所述预设地址后读取所述结构类资源文件、模型类资源文件中的至少一种资源文件的所有小结构体; 在读取完所有所述小结构体后取消将包含小结构体的所述结构类资源文件、模型类资源文件中的至少一种资源文件与预设地址的映射关系,完成所述结构类资源文件、模型类资源文件中的至少一种资源文件加载。
3.根据权利要求2所述的方法,其特征在于所述方法包括 判断所述读取结构类资源文件、模型类资源文件中的至少一种资源文件的文件头是否为第一次读取; 若不是第一次读取,则进行所述读取结构类资源文件、模型类资源文件中的至少一种资源文件的文件头的步骤及其后续步骤,直至完成所述结构类资源文件、模型类资源文件中的至少一种资源文件加载;若为第一次读取,则将所述结构类资源文件、模型类资源文件中的至少一种资源文件切分成小结构体(Struct),所述切分成的小结构体的表述方式与游戏引擎在内存中表述相应资源的表述方式一致; 将所述包含小结构体的所述结构类资源文件、模型类资源文件中的至少一种资源文件映射到内存中的预设地址,使得所述结构类资源文件、模型类资源文件中的至少一种资源文件中每个小结构体的起始地址为所述小结构体在结构类资源文件或模型类资源文件中的位置偏移值与预设地址的和,如果所述预设地址已被占用,则寻找另一地址,相应每个小结构体的起始地址为所述小结构体在结构类资源文件或模型类资源文件中的位置偏移值与所述另一地址的和; 将所述结构类资源文件、模型类资源文件中的至少一种资源文件的每个小结构体的预设地址与位置偏移值的和一一写回相应小结构体的指针中; 在写回相应所述小结构体的指针后取消将所述包含小结构体的结构类资源文件、模型类资源文件中的至少一种资源文件与内存中的预设地址的映射关系,完成所述结构类资源文件、模型类资源文件中的至少一种资源文件的加载。
4.根据权利要求I所述的方法,其特征在于,所述方法包括同时开启多个线程进行场景重组、着色器编译以及所述纹理类资源文件的异步加载。
5.根据权利要求4所述的方法,其特征在于,所述同时开启多个线程进行所述纹理类资源文件的异步加载的步骤包括 同时开启多个所述线程以创建相应的多个共享上下文; 读取所述纹理类资源文件至共享上下文; 通过解码器对所述纹理类资源文件进行解码而得到显存内的二维纹理对象; 根据所述显存内的二维纹理对象自动生成多层纹理缩略图; 完成所述纹理类资源文件的异步加载。
6.根据权利要求5所述的方法,其特征在于,所述读取纹理类资源文件至共享上下文的步骤包括 同时读取至少两个所述纹理类文件至共享上下文,其中,每一个共享上下文对应一个所述纹理类资源文件,所述纹理类资源文件包括压缩成能被3D硬件直接使用的格式的压缩纹理数据。
7.根据权利要求5所述的方法,其特征在于,所述通过解码器对纹理类资源文件进行解码得到显存内二维纹理对象的步骤包括 判断硬件解码器是否空闲; 若所述硬件解码器空闲,则通过所述硬件解码器对所述纹理类资源文件进行解码,得到显存内的二维纹理对象; 若所述硬件解码器不空闲,则通过软件解码器对所述纹理类资源文件进行解码,得到显存内的二维纹理对象。
8.根据权利要求4所述的方法,其特征在于,所述开启线程以预载预定的资源文件的步骤包括 开启线程将预定的资源文件预载至页高速缓冲存储器,同时使CPU进行初始化以加快所述进行场景重组、着色器编译的速度。
9.根据权利要求8所述的方法,其特征在于,所述使CPU进行初始化以加快所述进行场景重组、着色器编译的速度的步骤包括 使CPU加载动态库、使CPU初始化后台服务、使CPU构建场景以及使CPU加载网络以加快所述进行场景重组、着色器编译的速度。
10.根据权利要求4所述的方法,其特征在于,所述进行着色器编译的步骤包括 软件发布之前在离线状态完成着色器编译并保存至所述结构类资源文件。
11.一种资源文件的加载装置,其特征在于,包括 预载模块,用于通过开启线程预载预定的资源文件,其中,所述预定的资源文件包括纹理类资源文件,还包括结构类资源文件、模型类资源文件中的至少一种资源文件; 第一加载模块,用于通过内存映射的方式读取所述预载模块预载的所述结构类资源文件、模型类资源文件中的至少一种资源文件并进行加载。
12.根据权利要求11所述的装置,其特征在于,所述第一加载模块包括 第一读取单元,用于读取所述预载模块预载的所述结构类资源文件、模型类资源文件中的至少一种资源文件的文件头,以获取所述结构类资源文件、模型类资源文件中的至少一种资源文件的所有小结构体(Struct)的预设地址,其中,所述小结构体是将所述结构类资源文件、模型类资源文件中的至少一种资源文件切分得到的小结构体,所述小结构体的表述方式与游戏引擎在内存中表述相应资源的表述方式一致; 第一文件映射单元,用于将包含小结构体的所述结构类资源文件、模型类资源文件中的至少一种资源文件映射到所述第一读取单元获取的所述预设地址; 第二读取单元,用于在第一文件映射单元完成映射之后读取所述结构类资源文件、模型类资源文件中的至少一种资源文件的所有小结构体; 第一加载单元,用于在所述第二读取单元读取完所有所述小结构体后取消将包含小结构体的所述结构类资源文件、模型类资源文件中的至少一种资源文件与预设地址的映射关系,完成所述结构类资源文件、模型类资源文件中的至少一种资源文件加载。
13.根据权利要求12所述的装置,其特征在于,所述第一加载模块包括 判断单元,用于判断所述第一读取单元读取结构类资源文件、模型类资源文件中的至少一种资源文件的文件头是否为第一次读取,将判断结果输出; 文件切分单元,用于当判断单元输出的判断结果为第一次读取时,将所述结构类资源文件、模型类资源文件中的至少一种资源文件切分成小结构体(Struct),并使所述切分成的小结构体的表述方式与游戏引擎在内存中表述相应资源的表述方式一致; 第二文件映射单元,用于文件切分单元完成文件切分后将所述包含小结构体的所述结构类资源文件、模型类资源文件中的至少一种资源文件映射到内存中的预设地址,并获取所述结构类资源文件、模型类资源文件中的至少一种资源文件中每个小结构体的起始地址,其中所述每个小结构体的起始地址为所述小结构体在结构类资源文件或模型类资源文件中的位置偏移值与预设地址的和; 指针编辑单元,用于将所述结构类资源文件、模型类资源文件中的至少一种资源文件的每个小结构体的预设地址与位置偏移值的和一一写回相应小结构体的指针中; 第二加载单元,用于在所述指针编辑单元完成小结构体的指针编辑后取消将所述包含小结构体的结构类资源文件、模型类资源文件中的至少一种资源文件与内存中的预设地址的映射关系,完成所述结构类资源文件、模型类资源文件中的至少一种资源文件的加载。
14.根据权利要求11所述的装置,其特征在于,所述装置包括 第二加载模块,用于在所述第一加载模块完成加载之后,同时开启多个线程进行场景重组、着色器编译以及所述纹理类资源文件的异步加载。
15.根据权利要求14所述的装置,其特征在于,所述第二加载模块包括 平台创建单元,用于同时开启多个所述线程以创建相应的多个共享上下文; 第三读取单元,用于读取所述纹理类资源文件至共享上下文; 解码单元,用于对所述纹理类资源文件进行解码而得到显存内的二维纹理对象;第三加载单元,用于根据所述显存内的二维纹理对象自动生成多层纹理缩略图,完成所述纹理类资源文件的异步加载。
16.根据权利要求15所述的装置,其特征在于,所述第三读取单元具体用于读取至少两个纹理类资源文件至共享上下文,其中每个共享上下文对应一个纹理类资源文件。
17.根据权利要求11所述的装置,其特征在于,所述预载模块具体用于开启线程将预定的资源文件预载至页高速缓冲存储器,同时使CPU进行初始化以加快所述进行场景重组、着色器编译的速度。
18. —种计算机,其特征在于,包括权利要求11-17任一项所述的资源文件的加载装 置。
全文摘要
本发明公开了一种游戏引擎加载资源文件的方法、装置和计算机。游戏引擎加载资源文件的方法包括开启线程以预载预定的资源文件,其中,预定的资源文件包括纹理类资源文件,还包括结构类资源文件、模型类资源文件中的至少一种;通过内存映射的方式读取结构类资源文件、模型类资源文件中的至少一种资源文件并进行加载。通过上述方式,本发明能够极大的提高游戏资源文件加载的速度,使计算机资源得到充分的利用。
文档编号G06F9/445GK102799456SQ201210258590
公开日2012年11月28日 申请日期2012年7月24日 优先权日2012年7月24日
发明者高璐, 何虎 申请人:上海晨思电子科技有限公司, 晨星半导体股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1