Вот оно! glViewport! Задаёт аффинное преобразование из NDC в окно. Эта хрень влияет на любой рендеринг, будь то дефолтный фрэймбуфер или новый. Так что, если есть желание рендерить всё во что-то квадратное, то нужно и вьюпорт делать квадратным. А потом возвращать начальное значение.