Как мне использовать libraqm для рендеринга правильных глифов (арабского) с FreeType2? - PullRequest
1 голос
/ 31 октября 2019

Я использовал FreeType2 для рендеринга по тексту с помощью OpenGL, но теперь мне нужно сделать арабский более сложным, поэтому я установил libraqm , чтобы помочь, и я собрал и запустил пример кода , который показывает мне, как получить индекс глифа, смещение, продвижение и кластер каждого символа.

Что мне нужно знать, это как получить изображение глифа.

В FreeType2 я использовал FT_Render_Glyph(), который принимает FT_GlyphSlot и FT_RenderMode, затем я получаю растровое изображение из этого FT_GlyphSlot.

Но так как у меня есть неподписанный int как глифindex от libraqm , я не уверен, как получить правильное растровое изображение глифа ...

Я также пытался вручную установить FT_GlyphSlot, например: ftGlyphSlot->glyph_index = glyphs[i].index; перед вызовом FT_Render_Glyph(), но тогда текст вообще не отображается.

Кстати, мне удалось отобразить арабский текст арабским шрифтом, но на данный момент он написан слева направо, и большая часть текстаглифы не правы. Я почти уверен, что смогу разобрать справа налево и объединение глифа, если смогу получить правильное изображение глифа.

1 Ответ

0 голосов
/ 12 ноября 2019

Существует разделение труда между движком формирования и движком глифа. Shaping (libraqm) говорит вам, какой глиф вы хотите и где его разместить. Рендеринг говорит вам, как это выглядит.

Итак, вы уже получили информацию о выборе и позиционировании глифов из libraqm. Это первый шаг. Шаг второй немного зависит от того, на какой холст вы рендерите, но основная идея заключается в том, что теперь вы можете (используя freetype) выбрать глиф из шрифта по идентификатору:

FT_Load_Glyph( face, glyph_index, FT_LOAD_DEFAULT );

, а затемвы можете получить его растровое изображение, как обычно, и поместить его на свой холст в месте, которое libraqm сказал вам поместить.

...