Godot Version
4.7.1.stable
Question
Did I really just step into a limitation of the godot engine?
I’m trying to make a compositor effect that uses more than one camera, where the second one follows the main one with a different layer mask, for masking purposes. I want it to work in the editor when the viewport is split into multiple smaller viewports, but I’m failing to get a way to determine which auxiliary camera is tied to which viewport texture inside the _render_callback() function.
I’m assuming the viewport can only be split 4 ways, as that’s what in the documentation. This is what I’ve tried:
# In compositor_effect.gd
func _render_callback(_effect_callback_type: int, render_data: RenderData) -> void:
if ShaderGlobals.aux_viewports.size() > 0:
var scene_buffers: RenderSceneBuffersRD = render_data.get_render_scene_buffers()
for view in scene_buffers.get_view_count():
for index in range(4):
var view_texture: RID = RenderingServer.viewport_get_texture(ShaderGlobals.tree.root.get_viewport_rid())
if view_texture == scene_buffers.get_texture("", ""):
print("Found!")
and
func _render_callback(_effect_callback_type: int, render_data: RenderData) -> void:
if ShaderGlobals.aux_viewports.size() > 0:
var scene_buffers: RenderSceneBuffersRD = render_data.get_render_scene_buffers()
for view in scene_buffers.get_view_count():
for index in range(4):
var view_texture: RID = RenderingServer.texture_2d_get(RenderingServer.viewport_get_texture(ShaderGlobals.tree.root.get_viewport_rid()))
if view_texture == scene_buffers.get_color_layer(view):
print("Found!")
The print("Found!") line never triggers, because either the scene_buffers.get_texture() doesn’t work like that (I know it doesn’t, but no idea on how it actually works, it’s not documented), or the color_buffer isn’t a texture, of which I’m aware, but what else can I try?
Is that just not possible in Godot 4.7?