我正在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。我创建了更多这些图像(事实上是五个),然后我将所有这些图像渲染到其他上下文中,这是我最后的纹理。
也许我缺乏经验让我在这里找到了一些愚蠢的解决方案。
答案 0 :(得分:1)
如果OpenGL纹理没有改变,则不必为渲染的每个帧重新生成它。而是在程序启动时加载一次。
答案 1 :(得分:0)
我明白了。无论如何,我不得不转向多线程。看来OpenGL中的文本可以通过多种方式呈现。但所有这些都需要不同的方法和实施。您可以逐字生成文本,也可以使用现有的库等。但是当你在一些纹理上只需要静态文本时,UILabel方法仍然可以胜过它们。
无论如何,我设法通过使用NSOperationQueue来缓解CPU。我将所有处理都提供给操作队列及其生成的图像,保存在NSMutableArray中。只有这时我用它们来生成纹理。
万岁!