Description
Hi,
This is a bit of an obscure issue, I have a workaround, but I want to debug it. I'm not sure where to start looking.
I'm using the webrtc-native
GDNativeLibrary from: https://github.com/godotengine/webrtc-native
To allow native webrtc on windows/linux.
I've compiled the library from source. This supplies Godot with a native program for doing WebRTC calls outside of HTML5 builds. It does so by supplying native binary implementations for the Godot WebRTCPeerConnection
and WebRTCDataChannel
objects, via WebRTCPeerConnectionGDNative
and WebRTCDataChannelGDNative
.
The method initialize(Dictionary options)
on WebRTCPeerConnection
fails when calling from ECMAScript with the following error:
const peer = new godot.WebRTCPeerConnection();
peer.initialize({});
Output:
E 0:00:02.059 initialize: Condition "interface == __null" is true. Returned: ERR_UNCONFIGURED
<C++ Source> modules/webrtc/webrtc_peer_connection_gdnative.cpp:74 @ initialize()
The interface
variable is set in the godot/modules/webrtc/webrtc_peer_connection_gdnative.cpp
class in the method set_native_webrtc_peer_connection
, which is called by godot/modules/gdnative/net/webrtc_gdnative.cpp
when a native implementation has been found, via a macro:
void GDAPI godot_net_bind_webrtc_peer_connection(godot_object *p_obj, const godot_net_webrtc_peer_connection *p_impl) {
#ifdef WEBRTC_GDNATIVE_ENABLED
((WebRTCPeerConnectionGDNative *)p_obj)->set_native_webrtc_peer_connection(p_impl);
#endif
}
Now the reason I think this is a bug in the ECMAScript module is that if I create a GDScript file webrtc_wrapper.gd
:
extends Node
func initialize(options: Dictionary) -> WebRTCPeerConnection:
var peer = WebRTCPeerConnection.new()
peer.initialize(options)
return peer
Set that GDscript as an Autoload singleton, and then call the following from my ECMAScript:
const webWrapper = this.get_node("/root/WebrtcWrapper");
const peer = webWrapper.call("initialize", {});
The initialize
call executes correctly and I can continue to work with the returned peer
object in ECMAScript.
So, for now, I have a workaround, but I'm puzzled why it's not working with ECMAScript, and wondered if someone could point me in the right direction, as I'm pretty new to GDNative and how it works. I wonder if for some reason the ECMAScript module is calling the unimplemented version of WebRTCPeerConnection rather than the GDNative version.