many modification
add new shader (not tested)