How can I render a GUI below game objects?

I’m trying to render a GUI below my game objects, but changing the position.z value on either doesn’t seem to have any effect. Am I missing something?

Hi!

You need to create/modify your render_script so that the GUI predicate is drawn before sprites. :slight_smile: The update() function in your render script could look something like this:

function update(self)
    render.set_depth_mask(true)
    render.clear({[render.BUFFER_COLOR_BIT] = self.clear_color, [render.BUFFER_DEPTH_BIT] = 1, [render.BUFFER_STENCIL_BIT] = 0})

    -- render game GUI
    render.set_depth_mask(false)
    render.set_view(vmath.matrix4())
    render.set_projection(vmath.matrix4_orthographic(0, render.get_window_width(), 0, render.get_window_height(), -1, 1))

    render.enable_state(render.STATE_STENCIL_TEST)
    render.draw(self.gui_pred)
    render.draw(self.text_pred)
    render.disable_state(render.STATE_STENCIL_TEST)

    render.set_depth_mask(false)
    render.draw_debug2d()

    -- render game world
    render.set_viewport(0, 0, render.get_window_width(), render.get_window_height())
    render.set_view(self.view)

    render.set_depth_mask(false)
    render.disable_state(render.STATE_DEPTH_TEST)
    render.disable_state(render.STATE_STENCIL_TEST)
    render.enable_state(render.STATE_BLEND)
    render.set_blend_func(render.BLEND_SRC_ALPHA, render.BLEND_ONE_MINUS_SRC_ALPHA)
    render.disable_state(render.STATE_CULL_FACE)

    render.set_projection(vmath.matrix4_orthographic(0, render.get_width(), 0, render.get_height(), -1, 1))

    render.draw(self.tile_pred)
    render.draw(self.particle_pred)
    render.draw_debug3d()
end

(I haven’t tested this myself, it’s just something to get you started. :slight_smile: )

5 Likes

By default, in the render script, all of the GUI is rendered after on top. You’ll need to move it out of the GUI or change the way rendering is done.

Sven beat me to it!

3 Likes

Damn you, Sven!!! :slight_smile:

2 Likes