Прошло много времени с тех пор, как я это сделал, поэтому мое объяснение может быть немного расплывчатым, но насколько я помню, Windows не "видит" OpenGL, отображаемый внутри окна.
Что Windows делает, так это создает окно с указанным размером, а затем «передает его» OpenGL для рендеринга. Это означает, что вы не можете получить пиксели, отображаемые со стороны Windows кода.
Когда мы хотели запечатлеть 3D, нам нужно было повторно визуализировать экран, чтобы вывести его на экран, который затем был сохранен (или напечатан).
Очевидно, что весь снимок экрана (Print Screen) работает, потому что он читает последние пиксели.