Couvrons toutes les bases ici. D'abord, une réponse directe: oui, il existe une telle fonction. C'est ce qu'on appelle glDrawPixels
. Je ne plaisante pas.
glDrawPixels
peut certainement lire à partir de la mémoire GPU, à condition que you are using buffer objects as their source data (communément appelé "objets tampon pixel"). glDrawPixels
peut utiliser des objets de tampon de pixel comme source pour les données de pixel. Les objets tampons sont (théoriquement au moins) dans la mémoire du GPU, donc ils sont qualifiés.
Cependant, vous ajoutez sur cette "Soit une texture d'un objet tampon d'image". Sous cette qualification, vous demandez, "existe-t-il un moyen de copier des données de pixel d'un texture/framebuffer vers le framebuffer actuel?"
Oui. glBlitFramebuffer
peut le faire. Il passe du GL_READ_FRAMEBUFFER
au GL_DRAW_FRAMEBUFFER
. Et puisque vous pouvez ajouter des images à partir de textures aux FBO, vous pouvez copier des images très bien. Vous pouvez même copier à partir du framebuffer par défaut vers un rendu ou une texture.
Vous pouvez également utiliser glCopyImageSubData
, qui copie des rectangles de pixels d'une image à l'autre. C'est beaucoup plus pratique que glBlitFramebuffer
si tout ce que vous faites est de copier des données de pixels. C'est assez nouveau à l'heure actuelle (GL 4.3 ou ARB_copy_image). Il ne peut pas être utilisé pour copier des données dans le framebuffer par défaut.
Définir une texture et dessiner un rect? – falstro