一种基于FreeType的双缓存文字统一快速渲染方法技术

技术编号:36430912 阅读:13 留言:0更新日期:2023-01-20 22:42
本发明专利技术提供了一种基于FreeType的双缓存文字统一快速渲染方法,包括:在程序初始化时设置大纹理存储区、纹理更新缓存区和位图数据缓存区,使用大纹理存储区保存已绘制的字符纹理,纹理更新缓存区存储已绘制文字的字符编码,位图数据缓存区存储位图数据对象;基于FreeType生成位图数据,然后利用OpenGL函数转换为字符纹理,根据待绘制文字的字符编码索引到位图数据缓存区中的位图数据对象,确定该文字是否被绘制过,当文字再次绘制时,取出大纹理中该文字的字符纹理或者取出该文字的位图数据,使用OpenGL函数进行纹理贴图完成文字的渲染。本发明专利技术减少了文字的渲染过程和避免了字符纹理实时纹理贴图时过多的OpenGL状态频繁的改变,从而提高文字快速渲染能力。从而提高文字快速渲染能力。从而提高文字快速渲染能力。

【技术实现步骤摘要】
一种基于FreeType的双缓存文字统一快速渲染方法


[0001]本专利技术涉及图形渲染应用软件
,具体涉及一种基于FreeType的双缓存文字统一快速渲染方法。

技术介绍

[0002]由于越来越多的文字显示需求,大量文字同时绘制导致渲染效率低,特别是在性能较低的系统上,文字显示速度慢的问题更加明显。如何提高文字渲染性能成为一个亟待解决的问题。

技术实现思路

[0003]有鉴于此,本申请实施例提供一种基于FreeType的双缓存文字统一快速渲染方法,实现了文字的快速渲染,解决了大量文字同时绘制导致渲染效率低的问题。
[0004]本申请实施例提供以下技术方案:一种基于FreeType的双缓存文字统一快速渲染方法,包括:
[0005]在程序初始化时设置大纹理存储区、纹理更新缓存区和位图数据缓存区;所述大纹理存储区用于存储已绘制文字的字符纹理,所述纹理更新缓存区用于存储已绘制文字的字符编码,所述位图数据缓存区用于存储与所述字符编码对应的位图数据对象;
[0006]根据待绘制文字的字符编码和设定的字体大小,采用FreeType生成对应的位图数据,使用OpenGL函数将该位图数据转换为字符纹理;将该字符纹理存储在所述大纹理存储区,将待绘制文字的字符编码存储在所述纹理更新缓存区,将位图数据存储在所述位图数据缓存区中对应的位图数据对象里;;
[0007]根据文字是否被绘制过和该文字的字符纹理是否在所述大纹理存储区中,设置位图数据对象的状态值,若该文字没有被绘制过,则状态值设置初始值0;若该文字被绘制过且字符纹理在所述大纹理存储区中,则状态值设置为1;若该文字被绘制过但字符纹理在所述大纹理存储区中被剔除,则状态值设置为2;
[0008]根据待绘制文字的字符编码索引到所述位图数据缓存区中的位图数据对象,获得位图数据、状态值、在大纹理存储区中的位置信息;
[0009]状态值为1时,可根据位置信息直接获得字符纹理,并在所述纹理更新缓存区找到对应的字符编码,将该字符编码更新至该纹理更新缓存区的第一位;
[0010]状态值为0时,使用FreeType获得文字的位图数据,再使用OpenGL将位图数据生成字符纹理;
[0011]状态值为2时,取出位图数据对象中的位图数据,使用OpenGL将位图数据生成字符纹理;
[0012]使用OpenGL函数对字符纹理进行纹理贴图完成文字的渲染。
[0013]根据一种实施例,所述大纹理存储区和所述纹理更新缓存区的存储量相等,所述大纹理存储区存储的字符纹理与所述纹理更新缓存区存储的字符编码一一对应。
[0014]根据一种实施例,还包括:当状态值为0或2时,依据所述大纹理存储区的空间状态更新所述位图数据缓存区和所述纹理更新缓存区,具体包括:
[0015]所述大纹理存储区的空间状态未满时,将生成的字符纹理存储在所述大纹理存储区中,根据存储的位置信息更新文字对应的位图数据对象的位置属性并将其状态值设置为1,将对应的字符编码置于所述纹理更新缓存区的第一位;
[0016]所述大纹理存储区的空间状态满时,首先将所述纹理更新缓存区的最后一个字符编码取出,并根据该字符编码索引到所述位图数据缓存区中的对应位图数据对象,设置其状态值为2,然后根据位图数据对象的位置属性找到所述大纹理存储区中该字符纹理的位置信息,将其在所述大纹理存储区中替换成新生成的字符纹理,然后根据位置信息设置新绘制文字对应的位图数据对象的位置属性,并将其状态值设置为1,最后将新绘制文字的字符编码置于所述纹理更新缓存区的第一位。
[0017]根据一种实施例,还包括:
[0018]状态值设置为0时,该文字的位图数据对象中的位图数据和位置信息无效;
[0019]状态值设置为1时,该文字的位图数据对象中的位图数据和位置信息有效;
[0020]状态值设置为2时,该文字的位图数据对象中的位置信息无效,位图数据有效。
[0021]根据一种实施例,将字符纹理存储在所述大纹理存储区时,该字符纹理的宽高设置为字体的大小。
[0022]根据一种实施例,所述字符纹理以指示字符纹理存储的起始位置坐标为依据存储于所述大纹理存储区中,该起始位置坐标以字体大小为步长增加。
[0023]根据一种实施例,还包括:程序初始化时申请纹理缓存数组,所述纹理缓存数组包括:纹理坐标数组、颜色数组和绘制位置坐标数组;
[0024]当字符纹理生成后,先将字符纹理在所述大纹理存储区中的位置、文字颜色和其在屏幕上绘制的位置,分别存储到所述纹理坐标数组、颜色数组和绘制位置坐标数组中;再利用所述纹理缓存数组,使用OpenGL函数对每个字符纹理进行实时纹理贴图,对所有文字统一渲染。
[0025]与现有技术相比,本专利技术实施例减少了文字的渲染过程,避免了字符纹理实时纹理贴图时过多的OpenGL状态频繁的改变,从而提高文字快速渲染能力,提高文字渲染性能。
附图说明
[0026]为了更清楚地说明本申请实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的附图。
[0027]图1为本专利技术双缓存文字统一快速渲染流程图;
[0028]图2为本专利技术位图数据生成流程图;
[0029]图3为本专利技术纹理的创建与绘制流程图;
[0030]图4为本专利技术字符纹理存储示意图。
具体实施方式
[0031]下面结合附图对本申请实施例进行详细描述。
[0032]需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。下面将参考附图并结合实施例来详细说明本专利技术,对本专利技术的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本专利技术一部分实施例,而不是全部的实施例。基于本专利技术中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本专利技术保护的范围。
[0033]如图1所示,本专利技术实施例提供了一种基于FreeType的双缓存文字统一快速渲染方法,包括:
[0034]在程序初始化时设置大纹理存储区、纹理更新缓存区和位图数据缓存区;所述大纹理存储区用于存储已绘制文字的字符纹理,所述纹理更新缓存区用于存储已绘制文字的字符编码,所述位图数据缓存区用于存储与所述字符编码对应的位图数据对象;其中,所述大纹理存储区和所述纹理更新缓存区的存储量相等,所述大纹理存储区存储的字符纹理与所述纹理更新缓存区存储的字符编码一一对应。
[0035]根据待绘制文字的字符编码和设定的字体大小,采用FreeType生成对应的位图数据,使用OpenGL函数将该位图数据转换为字符纹理;将该字符纹理存储在所述大纹理存储区,将待绘制文字的字符编码存储在所述纹理更新缓存区,对待绘制文字的每一个字符编码对应设置一个位图数据对象,并存储于所述位图数据缓存区;位本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种基于FreeType的双缓存文字统一快速渲染方法,其特征在于,包括:在程序初始化时设置大纹理存储区、纹理更新缓存区和位图数据缓存区;所述大纹理存储区用于存储已绘制文字的字符纹理,所述纹理更新缓存区用于存储已绘制文字的字符编码,所述位图数据缓存区用于存储与所述字符编码对应的位图数据对象;根据待绘制文字的字符编码和设定的字体大小,采用FreeType生成对应的位图数据,使用OpenGL函数将该位图数据转换为字符纹理;将该字符纹理存储在所述大纹理存储区,将待绘制文字的字符编码存储在所述纹理更新缓存区,将位图数据存储在所述位图数据缓存区中对应的位图数据对象里;根据文字是否被绘制过和该文字的字符纹理是否在所述大纹理存储区中,设置位图数据对象的状态值,若该文字没有被绘制过,则状态值为初始值0;若该文字被绘制过且字符纹理在所述大纹理存储区中,则状态值设置为1;若该文字被绘制过但字符纹理在所述大纹理存储区中被剔除,则状态值设置为2;根据待绘制文字的字符编码索引到所述位图数据缓存区中的位图数据对象,获得位图数据、状态值、在大纹理存储区中的位置信息;状态值为1时,可根据位置信息直接获得字符纹理,并在所述纹理更新缓存区找到对应的字符编码,将该字符编码更新至该纹理更新缓存区的第一位;状态值为0时,使用FreeType获得文字的位图数据,再使用OpenGL将位图数据生成字符纹理;状态值为2时,取出位图数据对象中的位图数据,使用OpenGL将位图数据生成字符纹理;使用OpenGL函数对字符纹理进行纹理贴图完成文字的渲染。2.根据权利要求1所述的双缓存文字统一快速渲染方法,其特征在于,所述大纹理存储区和所述纹理更新缓存区的存储量相等,所述大纹理存储区存储的字符纹理与所述纹理更新缓存区存储的字符编码一一对应。3.根据权利要求1所述的双缓存文字统一快速渲染方法,其特征在于,还包括:当状态值为0或2时,依据所述大纹理存储区的空间状态更新所述位图数据缓存区和所述纹理更新...

【专利技术属性】
技术研发人员:张亚平文圣丰于翔吴楠柴睿鸽王璇刘书羽
申请(专利权)人:中国航空工业集团公司西安航空计算技术研究所
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1