reorganized into multiple shader programs