summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRémi Verschelde <rverschelde@gmail.com>2023-06-15 10:50:42 +0200
committerRémi Verschelde <rverschelde@gmail.com>2023-06-15 10:50:42 +0200
commitfe1aa263ca3b5cc77c3c9f8aec4a29f3b107f087 (patch)
tree9eeca7fb4752feafb992207c830770b4ff46cb65
parent81c386430658ea738c0738ff8a66230f1bdba30e (diff)
parent1b9364ba968480ddbb1d5a51937c215710f7f5e5 (diff)
downloadredot-engine-fe1aa263ca3b5cc77c3c9f8aec4a29f3b107f087.tar.gz
Merge pull request #78237 from dsnopek/webrtc-gdextension-create-data-channel
Directly expose `WebRTCPeerConnection::create_data_channel()` to GDExtension
-rw-r--r--misc/extension_api_validation/4.0-stable.expected4
-rw-r--r--modules/webrtc/doc_classes/WebRTCPeerConnectionExtension.xml2
-rw-r--r--modules/webrtc/webrtc_peer_connection_extension.cpp11
-rw-r--r--modules/webrtc/webrtc_peer_connection_extension.h7
4 files changed, 6 insertions, 18 deletions
diff --git a/misc/extension_api_validation/4.0-stable.expected b/misc/extension_api_validation/4.0-stable.expected
index 444560eb53..963c997aa0 100644
--- a/misc/extension_api_validation/4.0-stable.expected
+++ b/misc/extension_api_validation/4.0-stable.expected
@@ -6,6 +6,10 @@ should instead be used to justify these changes and describe how users should wo
========================================================================================================================
+GH-78237
+--------
+Validate extension JSON: Error: Field 'classes/WebRTCPeerConnectionExtension/methods/_create_data_channel/return_value': type changed value in new API, from "Object" to "WebRTCDataChannel".
+
GH-77757
--------
Validate extension JSON: Error: Field 'classes/Viewport/methods/gui_get_focus_owner': is_const changed value in new API, from false to true.
diff --git a/modules/webrtc/doc_classes/WebRTCPeerConnectionExtension.xml b/modules/webrtc/doc_classes/WebRTCPeerConnectionExtension.xml
index 535a20d67e..dbe6033c4d 100644
--- a/modules/webrtc/doc_classes/WebRTCPeerConnectionExtension.xml
+++ b/modules/webrtc/doc_classes/WebRTCPeerConnectionExtension.xml
@@ -21,7 +21,7 @@
</description>
</method>
<method name="_create_data_channel" qualifiers="virtual">
- <return type="Object" />
+ <return type="WebRTCDataChannel" />
<param index="0" name="p_label" type="String" />
<param index="1" name="p_config" type="Dictionary" />
<description>
diff --git a/modules/webrtc/webrtc_peer_connection_extension.cpp b/modules/webrtc/webrtc_peer_connection_extension.cpp
index 15e6bac3b0..248b0cf610 100644
--- a/modules/webrtc/webrtc_peer_connection_extension.cpp
+++ b/modules/webrtc/webrtc_peer_connection_extension.cpp
@@ -43,14 +43,3 @@ void WebRTCPeerConnectionExtension::_bind_methods() {
GDVIRTUAL_BIND(_poll);
GDVIRTUAL_BIND(_close);
}
-
-Ref<WebRTCDataChannel> WebRTCPeerConnectionExtension::create_data_channel(String p_label, Dictionary p_options) {
- Object *ret = nullptr;
- if (GDVIRTUAL_CALL(_create_data_channel, p_label, p_options, ret)) {
- WebRTCDataChannel *ch = Object::cast_to<WebRTCDataChannel>(ret);
- ERR_FAIL_COND_V_MSG(ret && !ch, nullptr, "Returned object must be an instance of WebRTCDataChannel.");
- return ch;
- }
- WARN_PRINT_ONCE("WebRTCPeerConnectionExtension::_create_data_channel is unimplemented!");
- return nullptr;
-}
diff --git a/modules/webrtc/webrtc_peer_connection_extension.h b/modules/webrtc/webrtc_peer_connection_extension.h
index a2a5c773f0..f3339f1eb4 100644
--- a/modules/webrtc/webrtc_peer_connection_extension.h
+++ b/modules/webrtc/webrtc_peer_connection_extension.h
@@ -45,17 +45,12 @@ protected:
static void _bind_methods();
public:
- // FIXME Can't be directly exposed due to issues in exchanging Ref(s) between godot and extensions.
- // See godot-cpp GH-652 .
- virtual Ref<WebRTCDataChannel> create_data_channel(String p_label, Dictionary p_options = Dictionary()) override;
- GDVIRTUAL2R(Object *, _create_data_channel, String, Dictionary);
- // EXBIND2R(Ref<WebRTCDataChannel>, create_data_channel, String, Dictionary);
-
/** GDExtension **/
EXBIND0RC(ConnectionState, get_connection_state);
EXBIND0RC(GatheringState, get_gathering_state);
EXBIND0RC(SignalingState, get_signaling_state);
EXBIND1R(Error, initialize, Dictionary);
+ EXBIND2R(Ref<WebRTCDataChannel>, create_data_channel, String, Dictionary);
EXBIND0R(Error, create_offer);
EXBIND2R(Error, set_remote_description, String, String);
EXBIND2R(Error, set_local_description, String, String);