Signed-off-by: falkTX <falktx@falktx.com>pull/375/head
@@ -2962,7 +2962,7 @@ struct dpf_edit_controller : v3_edit_controller_cpp { | |||
// ---------------------------------------------------------------------------------------------------------------- | |||
// v3_plugin_base | |||
static v3_result V3_API initialize(void* const self, v3_plugin_base::v3_funknown** const context) | |||
static v3_result V3_API initialize(void* const self, v3_funknown** const context) | |||
{ | |||
dpf_edit_controller* const controller = *static_cast<dpf_edit_controller**>(self); | |||
@@ -3671,7 +3671,7 @@ struct dpf_component : v3_component_cpp { | |||
// ---------------------------------------------------------------------------------------------------------------- | |||
// v3_plugin_base | |||
static v3_result V3_API initialize(void* const self, v3_plugin_base::v3_funknown** const context) | |||
static v3_result V3_API initialize(void* const self, v3_funknown** const context) | |||
{ | |||
dpf_component* const component = *static_cast<dpf_component**>(self); | |||
@@ -1,6 +1,6 @@ | |||
/* | |||
* travesty, pure C VST3-compatible interface | |||
* Copyright (C) 2021 Filipe Coelho <falktx@falktx.com> | |||
* Copyright (C) 2021-2022 Filipe Coelho <falktx@falktx.com> | |||
* | |||
* Permission to use, copy, modify, and/or distribute this software for any purpose with | |||
* or without fee is hereby granted, provided that the above copyright notice and this | |||
@@ -90,8 +90,9 @@ struct v3_process_setup { | |||
*/ | |||
struct v3_param_value_queue { | |||
#ifndef __cplusplus | |||
struct v3_funknown; | |||
#endif | |||
v3_param_id (V3_API* get_param_id)(void* self); | |||
int32_t (V3_API* get_point_count)(void* self); | |||
v3_result (V3_API* get_point)(void* self, int32_t idx, int32_t* sample_offset, double* value); | |||
@@ -102,8 +103,9 @@ static constexpr const v3_tuid v3_param_value_queue_iid = | |||
V3_ID(0x01263A18, 0xED074F6F, 0x98C9D356, 0x4686F9BA); | |||
struct v3_param_changes { | |||
#ifndef __cplusplus | |||
struct v3_funknown; | |||
#endif | |||
int32_t (V3_API* get_param_count)(void* self); | |||
struct v3_param_value_queue** (V3_API* get_param_data)(void* self, int32_t idx); | |||
struct v3_param_value_queue** (V3_API* add_param_data)(void* self, v3_param_id* id, int32_t* index); | |||
@@ -181,8 +183,9 @@ enum { | |||
}; | |||
struct v3_process_context_requirements { | |||
#ifndef __cplusplus | |||
struct v3_funknown; | |||
#endif | |||
uint32_t (V3_API* get_process_context_requirements)(void* self); | |||
}; | |||
@@ -222,8 +225,9 @@ struct v3_process_data { | |||
*/ | |||
struct v3_audio_processor { | |||
#ifndef __cplusplus | |||
struct v3_funknown; | |||
#endif | |||
v3_result (V3_API* set_bus_arrangements)(void* self, v3_speaker_arrangement* inputs, int32_t num_inputs, | |||
v3_speaker_arrangement* outputs, int32_t num_outputs); | |||
v3_result (V3_API* get_bus_arrangement)(void* self, int32_t bus_direction, int32_t idx, v3_speaker_arrangement*); | |||
@@ -1,6 +1,6 @@ | |||
/* | |||
* travesty, pure C VST3-compatible interface | |||
* Copyright (C) 2021 Filipe Coelho <falktx@falktx.com> | |||
* Copyright (C) 2021-2022 Filipe Coelho <falktx@falktx.com> | |||
* | |||
* Permission to use, copy, modify, and/or distribute this software for any purpose with | |||
* or without fee is hereby granted, provided that the above copyright notice and this | |||
@@ -24,34 +24,8 @@ | |||
* deal with C vs C++ differences | |||
*/ | |||
#ifdef __cplusplus | |||
/** | |||
* cast object into its proper C++ type. | |||
* this is needed because `struct v3_funknown;` on a C++ class does not inherit `v3_funknown`'s fields. | |||
* | |||
* we can use this as a little helper for keeping both C and C++ compatiblity. | |||
* specialized templated calls are defined where required | |||
* (that is, object inherits from something other than `v3_funknown`) | |||
* | |||
* example usage: `v3_cpp_obj(obj)->method(obj, args...);` | |||
*/ | |||
template<class T> static inline | |||
constexpr T* v3_cpp_obj(T** obj) | |||
{ | |||
/** | |||
* this ugly piece of code is required due to C++ assuming `reinterpret_cast` by default, | |||
* but we need everything to be `static_cast` for it to be `constexpr` compatible. | |||
*/ | |||
return static_cast<T*>(static_cast<void*>(static_cast<uint8_t*>(static_cast<void*>(*obj)) + sizeof(void*)*3)); | |||
} | |||
#else | |||
# ifndef constexpr | |||
# define constexpr | |||
# endif | |||
#if !defined(__cplusplus) && !defined(constexpr) | |||
# define constexpr | |||
#endif | |||
/** | |||
@@ -178,8 +152,9 @@ static constexpr const v3_tuid v3_funknown_iid = | |||
*/ | |||
struct v3_plugin_base { | |||
#ifndef __cplusplus | |||
struct v3_funknown; | |||
#endif | |||
v3_result (V3_API* initialize)(void* self, struct v3_funknown** context); | |||
v3_result (V3_API* terminate)(void* self); | |||
}; | |||
@@ -189,6 +164,27 @@ static constexpr const v3_tuid v3_plugin_base_iid = | |||
#ifdef __cplusplus | |||
/** | |||
* cast object into its proper C++ type. | |||
* this is needed because `struct v3_funknown;` on a C++ class does not inherit `v3_funknown`'s fields. | |||
* | |||
* we can use this as a little helper for keeping both C and C++ compatiblity. | |||
* specialized templated calls are defined where required | |||
* (that is, object inherits from something other than `v3_funknown`) | |||
* | |||
* example usage: `v3_cpp_obj(obj)->method(obj, args...);` | |||
*/ | |||
template<class T> static inline | |||
constexpr T* v3_cpp_obj(T** obj) | |||
{ | |||
/** | |||
* this ugly piece of code is required due to C++ assuming `reinterpret_cast` by default, | |||
* but we need everything to be `static_cast` for it to be `constexpr` compatible. | |||
*/ | |||
return static_cast<T*>(static_cast<void*>(static_cast<uint8_t*>(static_cast<void*>(*obj)) + sizeof(void*)*3)); | |||
} | |||
/** | |||
* helper C++ functions to manually call v3_funknown methods on an object. | |||
*/ | |||
@@ -1,6 +1,6 @@ | |||
/* | |||
* travesty, pure C VST3-compatible interface | |||
* Copyright (C) 2021 Filipe Coelho <falktx@falktx.com> | |||
* Copyright (C) 2021-2022 Filipe Coelho <falktx@falktx.com> | |||
* | |||
* Permission to use, copy, modify, and/or distribute this software for any purpose with | |||
* or without fee is hereby granted, provided that the above copyright notice and this | |||
@@ -25,8 +25,9 @@ enum v3_seek_mode { | |||
}; | |||
struct v3_bstream { | |||
#ifndef __cplusplus | |||
struct v3_funknown; | |||
#endif | |||
v3_result (V3_API *read)(void* self, void* buffer, int32_t num_bytes, int32_t* bytes_read); | |||
v3_result (V3_API *write)(void* self, void* buffer, int32_t num_bytes, int32_t* bytes_written); | |||
v3_result (V3_API *seek)(void* self, int64_t pos, int32_t seek_mode, int64_t* result); | |||
@@ -1,6 +1,6 @@ | |||
/* | |||
* travesty, pure C VST3-compatible interface | |||
* Copyright (C) 2021 Filipe Coelho <falktx@falktx.com> | |||
* Copyright (C) 2021-2022 Filipe Coelho <falktx@falktx.com> | |||
* | |||
* Permission to use, copy, modify, and/or distribute this software for any purpose with | |||
* or without fee is hereby granted, provided that the above copyright notice and this | |||
@@ -89,8 +89,9 @@ struct v3_bus_info { | |||
struct v3_routing_info; | |||
struct v3_component { | |||
#ifndef __cplusplus | |||
struct v3_plugin_base; | |||
#endif | |||
v3_result (V3_API *get_controller_class_id)(void* self, v3_tuid class_id); | |||
v3_result (V3_API *set_io_mode)(void* self, int32_t io_mode); | |||
int32_t (V3_API *get_bus_count)(void* self, int32_t media_type, int32_t bus_direction); | |||
@@ -1,6 +1,6 @@ | |||
/* | |||
* travesty, pure C VST3-compatible interface | |||
* Copyright (C) 2021 Filipe Coelho <falktx@falktx.com> | |||
* Copyright (C) 2021-2022 Filipe Coelho <falktx@falktx.com> | |||
* | |||
* Permission to use, copy, modify, and/or distribute this software for any purpose with | |||
* or without fee is hereby granted, provided that the above copyright notice and this | |||
@@ -40,8 +40,9 @@ enum { | |||
}; | |||
struct v3_component_handler { | |||
#ifndef __cplusplus | |||
struct v3_funknown; | |||
#endif | |||
v3_result (V3_API* begin_edit)(void* self, v3_param_id); | |||
v3_result (V3_API* perform_edit)(void* self, v3_param_id, double value_normalised); | |||
v3_result (V3_API* end_edit)(void* self, v3_param_id); | |||
@@ -77,8 +78,9 @@ struct v3_param_info { | |||
}; | |||
struct v3_edit_controller { | |||
#ifndef __cplusplus | |||
struct v3_plugin_base; | |||
#endif | |||
v3_result (V3_API* set_component_state)(void* self, struct v3_bstream**); | |||
v3_result (V3_API* set_state)(void* self, struct v3_bstream**); | |||
v3_result (V3_API* get_state)(void* self, struct v3_bstream**); | |||
@@ -102,8 +104,9 @@ static constexpr const v3_tuid v3_edit_controller_iid = | |||
*/ | |||
struct v3_midi_mapping { | |||
#ifndef __cplusplus | |||
struct v3_funknown; | |||
#endif | |||
v3_result (V3_API* get_midi_controller_assignment)(void* self, int32_t bus, int16_t channel, int16_t cc, v3_param_id* id); | |||
}; | |||
@@ -1,6 +1,6 @@ | |||
/* | |||
* travesty, pure C VST3-compatible interface | |||
* Copyright (C) 2021 Filipe Coelho <falktx@falktx.com> | |||
* Copyright (C) 2021-2022 Filipe Coelho <falktx@falktx.com> | |||
* | |||
* Permission to use, copy, modify, and/or distribute this software for any purpose with | |||
* or without fee is hereby granted, provided that the above copyright notice and this | |||
@@ -132,8 +132,9 @@ struct v3_event { | |||
*/ | |||
struct v3_event_list { | |||
#ifndef __cplusplus | |||
struct v3_funknown; | |||
#endif | |||
uint32_t (V3_API* get_event_count)(void* self); | |||
v3_result (V3_API* get_event)(void* self, int32_t idx, struct v3_event* event); | |||
v3_result (V3_API* add_event)(void* self, struct v3_event* event); | |||
@@ -1,6 +1,6 @@ | |||
/* | |||
* travesty, pure C VST3-compatible interface | |||
* Copyright (C) 2021 Filipe Coelho <falktx@falktx.com> | |||
* Copyright (C) 2021-2022 Filipe Coelho <falktx@falktx.com> | |||
* | |||
* Permission to use, copy, modify, and/or distribute this software for any purpose with | |||
* or without fee is hereby granted, provided that the above copyright notice and this | |||
@@ -37,8 +37,9 @@ struct v3_class_info { | |||
}; | |||
struct v3_plugin_factory { | |||
#ifndef __cplusplus | |||
struct v3_funknown; | |||
#endif | |||
v3_result (V3_API *get_factory_info)(void* self, struct v3_factory_info*); | |||
int32_t (V3_API *num_classes)(void* self); | |||
v3_result (V3_API *get_class_info)(void* self, int32_t idx, struct v3_class_info*); | |||
@@ -70,8 +71,9 @@ struct v3_class_info_2 { | |||
}; | |||
struct v3_plugin_factory_2 { | |||
#ifndef __cplusplus | |||
struct v3_plugin_factory; | |||
#endif | |||
v3_result (V3_API *get_class_info_2)(void* self, int32_t idx, struct v3_class_info_2*); | |||
}; | |||
@@ -98,8 +100,9 @@ struct v3_class_info_3 { | |||
}; | |||
struct v3_plugin_factory_3 { | |||
#ifndef __cplusplus | |||
struct v3_plugin_factory_2; | |||
#endif | |||
v3_result (V3_API *get_class_info_utf16)(void* self, int32_t idx, struct v3_class_info_3*); | |||
v3_result (V3_API *set_host_context)(void* self, struct v3_funknown** host); | |||
}; | |||
@@ -1,6 +1,6 @@ | |||
/* | |||
* travesty, pure C VST3-compatible interface | |||
* Copyright (C) 2021 Filipe Coelho <falktx@falktx.com> | |||
* Copyright (C) 2021-2022 Filipe Coelho <falktx@falktx.com> | |||
* | |||
* Permission to use, copy, modify, and/or distribute this software for any purpose with | |||
* or without fee is hereby granted, provided that the above copyright notice and this | |||
@@ -21,12 +21,13 @@ | |||
#include "align_push.h" | |||
/** | |||
* connection point | |||
* host application | |||
*/ | |||
struct v3_host_application { | |||
#ifndef __cplusplus | |||
struct v3_funknown; | |||
#endif | |||
v3_result (V3_API* get_name)(void* self, v3_str_128 name); // wtf? | |||
v3_result (V3_API* create_instance)(void* self, v3_tuid cid, v3_tuid iid, void** obj); | |||
}; | |||
@@ -1,6 +1,6 @@ | |||
/* | |||
* travesty, pure C VST3-compatible interface | |||
* Copyright (C) 2021 Filipe Coelho <falktx@falktx.com> | |||
* Copyright (C) 2021-2022 Filipe Coelho <falktx@falktx.com> | |||
* | |||
* Permission to use, copy, modify, and/or distribute this software for any purpose with | |||
* or without fee is hereby granted, provided that the above copyright notice and this | |||
@@ -25,8 +25,9 @@ | |||
*/ | |||
struct v3_attribute_list { | |||
#ifndef __cplusplus | |||
struct v3_funknown; | |||
#endif | |||
v3_result (V3_API* set_int)(void* self, const char* id, int64_t value); | |||
v3_result (V3_API* get_int)(void* self, const char* id, int64_t* value); | |||
v3_result (V3_API* set_float)(void* self, const char* id, double value); | |||
@@ -45,8 +46,9 @@ static constexpr const v3_tuid v3_attribute_list_iid = | |||
*/ | |||
struct v3_message { | |||
#ifndef __cplusplus | |||
struct v3_funknown; | |||
#endif | |||
const char* (V3_API* get_message_id)(void* self); | |||
void (V3_API* set_message_id)(void* self, const char* id); | |||
v3_attribute_list** (V3_API* get_attributes)(void* self); | |||
@@ -60,8 +62,9 @@ static constexpr const v3_tuid v3_message_iid = | |||
*/ | |||
struct v3_connection_point { | |||
#ifndef __cplusplus | |||
struct v3_funknown; | |||
#endif | |||
v3_result (V3_API* connect)(void* self, struct v3_connection_point** other); | |||
v3_result (V3_API* disconnect)(void* self, struct v3_connection_point** other); | |||
v3_result (V3_API* notify)(void* self, struct v3_message** message); | |||
@@ -1,6 +1,6 @@ | |||
/* | |||
* travesty, pure C VST3-compatible interface | |||
* Copyright (C) 2021 Filipe Coelho <falktx@falktx.com> | |||
* Copyright (C) 2021-2022 Filipe Coelho <falktx@falktx.com> | |||
* | |||
* Permission to use, copy, modify, and/or distribute this software for any purpose with | |||
* or without fee is hereby granted, provided that the above copyright notice and this | |||
@@ -48,8 +48,9 @@ struct v3_view_rect { | |||
struct v3_plugin_frame; | |||
struct v3_plugin_view { | |||
#ifndef __cplusplus | |||
struct v3_funknown; | |||
#endif | |||
v3_result (V3_API* is_platform_type_supported)(void* self, const char* platform_type); | |||
v3_result (V3_API* attached)(void* self, void* parent, const char* platform_type); | |||
v3_result (V3_API* removed)(void* self); | |||
@@ -72,8 +73,9 @@ static constexpr const v3_tuid v3_plugin_view_iid = | |||
*/ | |||
struct v3_plugin_frame { | |||
#ifndef __cplusplus | |||
struct v3_funknown; | |||
#endif | |||
v3_result (V3_API* resize_view)(void* self, struct v3_plugin_view**, struct v3_view_rect*); | |||
}; | |||
@@ -86,8 +88,9 @@ static constexpr const v3_tuid v3_plugin_frame_iid = | |||
*/ | |||
struct v3_plugin_view_content_scale { | |||
#ifndef __cplusplus | |||
struct v3_funknown; | |||
#endif | |||
v3_result (V3_API* set_content_scale_factor)(void* self, float factor); | |||
}; | |||
@@ -99,8 +102,9 @@ static constexpr const v3_tuid v3_plugin_view_content_scale_iid = | |||
*/ | |||
struct v3_plugin_view_parameter_finder { | |||
#ifndef __cplusplus | |||
struct v3_funknown; | |||
#endif | |||
v3_result (V3_API* find_parameter)(void* self, int32_t x, int32_t y, v3_param_id *); | |||
}; | |||
@@ -112,8 +116,9 @@ static constexpr const v3_tuid v3_plugin_view_parameter_finder_iid = | |||
*/ | |||
struct v3_event_handler { | |||
#ifndef __cplusplus | |||
struct v3_funknown; | |||
#endif | |||
void (V3_API* on_fd_is_set)(void* self, int fd); | |||
}; | |||
@@ -125,8 +130,9 @@ static constexpr const v3_tuid v3_event_handler_iid = | |||
*/ | |||
struct v3_timer_handler { | |||
#ifndef __cplusplus | |||
struct v3_funknown; | |||
#endif | |||
void (V3_API* on_timer)(void* self); | |||
}; | |||
@@ -138,8 +144,9 @@ static constexpr const v3_tuid v3_timer_handler_iid = | |||
*/ | |||
struct v3_run_loop { | |||
#ifndef __cplusplus | |||
struct v3_funknown; | |||
#endif | |||
v3_result (V3_API* register_event_handler)(void* self, v3_event_handler** handler, int fd); | |||
v3_result (V3_API* unregister_event_handler)(void* self, v3_event_handler** handler); | |||
v3_result (V3_API* register_timer)(void* self, v3_timer_handler** handler, uint64_t ms); | |||