Давайте рассмотрим все базы здесь.
Во-первых, прямой ответ: да, такая функция есть. Это называется glDrawPixels
. Я не шучу.
glDrawPixels
, безусловно, может считывать данные из памяти графического процессора при условии, что вы используете буферные объекты в качестве их исходных данных (обычно называемые «объектами пиксельных буферов»). glDrawPixels
может использовать объекты пиксельного буфера в качестве источника данных пикселей. Буферные объекты (теоретически, по крайней мере) находятся в памяти графического процессора, поэтому они соответствуют требованиям.
Однако вы добавляете к этому «Либо текстуру объекта буфера кадра». В этой квалификации вы спрашиваете: «Есть ли способ скопировать пиксельные данные из одного текстурного / кадрового буфера в текущий кадровый буфер?»
Да. glBlitFramebuffer
может сделать это. Блит от GL_READ_FRAMEBUFFER
до GL_DRAW_FRAMEBUFFER
. И так как вы можете добавлять изображения из текстур в FBO, вы можете копировать изображения просто отлично. Вы даже можете скопировать из кадрового буфера по умолчанию в какой-нибудь рендер-буфер или текстуру.
Вы также можете использовать glCopyImageSubData
, который копирует прямоугольники пикселей с одного изображения на другое. Это намного удобнее, чем glBlitFramebuffer
, если все, что вы делаете, это копирование данных пикселей. Это довольно новое в настоящее время (GL 4.3 или ARB_copy_image ). Его нельзя использовать для копирования данных в кадровый буфер по умолчанию.