В настоящее время я переношу множество приложений из рендеринга SDL2 (с использованием OpenGL с использованием OpenGL) в «чистый» рендеринг OpenGL. Во время этой работы я выяснил, как загрузить текстуры на GPU и узнал, что каждая текстура имеет индекс.OpenGL + SDL_TTF: переработка индекса текстур
Для рендеринга текста я использую функции SDL_TTF, которые позволяют в принципе загружать текстуру на графический процессор с изображением какого-либо текста. Большинство приложений, которые я переношу, не являются тяжелыми, но я заметил, что с ними возникла проблема.
Представьте приложение, которое принимает ввод текста пользователя и помещается на экран: каждое нажатие клавиши создаст новую текстуру со всем введенным текстом (любая другая предыдущая текстура, связанная с той же функциональностью, будет удалена). Итак, чтобы написать «Hello», мы получим пять текстур: «H», «He», «Hel», «Hell» и, наконец, «Hello». Как сказано, каждая «предыдущая» текстура (в данном случае от «H» до «Hell») будет удалена, и останется только память для «Hello».
Тем не менее, в текстовых приложениях (например, используя этот метод, чтобы поместить счет игры, делая это достаточно плохо, чтобы вы создавали новую текстуру для каждого кадра), много текстур будет загружено и удалено, а текстура индекс будет продолжать расти.
Мой главный вопрос: будет ли OpenGL перерабатывать эти индексы или он просто закончится с номерами и сработает ?.
PS: Я знаю о возможности упаковки всех символов TTF в атлас и просто получить буквы, которые мне нужны. Мне не хотелось бы смотреть на это сейчас, если мой нынешний подход не является опасным (этот атлас похож на старые растровые шрифты).
PS2: Я также знаю, что изменение текстур постоянно не очень точно (графический процессор), но эти приложения не являются графически сложными и имеют хорошую производительность в старых системах.
Если это касается вас, почему бы просто не заменить текстурные данные без повторного создания текстуры id/name? То есть 'glTexImage', или выделите большую текстуру и замените части своих данных позже. – keltar
Да, да, это именно то, что я планирую делать в будущем :). См., Все тексты, которые могут измениться (например, вышеупомянутый маркер оценки в игре или подсказках), инкапсулируются в классы, которые управляют удалением своих ресурсов (обычно они имеют длинные периоды жизни, а не многие индексы будут потребляться).Я мог бы очень расширить их, чтобы «заменить» текущую текстуру, но я не знал о каком-то устаревшем коде, на котором я лежал. Большое спасибо. –