簡體   English   中英

將綁定到FBO的紋理復制到另一個OpenGL上下文

[英]Copy texture binded to FBO to another OpenGL context

我正在嘗試將紋理從在一種情況下創建的FBO復制到另一種情況下。 我正在使用Qt 4.8.3和QGLFramebufferObject類,OpenGL 2.1。 我使用qt類QGLWidget使用小部件創建了兩個上下文

我試圖使用blitFramebuffer方法將完整的FBO復制到另一個上下文,但是沒有成功。 我如何從FBO復制紋理,或者也許還有另一種從FBO傳輸視覺內容的方法。

使用此類參數創建FBO

new QGLFramebufferObject(arraySize, arraySize, QGLFramebufferObject::NoAttachment, GL_TEXTURE_2D, GL_ALPHA);

我有兩個解決方案

  1. 使用glGetTexImage復制附加到FBO的紋理uint * pixels = new uint[FBO_WIDTH * FBO_HEIGHT]; glBindTexture(GL_TEXTURE_2D, someFBO->texture()); glGetTexImage(GL_TEXTURE_2D, 0, GL_RGBA, GL_UNSIGNED_BYTE, pixels); uint * pixels = new uint[FBO_WIDTH * FBO_HEIGHT]; glBindTexture(GL_TEXTURE_2D, someFBO->texture()); glGetTexImage(GL_TEXTURE_2D, 0, GL_RGBA, GL_UNSIGNED_BYTE, pixels);

  2. 就像Mateusz Grzejek所說的那樣共享資源:在Qt中,必須將一個參數shareWidget QGLWidget的構造函數shareWidget中, 在這里了解更多QGLWidget,例如GLWidget(QWidget *parent = 0, QGLWidget * shareWidget = 0); 然后當您創建兩個GL小部件時,請使用如下樣式

GLWidget *glWidget = new GLWidget(this); GLWidget *glWidget2 = new GLWidget(this, glWidget);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM