SDL2: эффективный подход для рендеринга шрифта TTF с несколькими цветами RGB? - PullRequest
0 голосов
/ 14 апреля 2020

Я хочу отобразить на экране шрифт символов TrueType 64x64, аналогично консольному приложению. (Мое ограничение в использовании консольного приложения - невозможность использовать 255 значений на канал RGB). Поскольку у меня на экране 4096 символов, каждый из которых я хочу иметь разные возможные цвета, это выглядит как 8192+ операций:

[запуск]

  1. Открыть шрифт
  2. Кэширование первого N числа глифов в качестве Surface * в массив, все RGB (255, 255, 255)

[render]

  1. Запрос каждого ' координата / пиксель ', чтобы увидеть, какой символ должен быть нарисован
  2. Скопируйте версию этого символа из кэшированной поверхности в SDL_Window Surface
  3. Оттенок / Цвет поверхности, которая была только что скопирована, из белого в какой-то другой 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.

...