extract uniforms seting texture units on init of shader

also stored uniform locations on init of shader
and changed api for setting texture(sampler)s