Text 将文本加载到OpenGL纹理

Text 将文本加载到OpenGL纹理,text,opengl-es,textures,Text,Opengl Es,Textures,我正在iPad上开发openGL应用程序,我遇到了一个相当大的问题。我使用已经存在的帖子来学习我可以使用UILabel将文本生成到opengl纹理中,所以我做到了。当我不得不在纹理的不同位置使用五个或更多标签时,问题就出现了。当我的应用程序必须生成其中五种纹理,每种纹理由五个标签组成时,它需要一些能力。我在一个循环中生成一个纹理最大值,但这会产生一个小滞后。当我加载五个纹理时,延迟会变得更烦人五倍 现在,当我讲述这个故事时,让我问你一个问题: 我怎样才能减轻CPU的负担,或许还能以其他方式生成文

我正在iPad上开发openGL应用程序,我遇到了一个相当大的问题。我使用已经存在的帖子来学习我可以使用UILabel将文本生成到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。我创建了更多的图像(实际上有五个),然后我将所有这些图像渲染到其他上下文中,这是我的最后一个纹理


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

如果OpenGL纹理没有改变,你就不必为渲染的每一帧重新生成纹理。相反,只要在程序启动时加载一次就可以了。

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

无论如何,我通过使用NSOperationQueue来释放CPU。我将所有的处理过程反馈给操作队列,并将其生成的图像保存在NSMutableArray中。直到那时,我才使用它们来生成纹理


万岁

我不会重新渲染它。如果有新内容出现,我只渲染。当它开始渲染时,它是相当滞后的。