Загрузка текста в текстуру OpenGL - PullRequest
0 голосов
/ 24 июля 2011

Я занимаюсь разработкой приложения openGL для iPad и столкнулся с одной довольно большой проблемой. Я использовал уже существующие посты, чтобы узнать, что я могу использовать UILabel для генерации текста в текстуру opengl, поэтому я сделал это. Проблема появилась, когда мне пришлось использовать пять или более меток в разных местах текстуры. Когда мое приложение должно сгенерировать пять из этих текстур, состоящих из пяти меток каждая, это потребует некоторой мощности. Я генерирую одну текстуру в одном цикле максимум, но это создает небольшое отставание. Когда я загружаю пять текстур, задержка становится в пять раз более раздражающей.

Теперь, когда я рассказал историю, позвольте мне задать вам вопрос:

Как я могу уменьшить нагрузку на процессор и, возможно, сгенерировать текст каким-либо другим способом? Это статично, просто для отображения информации.

Я попытался использовать другой поток, но я столкнулся с еще большими проблемами, поэтому я предпочел бы некоторую альтернативу генерации текста, чем многопоточность.

Вот часть этого генератора текстур:

//------------ 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 ]

1 голос
/ 24 июля 2011

Если текстура OpenGL не меняется, вам не нужно ее регенерировать для каждого рендеринга кадра. Вместо этого просто загрузите его один раз при запуске вашей программы.

0 голосов
/ 28 июля 2011

Я понял это.В любом случае мне пришлось обратиться к многопоточности.Похоже, что текст в OpenGL может быть отображен разными способами.Но все они требуют другого подхода и реализации.Вы можете генерировать текст по буквам, вы можете использовать существующие библиотеки и так далее.Но метод UILabel по-прежнему превосходит их все, когда вам нужен только статический текст на некоторой текстуре.

Во всяком случае, мне удалось разгрузить процессор с помощью NSOperationQueue.Я передал всю обработку в очередь операций и сгенерированные изображения, сохраненные в NSMutableArray.Только тогда я использовал их для генерации текстур.

Ура!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...