DVUI

renderCommands

Parameters

#
self:*Self
*Self
queue:[]const dvui.RenderCommand
[]const dvui.RenderCommand

Source

Implementation

#
pub fn renderCommands(self: *Self, queue: []const dvui.RenderCommand) !void {
    const old_snap = self.snap_to_pixels;
    defer self.snap_to_pixels = old_snap;

    const old_kern = self.kerning;
    defer self.kerning = old_kern;

    const old_alpha = self.alpha;
    defer self.alpha = old_alpha;

    const old_clip = self.clipRect;
    defer self.clipRect = old_clip;

    const old_rendering = self.render_target.rendering;
    self.render_target.rendering = true;
    defer self.render_target.rendering = old_rendering;

    for (queue) |*drc| {
        self.snap_to_pixels = drc.snap;
        self.kerning = drc.kerning;
        self.clipRect = drc.clip;
        self.alpha = drc.alpha;
        switch (drc.cmd) {
            .text => |t| {
                try dvui.renderText(t);
            },
            .texture => |t| {
                try dvui.renderTexture(t.tex, t.rs, t.opts);
            },
            .pathFillConvex => |pf| {
                var options = pf.opts;
                options.color = options.color.opacity(self.alpha);
                var triangles = try pf.path.fillConvexTriangles(self.lifo(), options);
                defer triangles.deinit(self.lifo());
                try dvui.renderTriangles(triangles, null);
            },
            .pathStroke => |ps| {
                var options = ps.opts;
                options.color = options.color.opacity(self.alpha);
                var triangles = try ps.path.strokeTriangles(self.lifo(), options);
                defer triangles.deinit(self.lifo());
                try dvui.renderTriangles(triangles, null);
            },
            .triangles => |t| {
                try dvui.renderTriangles(t.tri, t.tex);
            },
        }
    }
}