В версии OpenGL <= 2.x, если вы включаете шейдеры, но не предоставляете какой-либо код шейдера, стадия шейдера <em>неполная , и попытка отрисовки чего-либо просто вызовет ошибку.
В версии OpenGL> = 3 профиля ядра, поставка шейдеров обязательна. Без шейдера это та же самая ситуация, что и при включении шейдеров OpenGL-2, но шейдер не поставляется: Попытка отобразить что-то => ошибка. В OpenGL-3.x поведение профиля совместимости аналогично поведению OpenGL-2.x - шейдер по умолчанию не используется, поведение соответствует конвейеру фиксированных функций, который может быть описан шейдером, но фактический код шейдера не указан , Технически драйвер OpenGL-2.x для современного графического процессора создаст шейдер на месте, который соответствует текущей установленной конфигурации конвейера с фиксированными функциями.