Begin clap objects with vtables for pointer casts
This commit is contained in:
parent
17b51c8920
commit
31e2480458
2 changed files with 12 additions and 8 deletions
|
@ -44,7 +44,7 @@ macro_rules! nih_export_clap {
|
|||
::nih_plug::wrapper::clap::CLAP_PLUGIN_FACTORY_ID,
|
||||
) }
|
||||
{
|
||||
&(*factory).clap_plugin_factory() as *const _ as *const ::std::ffi::c_void
|
||||
&(*factory).clap_plugin_factory as *const _ as *const ::std::ffi::c_void
|
||||
} else {
|
||||
std::ptr::null()
|
||||
}
|
||||
|
|
|
@ -1,13 +1,16 @@
|
|||
use clap_sys::plugin_factory::clap_plugin_factory;
|
||||
use std::marker::PhantomData;
|
||||
use std::mem;
|
||||
|
||||
use crate::ClapPlugin;
|
||||
|
||||
/// The plugin's factory. Initialized using a lazy_static from the entry poiunt's `get_factory()`
|
||||
/// function. From this point onwards we don't need to generate code with macros anymore.
|
||||
#[doc(hidden)]
|
||||
#[repr(C)]
|
||||
pub struct Factory<P: ClapPlugin> {
|
||||
// Keep the vtable as the first field so we can do a simple pointer cast
|
||||
pub clap_plugin_factory: clap_plugin_factory,
|
||||
|
||||
/// The type will be used for constructing plugin instances later.
|
||||
_phantom: PhantomData<P>,
|
||||
}
|
||||
|
@ -15,17 +18,18 @@ pub struct Factory<P: ClapPlugin> {
|
|||
impl<P: ClapPlugin> Default for Factory<P> {
|
||||
fn default() -> Self {
|
||||
Self {
|
||||
clap_plugin_factory: clap_plugin_factory {
|
||||
get_plugin_count: Self::get_plugin_count,
|
||||
get_plugin_descriptor: todo!(),
|
||||
create_plugin: todo!(),
|
||||
},
|
||||
_phantom: PhantomData,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl<P: ClapPlugin> Factory<P> {
|
||||
pub fn clap_plugin_factory(&self) -> clap_plugin_factory {
|
||||
clap_plugin_factory {
|
||||
get_plugin_count: todo!(),
|
||||
get_plugin_descriptor: todo!(),
|
||||
create_plugin: todo!(),
|
||||
}
|
||||
unsafe extern "C" fn get_plugin_count(_factory: *const clap_plugin_factory) -> u32 {
|
||||
1
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue