function printf(fmt, ...)
    log(string.format(fmt, unpack(arg)))
end

t_point_att = "internal\\internal_light_attpoint"
t_rt        = "$user$rendertarget"
t_distort   = "$user$distort"
t_noise     = "fx\\fx_noise2"

function r1_lspot(shader, t_base, vs, aref)
    shader:begin(vs, "add_spot")
        :fog(false)
        :zb(true, false)
        :blend(true, blend.one, blend.one)
        :aref(true, aref or 0)
    shader:sampler("s_base"):texture(t_base)
    shader:sampler("s_lmap"):texture("internal\\internal_light_att")
        :clamp()
        :f_linear()
        :project(true)
    shader:sampler("s_att"):texture("internal\\internal_light_attclip")
        :clamp()
        :f_linear()
end

function r1_lpoint(shader, t_base, vs, aref)
    shader:begin(vs, "add_point")
        :fog(false)
        :zb(true, false)
        :blend(true, blend.one, blend.one)
        :aref(true, aref or 0)
    shader:sampler("s_base"):texture(t_base)
    shader:sampler("s_lmap"):texture(t_point_att)
        :clamp()
        :f_linear()
    shader:sampler("s_att"):texture(t_point_att)
        :clamp()
        :f_linear()
end
