gl: recreate shader program only when pixel format changed