diff options
author | Thomas Herzog <thomas.herzog@mail.com> | 2017-11-10 13:03:16 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-11-10 13:03:16 +0100 |
commit | f04665f881725934c395c6806c7adb7468a5b88a (patch) | |
tree | 552edb5971f49536f9fd76e5d75326fc5cc5b65a | |
parent | 4deac219b0af86b7f80168920c8bedd070aa79c0 (diff) | |
parent | 79285b084df425cadb23da21bc04c08c300d6cad (diff) |
Merge pull request #12803 from karroffel/gdnative-api-struct-refactor
[GDNative] better API struct versioning
-rw-r--r-- | modules/gdnative/SCsub | 45 | ||||
-rw-r--r-- | modules/gdnative/arvr/SCsub (renamed from modules/gdnative/nativearvr/SCsub) | 0 | ||||
-rw-r--r-- | modules/gdnative/arvr/arvr_interface_gdnative.cpp (renamed from modules/gdnative/nativearvr/arvr_interface_gdnative.cpp) | 0 | ||||
-rw-r--r-- | modules/gdnative/arvr/arvr_interface_gdnative.h (renamed from modules/gdnative/nativearvr/arvr_interface_gdnative.h) | 0 | ||||
-rw-r--r-- | modules/gdnative/arvr/config.py (renamed from modules/gdnative/nativearvr/config.py) | 0 | ||||
-rw-r--r-- | modules/gdnative/arvr/register_types.cpp (renamed from modules/gdnative/nativearvr/register_types.cpp) | 4 | ||||
-rw-r--r-- | modules/gdnative/arvr/register_types.h (renamed from modules/gdnative/nativearvr/register_types.h) | 4 | ||||
-rw-r--r-- | modules/gdnative/gdnative.cpp | 2 | ||||
-rw-r--r-- | modules/gdnative/gdnative_api.json | 24 | ||||
-rw-r--r-- | modules/gdnative/include/arvr/godot_arvr.h (renamed from modules/gdnative/include/nativearvr/godot_nativearvr.h) | 2 | ||||
-rw-r--r-- | modules/gdnative/include/gdnative/gdnative.h | 2 | ||||
-rw-r--r-- | modules/gdnative/register_types.cpp | 6 |
12 files changed, 60 insertions, 29 deletions
diff --git a/modules/gdnative/SCsub b/modules/gdnative/SCsub index c0d1d114d7..88588417d1 100644 --- a/modules/gdnative/SCsub +++ b/modules/gdnative/SCsub @@ -12,7 +12,7 @@ gdn_env.add_source_files(env.modules_sources, "nativescript/*.cpp") gdn_env.Append(CPPPATH=['#modules/gdnative/include/']) -SConscript("nativearvr/SCsub") +SConscript("arvr/SCsub") SConscript("pluginscript/SCsub") def _spaced(e): @@ -25,7 +25,7 @@ def _build_gdnative_api_struct_header(api): '#define GODOT_GDNATIVE_API_STRUCT_H', '', '#include <gdnative/gdnative.h>', - '#include <nativearvr/godot_nativearvr.h>', + '#include <arvr/godot_arvr.h>', '#include <nativescript/godot_nativescript.h>', '#include <pluginscript/godot_pluginscript.h>', '', @@ -35,34 +35,47 @@ def _build_gdnative_api_struct_header(api): 'extern "C" {', '#endif', '', + 'typedef struct godot_gdnative_api_version {', + '\tunsigned int major;', + '\tunsigned int minor;', + '} godot_gdnative_api_version;', + '', + 'typedef struct godot_gdnative_api_struct {', + '\tunsigned int type;', + '\tgodot_gdnative_api_version version;', + '\tconst godot_gdnative_api_struct *next;', + '} godot_gdnative_api_struct;', + '', 'enum GDNATIVE_API_TYPES {', '\tGDNATIVE_' + api['core']['type'] + ',' ] for name in api['extensions']: - out += ['\tGDNATIVE_' + api['extensions'][name]['type'] + ','] + out += ['\tGDNATIVE_EXT_' + api['extensions'][name]['type'] + ','] out += ['};', ''] for name in api['extensions']: out += [ - 'typedef struct godot_gdnative_' + name + '_api_struct {', + 'typedef struct godot_gdnative_ext_' + name + '_api_struct {', '\tunsigned int type;', - '\tconst void *next;' + '\tgodot_gdnative_api_version version;', + '\tconst godot_gdnative_api_struct *next;' ] for funcdef in api['extensions'][name]['api']: args = ', '.join(['%s%s' % (_spaced(t), n) for t, n in funcdef['arguments']]) out.append('\t%s(*%s)(%s);' % (_spaced(funcdef['return_type']), funcdef['name'], args)) - out += ['} godot_gdnative_' + name + '_api_struct;', ''] + out += ['} godot_gdnative_ext_' + name + '_api_struct;', ''] out += [ - 'typedef struct godot_gdnative_api_struct {', + 'typedef struct godot_gdnative_core_api_struct {', '\tunsigned int type;', - '\tconst void *next;', + '\tgodot_gdnative_api_version version;', + '\tconst godot_gdnative_api_struct *next;', '\tunsigned int num_extensions;', - '\tconst void **extensions;', + '\tconst godot_gdnative_api_struct **extensions;', ] for funcdef in api['core']['api']: @@ -70,7 +83,7 @@ def _build_gdnative_api_struct_header(api): out.append('\t%s(*%s)(%s);' % (_spaced(funcdef['return_type']), funcdef['name'], args)) out += [ - '} godot_gdnative_api_struct;', + '} godot_gdnative_core_api_struct;', '', '#ifdef __cplusplus', '}', @@ -91,8 +104,9 @@ def _build_gdnative_api_struct_source(api): for name in api['extensions']: out += [ - 'extern const godot_gdnative_' + name + '_api_struct api_extension_' + name + '_struct = {', - '\tGDNATIVE_' + api['extensions'][name]['type'] + ',', + 'extern const godot_gdnative_ext_' + name + '_api_struct api_extension_' + name + '_struct = {', + '\tGDNATIVE_EXT_' + api['extensions'][name]['type'] + ',', + '\t{' + str(api['extensions'][name]['version']['major']) + ', ' + str(api['extensions'][name]['version']['minor']) + '},', '\tNULL,' ] @@ -101,16 +115,17 @@ def _build_gdnative_api_struct_source(api): out += ['};\n'] - out += ['', 'const void *gdnative_extensions_pointers[] = {'] + out += ['', 'const godot_gdnative_api_struct *gdnative_extensions_pointers[] = {'] for name in api['extensions']: - out += ['\t(void *)&api_extension_' + name + '_struct,'] + out += ['\t(godot_gdnative_api_struct *)&api_extension_' + name + '_struct,'] out += ['};\n'] out += [ - 'extern const godot_gdnative_api_struct api_struct = {', + 'extern const godot_gdnative_core_api_struct api_struct = {', '\tGDNATIVE_' + api['core']['type'] + ',', + '\t{' + str(api['core']['version']['major']) + ', ' + str(api['core']['version']['minor']) + '},', '\tNULL,', '\t' + str(len(api['extensions'])) + ',', '\tgdnative_extensions_pointers,', diff --git a/modules/gdnative/nativearvr/SCsub b/modules/gdnative/arvr/SCsub index ecc5996108..ecc5996108 100644 --- a/modules/gdnative/nativearvr/SCsub +++ b/modules/gdnative/arvr/SCsub diff --git a/modules/gdnative/nativearvr/arvr_interface_gdnative.cpp b/modules/gdnative/arvr/arvr_interface_gdnative.cpp index e2a7019fa4..e2a7019fa4 100644 --- a/modules/gdnative/nativearvr/arvr_interface_gdnative.cpp +++ b/modules/gdnative/arvr/arvr_interface_gdnative.cpp diff --git a/modules/gdnative/nativearvr/arvr_interface_gdnative.h b/modules/gdnative/arvr/arvr_interface_gdnative.h index e45b51e070..e45b51e070 100644 --- a/modules/gdnative/nativearvr/arvr_interface_gdnative.h +++ b/modules/gdnative/arvr/arvr_interface_gdnative.h diff --git a/modules/gdnative/nativearvr/config.py b/modules/gdnative/arvr/config.py index 4d1bdfe4d1..4d1bdfe4d1 100644 --- a/modules/gdnative/nativearvr/config.py +++ b/modules/gdnative/arvr/config.py diff --git a/modules/gdnative/nativearvr/register_types.cpp b/modules/gdnative/arvr/register_types.cpp index c7d7847a21..139750a02d 100644 --- a/modules/gdnative/nativearvr/register_types.cpp +++ b/modules/gdnative/arvr/register_types.cpp @@ -31,9 +31,9 @@ #include "register_types.h" #include "arvr_interface_gdnative.h" -void register_nativearvr_types() { +void register_arvr_types() { ClassDB::register_class<ARVRInterfaceGDNative>(); } -void unregister_nativearvr_types() { +void unregister_arvr_types() { } diff --git a/modules/gdnative/nativearvr/register_types.h b/modules/gdnative/arvr/register_types.h index 5e7557c7e9..4918319926 100644 --- a/modules/gdnative/nativearvr/register_types.h +++ b/modules/gdnative/arvr/register_types.h @@ -28,5 +28,5 @@ /* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ /*************************************************************************/ -void register_nativearvr_types(); -void unregister_nativearvr_types(); +void register_arvr_types(); +void unregister_arvr_types(); diff --git a/modules/gdnative/gdnative.cpp b/modules/gdnative/gdnative.cpp index 3fc04a5498..832a0cb859 100644 --- a/modules/gdnative/gdnative.cpp +++ b/modules/gdnative/gdnative.cpp @@ -41,7 +41,7 @@ const String init_symbol = "godot_gdnative_init"; const String terminate_symbol = "godot_gdnative_terminate"; // Defined in gdnative_api_struct.gen.cpp -extern const godot_gdnative_api_struct api_struct; +extern const godot_gdnative_core_api_struct api_struct; String GDNativeLibrary::platform_names[NUM_PLATFORMS + 1] = { "X11_32bit", diff --git a/modules/gdnative/gdnative_api.json b/modules/gdnative/gdnative_api.json index 2a67911aac..da32dc06e8 100644 --- a/modules/gdnative/gdnative_api.json +++ b/modules/gdnative/gdnative_api.json @@ -1,6 +1,10 @@ { "core": { - "type": "CORE_1_0_0", + "type": "CORE", + "version": { + "major": 1, + "minor": 0 + }, "api": [ { "name": "godot_color_new_rgba", @@ -5604,7 +5608,11 @@ }, "extensions": { "nativescript": { - "type": "NATIVESCRIPT_1_0_0", + "type": "NATIVESCRIPT", + "version": { + "major": 1, + "minor": 0 + }, "api": [ { "name": "godot_nativescript_register_class", @@ -5670,7 +5678,11 @@ ] }, "pluginscript": { - "type": "PLUGINSCRIPT_1_0_0", + "type": "PLUGINSCRIPT", + "version": { + "major": 1, + "minor": 0 + }, "api": [ { "name": "godot_pluginscript_register_language", @@ -5682,7 +5694,11 @@ ] }, "nativearvr": { - "type": "NATIVEARVR_1_0_0", + "type": "NATIVEARVR", + "version": { + "major": 1, + "minor": 0 + }, "api": [ { "name": "godot_arvr_register_interface", diff --git a/modules/gdnative/include/nativearvr/godot_nativearvr.h b/modules/gdnative/include/arvr/godot_arvr.h index a4f4d6a9f1..c12251439d 100644 --- a/modules/gdnative/include/nativearvr/godot_nativearvr.h +++ b/modules/gdnative/include/arvr/godot_arvr.h @@ -1,5 +1,5 @@ /*************************************************************************/ -/* godot_nativearvr.h */ +/* godot_arvr.h */ /*************************************************************************/ /* This file is part of: */ /* GODOT ENGINE */ diff --git a/modules/gdnative/include/gdnative/gdnative.h b/modules/gdnative/include/gdnative/gdnative.h index 25d45db306..8fa96fd3af 100644 --- a/modules/gdnative/include/gdnative/gdnative.h +++ b/modules/gdnative/include/gdnative/gdnative.h @@ -237,7 +237,7 @@ typedef struct { uint64_t editor_api_hash; uint64_t no_api_hash; godot_object *gd_native_library; // pointer to GDNativeLibrary that is being initialized - const struct godot_gdnative_api_struct *api_struct; + const struct godot_gdnative_core_api_struct *api_struct; const godot_string *active_library_path; } godot_gdnative_init_options; diff --git a/modules/gdnative/register_types.cpp b/modules/gdnative/register_types.cpp index 87f9cddaa2..19a62b9c4f 100644 --- a/modules/gdnative/register_types.cpp +++ b/modules/gdnative/register_types.cpp @@ -35,7 +35,7 @@ #include "io/resource_loader.h" #include "io/resource_saver.h" -#include "nativearvr/register_types.h" +#include "arvr/register_types.h" #include "nativescript/register_types.h" #include "pluginscript/register_types.h" @@ -157,7 +157,7 @@ void register_gdnative_types() { GDNativeCallRegistry::singleton->register_native_call_type("standard_varcall", cb_standard_varcall); - register_nativearvr_types(); + register_arvr_types(); register_nativescript_types(); register_pluginscript_types(); @@ -214,7 +214,7 @@ void unregister_gdnative_types() { unregister_pluginscript_types(); unregister_nativescript_types(); - unregister_nativearvr_types(); + unregister_arvr_types(); memdelete(GDNativeCallRegistry::singleton); |