c++ 字体不能用Emscripten加载,而只能用g++加载

fnatzsnv  于 2023-03-05  发布在  其他
关注(0)|答案(2)|浏览(125)

我正在尝试使用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

cl25kdpy

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++都有效。

jc3wubiy

jc3wubiy2#

只需阅读文档:
打包的默认方法是在编译时直接将嵌套文件结构(相对于编译时命令提示符目录)Map到虚拟文件系统的根。可以在生成时在路径中使用@符号,以显式指定运行时资源在虚拟文件系统中的位置。
您可以使用下面的示例而无需复制:--preload-file '/usr/share/fonts/truetype/malayalam/Uroob-Regular.ttf'@Uroob-Regular.ttf

相关问题