Revert the ProgramObject modification, since it causes clanScene3D problems. Now it silently ignores set_uniforms(name) where the name does not exist in the shader. Use get_uniform_location to determine if the name exists