Я хочу отобразить на экране шрифт символов TrueType 64x64, аналогично консольному приложению. (Мое ограничение в использовании консольного приложения - невозможность использовать 255 значений на канал RGB). Поскольку у меня на экране 4096 символов, каждый из которых я хочу иметь разные возможные цвета, это выглядит как 8192+ операций:
[запуск]
- Открыть шрифт
- Кэширование первого N числа глифов в качестве Surface * в массив, все RGB (255, 255, 255)
[render]
- Запрос каждого ' координата / пиксель ', чтобы увидеть, какой символ должен быть нарисован
- Скопируйте версию этого символа из кэшированной поверхности в SDL_Window Surface
- Оттенок / Цвет поверхности, которая была только что скопирована, из белого в какой-то другой RGB
Это не кажется эффективным, вообще . Я пытаюсь найти лучший подход. Я пытался использовать текстуры, и я бы предпочел хранить глифы в виде атласа в одной текстуре на VRAM, но я не уверен, сколько времени это спасет меня, если мне придется go вернуть и подкрасить его В любом случае.
Вот код, с которым я сейчас работаю:
for (int y = 0; y < _charHeight; ++y) {
for (int x = 0; x < _charWidth; ++x) {
Uint16 ch = characters[y * _charHeight + x]._char;
SDL_Rect _dest{ x * _maxWidth, y * _maxHeight, _maxWidth, _maxHeight };
SDL_BlitSurface(glyph_cache[ch], nullptr, m_ScreenSurf, &_dest);
}
}
//Color the surface here somehow
SDL_UpdateWindowSurface(m_Window);
Это легко реализовать с помощью OpenGL? Должен ли я переосмыслить свой подход? Кроме того, мне не нужны никакие альфа-каналы, это все solid.