DVUI

endRendering

Normally this is called for you in end, but you can call it separately in case you want to do something after everything has been rendered.

Parameters

#
self:*Self
*Self
opts:endOptions
endOptions

Source

Implementation

#
pub fn endRendering(self: *Self, opts: endOptions) void {
    // Frame phase timing: the build phase ends here and the render phase begins.
    // Close out the event/build phases before the toasts/dialogs/debug below,
    // since those register widgets that must not be taken for the build phase.
    const render_start = self.backend.nanoTime();
    self.ft_awaiting_build = false;
    self.frame_timing_last.events_ns = nsSince(self.ft_build_start, self.ft_events_start);
    self.frame_timing_last.build_ns = nsSince(render_start, self.ft_build_start);

    // The build phase is over, so stop capturing the widget tree for
    // `Debug.dumpFrame` before the inspector/dialogs below register widgets.
    dvui.debug.capturing = false;

    if (opts.show_toasts) {
        dvui.toastsShow(null, dvui.windowRect());
    }
    var dialog_it = self.dialogs.iterator(null);
    while (dialog_it.next()) |d| {
        d.display(d.id) catch |err| {
            dvui.logError(@src(), err, "Dialog {x}", .{d.id});
        };
    }

    if (self.is_primary)
        dvui.debug.show();

    for (self.subwindows.stack.items) |*sw| {
        self.renderCommands(sw.render_cmds.items) catch |err| {
            dvui.logError(@src(), err, "Failed to render commands for subwindow {x}", .{sw.id});
        };
        // Set to empty because it's allocated on the arena and will be freed there
        sw.render_cmds = .empty;

        self.renderCommands(sw.render_cmds_after.items) catch |err| {
            dvui.logError(@src(), err, "Failed to render commands after for subwindow {x}", .{sw.id});
        };
        // Set to empty because it's allocated on the arena and will be freed there
        sw.render_cmds_after = .empty;
    }

    self.render_stats_last = self.render_stats;
    self.frame_timing_last.render_ns = nsSince(self.backend.nanoTime(), render_start);
    self.end_rendering_done = true;
}