Glsl function - add ModularProgram

`val.expression(names)` appears a couple of times. If `val` is a function or variable, then it just returns its own name as it appears in the `names` dict.