[SOLVED] How to mask/clipping a GUI?

I need help again :pensive: I’m trying to implement different movement logic for two masks, but only the last wave_2 works, more precisely, wave_1 also works, but according to the movement logic of wave_2. I understand why this happens, but I don’t understand how to fix it :disappointed_relieved:

dmengine_GYyB4W26NH

-- render GUI
--
local camera_gui = state.cameras.camera_gui
render.set_view(camera_gui.view)
render.set_projection(camera_gui.proj)
render.enable_state(render.STATE_STENCIL_TEST)

if self.maskable_nodes["wave_1"].mask_sampler then
    if self.maskable_nodes["wave_1"].mask_position then
        if not camera_gui.frustum.constants then camera_gui.frustum.constants = render.constant_buffer() end
        camera_gui.frustum.constants.mask_position = self.maskable_nodes["wave_1"].mask_position
    end
    render.enable_texture("mask_sampler", self.maskable_nodes["wave_1"].mask_sampler)
end
render.draw(predicates.gui, camera_gui.frustum)
if self.maskable_nodes["wave_1"].mask_sampler then
    render.disable_texture("mask_sampler")
end

if self.maskable_nodes["wave_2"].mask_sampler then
    if self.maskable_nodes["wave_2"].mask_position then
        if not camera_gui.frustum.constants then camera_gui.frustum.constants = render.constant_buffer() end
        camera_gui.frustum.constants.mask_position = self.maskable_nodes["wave_2"].mask_position
    end
    render.enable_texture("mask_sampler", self.maskable_nodes["wave_2"].mask_sampler)
end
render.draw(predicates.gui, camera_gui.frustum)
if self.maskable_nodes["wave_2"].mask_sampler then
    render.disable_texture("mask_sampler")
end

render.draw(predicates.debug_text, camera_gui.frustum)
render.disable_state(render.STATE_STENCIL_TEST)
render.disable_state(render.STATE_BLEND)