我正在尝试使用FreeType的第一次与OpenGL在C/C ++与本教程:https://learnopengl.com/In-Practice/Text-Rendering.
#include <iostream>
#include <ft2build.h>
#include FT_FREETYPE_H
FT_Library ft;
FT_Face face;
int main(int argc, char** argv)
{
FT_Init_FreeType(&ft);
if (FT_New_Face(ft, "/usr/share/fonts/truetype/malayalam/Uroob-Regular.ttf", 0, &face))
{
std::cout << "Font could not be loaded" << std::endl;
return -1;
}
}
现在,当我尝试编译它时,它可以与g ++一起工作,只要没有错误输出,但与em ++(Emscripten)一起,字体无法加载,因为错误输出"Font could not be loaded"指示。
我不需要这种字体"Uroob-Regular.ttf",任何可读的拉丁字体会为我做。我在Ubuntu下。
我在Emscripten中使用了标志-s USE_FREETYPE=1
。
2条答案
按热度按时间cl25kdpy1#
Emscripten似乎找不到当前目录下的文件,因为当我尝试用
--preload-file "/usr/share/fonts/truetype/malayalam/Uroob-Regular.ttf"
编译它以帮助它找到它所指示的字体时:嵌入当前目录“xxx”下的“/usr/share/fonts/truetype/malayalam/Uroob-Regular.ttf”。这是无效的,因为当前目录将成为生成的代码将看到的根目录。我不知道这样做是否有效,但我把字体文件放在cpp文件所在的目录下,然后使用
--preload-file "Uroob-Regular.ttf"
,并把相应的代码行改为if (FT_New_Face(ft, "Uroob-Regular.ttf", 0, &face))
,它对Emscripten和g++都有效。jc3wubiy2#
只需阅读文档:
打包的默认方法是在编译时直接将嵌套文件结构(相对于编译时命令提示符目录)Map到虚拟文件系统的根。可以在生成时在路径中使用@符号,以显式指定运行时资源在虚拟文件系统中的位置。
您可以使用下面的示例而无需复制:
--preload-file '/usr/share/fonts/truetype/malayalam/Uroob-Regular.ttf'@Uroob-Regular.ttf