Как включить файл шрифта / папку с ресурсами в двоичный файл rust

Я пытаюсь создать ржавчину, требующую рендеринга текста. Способ, который я нашел, это:

let font:&Font = &ttf_context.load_font(FONT_PATH, 128)?;

Моя проблема в том, что для этого требуется, чтобы встроенный двоичный файл имел файл шрифта. Я хочу, чтобы двоичный файл содержал файл шрифта внутри себя.

Я кратко попытался использовать include_bytes!() и include_dir!(), но мне не удалось заставить их работать с &ttf_context.load_font(), который ожидает &str пути, который просто возвращает меня к исходной проблеме, и я получаю сообщение об ошибке "Couldn't open ./assets/Font.ttf"

Есть ли способ включить файл шрифта таким образом, чтобы я все еще мог получить его путь, или есть другой способ отображения текста?

Редактировать 1: Могу ли я объединить папку двоичных файлов и ресурсов в один файл, например файл .app для macOS или .exe для Windows?

Крайне необычно встраивать все свои игровые активы в двоичный файл. Существует ли Font.ttf на самом деле, и это просто проблема с поиском папки assets во время выполнения?

trojanfoe 10.01.2023 09:23

На что я надеялся, так это на возможность запуска программы без необходимости в папке с ресурсами в том же каталоге. Есть ли другой способ сделать это, например, файл .app в macOS?

Henhen1227 10.01.2023 16:40
Почему Python в конце концов умрет
Почему Python в конце концов умрет
Последние 20 лет были действительно хорошими для Python. Он прошел путь от "просто языка сценариев" до основного языка, используемого для написания...
0
2
61
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

Вместо этого вы можете использовать Sdl2TtfContext::load_font_from_rwops с байтами included следующим образом:

use sdl2::rwops::RWops;
let font: &[u8] = include_bytes!("./assets/Font.ttf");
let font: &Font = &ttf_context
    .load_font_from_rwops(RWops::from_bytes(font)?, 128)?;

Другие вопросы по теме