Skip to content

Commit 0879509

Browse files
authored
Merge pull request #9 from JiepengTan/libgodot_c_ext
Add more libgodot C interfaces to simplify the use of libgodot.
2 parents ee22978 + b7d4771 commit 0879509

File tree

7 files changed

+105
-3
lines changed

7 files changed

+105
-3
lines changed

core/extension/godot_instance.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,9 @@ GodotInstance::~GodotInstance() {
4646
}
4747

4848
bool GodotInstance::initialize(GDExtensionInitializationFunction p_init_func) {
49+
if (p_init_func == nullptr) {
50+
return true;
51+
}
4952
GDExtensionManager *gdextension_manager = GDExtensionManager::get_singleton();
5053
GDExtensionConstPtr<const GDExtensionInitializationFunction> ptr((const GDExtensionInitializationFunction *)&p_init_func);
5154
GDExtensionManager::LoadStatus status = gdextension_manager->load_function_extension("libgodot://main", ptr);

core/extension/libgodot.h

Lines changed: 30 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,13 @@
3030

3131
#ifndef LIBGODOT_H
3232
#define LIBGODOT_H
33+
#ifdef _WIN32
34+
#define EXPORT_SYMBOL __declspec(dllexport)
35+
#elif defined(__GNUC__)
36+
#define EXPORT_SYMBOL __attribute__((visibility("default")))
37+
#else
38+
#define EXPORT_SYMBOL
39+
#endif
3340

3441
#ifdef __cplusplus
3542
extern "C" {
@@ -49,7 +56,7 @@ extern "C" {
4956
*
5057
* @return A pointer to created \ref GodotInstance GDExtension object or nullptr if there was an error.
5158
*/
52-
__declspec(dllexport) GDExtensionObjectPtr libgodot_create_godot_instance(int p_argc, char *p_argv[], GDExtensionInitializationFunction p_init_func, void *p_platform_data);
59+
EXPORT_SYMBOL GDExtensionObjectPtr libgodot_create_godot_instance(int p_argc, char *p_argv[], GDExtensionInitializationFunction p_init_func, void *p_platform_data);
5360

5461
/**
5562
* @name libgodot_destroy_godot_instance
@@ -60,7 +67,28 @@ __declspec(dllexport) GDExtensionObjectPtr libgodot_create_godot_instance(int p_
6067
* @param p_godot_instance The reference to the GodotInstance object to destroy.
6168
*
6269
*/
63-
__declspec(dllexport) void libgodot_destroy_godot_instance(GDExtensionObjectPtr p_godot_instance);
70+
EXPORT_SYMBOL void libgodot_destroy_godot_instance(GDExtensionObjectPtr p_godot_instance);
71+
72+
/**
73+
* @name libgodot_start_godot_instance
74+
* @since 4.4
75+
*
76+
* Godot instance start.
77+
*
78+
* @param p_godot_instance The reference to the GodotInstance object to destroy.
79+
*
80+
*/
81+
EXPORT_SYMBOL bool libgodot_start_godot_instance(GDExtensionObjectPtr p_godot_instance);
82+
/**
83+
* @name libgodot_iteration_godot_instance
84+
* @since 4.4
85+
*
86+
* Godot instance iteration.
87+
*
88+
* @param p_godot_instance The reference to the GodotInstance object to destroy.
89+
*
90+
*/
91+
EXPORT_SYMBOL bool libgodot_iteration_godot_instance(GDExtensionObjectPtr p_godot_instance);
6492

6593
#ifdef __cplusplus
6694
}

platform/ios/display_server_ios.mm

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@
8181
if (!layer) {
8282
ERR_FAIL_MSG("Failed to create iOS Vulkan rendering layer.");
8383
}
84-
apple_surface = RenderingNativeSurfaceApple::create((CAMetalLayer *const *)&layer);
84+
apple_surface = RenderingNativeSurfaceApple::create((__bridge void *)layer);
8585
rendering_context = apple_surface->create_rendering_context();
8686
}
8787
#endif

platform/ios/libgodot_ios.mm

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,3 +67,21 @@ void libgodot_destroy_godot_instance(GDExtensionObjectPtr p_godot_instance) {
6767
Main::cleanup();
6868
}
6969
}
70+
71+
bool libgodot_start_godot_instance(GDExtensionObjectPtr p_godot_instance) {
72+
bool ret = false;
73+
GodotInstance *godot_instance = (GodotInstance *)p_godot_instance;
74+
if (instance == godot_instance) {
75+
ret = godot_instance->start();
76+
}
77+
return ret;
78+
}
79+
80+
bool libgodot_iteration_godot_instance(GDExtensionObjectPtr p_godot_instance) {
81+
bool ret = false;
82+
GodotInstance *godot_instance = (GodotInstance *)p_godot_instance;
83+
if (instance == godot_instance) {
84+
ret = godot_instance->iteration();
85+
}
86+
return ret;
87+
}

platform/linuxbsd/libgodot_linuxbsd.cpp

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,3 +68,20 @@ void libgodot_destroy_godot_instance(GDExtensionObjectPtr p_godot_instance) {
6868
Main::cleanup();
6969
}
7070
}
71+
bool libgodot_start_godot_instance(GDExtensionObjectPtr p_godot_instance) {
72+
bool ret = false;
73+
GodotInstance *godot_instance = (GodotInstance *)p_godot_instance;
74+
if (instance == godot_instance) {
75+
ret = godot_instance->start();
76+
}
77+
return ret;
78+
}
79+
80+
bool libgodot_iteration_godot_instance(GDExtensionObjectPtr p_godot_instance) {
81+
bool ret = false;
82+
GodotInstance *godot_instance = (GodotInstance *)p_godot_instance;
83+
if (instance == godot_instance) {
84+
ret = godot_instance->iteration();
85+
}
86+
return ret;
87+
}

platform/macos/libgodot_macos.mm

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,3 +70,21 @@ void libgodot_destroy_godot_instance(GDExtensionObjectPtr p_godot_instance) {
7070
Main::cleanup();
7171
}
7272
}
73+
74+
bool libgodot_start_godot_instance(GDExtensionObjectPtr p_godot_instance) {
75+
bool ret = false;
76+
GodotInstance *godot_instance = (GodotInstance *)p_godot_instance;
77+
if (instance == godot_instance) {
78+
ret = godot_instance->start();
79+
}
80+
return ret;
81+
}
82+
83+
bool libgodot_iteration_godot_instance(GDExtensionObjectPtr p_godot_instance) {
84+
bool ret = false;
85+
GodotInstance *godot_instance = (GodotInstance *)p_godot_instance;
86+
if (instance == godot_instance) {
87+
ret = godot_instance->iteration();
88+
}
89+
return ret;
90+
}

platform/windows/libgodot_windows.cpp

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,3 +68,21 @@ void libgodot_destroy_godot_instance(GDExtensionObjectPtr p_godot_instance) {
6868
Main::cleanup();
6969
}
7070
}
71+
72+
bool libgodot_start_godot_instance(GDExtensionObjectPtr p_godot_instance) {
73+
bool ret = false;
74+
GodotInstance *godot_instance = (GodotInstance *)p_godot_instance;
75+
if (instance == godot_instance) {
76+
ret = godot_instance->start();
77+
}
78+
return ret;
79+
}
80+
81+
bool libgodot_iteration_godot_instance(GDExtensionObjectPtr p_godot_instance) {
82+
bool ret = false;
83+
GodotInstance *godot_instance = (GodotInstance *)p_godot_instance;
84+
if (instance == godot_instance) {
85+
ret = godot_instance->iteration();
86+
}
87+
return ret;
88+
}

0 commit comments

Comments
 (0)