Файл .gextension

Введение

Файл .gdextension в вашем проекте содержит инструкции по загрузке GDExtension. Инструкции разделены на отдельные разделы. Эта страница даст вам краткий обзор различных доступных вам возможностей. Для получения вводной информации о начале работы с C++ (godot-cpp) ознакомьтесь с GDExtension C++ Example.

Раздел конфигурации

Свойство

Тип

Описание

entry_symbol

Строка

Имя функции входа для инициализации GDExtension. Эта функция должна быть определена в файле register_types.cpp при использовании godot-cpp. Добавление этой функции необходимо для работы расширения.

compatibility_minimum

Строка

Минимальная совместимая версия. Это предотвращает загрузку расширений, зависящих от функций более новых версий Godot. Поддерживается только в Godot 4.1 и более поздних версиях

compatibility_maximum

Строка

Максимальная совместимая версия. Это предотвращает загрузку расширения в более новых версиях Godot. Поддерживается только в Godot 4.3 и более поздних версиях

reloadable

Boolean

Перезагружает расширение при перекомпиляции. Перезагрузка поддерживается для привязки godot-cpp в Godot 4.2 и более поздних версиях. Привязки других языков также могут поддерживать её, а могут и не поддерживать. Этот флаг следует использовать в основном для разработки или отладки расширения.

android_aar_plugin

Boolean

GDExtension является частью v2 Android plugin. При экспорте этот флаг укажет редактору, что собственные общие библиотеки GDExtension экспортируются двоичными файлами AAR плагина Android.

Раздел библиотек

В этом разделе можно указать пути к скомпилированным двоичным файлам библиотек GDExtension. Указав флаги функций, можно отфильтровать версию, которую следует загрузить и экспортировать вместе с игрой, в зависимости от того, какие флаги активны. Каждый флаг функции должен соответствовать флагам Godot или вашим собственным флагам экспорта, чтобы быть загруженным в экспортированную игру. Например, macos.debug означает, что игра будет загружена, если в Godot активны оба флага macos и debug. Каждая строка раздела обрабатывается сверху вниз.

Вот пример того, как это может выглядеть:

[libraries]

macos.debug = "res://bin/libgdexample.macos.template_debug.framework"
macos.release = "res://bin/libgdexample.macos.template_release.framework"
windows.debug.x86_32 = "res://bin/libgdexample.windows.template_debug.x86_32.dll"
windows.release.x86_32 = "res://bin/libgdexample.windows.template_release.x86_32.dll"
windows.debug.x86_64 = "res://bin/libgdexample.windows.template_debug.x86_64.dll"
windows.release.x86_64 = "res://bin/libgdexample.windows.template_release.x86_64.dll"
linux.debug.x86_64 = "res://bin/libgdexample.linux.template_debug.x86_64.so"
linux.release.x86_64 = "res://bin/libgdexample.linux.template_release.x86_64.so"
linux.debug.arm64 = "res://bin/libgdexample.linux.template_debug.arm64.so"
linux.release.arm64 = "res://bin/libgdexample.linux.template_release.arm64.so"
linux.debug.rv64 = "res://bin/libgdexample.linux.template_debug.rv64.so"
linux.release.rv64 = "res://bin/libgdexample.linux.template_release.rv64.so"

Записи сопоставляются по порядку, поэтому, если два набора тегов функций соответствуют одной и той же системе, обязательно поместите более конкретные из них первыми:

[libraries]

linux.release.editor.x86_64 = "res://bin/libgdexample.linux.template_release.x86_64.so"
linux.release.x86_64 = "res://bin/libgdexample.linux.noeditor.template_release.x86_64.so"

Вот списки некоторых доступных встроенных опций (для получения более подробной информации см. feature tags):

Running system (Ходовая система)

Flag (Флаг)

Описание

windows

Операционная система Windows

macOS

Операционная система Mac

linux

Операционная система Linux

bsd

Операционная система BSD

linux-bsd

Операционная система Linux или BSD

android

Операционная система Android

ios

Операционная система iOS

web

Web-браузер

Build (сборка)

Flag (Флаг)

Описание

debug

Сборка с отладочными символами

release

Оптимизированная сборка без отладочных символов

editor

Редактор сборки

Архитектура

Flag (Флаг)

Описание

double (двойной)

сборка с двойной точностью

single (одинарный)

сборка с одинарной точностью

x86_64

64-битная сборка x86

arm64

64-битная сборка ARM

rv64

64-битная сборка RISC-V

risc-v

Сборка RISC-V (любой разрядности)

wasm-32

32-битная сборка WebAssembly

Раздел иконок

По умолчанию Godot использует значок Node в панели сцен для узлов GDExtension. Пользовательский значок можно задать, указав его имя и путь к ресурсу в SVG-файле.

Например:

[icons]

GDExample = "res://icons/gd_example.svg"

Путь должен указывать на SVG-изображение размером 16x16 пикселей. Подробнее см. в руководстве по creating icons.

Раздел зависимостей

В этом разделе задаются пути к зависимостям GDExtension. Это используется для внутреннего экспорта зависимостей при экспорте исполняемого файла игры. Вы можете указать, какая зависимость будет загружена в зависимости от флагов функций экспортируемого исполняемого файла. Кроме того, вы можете указать необязательный подкаталог для перемещения зависимостей. Если путь не указан, Godot переместит библиотеки в тот же каталог, что и исполняемый файл игры.

Предупреждение

В MacOS необходимо иметь общие библиотеки внутри папки с названием Frameworks со структурой каталогов примерно следующего вида: Game.app/Contents/Frameworks.

[dependencies]

macos.debug = {
    "res://bin/libdependency.macos.template_debug.framework" : "Contents/Frameworks"
}
macos.release = {
    "res://bin/libdependency.macos.template_release.framework" : "Contents/Frameworks"
}
windows.debug = {
    "res://bin/libdependency.windows.template_debug.x86_64.dll" : "",
    "res://bin/libdependency.windows.template_debug.x86_32.dll" : ""
}
windows.release = {
    "res://bin/libdependency.windows.template_release.x86_64.dll" : "",
    "res://bin/libdependency.windows.template_release.x86_32.dll" : ""
}
linux.debug = {
    "res://bin/libdependency.linux.template_debug.x86_64.so" : "",
    "res://bin/libdependency.linux.template_debug.arm64.so" : "",
    "res://bin/libdependency.linux.template_debug.rv64.so" : ""
}
linux.release = {
    "res://bin/libdependency.linux.template_release.x86_64.so" : "",
    "res://bin/libdependency.linux.template_release.arm64.so" : "",
    "res://bin/libdependency.linux.template_release.rv64.so" : ""
}