Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
36 commits
Select commit Hold shift + click to select a range
7878edf
Add support for exporting DPITextures
nikitalita Dec 23, 2025
a5d3f49
import all icons as DPITextures
nikitalita Dec 23, 2025
f8f24e8
scene: set error if there were missing dependencies on load with `ign…
nikitalita Dec 23, 2025
f43df8d
fix GDRESettings::get_mapped_path
nikitalita Dec 23, 2025
81c31f2
scene: fix node importing options
nikitalita Dec 23, 2025
3c93f63
fix localize/globalize_path when running in editor
nikitalita Dec 23, 2025
cf4adb2
add export resource option to Editor menu
nikitalita Dec 23, 2025
10b6a48
clean up gdre_main
nikitalita Dec 23, 2025
65a4eb6
add get_export_extensions() to exporters
nikitalita Dec 24, 2025
6eaaf3e
fix editor resource export
nikitalita Dec 24, 2025
2abac84
scene: fix setting import params, replace navmesh/occluder/area3d_onl…
nikitalita Dec 24, 2025
e8259a1
scene: move converting shader meshes to initial load
nikitalita Dec 24, 2025
76e700a
scene: Fix scene manip/import settings
nikitalita Dec 24, 2025
39bc9f8
fix gen nodes and setting import info
nikitalita Dec 24, 2025
785b213
Add "create git repo" option to recovery options
nikitalita Dec 24, 2025
cce6e7c
scene: fix gen area_3d nodes
nikitalita Dec 25, 2025
745e47d
resource loaders: save not-set properties in missing_resource_properties
nikitalita Dec 25, 2025
c2797fe
clean up scene error reporting
nikitalita Dec 25, 2025
5def45d
task_manager: add dispatch_to_main_thread()
nikitalita Dec 26, 2025
7160cec
scene: fix setting resource name
nikitalita Dec 26, 2025
513f60c
update rebase script
nikitalita Dec 26, 2025
cb47237
fix tests on CI
nikitalita Dec 26, 2025
03f9c88
update working branch
nikitalita Dec 26, 2025
033415d
re-enable mutli-threaded-scene export
nikitalita Dec 26, 2025
18c4a86
add `pre_run()` to TaskRunnerStruct
nikitalita Dec 26, 2025
b20f12c
csharp: change copy dir for reference addemblies to `_mono_referenced…
nikitalita Dec 26, 2025
bcd4acd
fix etc pack decompression
nikitalita Dec 27, 2025
4eb055d
remove etcpak decompressor in favor of built-in decompression
nikitalita Dec 27, 2025
fcbac0d
fix setting names in scene export
nikitalita Dec 27, 2025
bca5e39
fix gitignore generation
nikitalita Dec 27, 2025
afe3169
fix release builds
nikitalita Dec 27, 2025
e7db1c1
csharp: fix copying refs
nikitalita Dec 27, 2025
c487d6c
csharp: fix copying refs
nikitalita Dec 27, 2025
d9b93c2
fix scene import param names
nikitalita Dec 27, 2025
b2b84a7
fix ci tests
nikitalita Dec 27, 2025
b055d26
scene: ensure name is unique when changing it
nikitalita Dec 27, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 1 addition & 2 deletions .github/workflows/all_builds.yml
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ env:
# TODO: change this back to godotengine/godot and target master when #109685 and #109475 are merged
GODOT_REPOSITORY: nikitalita/godot
# Change the README too
GODOT_MAIN_SYNC_REF: gdre-wb-e2a10cd4
GODOT_MAIN_SYNC_REF: gdre-wb-63227bb
SCONSFLAGS: verbose=yes warnings=all werror=no module_text_server_fb_enabled=yes minizip=yes deprecated=yes
SCONSFLAGS_TEMPLATE: no_editor_splash=yes module_camera_enabled=no module_mobile_vr_enabled=no module_upnp_enabled=no module_websocket_enabled=no module_csg_enabled=yes module_gridmap_enabled=yes use_static_cpp=yes builtin_freetype=yes builtin_libpng=yes builtin_zlib=yes builtin_libwebp=yes builtin_libvorbis=yes builtin_libogg=yes disable_3d=no
SCONS_CACHE_MSVC_CONFIG: true
Expand Down Expand Up @@ -367,7 +367,6 @@ jobs:
shell: bash
run: |
${{matrix.bin}} --headless --test --force-colors "--test-case=[GDSDecomp]*"

export:
needs: build
runs-on: ${{ matrix.os }}
Expand Down
3 changes: 3 additions & 0 deletions .scripts/rebase_godot.sh
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,9 @@ git checkout working-branch
git reset --hard $HEAD

BRANCHES_TO_MERGE=(
gltf-dupe-images
material-fix-deprecated-param
fix-dummy-mesh-blend-shape
fix-pack-error
convert-3.x-escn
fix-svg
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -149,7 +149,7 @@ Note: Make sure to build the editor build first, and to launch the editor to edi

### Requirements

[Our fork of godot](https://github.com/nikitalita/godot/tree/working-branch) @ `gdre-wb-e2a10cd4`
[Our fork of godot](https://github.com/nikitalita/godot/tree/working-branch) @ `gdre-wb-63227bb`

- Support for building on 3.x has been dropped and no new features are being pushed
- Godot RE Tools still retains the ability to decompile 3.x and 2.x projects, however.
Expand Down
3 changes: 0 additions & 3 deletions SCsub
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,6 @@ if env["platform"] == "android" or (is_using_clang and env["platform"] == "macos
# force shared on macos with clang++, because `ld` does not support multiple definitions of the same symbol
mono_native_lib_type = "Shared"

etcpak_dir = "#thirdparty/etcpak/"
mmp3thirdparty_dir = "#thirdparty/minimp3/"
liboggthirdparty_dir = "#thirdparty/libogg/"
libtheorathirdparty_dir = "#thirdparty/libtheora/"
Expand Down Expand Up @@ -195,7 +194,6 @@ def write_version_header():
write_version_header()


env_gdsdecomp.Prepend(CPPPATH=[etcpak_dir])
if env["builtin_libogg"]:
env_gdsdecomp.Prepend(CPPPATH=[liboggthirdparty_dir])
if env["builtin_libvorbis"]:
Expand Down Expand Up @@ -862,7 +860,6 @@ if env["tests"]:
env_gdsdecomp.add_source_files(module_obj, "utility/*.cpp")

env_gdsdecomp.add_source_files(module_obj, "external/tga/*.cpp")
env_gdsdecomp.add_source_files(module_obj, "external/etcpak-decompress/*.cpp")
env_gdsdecomp.add_source_files(module_obj, "external/tinygltf/tiny_gltf.cc")
env_gdsdecomp.add_source_files(module_obj, "module_etc_decompress/*.cpp")

Expand Down
11 changes: 10 additions & 1 deletion compat/resource_compat_binary.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -972,7 +972,16 @@ Error ResourceLoaderCompatBinary::load() {
if (!missing_resource && ver_major <= 2 && name == "resource/name") {
name = "resource_name";
}
res->set(name, value);
bool valid = false;
res->set(name, value, &valid);
if (!valid) {
missing_resource_properties[name] = value;
#ifdef DEBUG_ENABLED
if (ver_major < GODOT_VERSION_MAJOR) {
WARN_PRINT(vformat("Failed to set deprecated %d.%d property '%s' (type: %s) on res class '%s' (remap: %s)", ver_major, ver_minor, name, Variant::get_type_name(value.get_type()), t, res->get_class()));
}
#endif
}
}
}

Expand Down
22 changes: 20 additions & 2 deletions compat/resource_compat_text.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -803,7 +803,16 @@ Error ResourceLoaderCompatText::load() {
if (!missing_resource && ver_major <= 2 && assign == "resource/name") {
assign = "resource_name";
}
res->set(assign, value);
bool valid = false;
res->set(assign, value, &valid);
if (!valid) {
missing_resource_properties[assign] = value;
#ifdef DEBUG_ENABLED
if (ver_major < GODOT_VERSION_MAJOR) {
WARN_PRINT(vformat("Failed to set deprecated %d.%d property '%s' (type: %s) on res class '%s' (class remap: %s)", ver_major, ver_minor, assign, Variant::get_type_name(value.get_type()), type, res->get_class()));
}
#endif
}
}
}
//it's assignment
Expand Down Expand Up @@ -1010,7 +1019,16 @@ Error ResourceLoaderCompatText::load() {
if (!missing_resource && ver_major <= 2 && assign == "resource/name") {
assign = "resource_name";
}
resource->set(assign, value);
bool valid = false;
resource->set(assign, value, &valid);
if (!valid) {
missing_resource_properties[assign] = value;
#ifdef DEBUG_ENABLED
if (ver_major < GODOT_VERSION_MAJOR) {
WARN_PRINT(vformat("Failed to set deprecated %d.%d property '%s' (type: %s) on res class '%s' (class remap: %s)", ver_major, ver_minor, assign, Variant::get_type_name(value.get_type()), res_type, resource->get_class()));
}
#endif
}
}
//it's assignment
} else if (!next_tag.name.is_empty()) {
Expand Down
71 changes: 71 additions & 0 deletions editor/gdre_editor.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -258,6 +258,22 @@ void GodotREEditor::init_gui(Control *p_control, HBoxContainer *p_menu, bool p_l
smpl_file_selection->set_current_dir(desktop_dir);
p_control->add_child(smpl_file_selection);

export_resource_file_selection = memnew(FileDialog);
export_resource_file_selection->set_access(FileDialog::ACCESS_FILESYSTEM);
export_resource_file_selection->set_file_mode(FileDialog::FILE_MODE_OPEN_FILE);
export_resource_file_selection->connect("file_selected", callable_mp(this, &GodotREEditor::_export_resource_request));
export_resource_file_selection->set_show_hidden_files(true);
export_resource_file_selection->set_current_dir(desktop_dir);
p_control->add_child(export_resource_file_selection);

export_resource_output_selection = memnew(FileDialog);
export_resource_output_selection->set_access(FileDialog::ACCESS_FILESYSTEM);
export_resource_output_selection->set_file_mode(FileDialog::FILE_MODE_SAVE_FILE);
export_resource_output_selection->connect("file_selected", callable_mp(this, &GodotREEditor::_export_resource_output_request));
export_resource_output_selection->set_show_hidden_files(true);
export_resource_output_selection->set_current_dir(desktop_dir);
p_control->add_child(export_resource_output_selection);

//Init about/warning dialog
{
about_dialog = memnew(AcceptDialog);
Expand Down Expand Up @@ -344,6 +360,8 @@ void GodotREEditor::init_gui(Control *p_control, HBoxContainer *p_menu, bool p_l
menu_popup->add_icon_item(GDREGuiIcons::get_icon("REResOther", scale), RTR("Convert stream textures to PNG..."), MENU_STEX_TO_PNG);
menu_popup->add_icon_item(GDREGuiIcons::get_icon("REResOther", scale), RTR("Convert OGG Samples to OGG..."), MENU_OSTR_TO_OGG);
menu_popup->add_icon_item(GDREGuiIcons::get_icon("REResOther", scale), RTR("Convert WAV Samples to WAV..."), MENU_SMPL_TO_WAV);
menu_popup->add_icon_item(GDREGuiIcons::get_icon("REResOther", scale), RTR("Export Resource..."), MENU_EXPORT_RESOURCE);

menu_popup->connect("id_pressed", callable_mp(this, &GodotREEditor::menu_option_pressed));
menu_button->set_anchor(Side::SIDE_TOP, 0);
p_menu->add_child(menu_button);
Expand Down Expand Up @@ -374,6 +392,7 @@ void GodotREEditor::init_gui(Control *p_control, HBoxContainer *p_menu, bool p_l
menu_popup->add_icon_item(GDREGuiIcons::get_icon("REResOther", scale), RTR("Convert stream textures to PNG..."), MENU_STEX_TO_PNG);
menu_popup->add_icon_item(GDREGuiIcons::get_icon("REResOther", scale), RTR("Convert OGG Samples to OGG..."), MENU_OSTR_TO_OGG);
menu_popup->add_icon_item(GDREGuiIcons::get_icon("REResOther", scale), RTR("Convert WAV Samples to WAV..."), MENU_SMPL_TO_WAV);
menu_popup->add_icon_item(GDREGuiIcons::get_icon("REResOther", scale), RTR("Export Resource..."), MENU_EXPORT_RESOURCE);
menu_popup->connect("id_pressed", callable_mp(this, &GodotREEditor::menu_option_pressed));
menu_button->set_anchor(Side::SIDE_TOP, 0);
p_menu->add_child(menu_button);
Expand Down Expand Up @@ -454,6 +473,9 @@ void GodotREEditor::menu_option_pressed(int p_id) {
case MENU_SMPL_TO_WAV: {
smpl_file_selection->popup_centered(Size2(600, 400));
} break;
case MENU_EXPORT_RESOURCE: {
export_resource_file_selection->popup_centered();
} break;
case MENU_ABOUT_RE: {
show_about_dialog();
} break;
Expand Down Expand Up @@ -1077,6 +1099,55 @@ void GodotREEditor::_res_bin_2_txt_process() {
}
}

void GodotREEditor::_export_resource_request(const String &p_file) {
res_files = { p_file };
Vector<String> extensions = Exporter::get_export_extensions(p_file);
if (extensions.size() == 0) {
show_warning(RTR("No exporters found for resource " + p_file), RTR("Export resource"), RTR("No exporters found for resource " + p_file));
return;
}
String default_extension = extensions.size() > 0 ? extensions[0] : "";
String default_filename = p_file.get_file().get_basename() + "." + default_extension;
export_resource_output_selection->clear_filters();
for (const String &extension : extensions) {
export_resource_output_selection->add_filter("*." + extension);
}
export_resource_output_selection->set_current_file(default_filename);
export_resource_output_selection->popup_centered(Size2(600, 400));
}

void GodotREEditor::_export_resource_output_request(const String &p_path) {
_export_resource_process(p_path);
}

void GodotREEditor::_export_resource_process(const String &p_output_path) {
EditorProgressGDDC *pr = memnew(EditorProgressGDDC(ne_parent, "re_export_res", RTR("Exporting resources..."), res_files.size(), true));

String failed_files;
for (int i = 0; i < res_files.size(); i++) {
GDRESettings::get_singleton()->get_errors();
// print_warning("exporting " + res_files[i], RTR("Export resources"));
bool cancel = pr->step(res_files[i], i, true);
if (cancel) {
break;
}

Error err = Exporter::export_file(p_output_path, res_files[i]);
if (err != OK) {
failed_files += res_files[i] + " failed:\n" + GDRESettings::get_singleton()->get_recent_error_string() + "\n";
}
}

memdelete(pr);
res_files = Vector<String>();

if (failed_files.length() > 0) {
show_warning(failed_files, RTR("Export resources"), RTR("At least one error was detected!"));
} else {
show_warning(RTR("No errors detected."), RTR("Export resources"), RTR("The operation completed successfully!"));
}
}

Error GodotREEditor::convert_file_to_text(const String &p_src_path, const String &p_dst_path) {
return ResourceCompatLoader::to_text(p_src_path, p_dst_path);
}
Expand Down
7 changes: 7 additions & 0 deletions editor/gdre_editor.h
Original file line number Diff line number Diff line change
Expand Up @@ -95,6 +95,8 @@ class GodotREEditor : public Node {
FileDialog *stex_file_selection = nullptr;
FileDialog *ostr_file_selection = nullptr;
FileDialog *smpl_file_selection = nullptr;
FileDialog *export_resource_file_selection = nullptr;
FileDialog *export_resource_output_selection = nullptr;

MenuButton *menu_button = nullptr;
PopupMenu *menu_popup = nullptr;
Expand Down Expand Up @@ -135,6 +137,10 @@ class GodotREEditor : public Node {
void _res_smpl_2_wav_request(const Vector<String> &p_files);
void _res_smpl_2_wav_process();

void _export_resource_request(const String &p_file);
void _export_resource_output_request(const String &p_path);
void _export_resource_process(const String &p_output_dir);

Error convert_file_to_binary(const String &p_src_path, const String &p_dst_path);
Error convert_file_to_text(const String &p_src_path, const String &p_dst_path);

Expand All @@ -159,6 +165,7 @@ class GodotREEditor : public Node {
MENU_STEX_TO_PNG,
MENU_OSTR_TO_OGG,
MENU_SMPL_TO_WAV,
MENU_EXPORT_RESOURCE,
MENU_ABOUT_RE,
MENU_REPORT_ISSUE,
MENU_EXIT_RE,
Expand Down
7 changes: 7 additions & 0 deletions exporters/autoconverted_exporter.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -37,3 +37,10 @@ String AutoConvertedExporter::get_default_export_extension(const String &res_pat
}
return "tres";
}

Vector<String> AutoConvertedExporter::get_export_extensions(const String &res_path) const {
if (res_path.get_extension().to_lower() == "scn") {
return { "tscn", "tres" };
}
return { "tres" };
}
1 change: 1 addition & 0 deletions exporters/autoconverted_exporter.h
Original file line number Diff line number Diff line change
Expand Up @@ -13,4 +13,5 @@ class AutoConvertedExporter : public ResourceExporter {
virtual void get_handled_types(List<String> *out) const override;
virtual void get_handled_importers(List<String> *out) const override;
virtual String get_default_export_extension(const String &res_path) const override;
virtual Vector<String> get_export_extensions(const String &res_path) const override;
};
6 changes: 6 additions & 0 deletions exporters/csharp_exporter.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -55,3 +55,9 @@ String CSharpExporter::get_name() const {
String CSharpExporter::get_default_export_extension(const String &res_path) const {
return "cs";
}

Vector<String> CSharpExporter::get_export_extensions(const String &res_path) const {
Vector<String> extensions;
extensions.push_back("cs");
return extensions;
}
1 change: 1 addition & 0 deletions exporters/csharp_exporter.h
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ class CSharpExporter : public ResourceExporter {
virtual String get_name() const override;
virtual bool supports_nonpack_export() const override { return false; }
virtual String get_default_export_extension(const String &res_path) const override;
virtual Vector<String> get_export_extensions(const String &res_path) const override;
CSharpExporter() = default;
~CSharpExporter() = default;
};
6 changes: 6 additions & 0 deletions exporters/dialogue_exporter.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -72,3 +72,9 @@ void DialogueExporter::get_handled_importers(List<String> *out) const {
String DialogueExporter::get_default_export_extension(const String &res_path) const {
return "dialogue";
}

Vector<String> DialogueExporter::get_export_extensions(const String &res_path) const {
Vector<String> extensions;
extensions.push_back("dialogue");
return extensions;
}
1 change: 1 addition & 0 deletions exporters/dialogue_exporter.h
Original file line number Diff line number Diff line change
Expand Up @@ -13,4 +13,5 @@ class DialogueExporter : public ResourceExporter {
virtual void get_handled_types(List<String> *out) const override;
virtual void get_handled_importers(List<String> *out) const override;
virtual String get_default_export_extension(const String &res_path) const override;
virtual Vector<String> get_export_extensions(const String &res_path) const override;
};
6 changes: 6 additions & 0 deletions exporters/fontfile_exporter.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -387,3 +387,9 @@ String FontFileExporter::get_name() const {
String FontFileExporter::get_default_export_extension(const String &res_path) const {
return "ttf";
}

Vector<String> FontFileExporter::get_export_extensions(const String &res_path) const {
Vector<String> extensions = { "ttf", "otf" };
extensions.append_array(ImageSaver::get_supported_extensions());
return extensions;
}
1 change: 1 addition & 0 deletions exporters/fontfile_exporter.h
Original file line number Diff line number Diff line change
Expand Up @@ -16,4 +16,5 @@ class FontFileExporter : public ResourceExporter {
virtual void get_handled_importers(List<String> *out) const override;
virtual String get_name() const override;
virtual String get_default_export_extension(const String &res_path) const override;
virtual Vector<String> get_export_extensions(const String &res_path) const override;
};
6 changes: 6 additions & 0 deletions exporters/gdextension_exporter.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -374,3 +374,9 @@ String GDExtensionExporter::get_name() const {
String GDExtensionExporter::get_default_export_extension(const String &res_path) const {
return "gdext";
}

Vector<String> GDExtensionExporter::get_export_extensions(const String &res_path) const {
Vector<String> extensions;
extensions.push_back("gdext");
return extensions;
}
1 change: 1 addition & 0 deletions exporters/gdextension_exporter.h
Original file line number Diff line number Diff line change
Expand Up @@ -14,4 +14,5 @@ class GDExtensionExporter : public ResourceExporter {
virtual String get_name() const override;
virtual bool supports_nonpack_export() const override { return false; }
virtual String get_default_export_extension(const String &res_path) const override;
virtual Vector<String> get_export_extensions(const String &res_path) const override;
};
6 changes: 6 additions & 0 deletions exporters/gdscript_exporter.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -100,6 +100,12 @@ String GDScriptExporter::get_default_export_extension(const String &res_path) co
return "gd";
}

Vector<String> GDScriptExporter::get_export_extensions(const String &res_path) const {
Vector<String> extensions;
extensions.push_back("gd");
return extensions;
}

Error GDScriptExporter::test_export(const Ref<ExportReport> &export_report, const String &original_project_dir) const {
Error _ret_err = OK;
{
Expand Down
1 change: 1 addition & 0 deletions exporters/gdscript_exporter.h
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ class GDScriptExporter : public ResourceExporter {
virtual String get_name() const override;
virtual bool supports_nonpack_export() const override { return false; }
virtual String get_default_export_extension(const String &res_path) const override;
virtual Vector<String> get_export_extensions(const String &res_path) const override;
virtual Error test_export(const Ref<ExportReport> &export_report, const String &original_project_dir) const override;
GDScriptExporter() = default;
~GDScriptExporter() = default;
Expand Down
4 changes: 4 additions & 0 deletions exporters/mp3str_exporter.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,10 @@ String Mp3StrExporter::get_default_export_extension(const String &res_path) cons
return "mp3";
}

Vector<String> Mp3StrExporter::get_export_extensions(const String &res_path) const {
return { "mp3" };
}

Error Mp3StrExporter::test_export(const Ref<ExportReport> &export_report, const String &original_project_dir) const {
Error _ret_err = OK;
{
Expand Down
1 change: 1 addition & 0 deletions exporters/mp3str_exporter.h
Original file line number Diff line number Diff line change
Expand Up @@ -15,5 +15,6 @@ class Mp3StrExporter : public ResourceExporter {
virtual void get_handled_types(List<String> *out) const override;
virtual void get_handled_importers(List<String> *out) const override;
virtual String get_default_export_extension(const String &res_path) const override;
virtual Vector<String> get_export_extensions(const String &res_path) const override;
virtual Error test_export(const Ref<ExportReport> &export_report, const String &original_project_dir) const override;
};
4 changes: 4 additions & 0 deletions exporters/obj_exporter.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -620,3 +620,7 @@ String ObjExporter::get_name() const {
String ObjExporter::get_default_export_extension(const String &res_path) const {
return "obj";
}

Vector<String> ObjExporter::get_export_extensions(const String &res_path) const {
return { "obj" };
}
1 change: 1 addition & 0 deletions exporters/obj_exporter.h
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ class ObjExporter : public ResourceExporter {
virtual Ref<ExportReport> export_resource(const String &p_output_dir, Ref<ImportInfo> p_import_info) override;
virtual bool supports_multithread() const override;
virtual String get_default_export_extension(const String &res_path) const override;
virtual Vector<String> get_export_extensions(const String &res_path) const override;
};

#endif // OBJ_EXPORTER_H
4 changes: 4 additions & 0 deletions exporters/oggstr_exporter.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -204,6 +204,10 @@ String OggStrExporter::get_default_export_extension(const String &res_path) cons
return "ogg";
}

Vector<String> OggStrExporter::get_export_extensions(const String &res_path) const {
return { "ogg" };
}

namespace {
auto packet_data_to_flat_vector(const TypedArray<Array> &packet_data) -> Vector<Vector<uint8_t>> {
Vector<Vector<uint8_t>> data;
Expand Down
Loading
Loading