Как я могу захватить экран с помощью … и OpenGL?
Только при некотором везении. OpenGL — это в первую очередь API для рисования, и содержимое основного буфера кадра не определено, если только оно не обращается к самим функциям OpenGL. То, что OpenGL можно было злоупотреблять, было связано с тем, как графическая система управляла буферами кадра своих экранных окон: после создания окна без предопределенного цвета фона/кисти его начальным содержимым буфера кадра было просто все, что было на экране прямо перед окном. творчество. Если поверх этого создается контекст OpenGL, фреймбуфер может быть прочитан с помощью glReadPixels, таким образом создавая снимок экрана.
Сегодня компоновка окон стала нормой, что делает злоупотребление OpenGL для создания скриншотов практически невозможным. При компоновке каждое окно имеет свой собственный закадровый буфер кадра, и содержимое экрана компонуется только в конце. Если вы использовали описанный выше метод, который опирается на неинициализированную память, содержащую желаемое содержимое, в оконной системе компоновки, результаты будут сильно различаться: от сплошного чистого цвета до сильно искаженных мусорных фрагментов и шума данных.
Так как надежное создание снимка экрана должно учитывать множество особенностей системы, в которой это должно произойти, практически невозможно написать действительно переносимую программу для создания снимков экрана.
И OpenGL определенно не подходит для этого, несмотря на то, что люди (включая меня) могли злоупотреблять этим в прошлом.
person
datenwolf
schedule
21.03.2013