我如何使用 libraqm 通过 FreeType2 呈现正确的字形(阿拉伯语)?

How do I use libraqm to render the correct glyphs (Arabic) with FreeType2?

我一直在使用 FreeType2 通过 OpenGL 按文本进行渲染,但现在我需要渲染更复杂的阿拉伯语,所以我安装了 libraqm to help, and I have built and run the example code,它告诉我如何获取字形索引、偏移量、每个字符的前进和集群。

我需要知道的是如何获取字形的图像。

在 FreeType2 中,我一直在使用 FT_Render_Glyph(),它接受一个 FT_GlyphSlot 和一个 FT_RenderMode,然后我从 FT_GlyphSlot.

但是因为我有一个 unsigned int 作为来自 libraqm 的字形索引,我不确定如何获得正确的字形位图...

我也试过手动设置 FT_GlyphSlot,例如:ftGlyphSlot->glyph_index = glyphs[i].index; 在调用 FT_Render_Glyph() 之前,但是根本没有呈现任何文本。

顺便说一句,我已经设法用阿拉伯字体渲染阿拉伯文本,但目前它是从左到右书写的,而且大部分字形都是错误的。我很确定只要我能得到正确的字形图像,我就能解决从右到左和字形连接问题。

整形引擎和字形渲染引擎之间存在分工。 Shaping (libraqm) 告诉你你想要什么字形以及把它放在哪里。渲染 告诉你它的样子。

那么,您已经从 libraqm 获得了字形 selection 和定位信息。这是第一步。第二步有点取决于你渲染的 canvas 类型,但基本思想是你现在可以(使用 freetype)select 来自 ID 的字体的字形:

FT_Load_Glyph( face, glyph_index, FT_LOAD_DEFAULT );

然后您可以像往常一样获取它的位图并将其放置在您的 canvas 上 libraqm 告诉您放置它的位置。