avoid recreating texture handle, since this is expensive
query UniformLocations once and store