AcidRain3 results in the following error messages (and more for other fm varaibles)
ERROR: 1:36: 'assign' : l-value required "fm0" (can't modify a uniform)
ERROR: 1:39: 'assign' : l-value required "fm0" (can't modify a uniform)
ERROR: 1:40: 'assign' : l-value required "fm0" (can't modify a uniform)
ERROR: 1:42: 'assign' : l-value required "fm0" (can't modify a uniform)
ERROR: 1:48: 'assign' : l-value required "fm2" (can't modify a uniform)
As I said before, uniform variables, like varying ones, are
inputs into a fragment shader and can not be legally modified by one. Some compilers do not detect that the source program is invalid so you can get away with it when using those compilers - but the result is undefined and it may not work with the next release of the compiler.
Which compiler you use depends on which GPU you are using. I mainly use the one built into the Intel i7 CPU in my laptop but if I ***** it to use its "real" NVIDIA GPU then the NVIDIA compiler will be used - the compiler being part of the GPU driver. This probably explains why we see different results even though we are both using Windows machines.
Also, because the fm variables are inputs to the shader something elsewhere has to assign them values, but nothing in the AcidRain example does that.