Skip to content

Commit 0028a86

Browse files
authored
Merge pull request #461 from aekobear/mut-cvoid-and-themedb
Re-enable `ThemeDb` + impl `GodotConvert` for `*mut c_void`
2 parents 01787a7 + 4650b82 commit 0028a86

File tree

3 files changed

+26
-12
lines changed

3 files changed

+26
-12
lines changed

godot-codegen/src/special_cases.rs

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,14 @@ pub(crate) fn is_class_deleted(class_name: &TyName) -> bool {
6767
_ => {}
6868
}
6969

70+
// ThemeDB was previously loaded lazily
71+
// in 4.2 it loads at the Scene level
72+
// see: https://github.com/godotengine/godot/pull/81305
73+
#[cfg(before_api = "4.2")]
74+
if class_name == "ThemeDB" {
75+
return true;
76+
}
77+
7078
match class_name {
7179
// Hardcoded cases that are not accessible.
7280
// Only on Android.
@@ -76,8 +84,6 @@ pub(crate) fn is_class_deleted(class_name: &TyName) -> bool {
7684
// Only on WASM.
7785
| "JavaScriptBridge"
7886
| "JavaScriptObject"
79-
// lazily loaded; TODO enable this.
80-
| "ThemeDB"
8187

8288
// Thread APIs.
8389
| "Thread"

godot-codegen/src/util.rs

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -27,9 +27,6 @@ pub enum ClassCodegenLevel {
2727
Servers,
2828
Scene,
2929
Editor,
30-
31-
/// Not pre-fetched because Godot does not load them in time.
32-
Lazy,
3330
}
3431

3532
impl ClassCodegenLevel {
@@ -54,7 +51,6 @@ impl ClassCodegenLevel {
5451
Self::Servers => "servers",
5552
Self::Scene => "scene",
5653
Self::Editor => "editor",
57-
Self::Lazy => unreachable!("lazy classes should be deleted at the moment"),
5854
}
5955
}
6056

@@ -63,7 +59,6 @@ impl ClassCodegenLevel {
6359
Self::Servers => "Servers",
6460
Self::Scene => "Scene",
6561
Self::Editor => "Editor",
66-
Self::Lazy => unreachable!("lazy classes should be deleted at the moment"),
6762
}
6863
}
6964

@@ -72,7 +67,6 @@ impl ClassCodegenLevel {
7267
Self::Servers => quote! { Some(crate::init::InitLevel::Servers) },
7368
Self::Scene => quote! { Some(crate::init::InitLevel::Scene) },
7469
Self::Editor => quote! { Some(crate::init::InitLevel::Editor) },
75-
Self::Lazy => quote! { None },
7670
}
7771
}
7872
}
@@ -203,10 +197,7 @@ pub fn make_sname_ptr(identifier: &str) -> TokenStream {
203197
}
204198

205199
pub fn get_api_level(class: &Class) -> ClassCodegenLevel {
206-
if class.name == "ThemeDB" {
207-
// registered in C++ register_scene_singletons(), after MODULE_INITIALIZATION_LEVEL_EDITOR happens.
208-
ClassCodegenLevel::Lazy
209-
} else if class.name.ends_with("Server") {
200+
if class.name.ends_with("Server") {
210201
ClassCodegenLevel::Servers
211202
} else if class.api_type == "core" {
212203
ClassCodegenLevel::Scene

godot-core/src/builtin/meta/godot_convert/impls.rs

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -223,6 +223,7 @@ impl_godot_scalar!(
223223
// Raw pointers
224224

225225
// const void* is used in some APIs like OpenXrApiExtension::transform_from_pose().
226+
// void* is used by ScriptExtension::instance_create().
226227
// Other impls for raw pointers are generated for native structures.
227228

228229
impl GodotConvert for *const std::ffi::c_void {
@@ -240,3 +241,19 @@ impl FromGodot for *const std::ffi::c_void {
240241
Some(via as Self)
241242
}
242243
}
244+
245+
impl GodotConvert for *mut std::ffi::c_void {
246+
type Via = i64;
247+
}
248+
249+
impl ToGodot for *mut std::ffi::c_void {
250+
fn to_godot(&self) -> Self::Via {
251+
*self as i64
252+
}
253+
}
254+
255+
impl FromGodot for *mut std::ffi::c_void {
256+
fn try_from_godot(via: Self::Via) -> Option<Self> {
257+
Some(via as Self)
258+
}
259+
}

0 commit comments

Comments
 (0)