android: enable autofree (#6503)

pull/6510/head
Larpon 2020-09-30 07:40:05 +02:00 committed by GitHub
parent ae7689f739
commit 4cd5153b32
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 40 additions and 12 deletions

View File

@ -90,20 +90,48 @@ pub fn (mut g Gen) gen_c_main_footer() {
} }
pub fn (mut g Gen) gen_c_android_sokol_main() { pub fn (mut g Gen) gen_c_android_sokol_main() {
// TODO get autofree weaved into android lifecycle somehow // Weave autofree into sokol lifecycle callback(s)
/*
if g.autofree { if g.autofree {
g.writeln('\t_vcleanup();') g.writeln('// Wrapping cleanup/free callbacks for sokol to include _vcleanup()
void (*_vsokol_user_cleanup_ptr)(void);
void (*_vsokol_user_cleanup_cb_ptr)(void *);
void (_vsokol_cleanup_cb)(void) {
if (_vsokol_user_cleanup_ptr) {
_vsokol_user_cleanup_ptr();
} }
*/ _vcleanup();
// TODO do proper check for the global g_desc field we need }
g.writeln('sapp_desc sokol_main(int argc, char* argv[]) {')
g.writeln('\t(void)argc; (void)argv;') void (_vsokol_cleanup_userdata_cb)(void* user_data) {
g.writeln('') if (_vsokol_user_cleanup_cb_ptr) {
g.writeln('\t_vinit();') _vsokol_user_cleanup_cb_ptr(g_desc.user_data);
g.writeln('\tmain__main();') }
g.writeln('') _vcleanup();
g.writeln('\treturn g_desc;') }
')
}
g.writeln('// The sokol_main entry point on Android
sapp_desc sokol_main(int argc, char* argv[]) {
(void)argc; (void)argv;
_vinit();
main__main();
')
if g.autofree {
g.writeln(' // Wrap user provided cleanup/free functions for sokol to be able to call _vcleanup()
if (g_desc.cleanup_cb) {
_vsokol_user_cleanup_ptr = g_desc.cleanup_cb;
g_desc.cleanup_cb = _vsokol_cleanup_cb;
}
else if (g_desc.cleanup_userdata_cb) {
_vsokol_user_cleanup_cb_ptr = g_desc.cleanup_userdata_cb;
g_desc.cleanup_userdata_cb = _vsokol_cleanup_userdata_cb;
}
')
}
g.writeln(' return g_desc;')
g.writeln('}') g.writeln('}')
} }