Glsl function - add ModularProgram

ischanged() will have to be checked  at each draw, not only when building. But this is not good for performance, we need to discuss how to do this more efficiently.