godotjs / godotjs/javascript

GDNative overridden modules issue (WebRTC)

Aperta
#81 6 commenti 0 reazioni 0 assegnatari Vedi su GitHub
enhancement good first issue
Lingua principale
C++
Stelle
1.1k
Fork
80
Metriche di merge delle PR
Nessuna PR unita negli ultimi 30g

Descrizione

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
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.

Guida per i contributori

Apri la guida per i contributori

Valutazione

Questa issue non è ancora stata valutata.

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.