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

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

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

То есть теперь у меня вопрос не в том, какой размер буфера будет достаточным, а как именно рассчитать сколько байт необходимо для текстуры всех символов шрифта заданной высоты.
Обновление №1
Здесь вы можете увидеть код, который считывает данные из файла TTF и создает текстуру. Я хочу сохранить в одном изображении все символы начиная с кода 32 (включительно) до кода 126 (включительно) для шрифта высотой 48 пикселей. Этот метод описывает создание текстуры (где нужно задать размер пикселя). Этот метод описывает, как рисовать каждый символ. Метод onRenderTexts вызывается в цикле GLFW.
Подробнее здесь: https://stackoverflow.com/questions/792 ... b-truetype
Мобильная версия