CN111581910B - 一种渲染引擎中的数据缓存方法和装置 - Google Patents
一种渲染引擎中的数据缓存方法和装置 Download PDFInfo
- Publication number
- CN111581910B CN111581910B CN202010228258.2A CN202010228258A CN111581910B CN 111581910 B CN111581910 B CN 111581910B CN 202010228258 A CN202010228258 A CN 202010228258A CN 111581910 B CN111581910 B CN 111581910B
- Authority
- CN
- China
- Prior art keywords
- font
- map
- caching
- data
- fonts
- 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
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F40/00—Handling natural language data
- G06F40/10—Text processing
- G06F40/103—Formatting, i.e. changing of presentation of documents
- G06F40/109—Font handling; Temporal or kinetic typography
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5011—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
- G06F9/5016—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T1/00—General purpose image data processing
- G06T1/60—Memory management
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Health & Medical Sciences (AREA)
- Artificial Intelligence (AREA)
- Audiology, Speech & Language Pathology (AREA)
- Computational Linguistics (AREA)
- General Health & Medical Sciences (AREA)
- Memory System Of A Hierarchy Structure (AREA)
- Controls And Circuits For Display Device (AREA)
Abstract
本申请实施例的目的是提供一种本申请实施例的目的是提供一种渲染引擎中的数据缓存方法和装置。本申请实施例提供的一种渲染引擎中的数据缓存方法,包括:在渲染引擎中使用多个缓存块对需要渲染的字体进行缓存。本申请实施例具有以下优点:本申请实施例通过贴图中的多个缓存块来缓存所需要的多种字体,节省了缓存字体所占用的内存空间,提升了效率;并且,本申请实施例通过将使用率低的贴图对应的纹理销毁,进一步节省了内存空间。
Description
技术领域
本发明涉及计算机技术领域,尤其涉及一种渲染引擎中的数据缓存方法和装置。
背景技术
现有的渲染引擎中的字体缓存逻辑对贴图的利用率较低。例如,UE4引擎中的字体缓存逻辑采用二分法,以分割贴图的方式获取新的缓存空间,即每次将贴图分割为一个大空间和一个小空间。如果需要缓存字体都比较大时,小空间的利用率较低,使得贴图空间容易被占满,从而需要新的贴图来缓存字体,因而造成内存空间的浪费。并且,现有的渲染引擎中对贴图的纹理缓存逻辑也可能造成内存空间的浪费。
发明内容
本申请实施例的目的是提供一种渲染引擎中的数据缓存方法和装置。
本申请实施例提供的一种渲染引擎中的数据缓存方法,包括:在渲染引擎中使用多个缓存块对需要渲染的字体进行缓存。
根据本申请的实施例,所述方法进一步包括:通过对用于缓存字体的贴图进行切割得到多个相同大小的正方形,使得每个正方形作为一种字体的某个字号的缓存块;在各个缓存块中存储相应大小和字体的文字的字体贴图数据;在渲染文字的过程中,基于待渲染文字的大小和字体,从相应的缓存块中加载贴图。
根据本申请的实施例,所述通过对用于缓存字体的贴图进行切割得到多个相同大小的正方形包括:通过对用于缓存字体的贴图进行切割得到64个相同大小的正方形,以使用64个缓存块对需要渲染的字体进行缓存。
根据本申请的实施例,所述方法进一步包括:记录缓存块中各个文字的使用频率信息;如果一缓存块已满,将其中使用频率最低的一个或多个文字对应的缓存空间回收。
根据本申请的实施例,所述方法进一步包括:创建或更新用于查找特定字体和大小的字体贴图数据的映射表。
根据本申请的实施例,所述方法进一步包括:使用不同的数据段在字体文件中加载相应的字体贴图信息和字体描边信息;对该字体贴图信息和字体描边信息进行打包,得到相应的字体打包数据;在渲染文字时通过字体打包数据进行解包操作,得到相应的字体贴图信息和字体描边信息,使得渲染后的文字具有描边效果。
根据本申请的实施例,所述方法进一步包括:基于预定的时间间隔在渲染线程中更新缓存字体的贴图
根据本申请的实施例,所述方法进一步包括:在渲染的过程中,记录使用过的各个贴图的使用频率信息;根据各个贴图的使用频率信息,将使用频率低于预定阈值的贴图对应的纹理销毁。
根据本申请的实施例,所述方法进一步包括:创建或更新贴图的加载路径和纹理的映射表。
根据本申请的实施例,所述方法进一步包括:如果已销毁的贴图重新被访问,则根据该贴图的加载路径进行异步加载。
根据本申请的实施例,所述根据该贴图的加载路径进行异步加载进一步包括:在异步加载的过程中不对该贴图对应的数据进行渲染,或者,使用默认的贴图代替该贴图。
本申请实施例提供的一种渲染引擎中的数据缓存装置,包括:用于在渲染引擎中使用多个缓存块对需要渲染的字体进行缓存的装置。。
根据本申请的实施例,所述缓存装置进一步包括:用于通过对用于缓存字体的贴图进行切割得到多个相同大小的正方形,使得每个正方形作为一种字体的某个字号的缓存块的装置;用于在各个缓存块中存储相应大小和字体的文字的字体贴图数据的装置;用于在渲染文字的过程中,基于待渲染文字的大小和字体,从相应的缓存块中加载贴图的装置。
根据本申请的实施例,所述缓存装置进一步包括用于记录缓存块中各个文字的使用频率信息的装置;用于如果一缓存块已满,将其中使用频率最低的一个或多个文字对应的缓存空间回收的装置。
根据本申请的实施例,所述数据缓存装置进一步包括:用于创建或更新用于查找特定字体和大小的字体贴图数据的映射表的装置。
根据本申请的实施例,所述数据缓存装置进一步包括:用于创建或更新用于查找特定字体和大小的字体贴图数据的映射表的装置。
根据本申请的实施例,所述数据缓存装置进一步包括:用于基于预定的时间间隔在渲染线程中更新缓存字体的贴图的装置。
根据本申请的实施例,所述数据缓存装置进一步包括:用于在渲染的过程中,记录使用过的各个贴图的使用频率信息的装置;用于根据各个贴图的使用频率信息,将使用频率低于预定阈值的贴图对应的纹理销毁的装置。
根据本申请的实施例,所述数据缓存装置进一步包括:用于创建或更新贴图的加载路径和纹理的映射表的装置。
根据本申请的实施例,所述数据缓存装置进一步包括:用于如果已销毁的贴图重新被访问,则根据该贴图的加载路径进行异步加载的装置。
根据本申请的实施例,所述根据该贴图的加载路径进行异步加载进一步包括:在异步加载的过程中不对该贴图对应的数据进行渲染,或者,使用默认的贴图代替该贴图。
本申请实施例提供的一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现如本申请实施例所述的方法。
本申请实施例提供的一种计算机可读的存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现如如本申请实施例所述的方法。
本申请实施例具有以下优点:本申请实施例通过贴图中的多个缓存块来缓存所需要的多种字体,节省了缓存字体所占用的内存空间,提升了效率;并且,本申请实施例通过将使用率低的贴图对应的纹理销毁,进一步节省了内存空间。
附图说明
通过阅读参照以下附图所作的对非限制性实施例所作的详细描述,本发明的其它特征、目的和优点将会变得更明显:
图1示出了根据本申请实施例的一种渲染引擎中的数据缓存方法的流程图;
图2示出了根据本申请实施例的缓存字体的方法流程图;
图3示出了根据本申请实施例的缓存贴图的方法流程图;
图4示出了根据本申请实施例的一种数据缓存装置的结构示意图;
图5示出了根据本申请实施例的用于缓存字体的数据缓存装置的结构示意图;
图6示出了根据本申请实施例的用于缓存贴图的数据缓存装置的结构示意图。
附图中相同或相似的附图标记代表相同或相似的部件。
具体实施方式
在更加详细地讨论示例性实施例之前应当提到的是,一些示例性实施例被描述成作为流程图描绘的处理或方法。虽然流程图将各项操作描述成顺序的处理,但是其中的许多操作可以被并行地、并发地或者同时实施。此外,各项操作的顺序可以被重新安排。当其操作完成时所述处理可以被终止,但是还可以具有未包括在附图中的附加步骤。所述处理可以对应于方法、函数、规程、子例程、子程序等等。
在上下文中所称“计算机设备”,也称为“电脑”,是指可以通过运行预定程序或指令来执行数值计算和/或逻辑计算等预定处理过程的智能电子设备,其可以包括处理器与存储器,由处理器执行在存储器中预存的存续指令来执行预定处理过程,或是由ASIC、FPGA、DSP等硬件执行预定处理过程,或是由上述二者组合来实现。计算机设备包括但不限于服务器、个人电脑、笔记本电脑、平板电脑、智能手机等。
所述计算机设备包括用户设备与网络设备。其中,所述用户设备包括但不限于电脑、智能手机、PDA等;所述网络设备包括但不限于单个网络服务器、多个网络服务器组成的服务器组或基于云计算(Cloud Computing)的由大量计算机或网络服务器构成的云,其中,云计算是分布式计算的一种,由一群松散耦合的计算机集组成的一个超级虚拟计算机。其中,所述计算机设备可单独运行来实现本申请,也可接入网络并通过与网络中的其他计算机设备的交互操作来实现本申请。其中,所述计算机设备所处的网络包括但不限于互联网、广域网、城域网、局域网、VPN网络等。
需要说明的是,所述用户设备、网络设备和网络等仅为举例,其他现有的或今后可能出现的计算机设备或网络如可适用于本申请,也应包含在本申请保护范围以内,并以引用方式包含于此。
后面所讨论的方法(其中一些通过流程图示出)可以通过硬件、软件、固件、中间件、微代码、硬件描述语言或者其任意组合来实施。当用软件、固件、中间件或微代码来实施时,用以实施必要任务的程序代码或代码段可以被存储在机器或计算机可读介质(比如存储介质)中。(一个或多个)处理器可以实施必要的任务。
这里所公开的具体结构和功能细节仅仅是代表性的,并且是用于描述本申请的示例性实施例的目的。但是本申请可以通过许多替换形式来具体实现,并且不应当被解释成仅仅受限于这里所阐述的实施例。
应当理解的是,虽然在这里可能使用了术语“第一”、“第二”等等来描述各个单元,但是这些单元不应当受这些术语限制。使用这些术语仅仅是为了将一个单元与另一个单元进行区分。举例来说,在不背离示例性实施例的范围的情况下,第一单元可以被称为第二单元,并且类似地第二单元可以被称为第一单元。这里所使用的术语“和/或”包括其中一个或更多所列出的相关联项目的任意和所有组合。
应当理解的是,当一个单元被称为“连接”或“耦合”到另一单元时,其可以直接连接或耦合到所述另一单元,或者可以存在中间单元。与此相对,当一个单元被称为“直接连接”或“直接耦合”到另一单元时,则不存在中间单元。应当按照类似的方式来解释被用于描述单元之间的关系的其他词语(例如“处于...之间”相比于“直接处于...之间”,“与...邻近”相比于“与...直接邻近”等等)。
这里所使用的术语仅仅是为了描述具体实施例而不意图限制示例性实施例。除非上下文明确地另有所指,否则这里所使用的单数形式“一个”、“一项”还意图包括复数。还应当理解的是,这里所使用的术语“包括”和/或“包含”规定所陈述的特征、整数、步骤、操作、单元和/或组件的存在,而不排除存在或添加一个或更多其他特征、整数、步骤、操作、单元、组件和/或其组合。
还应当提到的是,在一些替换实现方式中,所提到的功能/动作可以按照不同于附图中标示的顺序发生。举例来说,取决于所涉及的功能/动作,相继示出的两幅图实际上可以基本上同时执行或者有时可以按照相反的顺序来执行。
下面结合附图对本发明作进一步详细描述。
图1示出了根据本申请实施例的一种渲染引擎中的数据缓存方法的流程图。所述方法包括步骤S1。
参照图1,在步骤S1中,数据缓存装置在渲染引擎中使用多个缓存块对需要渲染的字体进行缓存。
其中,通过对用于缓存字体的贴图进行切割得到所述多个缓存块。所述缓存块用于缓存需要渲染的多种字体相对应的贴图数据。
优选地,数据缓存装置通过对用于缓存字体的贴图进行切割得到64个相同大小的正方形,以使用64个缓存块对需要渲染的字体进行缓存。
优选地,每个缓存块对应于特定字体的某个字号。例如,一个缓存块可对应于“二号”大小的“幼圆”字体。
根据一个实施例,所述方法进一步包括步骤S2。
在步骤S2中,数据缓存装置创建或更新用于查找特定字体和大小的字体贴图数据的映射表。
优选地,该映射表记录各种大小的具体文字的缓存贴图的UV地址。
根据一个实施例,所述方法进一步包括步骤S3和步骤S4。
在步骤S3中,数据缓存装置记录缓存块中各个文字的使用频率信息。
其中,所述使用频率信息包括各种可用于指示文字的使用频率的高低的信息。例如,某个文字在过去半年内的使用次数,又例如,某个文字距离上次被使用时的时间长短等等。
在步骤S4中,如果一缓存块已满,数据缓存装置将其中使用频率最低的一个或多个文字对应的缓存空间回收。
根据一个实施例,所述方法进一步包括步骤S5,步骤S6和步骤S7。
在步骤S5中,数据缓存装置使用不同的数据段在字体文件中加载相应的字体贴图信息和字体描边信息。
在步骤S6中,数据缓存装置对该字体贴图信息和字体描边信息进行打包,得到相应的字体打包数据。
在步骤S7中,数据缓存装置在渲染文字时通过字体打包数据进行解包操作,得到相应的字体贴图信息和字体描边信息,使得渲染后的文字具有描边效果。
例如,数据缓存装置从字体文件中加载某种字体对应的字体贴图信息和字体描边信息。并且,在用于缓存字体数据的数据段中,所加载的字体描边信息占用0到0.5数据段,字体贴图信息占用0.5到1数据段。并且,数据缓存装置对该字体贴图信息和字体描边信息进行打包,得到相应的字体打包数据。在渲染文字时,数据缓存装置通过字体打包数据进行解包操作,得到相应的字体贴图信息和字体描边信息,使得渲染后的文字具有描边效果。
根据一个实施例,所述方法进一步包括步骤S8。
在步骤S8中,数据缓存装置基于预定的时间间隔在渲染线程中更新缓存字体的贴图。
优选地,所述时间间隔为100毫秒,数据缓存装置每100ms在渲染线程判断贴图是否需要更新到GPU,如需要更新,则数据缓存装置从CPU端拷贝数据到GPU,从而保证新缓存的文字最多100ms就会正常显示出来。并且,在拷贝数据的过程中不锁定CPU端数据,以避免造成新能浪费。
图2示出了根据本申请实施例的缓存字体的方法流程图。根据本实施例的方法包括步骤S201,步骤S202和步骤S203。
在步骤S201中,数据缓存装置通过对用于缓存字体的贴图进行切割得到多个相同大小的正方形,使得每个正方形作为一种字体的某个字号的缓存块。
优选地,数据缓存装置通过对用于缓存字体的贴图进行切割得到64个相同大小的正方形,以使用64个缓存块对需要渲染的字体进行缓存。
在步骤S202中,数据缓存装置在各个缓存块中存储相应大小和字体的文字的字体贴图数据。
在步骤S203中,数据缓存装置在渲染文字的过程中,基于待渲染文字的大小和字体,从相应的缓存块中加载贴图。
根据本申请的一个示例,数据缓存装置包含于UE4引擎。数据缓存装置创建一张大小为2048*2048的单通道贴图,用于缓存字体。并且,数据缓存装置对所创建的2048*2048的贴图进行切割,得到64个大小为256*256的小正方形,每个小正方形作为一种字体的某个字号的缓存块。
并且,数据缓存装置创建用于查找特定字体和大小的字体贴图数据的映射表,该映射表记录各种大小的具体文字的缓存贴图的UV地址。
如果需要渲染大小为n的字体A的某个文字,相应的缓存字体逻辑如下所示:
使用该映射表查找大小为n的字体A的某个文字,确定“是否可以查找到”。如果没有在映射表中查找到,则实时地从字体A对应的文件中加载相关贴图。如果可以在映射表中查找到,则确定是否存在大小为n的字体A对应的缓存块。
如果不存在大小为n的字体A对应的缓存块,则申请新的缓存块。如果存在大小为n的字体A对应的缓存块,则在缓存块中按照横向的顺讯逐行查找剩余的空间来存放所需文字的贴图。
如果当前贴图中的缓存块已经使用完毕,则确定是否存在大小为n的字体A对应的缓存块。如果存在,则将所需文字的贴图覆盖其中使用率最低的某个文字的缓存,并相应地更新映射表。如果不存在,则申请新的大小为2048*2048的贴图来创建大小为n的字体A对应的缓存块。
根据本申请实施例的方法,通过贴图中的多个缓存块来缓存所需要的多种字体,节省了缓存字体所占用的内存空间,提升了效率。
图3示出了根据本申请实施例的缓存贴图的方法流程图
根据本实施例的方法包括步骤S301和步骤S302。
参照图3,在步骤S301中,在渲染的过程中,数据缓存装置记录使用过的各个贴图的使用频率信息。
例如,贴图在过去三个月内的使用次数,又例如,某贴图距离上次被使用时的时间长短等等。
在步骤S302中,数据缓存装置根据各个贴图的使用频率信息,将使用频率低于预定阈值的贴图对应的纹理销毁。
例如,将过去半年使用次数低于5次的贴图对应的纹理销毁。又例如,将超过一个月未被使用的贴图对应的纹理销毁等等。
优选地,根据本实施例的方法进一步包括步骤S303。
在步骤S303中,数据缓存装置创建或更新贴图的加载路径和纹理的映射表。
优选地,根据本实施例的方法进一步包括步骤S304。
在步骤S304中,如果已销毁的贴图重新被访问,则数据缓存装置根据该贴图的加载路径进行异步加载。
优选地,在异步加载的过程中数据缓存装置不对该贴图对应的数据进行渲染,或者,使用默认的贴图代替该贴图。
根据一个示例,数据缓存装置包含于UE4引擎。数据缓存装置建立贴图加载路径和纹理数据指针的映射表。并且,在每次渲染贴图时,数据缓存装置为所使用的贴图设置时间标志并进行记录。如果某个贴图的时间标志远小于当前时间时,则销毁该贴图对应的纹理,以节省内存空间。
如果已销毁的贴图重新被访问,则数据缓存装置根据该贴图的加载路径进行异步加载,避免阻塞当前的逻辑线程和渲染线程。并且,数据缓存装置不对该贴图对应的UI数据进行渲染,或者,使用默认的贴图代替该贴图。
根据本申请实施例的方法,通过将使用率低的贴图对应的纹理销毁,进一步节省了内存空间。
图4示出了根据本申请实施例的一种数据缓存装置的结构示意图。所述数据缓存装置包括用于在渲染引擎中使用多个缓存块对需要渲染的字体进行缓存的装置(以下简称“字体缓存装置1”)。
字体缓存装置1在渲染引擎中使用多个缓存块对需要渲染的字体进行缓存。
其中,通过对用于缓存字体的贴图进行切割得到所述多个缓存块。所述缓存块用于缓存需要渲染的多种字体相对应的贴图数据。
优选地,字体缓存装置1通过对用于缓存字体的贴图进行切割得到64个相同大小的正方形,以使用64个缓存块对需要渲染的字体进行缓存。
优选地,每个缓存块对应于特定字体的某个字号。例如,一个缓存块可对应于“二号”大小的“幼圆”字体。
根据一个实施例,所述数据缓存装置进一步包括用于创建或更新用于查找特定字体和大小的字体贴图数据的映射表的装置(以下简称“子字体映射装置”)。
子字体映射装置创建或更新用于查找特定字体和大小的字体贴图数据的映射表。
优选地,该映射表中记录各种大小的具体文字的缓存贴图的UV地址。
根据一个实施例,所述数据缓存装置进一步包括用于记录缓存块中各个文字的使用频率信息的装置(以下简称“字体记录装置”),和用于如果一缓存块已满,将其中使用频率最低的一个或多个文字对应的缓存空间回收的装置(以下简称“空间回收装置”)。
字体记录装置记录缓存块中各个文字的使用频率信息。
其中,所述使用频率信息包括各种可用于指示文字的使用频率的高低的信息。例如,某个文字在过去半年内的使用次数,又例如,某个文字距离上次被使用时的时间长短等等。
如果一缓存块已满,空间回收装置将其中使用频率最低的一个或多个文字对应的缓存空间回收。
根据一个实施例,所述数据缓存装置进一步包括用于使用不同的数据段在字体文件中加载相应的字体贴图信息和字体描边信息的装置(以下简称“描边加载装置”),用于对该字体贴图信息和字体描边信息进行打包,得到相应的字体打包数据的装置(以下简称“描边打包装置”),和用于在渲染文字时通过字体打包数据进行解包操作,得到相应的字体贴图信息和字体描边信息,使得渲染后的文字具有描边效果的装置(以下简称“描边解包装置”)。
描边加载装置使用不同的数据段在字体文件中加载相应的字体贴图信息和字体描边信息。
描边打包装置对该字体贴图信息和字体描边信息进行打包,得到相应的字体打包数据。
描边解包装置在渲染文字时通过字体打包数据进行解包操作,得到相应的字体贴图信息和字体描边信息,使得渲染后的文字具有描边效果。
例如,描边加载装置从字体文件中加载某种字体对应的字体贴图信息和字体描边信息。并且,在用于缓存字体数据的数据段中,所加载的字体描边信息占用0到0.5数据段,字体贴图信息占用0.5到1数据段。并且,描边解包装置对该字体贴图信息和字体描边信息进行打包,得到相应的字体打包数据。在渲染文字时,描边解包装置通过字体打包数据进行解包操作,得到相应的字体贴图信息和字体描边信息,使得渲染后的文字具有描边效果。
根据一个实施例,所述数据缓存装置进一步包括用于基于预定的时间间隔在渲染线程中更新缓存字体的贴图的装置(以下简称“字体更新装置”)。
字体更新装置基于预定的时间间隔在渲染线程中更新缓存字体的贴图。
优选地,所述时间间隔为100毫秒,字体更新装置每100ms在渲染线程判断贴图是否需要更新到GPU,如需要更新,则字体更新装置从CPU端拷贝数据到GPU,从而保证新缓存的文字最多100ms就会正常显示出来。并且,在拷贝数据的过程中不锁定CPU端数据,以避免造成新能浪费。
图5示出了根据本申请实施例的用于缓存字体的数据缓存装置的结构示意图。根据本实施例的字体缓存装置1进一步包括用于通过对用于缓存字体的贴图进行切割得到多个相同大小的正方形,使得每个正方形作为一种字体的某个字号的缓存块的装置(以下简称“贴图切割装置201”),用于在各个缓存块中存储相应大小和字体的文字的字体贴图数据的装置(以下简称“分块缓存装置202”),和用于在渲染文字的过程中,基于待渲染文字的大小和字体,从相应的缓存块中加载贴图的装置(以下简称“分块加载装置203”)。
贴图切割装置201通过对用于缓存字体的贴图进行切割得到多个相同大小的正方形,使得每个正方形作为一种字体的某个字号的缓存块。
优选地,贴图切割装置201通过对用于缓存字体的贴图进行切割得到64个相同大小的正方形,以使用64个缓存块对需要渲染的字体进行缓存。
分块缓存装置202在各个缓存块中存储相应大小和字体的文字的字体贴图数据。
分块加载装置203在渲染文字的过程中,基于待渲染文字的大小和字体,从相应的缓存块中加载贴图。
根据本申请的一个示例,数据缓存装置包含于UE4引擎。数据缓存装置创建一张大小为2048*2048的单通道贴图,用于缓存字体。并且,贴图切割装置202对所创建的2048*2048的贴图进行切割,得到64个大小为256*256的小正方形,每个小正方形作为一种字体的某个字号的缓存块。
并且,字体映射装置创建用于查找特定字体和大小的字体贴图数据的映射表,该映射表记录各种大小的具体文字的缓存贴图的UV地址。
如果需要渲染大小为n的字体A的某个文字,相应的缓存字体逻辑如下所示:
使用该映射表查找大小为n的字体A的某个文字,确定“是否可以查找到”。如果没有在映射表中查找到,则实时地从字体A对应的文件中加载相关贴图。如果可以在映射表中查找到,则确定是否存在大小为n的字体A对应的缓存块。
如果不存在大小为n的字体A对应的缓存块,则申请新的缓存块。如果存在大小为n的字体A对应的缓存块,则在缓存块中按照横向的顺讯逐行查找剩余的空间来存放所需文字的贴图。
如果当前贴图中的缓存块已经使用完毕,则确定是否存在大小为n的字体A对应的缓存块。如果存在,则将所需文字的贴图覆盖其中使用率最低的某个文字的缓存,并相应地更新映射表。如果不存在,则申请新的大小为2048*2048的贴图来创建大小为n的字体A对应的缓存块。
根据本申请实施例的方案,通过贴图中的多个缓存块来缓存所需要的多种字体,节省了缓存字体所占用的内存空间,提升了效率。
图6示出了根据本申请实施例的用于缓存贴图的数据缓存装置的结构示意图。根据本实施例的数据缓存装置包括用于在渲染的过程中记录使用过的各个贴图的使用频率信息的装置(以下简称“贴图记录装置301”),用于根据各个贴图的使用频率信息,将使用频率低于预定阈值的贴图对应的纹理销毁的装置(以下简称“纹理销毁装置302”)。
参照图6,在渲染的过程中,贴图记录装置301记录使用过的各个贴图的使用频率信息。
例如,贴图在过去三个月内的使用次数,又例如,某贴图距离上次被使用时的时间长短等等。
纹理销毁装置302根据各个贴图的使用频率信息,将使用频率低于预定阈值的贴图对应的纹理销毁。
例如,将过去半年使用次数低于5次的贴图对应的纹理销毁。又例如,将超过一个月未被使用的贴图对应的纹理销毁等等。
优选地,根据本实施例的数据缓存装置进一步包括用于创建或更新贴图的加载路径和纹理的映射表的装置(以下简称“纹理映射装置”)。
纹理映射装置创建或更新贴图的加载路径和纹理的映射表。
优选地,根据本实施例的数据缓存装置进一步包括用于如果已销毁的贴图重新被访问,则根据该贴图的加载路径进行异步加载的装置(以下简称“异步加载装置”)。
如果已销毁的贴图重新被访问,则异步加载装置根据该贴图的加载路径进行异步加载。
优选地,在异步加载的过程中异步加载装置不对该贴图对应的数据进行渲染,或者,使用默认的贴图代替该贴图。
根据一个示例,数据缓存装置包含于UE4引擎。纹理映射装置建立贴图加载路径和纹理数据指针的映射表。并且,在每次渲染贴图时,贴图记录装置301为所使用的贴图设置时间标志并进行记录。如果某个贴图的时间标志远小于当前时间时,则纹理销毁装置302销毁该贴图对应的纹理,以节省内存空间。
如果已销毁的贴图重新被访问,则异步加载装置根据该贴图的加载路径进行异步加载,避免阻塞当前的逻辑线程和渲染线程。并且,异步加载装置不对该贴图对应的UI数据进行渲染,或者,使用默认的贴图代替该贴图。
根据本申请实施例的方案,通过将使用率低的贴图对应的纹理销毁,进一步节省了内存空间。
本发明的软件程序可以通过处理器执行以实现上文所述步骤或功能。同样地,本发明的软件程序(包括相关的数据结构)可以被存储到计算机可读记录介质中,例如,RAM存储器,磁或光驱动器或软磁盘及类似设备。另外,本发明的一些步骤或功能可采用硬件来实现,例如,作为与处理器配合从而执行各个功能或步骤的电路。
另外,本发明的一部分可被应用为计算机程序产品,例如计算机程序指令,当其被计算机执行时,通过该计算机的操作,可以调用或提供根据本发明的方法和/或技术方案。而调用本发明的方法的程序指令,可能被存储在固定的或可移动的记录介质中,和/或通过广播或其他信号承载媒体中的数据流而被传输,和/或被存储在根据所述程序指令运行的计算机设备的工作存储器中。在此,根据本发明的一个实施例包括一个装置,该装置包括用于存储计算机程序指令的存储器和用于执行程序指令的处理器,其中,当该计算机程序指令被该处理器执行时,触发该装置运行基于前述根据本发明的多个实施例的方法和/或技术方案。
对于本领域技术人员而言,显然本发明不限于上述示范性实施例的细节,而且在不背离本发明的精神或基本特征的情况下,能够以其他的具体形式实现本发明。因此,无论从哪一点来看,均应将实施例看作是示范性的,而且是非限制性的,本发明的范围由所附权利要求而不是上述说明限定,因此旨在将落在权利要求的等同要件的含义和范围内的所有变化涵括在本发明内。不应将权利要求中的任何附图标记视为限制所涉及的权利要求。此外,显然“包括”一词不排除其他单元或步骤,单数不排除复数。系统权利要求中陈述的多个单元或装置也可以由一个单元或装置通过软件或者硬件来实现。第一,第二等词语用来表示名称,而并不表示任何特定的顺序。
Claims (15)
1.一种渲染引擎中的数据缓存方法,包括:
通过对用于缓存字体的贴图进行切割得到多个相同大小的正方形,使得每个正方形作为缓存块;
在渲染引擎中使用所述缓存块缓存对需要渲染的字体相对应的字体贴图数据。
2.根据权利要求1所述的方法,所述缓存块用于缓存同一大小和字体的文字相对应的字体贴图数据,
所述方法还包括:
在渲染文字的过程中,基于待渲染文字的大小和字体,从相应的缓存块中加载贴图。
3.根据权利要求1所述的方法,所述通过对用于缓存字体的贴图进行切割得到多个相同大小的正方形包括:
通过对用于缓存字体的贴图进行切割得到64个相同大小的正方形,以使用64个缓存块对需要渲染的字体进行缓存。
4.根据权利要求1至3中任一项所述的方法,进一步包括:
记录缓存块中各个文字的使用频率信息;
如果一缓存块已满,将其中使用频率最低的一个或多个文字对应的缓存空间回收。
5.根据权利要求1至3中任一项所述的方法,进一步包括:
创建或更新用于查找特定字体和大小的字体贴图数据的映射表。
6.根据权利要求1至3中任一项所述的方法,进一步包括:
使用不同的数据段在字体文件中加载相应的字体贴图信息和字体描边信息;
对该字体贴图信息和字体描边信息进行打包,得到相应的字体打包数据;
在渲染文字时通过字体打包数据进行解包操作,得到相应的字体贴图信息和字体描边信息,使得渲染后的文字具有描边效果。
7.根据权利要求1至3中任一项所述的方法,进一步包括:
基于预定的时间间隔在渲染线程中更新缓存字体的贴图。
8.根据权利要求1所述的方法,进一步包括:
在渲染的过程中,记录使用过的各个贴图的使用频率信息;
根据各个贴图的使用频率信息,将使用频率低于预定阈值的贴图对应的纹理销毁。
9.根据权利要求8所述的方法,进一步包括:
创建或更新贴图的加载路径和纹理的映射表。
10.根据权利要求8或9所述的方法,进一步包括:
如果已销毁的贴图重新被访问,则根据该贴图的加载路径进行异步加载。
11.根据权利要求10所述的方法,所述根据该贴图的加载路径进行异步加载进一步包括:
在异步加载的过程中不对该贴图对应的数据进行渲染,或者,使用默认的贴图代替该贴图。
12.一种渲染引擎中的数据缓存装置,包括:
用于通过对用于缓存字体的贴图进行切割得到多个相同大小的正方形,使得每个正方形作为缓存块;在渲染引擎中使用所述缓存块缓存对需要渲染的字体相对应的字体贴图数据的装置。
13.根据权利要求12所述的数据缓存装置,所述缓存块用于缓存同一大小和字体的文字相对应的字体贴图数据,所述装置进一步包括:
用于在渲染文字的过程中,基于待渲染文字的大小和字体,从相应的缓存块中加载贴图的装置。
14.一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现如权利要求1至11中任一所述的方法。
15.一种计算机可读的存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现如权利要求1至11中任一所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010228258.2A CN111581910B (zh) | 2020-03-27 | 2020-03-27 | 一种渲染引擎中的数据缓存方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010228258.2A CN111581910B (zh) | 2020-03-27 | 2020-03-27 | 一种渲染引擎中的数据缓存方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111581910A CN111581910A (zh) | 2020-08-25 |
CN111581910B true CN111581910B (zh) | 2023-06-13 |
Family
ID=72113542
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010228258.2A Active CN111581910B (zh) | 2020-03-27 | 2020-03-27 | 一种渲染引擎中的数据缓存方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111581910B (zh) |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101833542A (zh) * | 2010-04-21 | 2010-09-15 | 中兴通讯股份有限公司 | 一种用户界面字体渲染方法及装置 |
CN103186919A (zh) * | 2011-12-28 | 2013-07-03 | 腾讯科技(深圳)有限公司 | 一种文字渲染方法及装置 |
CN105022731A (zh) * | 2014-04-16 | 2015-11-04 | 北京极海纵横信息技术有限公司 | 一种地图矢量瓦片缓存的方法 |
CN105224565A (zh) * | 2014-06-24 | 2016-01-06 | 广州市动景计算机科技有限公司 | 文字缓存方法及装置 |
CN106156148A (zh) * | 2015-04-14 | 2016-11-23 | 腾讯科技(深圳)有限公司 | 一种页面的渲染方法、装置和终端设备 |
CN107463398A (zh) * | 2017-07-21 | 2017-12-12 | 腾讯科技(深圳)有限公司 | 游戏渲染方法、装置、存储设备及终端 |
CN107479887A (zh) * | 2017-08-11 | 2017-12-15 | 腾讯科技(深圳)有限公司 | 一种数据显示方法、装置及存储设备 |
CN109389666A (zh) * | 2018-09-29 | 2019-02-26 | 吉林动画学院 | 分布式实时渲染装置及方法 |
-
2020
- 2020-03-27 CN CN202010228258.2A patent/CN111581910B/zh active Active
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101833542A (zh) * | 2010-04-21 | 2010-09-15 | 中兴通讯股份有限公司 | 一种用户界面字体渲染方法及装置 |
CN103186919A (zh) * | 2011-12-28 | 2013-07-03 | 腾讯科技(深圳)有限公司 | 一种文字渲染方法及装置 |
CN105022731A (zh) * | 2014-04-16 | 2015-11-04 | 北京极海纵横信息技术有限公司 | 一种地图矢量瓦片缓存的方法 |
CN105224565A (zh) * | 2014-06-24 | 2016-01-06 | 广州市动景计算机科技有限公司 | 文字缓存方法及装置 |
CN106156148A (zh) * | 2015-04-14 | 2016-11-23 | 腾讯科技(深圳)有限公司 | 一种页面的渲染方法、装置和终端设备 |
CN107463398A (zh) * | 2017-07-21 | 2017-12-12 | 腾讯科技(深圳)有限公司 | 游戏渲染方法、装置、存储设备及终端 |
CN107479887A (zh) * | 2017-08-11 | 2017-12-15 | 腾讯科技(深圳)有限公司 | 一种数据显示方法、装置及存储设备 |
CN109389666A (zh) * | 2018-09-29 | 2019-02-26 | 吉林动画学院 | 分布式实时渲染装置及方法 |
Also Published As
Publication number | Publication date |
---|---|
CN111581910A (zh) | 2020-08-25 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111596903B (zh) | 一种渲染引擎中的数据处理方法和装置 | |
CN111898049B (zh) | 一种表格实现方法、装置、计算机终端设备及存储介质 | |
CN102129425B (zh) | 数据仓库中大对象集合表的访问方法及装置 | |
CN103035164B (zh) | 一种地理信息系统渲染方法及系统 | |
CN103678631A (zh) | 页面渲染方法及装置 | |
CN107885666A (zh) | 一种内存管理方法和装置 | |
WO2013109463A1 (en) | Low resolution placeholder content for document navigation | |
KR20200067222A (ko) | 그래픽스 파이프라인에서의 인덱스들의 압축 및 압축 해제 | |
CN108769211A (zh) | 客户端设备、网页的路由方法和计算机可读存储介质 | |
CN112925606B (zh) | 一种内存管理方法、装置及设备 | |
US9324299B2 (en) | Atlasing and virtual surfaces | |
CN115061680A (zh) | 一种基于ECharts地图组件实现自定义展示面板的方法 | |
CN111581910B (zh) | 一种渲染引擎中的数据缓存方法和装置 | |
CN104951244A (zh) | 用于存取数据的方法和设备 | |
CN101183366B (zh) | 一种图片文件处理方法和系统 | |
JP2004505355A (ja) | データ処理システムにおける動的グラフィックス・コンテキスト切替の方法および装置 | |
CN111831691A (zh) | 一种数据读写方法及装置、电子设备、存储介质 | |
CN117573125A (zh) | 一种树形结构数据渲染方法及装置 | |
WO2018057401A1 (en) | Preserve input focus while scrolling in a virtualized dataset | |
CN117056123A (zh) | 数据恢复方法、装置、介质及电子设备 | |
CN116414935A (zh) | 一种基于Elastic Search的分布式搜索空间矢量数据的方法 | |
CN112541140A (zh) | 一种列表加载方法、终端设备、电子设备及存储介质 | |
CN109683939A (zh) | 组件对象更新方法、装置以及存储介质 | |
CN102270179A (zh) | 用于cad系统的基于片元的数据存储和处理方法及其系统 | |
CN114756797A (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 |