Skip to content
Snippets Groups Projects
Verified Commit 2eb9143e authored by João Magalhães's avatar João Magalhães :rocket:
Browse files

chore: better lib structure

parent 56cab617
No related branches found
No related tags found
1 merge request!29Support for Libretro
#![allow(clippy::uninlined_format_args)] #![allow(clippy::uninlined_format_args)]
use std::os::raw::{c_char, c_uint, c_void}; use std::os::raw::{c_char, c_uint};
const RETRO_API_VERSION: u32 = 1; const RETRO_API_VERSION: u32 = 1;
#[repr(C)] #[repr(C)]
pub struct retro_system_info { pub struct RetroSystemInfo {
pub library_name: *const c_char, pub library_name: *const c_char,
pub library_version: *const c_char, pub library_version: *const c_char,
pub valid_extensions: *const c_char, pub valid_extensions: *const c_char,
...@@ -13,53 +13,19 @@ pub struct retro_system_info { ...@@ -13,53 +13,19 @@ pub struct retro_system_info {
pub block_extract: bool, pub block_extract: bool,
} }
#[repr(C)] #[no_mangle]
pub struct retro_game_geometry { pub extern "C" fn retro_init() {
pub base_width: u32, println!("retro_init()");
pub base_height: u32,
pub max_width: u32,
pub max_height: u32,
pub aspect_ratio: f32,
}
#[repr(C)]
pub struct retro_system_timing {
pub fps: f64,
pub sample_rate: f64,
}
#[repr(C)]
pub struct retro_system_api {
pub retro_api_version: u32,
pub retro_get_system_info: extern "C" fn(*mut retro_system_info),
pub retro_set_environment: extern "C" fn(extern "C" fn(u32, *const c_void), *const c_void),
pub retro_set_video_refresh: extern "C" fn(extern "C" fn()),
pub retro_set_audio_sample: extern "C" fn(extern "C" fn(i16)),
pub retro_set_audio_sample_batch: extern "C" fn(extern "C" fn(*const i16, usize)),
pub retro_set_input_poll: extern "C" fn(extern "C" fn()),
pub retro_set_input_state: extern "C" fn(extern "C" fn(u32, u32, u16, i16) -> i16),
// Add other Libretro core functions here as needed
} }
#[no_mangle] #[no_mangle]
pub extern "C" fn retro_get_system_info(info: *mut retro_system_info) { pub extern "C" fn retro_deinit() {
println!("retro_get_system_info"); println!("retro_deinit()");
unsafe {
(*info).library_name = "Boytacean\0".as_ptr() as *const c_char;
(*info).library_version = "v0.9.6\0".as_ptr() as *const c_char;
(*info).valid_extensions = "gb|gbc\0".as_ptr() as *const c_char;
(*info).need_fullpath = false;
(*info).block_extract = false;
}
} }
#[no_mangle] #[no_mangle]
pub extern "C" fn retro_set_environment( pub extern "C" fn retro_reset() {
_callback: extern "C" fn(u32, *const c_void), println!("retro_reset()");
_data: *const c_void,
) {
// Set any environment variables or configuration options here if needed
// For example, you might handle system RAM allocation using this function
} }
#[no_mangle] #[no_mangle]
...@@ -69,16 +35,13 @@ pub extern "C" fn retro_api_version() -> c_uint { ...@@ -69,16 +35,13 @@ pub extern "C" fn retro_api_version() -> c_uint {
} }
#[no_mangle] #[no_mangle]
pub extern "C" fn retro_init() { pub extern "C" fn retro_get_system_info(info: *mut RetroSystemInfo) {
println!("retro_init()"); println!("retro_get_system_info");
} unsafe {
(*info).library_name = "Boytacean\0".as_ptr() as *const c_char;
#[no_mangle] (*info).library_version = "v0.9.6\0".as_ptr() as *const c_char;
pub extern "C" fn retro_deinit() { (*info).valid_extensions = "gb|gbc\0".as_ptr() as *const c_char;
println!("retro_deinit()"); (*info).need_fullpath = false;
} (*info).block_extract = false;
}
#[no_mangle]
pub extern "C" fn retro_reset() {
println!("retro_reset()");
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment