一種提高圖形繪制效率的方法及裝置的制造方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及圖像處理技術(shù)領(lǐng)域,尤其是涉及一種提高圖形繪制效率的方法及裝置。
【背景技術(shù)】
[0002]為了在終端設(shè)備顯示動態(tài)的畫面,繪圖程序通常會以一定的頻率或者說是幀率不斷的對圖形進(jìn)行重繪,即將舊的圖形擦除并繪制出新的圖形,以保證圖形的切換能被實時的顯示出來,從而形成流暢的動態(tài)畫面效果。以基于HTML5的游戲為例,目前常見的方式是通過Canvas (畫布)容器每秒鐘對圖形重繪X次來確保游戲畫面的流暢,其中X通常大于30小于60。
[0003]發(fā)明人在實現(xiàn)本發(fā)明的過程中發(fā)現(xiàn),現(xiàn)有技術(shù)這種圖形重繪方式適用于畫面不斷變化的場景,例如動作類游戲中。但對于畫面變化不頻繁的場景,例如一些棋牌游戲,很多時候重繪后的畫面與沒重繪前是一樣的,若也采用這種重繪方式,會帶來不必要的CPU資源等的消耗。
【發(fā)明內(nèi)容】
[0004]為克服現(xiàn)有技術(shù)中存在的問題,本發(fā)明提供一種提高圖形繪制效率的方法及裝置,以降低不必要的CPU資源等消耗。
[0005]根據(jù)本公開實施例的第一方面,提供了一種提高圖形繪制效率的方法,所述方法包括:
[0006]獲取當(dāng)前幀圖形上各節(jié)點的顯示屬性;
[0007]檢測各節(jié)點的顯示屬性與前一幀時各節(jié)點的顯示屬性相比的變化情況;
[0008]只有在檢測到各節(jié)點的顯示屬性發(fā)生了變化時,才根據(jù)各節(jié)點的顯示屬性對所述圖形進(jìn)行重繪,以及,
[0009]對于隨后的第一預(yù)定數(shù)目的幀,每次獲取到各節(jié)點的顯示屬性后根據(jù)獲取的各節(jié)點的顯示屬性直接對所述圖形進(jìn)行重繪。
[0010]可選的,所述方法還包括:
[0011]在所述對于隨后的第一預(yù)定數(shù)目的幀,每次獲取到各節(jié)點的顯示屬性后根據(jù)獲取的各節(jié)點的顯示屬性直接對所述圖形進(jìn)行重繪的步驟之后,返回所述獲取當(dāng)前幀圖形上各節(jié)點的顯示屬性的步驟。
[0012]可選的,所述方法還包括:
[0013]若對于連續(xù)的第二預(yù)定數(shù)目的幀,每次檢測到的各節(jié)點的顯示屬性均未發(fā)生變化,則在隨后的指定時長內(nèi),每次獲取到各節(jié)點的顯示屬性后根據(jù)獲取的各節(jié)點的顯示屬性直接對所述圖形進(jìn)行重繪;
[0014]返回所述獲取當(dāng)前幀圖形上各節(jié)點的顯示屬性的步驟。
[0015]可選的,所述節(jié)點的顯示屬性包括以下元素中的一種或多種:節(jié)點的X坐標(biāo)、節(jié)點的y坐標(biāo)、節(jié)點的寬度、節(jié)點的高度、節(jié)點的旋轉(zhuǎn)角度、節(jié)點的傾斜角度、節(jié)點的透明度、節(jié)點的可見性以及節(jié)點的顏色;
[0016]所述各節(jié)點的顯示屬性發(fā)生了變化,包括:
[0017]任一節(jié)點的任一元素發(fā)生了變化。
[0018]可選的,所述方法還包括:
[0019]在所述檢測各節(jié)點的顯示屬性與前一幀時各節(jié)點的顯示屬性相比的變化情況的步驟之后,在檢測到各節(jié)點的顯示屬性均未發(fā)生變化時,則不執(zhí)行所述根據(jù)所述各節(jié)點的顯示屬性對所述圖形進(jìn)行重繪的步驟,而是返回所述獲取當(dāng)前幀圖形上各節(jié)點的顯示屬性的步驟。
[0020]根據(jù)本公開實施例的第二方面,提供了一種提高圖形繪制效率的裝置,所述裝置包括:
[0021]顯示屬性獲取單元,用于獲取當(dāng)前幀圖形上各節(jié)點的顯示屬性;
[0022]變化檢測單元,用于檢測各節(jié)點的顯示屬性與前一幀時各節(jié)點的顯示屬性相比的變化情況;
[0023]重繪控制單元,用于只有在所述變化檢測單元檢測到各節(jié)點的顯示屬性發(fā)生了變化時,才觸發(fā)重繪單元,以及,對于隨后的第一預(yù)定數(shù)目的幀,每次觸發(fā)了顯示屬性獲取單元后直接觸發(fā)重繪單元;
[0024]重繪單元,用于根據(jù)各節(jié)點的顯示屬性對所述圖形進(jìn)行重繪。
[0025]可選的,所述裝置還包括:
[0026]循環(huán)控制單元,用于在所述重繪控制單元執(zhí)行完畢之后,重新觸發(fā)所述顯示屬性獲取單元。
[0027]可選的,所述重繪控制單元還用于:
[0028]若對于連續(xù)的第二預(yù)定數(shù)目的幀,每次檢測到的各節(jié)點的顯示屬性均未發(fā)生變化,則在隨后的指定時長內(nèi),每次觸發(fā)了所述顯示屬性獲取單元后直接觸發(fā)所述重繪單元;然后再觸發(fā)一次所述顯示屬性獲取單元。
[0029]可選的,
[0030]所述節(jié)點的顯示屬性包括以下元素中的一種或多種:節(jié)點的X坐標(biāo)、節(jié)點的y坐標(biāo)、節(jié)點的寬度、節(jié)點的高度、節(jié)點的旋轉(zhuǎn)角度、節(jié)點的傾斜角度、節(jié)點的透明度、節(jié)點的可見性以及節(jié)點的顏色;
[0031]所述各節(jié)點的顯示屬性發(fā)生了變化,包括:
[0032]任一節(jié)點的任一元素發(fā)生了變化。
[0033]可選的,所述重繪控制單元還用于:
[0034]在所述變化檢測單元檢測到各節(jié)點的顯示屬性均未發(fā)生變化時,則不觸發(fā)所述重繪單元以不執(zhí)行根據(jù)所述各節(jié)點的顯示屬性對所述圖形進(jìn)行重繪的操作,而是觸發(fā)所述顯示屬性獲取單元以獲取當(dāng)前幀圖形上各節(jié)點的顯示屬性。
[0035]本發(fā)明實施例提供的技術(shù)方案可以包括以下有益效果:
[0036]本發(fā)明實施例中,在進(jìn)行重繪前,不但先對是否有圖形節(jié)點的顯示屬性發(fā)生了變化進(jìn)行檢測,只有當(dāng)發(fā)現(xiàn)有變化時才進(jìn)行重繪操作,而且更為重要的是,為了減少上述檢測的次數(shù),會對隨后的一系列幀都默認(rèn)進(jìn)行直接的重繪。本發(fā)明實施例中的這種圖形繪制方式不但能夠減少重繪的次數(shù),更能夠減少檢測節(jié)點顯示屬性是否發(fā)生變化的次數(shù),從而真正提高圖形繪制效率,降低不必要的CPU資源等的消耗。
[0037]應(yīng)當(dāng)理解的是,以上的一般描述和后文的細(xì)節(jié)描述僅是示例性的,并不能限制本發(fā)明。
【附圖說明】
[0038]此處的附圖被并入說明書中并構(gòu)成本說明書的一部分,示出了符合本發(fā)明的實施例,并與說明書一起用于解釋本發(fā)明的原理。
[0039]圖1是根據(jù)一示例性實施例示出的一種提高圖形繪制效率的方法的流程圖;
[0040]圖2是根據(jù)一示例性實施例示出的一種提高圖形繪制效率的方法的流程圖;
[0041]圖3是根據(jù)一示例性實施例示出的一種提高圖形繪制效率的方法的流程圖;
[0042]圖4是根據(jù)一示例性實施例示出的一種提高圖形繪制效率的方法的流程圖;
[0043]圖5是根據(jù)一示例性實施例示出的一種提高圖形繪制效率的裝置的框圖;
[0044]圖6是根據(jù)一示例性實施例示出的一種提高圖形繪制效率的裝置的框圖。
【具體實施方式】
[0045]這里將詳細(xì)地對示例性實施例進(jìn)行說明,其示例表示在附圖中。下面的描述涉及附圖時,除非另有表示,不同附圖中的相同數(shù)字表示相同或相似的要素。以下示例性實施例中所描述的實施方式并不代表與本發(fā)明相一致的所有實施方式。相反,它們僅是與如所附權(quán)利要求書中所詳述的、本發(fā)明的一些方面相一致的裝置和方法的例子。
[0046]圖1是根據(jù)一示例性實施例示出的一種提高圖形繪制效率的方法的流程圖。該方法可用于終端設(shè)備中,如手機(jī)、平板電腦、PC(個人電腦)等。參見圖1所示,該方法可以包括以下步驟:
[0047]S101、獲取當(dāng)前幀圖形上各節(jié)點的顯示屬性。
[0048]繪圖程序,例如基于HTML5的游戲引擎,通常是基于圖形上的節(jié)點來進(jìn)行繪圖的。圖形可對應(yīng)一棵渲染樹,這棵渲染樹有一個根以及眾多枝葉,根及枝葉都可統(tǒng)稱為圖形節(jié)點,簡稱節(jié)點。
[0049]圖形節(jié)點具有顯示屬性,在本實施例或本發(fā)明其他某些實施例中,節(jié)點的顯示屬性可以包括以下元素中的一種或多種:節(jié)點的X坐標(biāo)、節(jié)點的y坐標(biāo)、節(jié)點的寬度、節(jié)點的高度、節(jié)點的旋轉(zhuǎn)角度、節(jié)點的傾斜角度、節(jié)點的透明度、節(jié)點的可見性以及節(jié)點的顏色。
[0050]圖形節(jié)點的顯示屬性可以被其他應(yīng)用程序所更改,從而使圖形發(fā)生變化。繪圖程序通過遍歷各圖形節(jié)點并在遍歷中執(zhí)行更新顯示屬性的操作,可以獲取到每個節(jié)點在當(dāng)前幀時的顯示屬性。
[0051]S102、檢測各節(jié)點的顯示屬性與前一幀時各節(jié)點的顯示屬性相比的變化情況。
[0052]在本實施例中,獲取到當(dāng)前幀時圖形上各節(jié)點的顯示屬性后,并不直接根據(jù)顯示屬性對圖形進(jìn)行重繪,而是先檢測各節(jié)點的顯示屬性與前一幀時相比的變化情況,然后再決定是否重繪。
[0053]在本實施例或本發(fā)明其他某些實施例中,所述各節(jié)點的顯示屬性發(fā)生了變化,可以包括:
[0054]任一節(jié)點的任一元素發(fā)生了變化。
[0055]也即只要檢測到任一節(jié)點的任一元素發(fā)生了變化,即可得到各節(jié)點的顯示屬性發(fā)生了變化這一結(jié)論。相反的,若檢測到任一節(jié)點的任一元素都未發(fā)生變化,則可得到各節(jié)點的顯示屬性均未發(fā)生變化這一結(jié)論。
[0056]S103、只有在檢測到各節(jié)點的顯示屬性發(fā)生了變化時,才根據(jù)各節(jié)點的顯示屬性對所述圖形進(jìn)行重繪,以及,對于隨后的第一預(yù)定數(shù)目的幀,每次獲取到各節(jié)點的顯示屬性后根據(jù)獲取的各節(jié)點的顯示屬性直接對所述圖形進(jìn)行重繪。
[0057]對于每一幀,在增加了檢測各節(jié)點顯示屬性是否變化的操作后,雖然能夠減少重繪的次數(shù),但也帶了弊端:每次(也即每一幀)都需要進(jìn)行檢測,這樣使得檢測的次數(shù)過多,不利于提高繪圖效率。在步驟S103中,在檢測到各節(jié)點的顯示屬性發(fā)生了變化后,除了對當(dāng)前幀進(jìn)行重繪外,對于隨后依次到來的第一預(yù)定數(shù)目的幀的每一幀,均采取直接重繪的操作,不再檢測各節(jié)點顯示屬性是否變化,從而減少了檢測各節(jié)點顯示屬性是否變化的次數(shù),真正提高了圖形繪制的效率,進(jìn)而降低了不必要的CPU資源等消耗。
[0058]參見圖2所示,在本實施例或本發(fā)明其他某些實施例中,在所述對于隨后的第一預(yù)定數(shù)目的幀,每次獲取到各節(jié)點的顯示屬性后根據(jù)獲取的各節(jié)點的顯示屬性直接對所述圖形進(jìn)行重繪的步驟之后:
[0059]返回所述獲取當(dāng)前幀圖形上各節(jié)點的顯示屬性的步驟。也即返回步驟101。
[0060]這樣步驟SlOl至S103便可循環(huán)起來,進(jìn)行持續(xù)的繪圖。
[0061]另外,參見圖3所示,在本實施例或本發(fā)明其他某些實施例中,在所述檢測各節(jié)點的顯示屬性與前一幀時各節(jié)點的顯示屬性相比的變化情況的步驟之后,所述方法還可以包括:
[0062]S104、在檢測到各節(jié)點的顯示屬性均未發(fā)生變化時,則不執(zhí)行所述根據(jù)所述各節(jié)點的顯示屬性對所述圖形進(jìn)行重繪的步驟,而是返回所述獲取當(dāng)前幀圖形上各節(jié)點的顯示屬性的步驟,也即跳回步驟SlOl。
[0063]這樣在檢測到各節(jié)點的顯示屬性均未發(fā)生變化時不進(jìn)行重繪,可以減少重繪的次數(shù),也提高了圖形繪制的效率,進(jìn)而降低了不必要的CPU資源等消