CEGUI中文載入優化

2021-05-22 11:31:09 字數 998 閱讀 8697

cegui中文如何顯示這個就不說了,改下字型就ok了。對於中文載入的優化,網上最流行的說法是用一張或二張紋理儲存,當新的漢字沒有在紋理上的時候,清空紋理重新新增。對於這種方法如果漢字使用率少的話還不錯,但是如果對於不同漢字出現頻率較高的話,那麼這種方法,會出現介面一卡一卡的現象,那就是臨時清空重繪紋理的原因。

cegui根據漢字內碼的編碼順序,為每256個字元分配一張紋理(例如編碼0-255存放在紋理一,編碼768-1023 存放在紋理四)。英文很容易搞定了,那麼幾個字元一張紋理就夠了,對於中文,中文的編碼數值太大,cegui原本的方法要是載入的話,最少也要上百張紋理。

對於以上2種方法,我覺得都不是很好,我目前的解決方法是:512個漢字一張紋理,根據漢字的多少進行分頁載入,說白了就是每512漢字放到一張紋理,重寫rasterizeex ,首先定義乙個codepointmap容器 ,儲存所有漢字,rasterizeex 將codepoint作為引數傳入,在rasterizeex 裡,填充codepointmap容器如:codepointmap容器【codepoint】=fontglyph (adv);根據自己codepointmap容器每512個建立一張紋理。這樣比如:測試的時候用3000個常用漢字,也就是3000個不同的漢字,字型大小設定18,一張紋理512個漢字,3000個字也就6張紋理就全部儲存了起來。在此要注意的是,字型的大小,和存放紋理畫素陣列(乙個全域性的即可)的大小,因為如果你的陣列定義為512*512的話那麼,你的字型太大了,它存不下512個字,就會出錯。漢字大小和畫素陣列如何的合理定義就看自己的需求了。每次有陌生漢字的時候就放到codepointmap容器裡,然後新增到紋理裡,當使用的時候,直接拿codepointmap容器裡的資料就可以了。避免了重新繪製。

經過測試:18000多個漢字,內含3000多個不同漢字的載入也就20秒。實際上也就是載入那3000多個漢字的時間,其他重複的漢字直接讀的已經載入好的資料,幾乎沒啥時間,雖然很長時間,但是我們真正用的時候,載入的漢字少的可憐,沒人會一下把所有漢字全載入的.只是用到的也就是cegui介面上的那幾個漢字罷了。對於幾百個漢字的載入,也就2到3秒

CEGUI顯示中文

最近在學習cegui,想在它裡面顯示中文。在網上找了很多資料,發現這篇最好用。在使用cegui中,一直沒發現不能直接顯示中文,後來在網上偶然看到,才發現這個問題!然後在網上google了半天,自己解決了這個問題。1.找到乙個中文字型,以微軟黑體為例 找到c windows fonts目錄下的 sim...

CEGUI中文顯示提速

在做遊任務顯示中文的時候,如果任務中有太多的中文,ui的顯示超級的慢。這個問題是需要結局的,遂超找資料,看到了這位仁兄的寫的文件,覺得對我這樣的新手還是挺有幫助的,估計自己找原因再去寫 的話,也得花上一兩天的時間。有資料幫助,兩小時搞定,病對其中存在的一些小問題根據我的需要做了相應的修改。這位仁兄的...

CEGUI中文顯示提速

在做遊任務顯示中文的時候,如果任務中有太多的中文,ui的顯示超級的慢。這個問題是需要結局的,遂超找資料,看到了這位仁兄的寫的文件,覺得對我這樣的新手還是挺有幫助的,估計自己找原因再去寫 的話,也得花上一兩天的時間。有資料幫助,兩小時搞定,病對其中存在的一些小問題根據我的需要做了相應的修改。這位仁兄的...