![](/img/trans.png)
[英]OpenGL: Is it supported to render into an FBO in one context, then use the FBO's texture in another?
[英]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);
我有兩個解決方案
使用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);
就像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.