virtual void operator()(text_render_thunk const& thunk)
    {
        tex_.set_comp_op(thunk.comp_op_);
        tex_.set_halo_comp_op(thunk.comp_op_);
        tex_.set_halo_rasterizer(thunk.halo_rasterizer_);

        for (auto const& glyphs : thunk.placements_)
        {
            scoped_glyph_positions_offset tmp_off(*glyphs, offset_);

            if (auto const& mark = glyphs->get_marker())
            {
                ren_.render_marker(glyphs->marker_pos(),
                                   *mark->marker_,
                                   mark->transform_,
                                   thunk.opacity_, thunk.comp_op_);
            }
            tex_.render(*glyphs);
        }
    }
    virtual void operator()(text_render_thunk const &thunk)
    {
        tex_.set_comp_op(thunk.comp_op_);

        value_integer feature_id = feature_.id();

        for (auto const& glyphs : thunk.placements_)
        {
            scoped_glyph_positions_offset tmp_off(*glyphs, offset_);

            if (auto const& mark = glyphs->get_marker())
            {
                ren_.render_marker(feature_,
                                   glyphs->marker_pos(),
                                   *mark->marker_,
                                   mark->transform_,
                                   thunk.opacity_, thunk.comp_op_);
            }
            tex_.render(*glyphs, feature_id);
        }

        pixmap_.add_feature(feature_);
    }