2022-07-17 19:24:37 +02:00
/**************************************************************************/
/* editor_export_plugin.h */
/**************************************************************************/
/* This file is part of: */
/* GODOT ENGINE */
/* https://godotengine.org */
/**************************************************************************/
/* Copyright (c) 2014-present Godot Engine contributors (see AUTHORS.md). */
/* Copyright (c) 2007-2014 Juan Linietsky, Ariel Manzur. */
/* */
/* Permission is hereby granted, free of charge, to any person obtaining */
/* a copy of this software and associated documentation files (the */
/* "Software"), to deal in the Software without restriction, including */
/* without limitation the rights to use, copy, modify, merge, publish, */
/* distribute, sublicense, and/or sell copies of the Software, and to */
/* permit persons to whom the Software is furnished to do so, subject to */
/* the following conditions: */
/* */
/* The above copyright notice and this permission notice shall be */
/* included in all copies or substantial portions of the Software. */
/* */
/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */
/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */
/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. */
/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */
/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */
/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
/**************************************************************************/
# ifndef EDITOR_EXPORT_PLUGIN_H
# define EDITOR_EXPORT_PLUGIN_H
2022-12-07 12:11:28 +01:00
# include "core/extension/gdextension.h"
2023-02-08 13:36:02 +01:00
# include "editor_export_platform.h"
2022-07-17 19:24:37 +02:00
# include "editor_export_preset.h"
# include "editor_export_shared_object.h"
Add support for scene/resource customization in export plugins
EditorExportPlugin adds a set of callbacks to allow customizing scenes, resources or subresources in all files exported:
* Can take scene files, resource files and subresources in all of them.
* Uses a cache for the converted files if nothing changes, so this work only happens if a file is modified.
* Uses hashing to differentiate export configuration caches.
* Removed the previous conversion code to binary, as this one uses existing stuff.
This API is useful in several scenarios:
* Needed by the "server" export platform to get rid of textures, meshes, audio, etc.
* Needed by text to binary converters.
* Needed by eventual optimizations such as shader precompiling on export, mesh merging and optimization, etc.
This is a draft, feedback is very welcome.
2022-08-31 11:12:42 +02:00
# include "scene/main/node.h"
2022-07-17 19:24:37 +02:00
class EditorExportPlugin : public RefCounted {
GDCLASS ( EditorExportPlugin , RefCounted ) ;
2023-02-08 13:36:02 +01:00
friend class EditorExport ;
2022-07-17 19:24:37 +02:00
friend class EditorExportPlatform ;
2023-07-02 20:14:29 +02:00
friend class EditorExportPreset ;
2022-07-17 19:24:37 +02:00
Ref < EditorExportPreset > export_preset ;
Vector < SharedObject > shared_objects ;
struct ExtraFile {
String path ;
Vector < uint8_t > data ;
bool remap = false ;
} ;
Vector < ExtraFile > extra_files ;
bool skipped = false ;
Vector < String > ios_frameworks ;
Vector < String > ios_embedded_frameworks ;
Vector < String > ios_project_static_libs ;
String ios_plist_content ;
String ios_linker_flags ;
Vector < String > ios_bundle_files ;
String ios_cpp_code ;
Vector < String > macos_plugin_files ;
_FORCE_INLINE_ void _clear ( ) {
shared_objects . clear ( ) ;
extra_files . clear ( ) ;
skipped = false ;
}
2023-02-02 08:25:53 +01:00
_FORCE_INLINE_ void _export_end_clear ( ) {
2022-07-17 19:24:37 +02:00
ios_frameworks . clear ( ) ;
ios_embedded_frameworks . clear ( ) ;
ios_bundle_files . clear ( ) ;
ios_plist_content = " " ;
ios_linker_flags = " " ;
ios_cpp_code = " " ;
macos_plugin_files . clear ( ) ;
}
Add support for scene/resource customization in export plugins
EditorExportPlugin adds a set of callbacks to allow customizing scenes, resources or subresources in all files exported:
* Can take scene files, resource files and subresources in all of them.
* Uses a cache for the converted files if nothing changes, so this work only happens if a file is modified.
* Uses hashing to differentiate export configuration caches.
* Removed the previous conversion code to binary, as this one uses existing stuff.
This API is useful in several scenarios:
* Needed by the "server" export platform to get rid of textures, meshes, audio, etc.
* Needed by text to binary converters.
* Needed by eventual optimizations such as shader precompiling on export, mesh merging and optimization, etc.
This is a draft, feedback is very welcome.
2022-08-31 11:12:42 +02:00
// Export
2022-07-17 19:24:37 +02:00
void _export_file_script ( const String & p_path , const String & p_type , const Vector < String > & p_features ) ;
void _export_begin_script ( const Vector < String > & p_features , bool p_debug , const String & p_path , int p_flags ) ;
void _export_end_script ( ) ;
2023-07-02 20:14:29 +02:00
String _has_valid_export_configuration ( const Ref < EditorExportPlatform > & p_export_platform , const Ref < EditorExportPreset > & p_preset ) ;
2022-07-17 19:24:37 +02:00
protected :
void set_export_preset ( const Ref < EditorExportPreset > & p_preset ) ;
Ref < EditorExportPreset > get_export_preset ( ) const ;
void add_file ( const String & p_path , const Vector < uint8_t > & p_file , bool p_remap ) ;
void add_shared_object ( const String & p_path , const Vector < String > & tags , const String & p_target = String ( ) ) ;
void add_ios_framework ( const String & p_path ) ;
void add_ios_embedded_framework ( const String & p_path ) ;
void add_ios_project_static_lib ( const String & p_path ) ;
void add_ios_plist_content ( const String & p_plist_content ) ;
void add_ios_linker_flags ( const String & p_flags ) ;
void add_ios_bundle_file ( const String & p_path ) ;
void add_ios_cpp_code ( const String & p_code ) ;
void add_macos_plugin_file ( const String & p_path ) ;
void skip ( ) ;
virtual void _export_file ( const String & p_path , const String & p_type , const HashSet < String > & p_features ) ;
virtual void _export_begin ( const HashSet < String > & p_features , bool p_debug , const String & p_path , int p_flags ) ;
2023-02-02 08:25:53 +01:00
virtual void _export_end ( ) ;
2022-07-17 19:24:37 +02:00
static void _bind_methods ( ) ;
GDVIRTUAL3 ( _export_file , String , String , Vector < String > )
GDVIRTUAL4 ( _export_begin , Vector < String > , bool , String , uint32_t )
GDVIRTUAL0 ( _export_end )
Add support for scene/resource customization in export plugins
EditorExportPlugin adds a set of callbacks to allow customizing scenes, resources or subresources in all files exported:
* Can take scene files, resource files and subresources in all of them.
* Uses a cache for the converted files if nothing changes, so this work only happens if a file is modified.
* Uses hashing to differentiate export configuration caches.
* Removed the previous conversion code to binary, as this one uses existing stuff.
This API is useful in several scenarios:
* Needed by the "server" export platform to get rid of textures, meshes, audio, etc.
* Needed by text to binary converters.
* Needed by eventual optimizations such as shader precompiling on export, mesh merging and optimization, etc.
This is a draft, feedback is very welcome.
2022-08-31 11:12:42 +02:00
GDVIRTUAL2RC ( bool , _begin_customize_resources , const Ref < EditorExportPlatform > & , const Vector < String > & )
GDVIRTUAL2R ( Ref < Resource > , _customize_resource , const Ref < Resource > & , String )
GDVIRTUAL2RC ( bool , _begin_customize_scenes , const Ref < EditorExportPlatform > & , const Vector < String > & )
GDVIRTUAL2R ( Node * , _customize_scene , Node * , String )
GDVIRTUAL0RC ( uint64_t , _get_customization_configuration_hash )
GDVIRTUAL0 ( _end_customize_scenes )
GDVIRTUAL0 ( _end_customize_resources )
2022-12-20 22:49:11 +01:00
GDVIRTUAL2RC ( PackedStringArray , _get_export_features , const Ref < EditorExportPlatform > & , bool ) ;
2023-02-08 13:36:02 +01:00
GDVIRTUAL1RC ( TypedArray < Dictionary > , _get_export_options , const Ref < EditorExportPlatform > & ) ;
2024-02-12 23:16:48 +01:00
GDVIRTUAL1RC ( Dictionary , _get_export_options_overrides , const Ref < EditorExportPlatform > & ) ;
2023-02-08 13:36:02 +01:00
GDVIRTUAL1RC ( bool , _should_update_export_options , const Ref < EditorExportPlatform > & ) ;
2023-07-02 20:14:29 +02:00
GDVIRTUAL2RC ( String , _get_export_option_warning , const Ref < EditorExportPlatform > & , String ) ;
2022-12-20 22:49:11 +01:00
Add support for scene/resource customization in export plugins
EditorExportPlugin adds a set of callbacks to allow customizing scenes, resources or subresources in all files exported:
* Can take scene files, resource files and subresources in all of them.
* Uses a cache for the converted files if nothing changes, so this work only happens if a file is modified.
* Uses hashing to differentiate export configuration caches.
* Removed the previous conversion code to binary, as this one uses existing stuff.
This API is useful in several scenarios:
* Needed by the "server" export platform to get rid of textures, meshes, audio, etc.
* Needed by text to binary converters.
* Needed by eventual optimizations such as shader precompiling on export, mesh merging and optimization, etc.
This is a draft, feedback is very welcome.
2022-08-31 11:12:42 +02:00
GDVIRTUAL0RC ( String , _get_name )
2023-07-02 20:14:29 +02:00
GDVIRTUAL1RC ( bool , _supports_platform , const Ref < EditorExportPlatform > & ) ;
GDVIRTUAL2RC ( PackedStringArray , _get_android_dependencies , const Ref < EditorExportPlatform > & , bool ) ;
GDVIRTUAL2RC ( PackedStringArray , _get_android_dependencies_maven_repos , const Ref < EditorExportPlatform > & , bool ) ;
GDVIRTUAL2RC ( PackedStringArray , _get_android_libraries , const Ref < EditorExportPlatform > & , bool ) ;
GDVIRTUAL2RC ( String , _get_android_manifest_activity_element_contents , const Ref < EditorExportPlatform > & , bool ) ;
GDVIRTUAL2RC ( String , _get_android_manifest_application_element_contents , const Ref < EditorExportPlatform > & , bool ) ;
GDVIRTUAL2RC ( String , _get_android_manifest_element_contents , const Ref < EditorExportPlatform > & , bool ) ;
2022-12-20 22:49:11 +01:00
virtual bool _begin_customize_resources ( const Ref < EditorExportPlatform > & p_platform , const Vector < String > & p_features ) ; // Return true if this plugin does property export customization
virtual Ref < Resource > _customize_resource ( const Ref < Resource > & p_resource , const String & p_path ) ; // If nothing is returned, it means do not touch (nothing changed). If something is returned (either the same or a different resource) it means changes are made.
virtual bool _begin_customize_scenes ( const Ref < EditorExportPlatform > & p_platform , const Vector < String > & p_features ) ; // Return true if this plugin does property export customization
virtual Node * _customize_scene ( Node * p_root , const String & p_path ) ; // Return true if a change was made
Add support for scene/resource customization in export plugins
EditorExportPlugin adds a set of callbacks to allow customizing scenes, resources or subresources in all files exported:
* Can take scene files, resource files and subresources in all of them.
* Uses a cache for the converted files if nothing changes, so this work only happens if a file is modified.
* Uses hashing to differentiate export configuration caches.
* Removed the previous conversion code to binary, as this one uses existing stuff.
This API is useful in several scenarios:
* Needed by the "server" export platform to get rid of textures, meshes, audio, etc.
* Needed by text to binary converters.
* Needed by eventual optimizations such as shader precompiling on export, mesh merging and optimization, etc.
This is a draft, feedback is very welcome.
2022-08-31 11:12:42 +02:00
2022-12-20 22:49:11 +01:00
virtual uint64_t _get_customization_configuration_hash ( ) const ; // Hash used for caching customized resources and scenes.
Add support for scene/resource customization in export plugins
EditorExportPlugin adds a set of callbacks to allow customizing scenes, resources or subresources in all files exported:
* Can take scene files, resource files and subresources in all of them.
* Uses a cache for the converted files if nothing changes, so this work only happens if a file is modified.
* Uses hashing to differentiate export configuration caches.
* Removed the previous conversion code to binary, as this one uses existing stuff.
This API is useful in several scenarios:
* Needed by the "server" export platform to get rid of textures, meshes, audio, etc.
* Needed by text to binary converters.
* Needed by eventual optimizations such as shader precompiling on export, mesh merging and optimization, etc.
This is a draft, feedback is very welcome.
2022-08-31 11:12:42 +02:00
2022-12-20 22:49:11 +01:00
virtual void _end_customize_scenes ( ) ;
virtual void _end_customize_resources ( ) ;
Add support for scene/resource customization in export plugins
EditorExportPlugin adds a set of callbacks to allow customizing scenes, resources or subresources in all files exported:
* Can take scene files, resource files and subresources in all of them.
* Uses a cache for the converted files if nothing changes, so this work only happens if a file is modified.
* Uses hashing to differentiate export configuration caches.
* Removed the previous conversion code to binary, as this one uses existing stuff.
This API is useful in several scenarios:
* Needed by the "server" export platform to get rid of textures, meshes, audio, etc.
* Needed by text to binary converters.
* Needed by eventual optimizations such as shader precompiling on export, mesh merging and optimization, etc.
This is a draft, feedback is very welcome.
2022-08-31 11:12:42 +02:00
2022-12-20 22:49:11 +01:00
virtual PackedStringArray _get_export_features ( const Ref < EditorExportPlatform > & p_export_platform , bool p_debug ) const ;
2023-02-08 13:36:02 +01:00
virtual void _get_export_options ( const Ref < EditorExportPlatform > & p_export_platform , List < EditorExportPlatform : : ExportOption > * r_options ) const ;
2024-02-12 23:16:48 +01:00
virtual Dictionary _get_export_options_overrides ( const Ref < EditorExportPlatform > & p_export_platform ) const ;
2023-02-08 13:36:02 +01:00
virtual bool _should_update_export_options ( const Ref < EditorExportPlatform > & p_export_platform ) const ;
2023-07-02 20:14:29 +02:00
virtual String _get_export_option_warning ( const Ref < EditorExportPlatform > & p_export_platform , const String & p_option_name ) const ;
Add support for scene/resource customization in export plugins
EditorExportPlugin adds a set of callbacks to allow customizing scenes, resources or subresources in all files exported:
* Can take scene files, resource files and subresources in all of them.
* Uses a cache for the converted files if nothing changes, so this work only happens if a file is modified.
* Uses hashing to differentiate export configuration caches.
* Removed the previous conversion code to binary, as this one uses existing stuff.
This API is useful in several scenarios:
* Needed by the "server" export platform to get rid of textures, meshes, audio, etc.
* Needed by text to binary converters.
* Needed by eventual optimizations such as shader precompiling on export, mesh merging and optimization, etc.
This is a draft, feedback is very welcome.
2022-08-31 11:12:42 +02:00
2022-07-17 19:24:37 +02:00
public :
2023-07-02 20:14:29 +02:00
virtual String get_name ( ) const ;
virtual bool supports_platform ( const Ref < EditorExportPlatform > & p_export_platform ) const ;
virtual PackedStringArray get_android_dependencies ( const Ref < EditorExportPlatform > & p_export_platform , bool p_debug ) const ;
virtual PackedStringArray get_android_dependencies_maven_repos ( const Ref < EditorExportPlatform > & p_export_platform , bool p_debug ) const ;
virtual PackedStringArray get_android_libraries ( const Ref < EditorExportPlatform > & p_export_platform , bool p_debug ) const ;
virtual String get_android_manifest_activity_element_contents ( const Ref < EditorExportPlatform > & p_export_platform , bool p_debug ) const ;
virtual String get_android_manifest_application_element_contents ( const Ref < EditorExportPlatform > & p_export_platform , bool p_debug ) const ;
virtual String get_android_manifest_element_contents ( const Ref < EditorExportPlatform > & p_export_platform , bool p_debug ) const ;
2022-07-17 19:24:37 +02:00
Vector < String > get_ios_frameworks ( ) const ;
Vector < String > get_ios_embedded_frameworks ( ) const ;
Vector < String > get_ios_project_static_libs ( ) const ;
String get_ios_plist_content ( ) const ;
String get_ios_linker_flags ( ) const ;
Vector < String > get_ios_bundle_files ( ) const ;
String get_ios_cpp_code ( ) const ;
const Vector < String > & get_macos_plugin_files ( ) const ;
2023-02-08 13:36:02 +01:00
Variant get_option ( const StringName & p_name ) const ;
2022-07-17 19:24:37 +02:00
EditorExportPlugin ( ) ;
} ;
# endif // EDITOR_EXPORT_PLUGIN_H