Discern between virtual and abstract class bindings

* Previous "virtual" classes (which can't be instantiated) are not corretly named "abstract".
* Added a new "virtual" category for classes, they can't be instantiated from the editor, but can be inherited from script and extensions.
* Converted a large amount of classes from "abstract" to "virtual" where it makes sense.

Most classes that make sense have been converted. Missing:

* Physics servers
* VideoStream
* Script* classes.

which will go in a separate PR due to the complexity involved.
This commit is contained in:
reduz
2022-03-10 08:17:38 +01:00
parent 741bbb9d7c
commit 6f51eca1e3
90 changed files with 1075 additions and 272 deletions

View File

@ -76,10 +76,10 @@ void AudioStreamPlayback::seek(float p_time) {
int AudioStreamPlayback::mix(AudioFrame *p_buffer, float p_rate_scale, int p_frames) {
int ret;
if (GDVIRTUAL_CALL(_mix, p_buffer, p_rate_scale, p_frames, ret)) {
if (GDVIRTUAL_REQUIRED_CALL(_mix, p_buffer, p_rate_scale, p_frames, ret)) {
return ret;
}
WARN_PRINT_ONCE("AudioStreamPlayback::mix unimplemented!");
return 0;
}
@ -94,7 +94,7 @@ void AudioStreamPlayback::_bind_methods() {
}
//////////////////////////////
void AudioStreamPlaybackResampled::_begin_resample() {
void AudioStreamPlaybackResampled::begin_resample() {
//clear cubic interpolation history
internal_buffer[0] = AudioFrame(0.0, 0.0);
internal_buffer[1] = AudioFrame(0.0, 0.0);
@ -105,6 +105,30 @@ void AudioStreamPlaybackResampled::_begin_resample() {
mix_offset = 0;
}
int AudioStreamPlaybackResampled::_mix_internal(AudioFrame *p_buffer, int p_frames) {
int ret;
if (GDVIRTUAL_REQUIRED_CALL(_mix_resampled, p_buffer, p_frames, ret)) {
return ret;
}
return 0;
}
float AudioStreamPlaybackResampled::get_stream_sampling_rate() {
float ret;
if (GDVIRTUAL_REQUIRED_CALL(_get_stream_sampling_rate, ret)) {
return ret;
}
return 0;
}
void AudioStreamPlaybackResampled::_bind_methods() {
ClassDB::bind_method(D_METHOD("begin_resample"), &AudioStreamPlaybackResampled::begin_resample);
GDVIRTUAL_BIND(_mix_resampled, "dst_buffer", "frame_count");
GDVIRTUAL_BIND(_get_stream_sampling_rate);
}
int AudioStreamPlaybackResampled::mix(AudioFrame *p_buffer, float p_rate_scale, int p_frames) {
float target_rate = AudioServer::get_singleton()->get_mix_rate();
float playback_speed_scale = AudioServer::get_singleton()->get_playback_speed_scale();
@ -315,7 +339,7 @@ void AudioStreamPlaybackMicrophone::start(float p_from_pos) {
if (AudioDriver::get_singleton()->capture_start() == OK) {
active = true;
_begin_resample();
begin_resample();
}
}