2011-07-24 84 views
0

我正在iPad上開發openGL應用程序,並且遇到了一個相當大的問題。我用已經存在的帖子來學習,我可以使用UILabel生成文本到opengl紋理,所以我做到了。當我不得不在紋理的不同位置使用五個或更多標籤時出現問題。當我的應用程序必須生成五個由五個標籤組成的紋理時,它們需要一定的權力。我在一個循環中生成一個最大紋理,但會產生一個小滯後。當我加載五個紋理時,滯後會變得更加刺激5倍。將文本加載到OpenGL紋理中

現在,當我把這件事告訴了,讓我問你一個問題:

我怎麼能減輕我的CPU,也許產生一些其他的方式的文本?它的靜態,只是爲了顯示信息。

我曾嘗試使用其他線程,但我走過來,甚至更多的問題,所以我寧願一些文本產生的替代方案,多線程。

這裏是質地發電機的一部分:

//------------ DATE -------------------------------- 
[dateLabel setBounds:CGRectMake(0, 0, 95, 10)]; 
[dateLabel setFrame:CGRectMake(0, 0, 95, 10)]; 
[dateLabel setBackgroundColor:[UIColor clearColor]]; 
[dateLabel setFont:[UIFont systemFontOfSize:12]]; 
[dateLabel setLineBreakMode:UILineBreakModeWordWrap]; 
[dateLabel setNumberOfLines:1]; 
dateLabel.textColor = [UIColor whiteColor]; 

dateLabel.text = [self.delegate dateAtIndex:index]; 

UIGraphicsBeginImageContext(CGSizeMake(95, 10));  
[dateLabel.layer renderInContext:UIGraphicsGetCurrentContext()]; 
//[dateLabel release]; // We can now release the view 
UIImage* date = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 

正如你所看到的,我設置的位置,大小,文本,然後創建的UIImage出來。我創建了更多的這些圖像(事實上有五個),然後我將所有這些圖像渲染到其他背景,這是我的最後一個紋理。

或許是我缺乏經驗使我一些愚蠢的解決方案在這裏。

回答

0

我想通了。無論如何,我不得不轉向多線程。看起來,OpenGL中的文本可以以多種方式呈現。但是他們都需要不同的方法和實施。您可以逐字生成文本,也可以使用現有的庫等。但是當你只需要某些紋理上的靜態文本時,UILabel方法仍然可以勝過它們。

無論如何,我設法通過使用NSOperationQueue以減輕CPU。我把所有的處理都送到操作隊列和它生成的圖像,保存在NSMutableArray中。只有這樣我才使用它們來生成紋理。

萬歲!

1

如果一個OpenGL紋理不改變你不必去重新創造它爲每個渲染幀。相反,只需在程序啓動時加載一次。

+0

那麼我不重新渲染它。如果有新內容進來,我只會渲染它。當它開始渲染時,它會非常滯後。 – avuthless