你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> iOS上用FTGL顯示定制Truetype字體碰到的問題

iOS上用FTGL顯示定制Truetype字體碰到的問題

編輯:IOS開發綜合
FTGL是freetype的opengl實現。我接觸FTGL最初只是為了練習OpenGL,寫幾個簡單的游戲app。開始試了試FTGL覺得挺簡單好用,不需要太熟悉OpenGL底層的東西,於是決定在自己的一個app中正式加入用FTGL顯示藝術True type字體的功能,預計應該很快能完成吧。   開始進展很順利,似乎即將大工告成,結果最後突然發現一個問題:藝術字體(中文)顯示若干段落以後,突然渲染不正常,總是顯示一些混亂的字符;排除了應用邏輯錯誤以後,確定是FTGL庫的問題,就此開始了漫長的調試過程。   我對OpenGL很不熟悉,前兩個月由於另外一個項目中用到一點GL,看了點開發文檔,弄完後其實也沒打算要深入研究。沒想到現在碰到這種問題,放棄又不甘心,為了調試FTGL庫,不得已開始投入點精力開始研究GL。   嘗試了一些跟蹤後,出錯的大致原因清楚了:我大概是運氣太好,一開始就選用了FTTextureFont. FTGL顯示Texture字體時,首先從ttf文件中創建face,根據用戶要顯示的字符串,讀取face中的glyph,然後生成bitmap,這個bitmap沒法保存在內存裡,所以FTGL會把這些bitmap都一個個寫到GPU的一張texture裡面。問題是texture大小總是有限的,所以FTGL支持多個texture,即一旦一個texture被寫滿了以後,就創建一個新的texture,直到用完GPU內存。而我碰到的問題就在前一個texture被寫滿,創建一個新的texture之後,字符顯示開始混亂;   但是我還是覺得這個問題很奇怪:FTGL庫是個很老的庫,並且據我查過開發版本這個支持多texture的功能在2010年的時侯就支持了,難道這麼多年我是第一個碰到這個bug的人嗎?FTGL庫看代碼作者水平還是比較高的,這個bug難道他沒有測試發現嗎?   沒辦法,搜了好幾天除了有一個哥們在某個論壇提到過一句類似的情況,就再也沒有任何線索;而且這個哥們居然很認命地就把這個問題當作FTGL固有的限制,毫無一點反抗的意圖,居然建議改用PolygonFont或BufferFont:-(   仔細研究了幾天FTGL的代碼,橫看豎看看不出問題;是iOS移植的問題?是iPhone硬件的限制?還是緩存的問題?猜測過各種錯誤原因最後都證明不靠譜;今天下午被另外一則壞消息狠狠打擊了一下之後,腦袋靈光一閃,突然想到啊,莫非是這樣?。。。   果然還是FTGL作者添加multiple texture支持時,考慮欠周到,測試估計也沒做(其實是個挺明顯的bug,但凡測試用例覆蓋就會暴露);由於多個texture的存在,FTGL渲染時需要在多個texture之間切換時,沒考慮到一個字符串裡不同的字符的bitmap緩存可能位於不同的texture裡,還是用了同一個texture做渲染,自然會出問題了。   考慮兩種方法修改,一是采用multitexturing技術,這個聽起來應該會比較酷,性能應該好點,但是要比較多時間;另外就是把原來一個字符串作為單位渲染改為逐個字符渲染,性能不一定好,不過就2行代碼解決問題啦,自然就先這麼干,以後有時間再做計較吧 :-)    
  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved