将文本加载到OpenGL纹理中

时间:2011-07-24 12:54:19

标签: text opengl-es textures

我正在iPad上开发openGL应用程序,我遇到了一个非常大的问题。我使用已经存在的帖子来了解我可以使用UILabel生成文本到opengl纹理,所以我做到了。当我不得不在不同的纹理位置使用五个或更多标签时出现问题。当我的应用程序必须生成五个由五个标签组成的纹理时,它们需要一些功率。我在一个循环max中生成一个纹理,但这会产生一个小的延迟。当我加载五个纹理时,滞后会增加五倍的刺激性。

现在当我讲述这个故事时,让我问你一个问题:

我怎么能减轻我的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。我创建了更多这些图像(事实上是五个),然后我将所有这些图像渲染到其他上下文中,这是我最后的纹理。

也许我缺乏经验让我在这里找到了一些愚蠢的解决方案。

2 个答案:

答案 0 :(得分:1)

如果OpenGL纹理没有改变,则不必为渲染的每个帧重新生成它。而是在程序启动时加载一次。

答案 1 :(得分:0)

我明白了。无论如何,我不得不转向多线程。看来OpenGL中的文本可以通过多种方式呈现。但所有这些都需要不同的方法和实施。您可以逐字生成文本,也可以使用现有的库等。但是当你在一些纹理上只需要静态文本时,UILabel方法仍然可以胜过它们。

无论如何,我设法通过使用NSOperationQueue来缓解CPU。我将所有处理都提供给操作队列及其生成的图像,保存在NSMutableArray中。只有这时我用它们来生成纹理。

万岁!