我正在尝试 Godot 4.1。
我需要将每个渲染帧路由到 gstreamer 管道中。
我的第一直觉是获取 GL 纹理句柄和目标,并使用它们构建一个 GstGLBuffer,然后我可以将其提供给管道。
我可以创建一个扩展 Node 和
var tex = get_viewport().get_texture()
的 gdscript 并检查其宽度和高度。但如果我调用 RenderingServer.texture_get_native_handcle(tex,true)
它总是给我 0 。我从 _process()
回调中尝试了这段代码,并且还尝试了 _ready()
中的循环,该循环执行 await RenderingServer.frame_post_draw
,然后是探索逻辑。
是否有一个示例说明如何将渲染帧输入 gstreamer,或者至少如何获取 GL 句柄和渲染目标(TARGET_2D 或 OES 古怪)?
ViewportTexture
不是真实的纹理。这是一个代理纹理。 RID
中的ViewportTexture
实际上是一个占位纹理资源id。
要获取最后渲染的帧纹理的本机句柄,请使用以下代码:
var rid = RenderingServer.viewport_get_texture(get_viewport().get_viewport_rid())
var handle = RenderingServer.texture_get_native_handle(tex_rid)