在 Godot 中,如何在每个渲染帧的 GL 纹理 ID 上运行逻辑?

问题描述 投票:0回答:1

我正在尝试 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 古怪)?

opengl gstreamer godot gdscript
1个回答
0
投票

ViewportTexture
不是真实的纹理。这是一个代理纹理。
RID
中的
ViewportTexture
实际上是一个占位纹理资源id。

要获取最后渲染的帧纹理的本机句柄,请使用以下代码:

var rid = RenderingServer.viewport_get_texture(get_viewport().get_viewport_rid())
var handle = RenderingServer.texture_get_native_handle(tex_rid)
© www.soinside.com 2019 - 2024. All rights reserved.