您好,欢迎来到华拓网。
搜索
您的当前位置:首页优化Canvas绘制性能的方法及装置[发明专利]

优化Canvas绘制性能的方法及装置[发明专利]

来源:华拓网
(19)中华人民共和国国家知识产权局

(12)发明专利申请

(10)申请公布号 CN 105096367 A (43)申请公布日 2015.11.25

(21)申请号 201410183109.3(22)申请日 2014.04.30

(71)申请人广州市动景计算机科技有限公司

地址510665 广东省广州市天河区黄埔大道

西平云路163号广电平云广场B塔16楼(72)发明人梁捷 易旭昕

(74)专利代理机构北京鸿元知识产权代理有限

公司 11327

代理人陈英俊 龚洁(51)Int.Cl.

G06T 15/00(2011.01)G06T 1/20(2006.01)

权利要求书2页 说明书8页 附图3页

()发明名称

优化Canvas绘制性能的方法及装置(57)摘要

本发明提供一种优化Canvas绘制性能的方法及装置,其中的方法包括:压缩解码后的非压缩位图,获得与非压缩位图相对应的压缩纹理数据;根据压缩纹理数据创建非压缩位图的压缩纹理;将压缩纹理绘制到Canvas上。通过本发明能够减少纹理对内存的占用量,同时提高GPU对纹理进行贴图操作的性能。

C N 1 0 5 0 9 6 3 6 7 ACN 105096367 A

权 利 要 求 书

1/2页

1.一种优化Canvas绘制性能的方法,包括:压缩解码后的非压缩位图,生成与所述非压缩位图相对应的压缩纹理数据;根据所述压缩纹理数据创建所述非压缩位图的压缩纹理;将所述压缩纹理绘制到Canvas上。

2.如权利要求1所述的优化Canvas绘制性能的方法,其中,在压缩解码后的非压缩位图生成与所述非压缩位图相对应的压缩纹理数据的过程中,通过在后台运行的纹理压缩线程将所述非压缩位图进行压缩生成与所述非压缩位图相对应的压缩纹理数据。

3.如权利要求2所述的优化Canvas绘制性能的方法,其中,在生成与所述非压缩位图相对应的压缩纹理数据后,将所述压缩纹理数据存储于缓存区。

4.如权利要求3所述的优化Canvas绘制性能的方法,其中,根据所述压缩纹理数据创建所述非压缩位图的压缩纹理前包括:

查找所述缓存区中是否存在所述压缩纹理数据,当所述缓存区中存在所述压缩纹理数据时,从所述缓存区中获取所述压缩纹理数据。5.如权利要求1-4任意一项所述的优化Canvas绘制性能的方法,其中,压缩解码后的非压缩位图,生成与所述非压缩位图相对应的压缩纹理数据前包括:

根据预设条件判断所述非压缩位图是否能够进行纹理压缩,其中,所述预设条件为:非压缩位图为不可变、非压缩位图的宽度小于或者等于设备支持的最大纹理宽度并且大于或者等于128像素、所述非压缩位图的绘制次数超过设定的阈值;

当所述非压缩位图满足上述预设条件中的一项或者多项组合时,即判断所述非压缩位图能够进行纹理压缩。

6.一种优化Canvas绘制性能的装置,包括:压缩纹理数据生成单元,用于压缩解码后的非压缩位图,生成与所述非压缩位图相对应的压缩纹理数据;

压缩纹理创建单元,用于根据所述压缩纹理数据生成单元所生成的压缩纹理数据创建所述非压缩位图的压缩纹理;

绘制单元,用于将所述压缩纹理创建单元所创建的压缩纹理绘制到Canvas上。7.如权利要求6所述的优化Canvas绘制性能的装置,其中,所述压缩纹理数据生成单元包括,压缩模块和生成模块,

压缩模块用于压缩解码后的非压缩位图;生成模块用于生成与所述非压缩位图相对应的压缩纹理数据。

8.如权利要求6所述的优化Canvas绘制性能的装置,还包括:存储单元,用于将压缩纹理数据生成单元生成的与所述非压缩位图相对应的压缩纹理数据与非压缩位图的位图ID相对应的存储。

9.如权利要求8所述的优化Canvas绘制性能的装置,其中,所述压缩纹理创建单元进一步包括:

压缩纹理数据获取单元,用于查找所述存储单元中是否存在所述压缩纹理数据,当所述存储单元中存在所述压缩纹理数据时,从所述存储单元中获取所述压缩纹理数据,根据所获取的压缩纹理数据创建所述非压缩位图的压缩纹理。

10.如权利要求7~9任意一项所述的优化Canvas绘制性能的装置,还包括判断单元,

2

CN 105096367 A

权 利 要 求 书

2/2页

用于根据预设条件判断所述非压缩位图是否能够进行纹理压缩,其中,

所述预设条件为:非压缩位图为不可变、非压缩位图的宽度小于或者等于设备支持的最大纹理宽度并且大于或者等于128像素、所述非压缩位图的绘制次数超过设定的阈值;

当所述非压缩位图满足上述预设条件中的一项或者多项组合时,即判断所述非压缩位图能够进行纹理压缩。

3

CN 105096367 A

说 明 书

优化Canvas绘制性能的方法及装置

1/8页

技术领域

本发明涉及移动通信技术领域,更为具体地,涉及一种优化Canvas绘制性能的方

法及装置。

[0001]

背景技术

随着HTML5的兴起,尤其是Canvas的引入,使得Web页面的开发者完全不需要借

助Flash或者Silverlight之类的插件,便可以实现直接在网页中创建并操作动画,网页游戏便是最好的应用之一。

[0003] 通常一些HTML5Canvas网页游戏需要在Canvas上绘制大量的图片,例如背景、人物、前景修饰等等。这些图片一般使用PNG或者JPEG图像压缩格式进行编码,GPU(显卡处理器)在绘制这些图片时,需要先将图片进行解码得到一个非压缩的位图,然后再将这个非压缩的位图上传到纹理缓存区创建一个非压缩的纹理,最后通过贴图操作将这个非压缩的纹理绘制到Canvas上面。

[0004] 由于绘制到Canvas上面的纹理是非压缩的,因此占用的移动终端的内存较大,同时GPU在对非压缩的纹理进行贴图操作时,还需要多次访问内存,如此便造成GPU对纹理进行贴图操作的性能较差。

[0002]

发明内容

鉴于上述问题,本发明的目的是提供一种优化Canvas绘制性能的方法及装置,以

减少纹理对内存的占用,且能减少GPU对纹理进行贴图时访问内存的次数,进而提高GPU对纹理进行贴图操作的性能。

[0006] 根据本发明的一个方面,提供一种优化Canvas绘制性能的方法,包括:[0007] 压缩解码后的非压缩位图,生成与所述非压缩位图相对应的压缩纹理数据;[0008] 根据所述压缩纹理数据创建所述非压缩位图的压缩纹理;[0009] 将所述压缩纹理绘制到Canvas上。[0010] 其中,在压缩解码后的非压缩位图生成与所述非压缩位图相对应的压缩纹理数据的过程中,通过在后台运行的纹理压缩线程将所述非压缩位图进行压缩生成与所述非压缩位图相对应的压缩纹理数据。[0011] 其中,在生成与所述非压缩位图相对应的压缩纹理数据后,将所述压缩纹理数据存储于缓存区。[0012] 其中,根据所述压缩纹理数据创建所述非压缩位图的压缩纹理前包括:[0013] 查找所述缓存区中是否存在所述压缩纹理数据,[0014] 当所述缓存区中存在所述压缩纹理数据时,从所述缓存区中获取所述压缩纹理数据。

[0015] 其中,压缩解码后的非压缩位图,生成与所述非压缩位图相对应的压缩纹理数据前包括:

[0005]

4

CN 105096367 A[0016]

说 明 书

2/8页

根据预设条件判断所述非压缩位图是否能够进行纹理压缩,其中,

[0017] 所述预设条件为:非压缩位图为不可变、非压缩位图的宽度小于或者等于设备支持的最大纹理宽度并且大于或者等于128像素、所述非压缩位图的绘制次数超过设定的阈值;

[0018] 当所述非压缩位图满足上述预设条件中的一项或者多项组合时,即判断所述非压缩位图能够进行纹理压缩。[0019] 另一方面,本发明还提供一种优化Canvas绘制性能的装置,包括:[0020] 压缩纹理数据生成单元,用于压缩解码后的非压缩位图,生成与所述非压缩位图相对应的压缩纹理数据;[0021] 压缩纹理创建单元,用于根据所述压缩纹理数据生成单元所生成的压缩纹理数据创建所述非压缩位图的压缩纹理;[0022] 绘制单元,用于将所述压缩纹理创建单元所创建的压缩纹理绘制到Canvas上。[0023] 其中,所述压缩纹理数据生成单元包括,压缩模块和生成模块,[0024] 压缩模块用于压缩解码后的非压缩位图;生成模块用于生成与所述非压缩位图相对应的压缩纹理数据。

[0025] 进一步包括存储单元,用于将压缩纹理数据生成单元生成的与所述非压缩位图相对应的压缩纹理数据与非压缩位图的位图ID相对应的存储。[0026] 其中,所述压缩纹理创建单元进一步包括:[0027] 压缩纹理数据获取单元,用于查找所述存储单元中是否存在所述压缩纹理数据,当所述存储单元中存在所述压缩纹理数据时,从所述存储单元中获取所述压缩纹理数据,根据所获取的压缩纹理数据创建所述非压缩位图的压缩纹理。[0028] 进一步包括还包括判断单元,用于根据预设条件判断所述非压缩位图是否能够进行纹理压缩,其中,

[0029] 所述预设条件为:非压缩位图为不可变、非压缩位图的宽度小于或者等于设备支持的最大纹理宽度并且大于或者等于128像素、所述非压缩位图的绘制次数超过设定的阈值;

[0030] 当所述非压缩位图满足上述预设条件中的一项或者多项组合时,即判断所述非压缩位图能够进行纹理压缩。

[0031] 根据本发明提供的优化Canvas绘制性能的方法及装置,首先对要绘制到Canvas上的图片进行解码,将解码后的位图实时进行压缩,之后创建一个压缩纹理,然后将压缩纹理绘制到Canvas上。由于本发明对要绘制到Canvas上的图片的解码后的位图数据进行了实时压缩,创建了一个压缩格式的纹理,从而能够减少纹理对内存的占用,进一步提高GPU对纹理进行贴图操作的性能。

[0032] 为了实现上述以及相关目的,本发明的一个或多个方面包括后面将详细说明并在权利要求中特别指出的特征。下面的说明以及附图详细说明了本发明的某些示例性方面。然而,这些方面指示的仅仅是可使用本发明的原理的各种方式中的一些方式。此外,本发明旨在包括所有这些方面以及它们的等同物。附图说明

5

CN 105096367 A[0033]

说 明 书

3/8页

通过参考以下结合附图的说明及权利要求书的内容,并且随着对本发明的更全面

理解,本发明的其它目的及结果将更加明白及易于理解。在附图中:

[0034] 图1为根据本发明实施例的优化Canvas绘制性能的方法的流程示意图;[0035] 图2为根据本发明实施例的优化Canvas绘制性能的方法的详细流程示意图;[0036] 图3为根据本发明实施例的优化Canvas绘制性能的装置逻辑结构框图。

[0037]

在所有附图中相同的标号指示相似或相应的特征或功能。

具体实施方式

[0038] 以下将结合附图对本发明的具体实施例进行详细描述。

[0039] 针对前述现有的贴图操作存在纹理占用内存较大且贴图操作的性能也较差的问题。本发明首先对要绘制到Canvas上的图片进行解码,将解码后的位图实时进行压缩,之后创建一个压缩纹理,然后将压缩纹理绘制到Canvas上。通过本发明能够减少纹理对内存的占用,且能减少GPU对纹理进行贴图时访问内存的次数进一步提高GPU对纹理进行贴图操作的性能。

[0040] 需要说明的是,本发明中所提到的Canvas绘制性能指的是GPU通过贴图操作将纹理绘制到Canvas上的性能,也就指的是GPU对纹理进行贴图操作的性能。[0041] 为了使本技术领域的人员更好地理解本发明实施例中的技术方案,并使本发明实施例的上述目的、特征和优点能够更加明显易懂,下面结合附图对本发明实施例中技术方案作进一步详细的说明。

[0042] 为了说明本发明提供的优化Canvas绘制性能的方法,图1示出了根据本发明实施例的优化Canvas绘制性能的方法的流程示意图。如图1所示,本发明提供的优化Canvas绘制性能的方法包括:[0043] S110:压缩解码后的非压缩位图,生成与非压缩位图相对应的压缩纹理数据。[0044] 具体地,对图片进行解码获得与图片相对应的非压缩位图。由于位图能够十分容易的模拟出像照片一样的真实效果,因而能够在后续的操作(例如贴图操作)中保证图片的质量。其中,在对图片进行解码获得与该图片相对应的位图时,该图片可以是PNG、JPG或者JPEG等任意格式的图片,而对图片进行解码后获得的与该图片相对应位图则是一个非压缩的位图。

[0045] 需要说明的是,由于浏览器要显示的每个图片都必须先解码才能显示,而在HTML5Canvas网页游戏中很多图片是会重复被绘制,一幅图可能在一秒钟内被重复绘制很多次。所以在浏览器执行HTML5Canvas网页游戏的时候。会首先将要显示的图片解码成非压缩的位图存储于存储位图数据的缓存区。该位图数据的缓存区用于存储位图的文件来源、位图原始的数据、位图解码后的数据以及位图的ID等信息。如果某个图片在第一次被绘制时还没有生成解码后的数据,浏览器就会先对该图片进行解码,也就是说如果浏览器接收到一个要绘制某个位图的指令后,首先会去存储位图的数据的缓存区查找这个位图的解码后的数据,如果没有解码后的数据就用位图的原始数据进行解码。另外,需要说明的是,在此步骤中生成的压缩纹理数据为GPU支持的压缩纹理格式数据,目前GPU支持的压缩纹理格式有ETC1、ETC2等。[0047] 在优选的实施例中,在压缩解码后的非压缩位图生成与非压缩位图相对应的压缩

[0046]

6

CN 105096367 A

说 明 书

4/8页

纹理数据的过程前,根据预设条件判断非压缩位图是否能够进行纹理压缩。根据预设条件判断非压缩位图是否能够进行纹理压缩的预设条件包括下面一项或者多项的组合,即非压缩位图为不可变、非压缩位图的宽度小于或者等于设备支持的最大纹理宽度并且大于或者等于128像素、所述非压缩位图的绘制次数超过设定的阈值。

[0048] 即当浏览器检查到一个非压缩位图将要被绘制到Canvas上时,首先位图数据的缓存区查找该非压缩位图的,找到后需要对该非压缩位图进行检查,以判断该位图是否满足进行纹理压缩的条件。具体根据如下条件进行判断:[0049] 1、该位图必须是不可变的。也就是说该位图是从外部加载的图片资源而不是程序动态创建的。因为只有从外部加载的图片才不会改变图片的数据,而程序动态创建的图片则有可能随着程序的改变而相应改变。[0050] 2、该位图的宽度小于或者等于终端系统所支持的最大纹理宽度并且大于或等于128像素。在此需要说明的是,终端系统所支持的最大纹理宽度取决于不同的硬件设备。[0051] 3、该位图被绘制的次数需超过一定的阈值。一般来说这个阈值是预设的,目的是为了避免只对绘制一次的图片进行压缩。例如有些Canvas游戏(即在Canvas绘制图片的网页游戏)使用Off-Screen Canvas作为原图的替代品,在这种情况下图片只会被绘制一次,如果将其进行纹理压缩后再进行绘制则对其进行压缩后进行绘制的效果不是很明显。本实施例中所述阈值设置为60。

[0052] 同时由于最终生成的压缩纹理数据为GPU支持的压缩纹理格式数据,而由于生成不同的GPU支持的压缩纹理格式则对所述非压缩位图也有一定的,例如,如果压缩成ETC1的格式,则在上述判断条件中增加该位图是不透明的,因为使用的压缩格式是ETC1,默认不支持Alpha通道,后面需要额外处理;如果压缩成ETC2的格式,则不需要要求位图为不透明就可以对透明图片进行压缩,因为其支持Alpha通道的纹理压缩格式。[0053] ETC1是GL ES2的标准压缩纹理格式,ETC2是GL ES3的标准压缩纹理格式。[00] 需要说明的是,上述条件是根据目前的技术而相应设定的,在未来这些条件也有可能发生变化,到时只需将发生变化的条件相应的加入到预设的条件中即可。[0055] 在进一步优选实施例中,压缩解码后的非压缩位图,生成与非压缩位图相对应的压缩纹理数据是通过在后台运行的纹理压缩线程将非压缩位图进行压缩生成与非压缩位图相对应的压缩纹理数据。

[0056] 即当判断出非压缩位图可以进行纹理压缩,则产生一个纹理压缩命令放入纹理压缩线程的命令队列里面等待压缩。具体地,由CPU在后台线程运行一个纹理压缩算法,将非压缩位图编码成压缩纹理数据,即纹理压缩线程在后台执行纹理压缩算法将非压缩位图编码成压缩纹理数据。这里的纹理压缩算法为GPU支持的压缩纹理格式对应的标准算法。即如果压缩为ETC1则为ETC1标准算法,如果压缩为ETC2则为ETC2标准算法。[0057] 在进一步优选实施例中,将所述压缩纹理数据存储于缓存区中。也就是说,在纹理压缩线程完成一个非压缩的位图压缩后,生成一个压缩后的压缩纹理数据对象存储于缓存区中。此步骤中是将需要绘制的非压缩位图的ID与压缩纹理数据对象对应的存储于缓存区中。本实施例通过后台线程进行压缩则可以避免阻塞Canvas的渲染线程,即避免GPU执行贴图的线程阻塞。[0058] S120:根据压缩纹理数据创建非压缩位图的压缩纹理。

7

CN 105096367 A[0059]

说 明 书

5/8页

其中,在根据压缩纹理数据创建非压缩位图的压缩纹理的过程前,需要查找所述

缓存区中是否存在所述压缩纹理数据,即根据需要绘制的非压缩位图的ID在缓存区中查找对应的压缩纹理对象。由于非压缩位图是不可变的,因此非压缩位图的ID值不会发生变化,使用非压缩位图的ID作为键值进行查找能够确保查找的准确性。

[0060] 当确定缓存区中确实有与非压缩位图相对应的压缩纹理数据对象时,则直接从缓存区中获取相应的压缩纹理数据,调用GL的API来创建压缩纹理。[0061] S130:将压缩纹理绘制到Canvas上。[0062] 具体地,GPU通过贴图操作将压缩纹理绘制到Canvas上。GPU既可以通过贴图操作将非压缩的纹理绘制到Canvas上,也可以通过贴图操作将符合其格式要求的压缩的纹理绘制到Canvas上。而同一个位图的压缩的纹理相比于非压缩的纹理,其占用的内存空间较小,会使得单位像素需要访问内存的次数也减少,进一步提高GPU对纹理进行贴图操作的性能。

[0063] 需要说明的是,由于GPU不能直接访问位图,因此要使用GPU去绘制位图则必须先生成位图相应的纹理供GPU进行贴图操作。[00] 然而本发明中,也有可能出现另外一种情况,即纹理压缩线程还没有完成对即将要使用的非压缩位图进行压缩,因而此时缓存区中并没有与该非压缩位图相对应的压缩纹理数据。当缓存区中没有与非压缩位图相对应的压缩纹理数据时,则沿用以前的方式,先针对这个非压缩位图创建一个非压缩的纹理暂时使用,直到相应的压缩纹理创建完成为止。[0065] 通过上述实施例可以看出,本发明提供的优化Canvas绘制性能的方法,先通过对图片进行解码得到的该图片的非压缩位图,然后对该非压缩位图进行实时压缩生成GPU支持的压缩纹理格式数据,进而再生成一个压缩纹理供GPU进行贴图操作。压缩纹理不但占用内存更小,并且GPU使用压缩纹理进行贴图时,需要访问内存的次数也较少,贴图操作也会更快。

[0066] 为了更为详细地说明本发明提供的优化Canvas绘制性能的方法,图2示出了根据本发明实施例的优化Canvas绘制性能的方法的详细流程。如图2所示:[0067] S201:浏览器检测到非压缩位图将要被绘制到Canvas上。[0068] S202:判断非压缩位图数据存储器上是否有与将要被绘制到Canvas上的非压缩位图相对应的解码数据,如果没有进入步骤S203,如果有则进入步骤S204。[0069] S203:用非压缩位图的原始数据进行解码,获得解码数据。[0070] S204:判断该非压缩位图能否被压缩成GPU所支持的格式,如果不能被压缩成GPU支持的格式进入步骤205,如果能则进入步骤S206。[0071] S205:GPU通过贴图操作将非压缩位图的非压缩纹理绘制到Canvas上。此处需要说明的是,如果非压缩位图不能被压缩,则GPU通过贴图操作只能将非压缩位图的非压缩纹理绘制到Canvas上。[0072] S206:判断非压缩位图是否已经生成对应的压缩纹理,如果已经生成则进入步骤S207,否则进入S208。[0073] S207:GPU通过贴图操作将压缩纹理绘制到Canvas上。[0074] S208:判断缓存区中是否有对应的压缩纹理数据对象,如果有进入步骤S209,否则进入步骤S210。

8

CN 105096367 A[0075]

说 明 书

6/8页

S209:根据压缩纹理数据创建非压缩位图的压缩纹理,然后进入步骤S207。

[0076] S210:通过后台运行的纹理压缩线程将非压缩位图解码后进行压缩获得对应的压缩纹理数据。[0077] S211:将压缩数据生成对应的压缩纹理数据对象存储于缓存区中,然后进入步骤S209和S207。

[0078] 通过图1和图2所示的流程可以看出,本发明提供的优化Canvas绘制性能的方法,减少了纹理占用的内存大小,内存占用是非压缩纹理情况下的1/8,减少了内存访问次数,假设非压缩位图的一个像素为32bit,即4个字节,而压缩后的位图的一个像素为4bit,即半个字节,原先绘制非压缩位图8个像素时需要访问8次内存,而绘制压缩位图的8个像素只需要访问一次内存;所以能减少内存访问次数,提高GPU对贴图操作的性能,GPU贴图操作性能可以提高15%~20%。[0079] 与上述方法相对应,本发明还提供一种优化Canvas绘制性能的装置,图3示出了根据本发明实施例的优化Canvas绘制性能的装置逻辑结构。[0080] 如图3所示,本发明提供的优化Canvas绘制性能的装置300包括压缩纹理数据生成单元压缩纹理数据生成单元310、压缩纹理创建单元320和绘制单元330。其中,压缩纹理数据生成单元压缩纹理数据生成单元310用于压缩解码后的非压缩位图,生成与非压缩位图相对应的压缩纹理数据。[0082] 具体地,对图片进行解码获得与图片相对应的非压缩位图。由于位图能够十分容易的模拟出像照片一样的真实效果,因而能够在后续的操作(例如贴图操作)中保证图片的质量。其中,在对图片进行解码获得与该图片相对应的位图时,该图片可以是PNG、JPG或者JPEG等任意格式的图片,而对图片进行解码后获得的与该图片相对应位图则是一个非压缩的位图。

[0083] 需要说明的是,由于浏览器要显示的每个图片都必须先解码才能显示,而在HTML5Canvas网页游戏中很多图片是会重复被绘制,一幅图可能在一秒钟内被重复绘制很多次。所以在浏览器执行HTML5Canvas网页游戏的时候。会首先将要显示的图片解码成非压缩的位图存储于存储位图数据的缓存区。该位图数据的缓存区用于存储位图的文件来源、位图原始的数据、位图解码后的数据以及位图的ID等信息。如果某个图片在第一次被绘制时还没有生成解码后的数据,浏览器就会先对该图片进行解码,也就是说如果浏览器接收到一个要绘制某个位图的指令后,首先会去存储位图的数据的缓存区查找这个位图的解码后的数据,如果没有解码后的数据就用位图的原始数据进行解码。[0084] 另外,需要说明的是,在压缩纹理数据生成单元310中生成的压缩纹理数据为GPU支持的压缩纹理格式数据,目前GPU支持的压缩纹理格式有ETC1、ETC2等。[0085] 其中,优选的实施例中还包括判断单元(图中未示出),用于在压缩解码后的非压缩位图获得与非压缩位图相对应的压缩纹理数据的过程前,根据预设条件判断非压缩位图是否能够进行纹理压缩。

[0086] 在根据预设条件判断非压缩位图是否能够进行纹理压缩的预设条件包括下面一项或者多项的组合,即非压缩位图为不可变、非压缩位图的宽度小于或者等于设备支持的最大纹理宽度并且大于或者等于128像素、所述非压缩位图的绘制次数超过设定的阈值。

[0081] [0087]

同时由于生成的压缩纹理数据为GPU支持的压缩纹理格式数据,而由于生成不同

9

CN 105096367 A

说 明 书

7/8页

的GPU支持的压缩纹理格式则对所述非压缩位图也有一定的,例如,如果压缩成ETC1的格式,则在上述判断条件中增加该位图是不透明的,因为使用的压缩格式是ETC1,默认不支持Alpha通道,后面需要额外处理;如果压缩成ETC2的格式,则不需要要求位图为不透明就可以对透明图片进行压缩,因为其支持Alpha通道的纹理压缩格式。[0088] ETC1是GLES2的标准压缩纹理格式,ETC2是GLES3的标准压缩纹理格式。需要说明的是,上述条件是根据目前的技术而相应设定的,在未来这些条件也有可能发生变化,到时只需将发生变化的条件相应的加入到预设的条件中即可。[0090] 在进一步优选实施例中,压缩纹理数据生成单元310包括压缩模块和生成模块(图中均未示出)。压缩模块用于压缩解码后的非压缩位图;生成模块用于生成与所述非压缩位图相对应的压缩纹理数据。即当判断单元判断出非压缩位图可以进行纹理压缩后,则产生一个纹理压缩命令发送给压缩模块,压缩模块将所述纹理压缩命令放入纹理压缩线程的命令队列里面等待压缩。具体地,由CPU在后台线程运行一个纹理压缩算法,将非压缩位图编码成压缩纹理数据,即纹理压缩线程在后台执行纹理压缩算法将非压缩位图编码成压缩纹理数据。这里的纹理压缩算法为GPU支持的压缩纹理格式对应的标准算法。即如果压缩为ETC1则为ETC1标准算法,如果压缩为ETC2则为ETC2标准算法。[0091] 其中,优选实施例中压缩纹理数据生成单元310还包括存储单元(图中未示出),将压缩纹理数据生成单元310生成的与所述非压缩位图相对应的压缩纹理数据与非压缩位图的位图ID相对应的存储。也就是说,在纹理压缩线程完成一个非压缩的位图压缩后,生成一个压缩后的压缩纹理数据对象存储于存储单元中,即存储于缓存区内。

[0092] 压缩纹理创建单元320用于根据压缩纹理数据生成单元310所生成的压缩纹理数据创建非压缩位图的压缩纹理。[0093] 其中,压缩纹理创建单元320进一步包括压缩纹理数据获取单元(图中未示出),用于查找所述存储单元中是否存在所述压缩纹理数据,其中,在查找到存储单元中存在所述压缩纹理数据时,从所述存储单元中获取所述压缩纹理数据之后调用GL的API来创建压缩纹理。绘制单元330用于将压缩纹理创建单元320所创建的压缩纹理绘制到Canvas上。[0094] 具体地,GPU通过贴图操作将压缩纹理绘制到Canvas上。GPU既可以通过贴图操作将非压缩的纹理绘制到Canvas上,也可以通过贴图操作将符合其格式要求的压缩的纹理绘制到Canvas上。而同一个位图的压缩的纹理相比于非压缩的纹理,其占用的内存空间较小,会使得单位像素需要访问内存的次数也减少,进一步提高GPU对纹理进行贴图操作的性能。

[00]

需要说明的是,由于GPU不能直接访问位图,因此要使用GPU去绘制位图则必须先

生成位图相应的纹理供GPU进行贴图操作。[0096] 然而本发明中,也有可能出现另外一种情况,即压缩单元还没有完成对即将要使用的非压缩位图进行压缩,因而此时存储单元中并没有与该非压缩位图相对应的压缩纹理数据。当存储单元中没有与非压缩位图相对应的压缩纹理数据时,则沿用以前的方式,先针对这个非压缩位图创建一个非压缩的纹理暂时使用,直到相应的压缩纹理创建完成为止。[0097] 如上所述,本发明所提供的优化Canvas绘制性能的方法及装置,通过实时纹理压缩将压缩后的纹理绘制到Canvas上能够减少纹理对内存的占用量,并提高GPU对纹理进行贴图操作的性能。

[0095]

10

CN 105096367 A[0098]

说 明 书

8/8页

本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单

元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。

[0099] 所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。[0100] 在本申请所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。

[0101] 所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。

另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以

是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。

[0103] 所述功能如果以软件功能单元的形式实现并作为的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或处理器(processor)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。[0104] 以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应所述以权利要求的保护范围为准。

[0102]

11

CN 105096367 A

说 明 书 附 图

1/3页

图1

12

CN 105096367 A

说 明 书 附 图

2/3页

图2

13

CN 105096367 A

说 明 书 附 图

3/3页

图3

14

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- huatuo3.cn 版权所有 湘ICP备2023017654号-3

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务