Browse Source

[WIP] Adding version info to GDNative ARVR interfaces

Bastiaan Olij 7 years ago
parent
commit
8901b3cf00

+ 4 - 0
modules/gdnative/arvr/arvr_interface_gdnative.cpp

@@ -217,6 +217,10 @@ void ARVRInterfaceGDNative::process() {
 extern "C" {
 
 void GDAPI godot_arvr_register_interface(const godot_arvr_interface_gdnative *p_interface) {
+	// If our major version is 0 or bigger then 10, we're likely looking at our constructor pointer from an older plugin
+	ERR_EXPLAINC("GDNative ARVR interfaces build for Godot 3.0 are not supported");
+	ERR_FAIL_COND((p_interface->version.major == 0) || (p_interface->version.major > 10));
+
 	Ref<ARVRInterfaceGDNative> new_interface;
 	new_interface.instance();
 	new_interface->set_interface((godot_arvr_interface_gdnative *const)p_interface);

+ 1 - 1
modules/gdnative/gdnative_api.json

@@ -5966,7 +5966,7 @@
       "type": "ARVR",
       "version": {
         "major": 1,
-        "minor": 0
+        "minor": 1
       },
       "next": null,
       "api": [

+ 8 - 0
modules/gdnative/include/arvr/godot_arvr.h

@@ -37,7 +37,15 @@
 extern "C" {
 #endif
 
+// For future versions of the API we should only add new functions at the end of the structure and use the
+// version info to detect whether a call is available
+
+// Use these to populate version in your plugin
+#define GODOTVR_API_MAJOR 1
+#define GODOTVR_API_MINOR 0
+
 typedef struct {
+	godot_gdnative_api_version version; /* version of our API */
 	void *(*constructor)(godot_object *);
 	void (*destructor)(void *);
 	godot_string (*get_name)(const void *);