Для создания текстуры я использую метод stbtt_PackBegin (затем переношу данные из ttf-файла). Вам нужно передать ему буфер байтов (пикселей). Размер этого буфера должен зависеть от размера желаемого конечного изображения. Я делаю вывод, что это должна быть высота символов шрифта, умноженная на ширину всех символов шрифта. В примерах я видел только абстрактные 1024x1024 или 512x512. Мой вопрос касается этих значений.
Перед вызовом stbtt_PackFontRange я вызываю stbtt_PackSetOversampling. В документации сказано:
Общее количество необходимых пикселей h_oversample*v_oversample больше, чем значение по умолчанию; например, передискретизация 2x2 требует в 4 раза больше места, чем 1x1.
Я делаю вывод, что размер буфера должен быть шириной x h_oversample x высотой x v_oversample .

На самом деле, если установить меньшую ширину (почти в два раза), то этого будет достаточно для правильное отображение. То есть моя теория о ширине не подтвердилась. Но если уменьшить его, то будут видны искажения:

Также я заметил, что если значение ширины НЕ делится на 4, то текстура тоже получается искаженной :

То есть теперь у меня вопрос не в том, какой размер буфера будет достаточным, а как именно рассчитать сколько байт необходимо для текстуры всех символов шрифта заданной высоты.
Подробнее здесь: https://stackoverflow.com/questions/792 ... b-truetype
Мобильная версия