OpenGL帧缓冲区复制

时间:2014-11-07 08:14:22

标签: c++ opengl

我想从一个帧缓冲区复制到另一个帧缓冲区

这是我的代码:

我正在从后面到前面的帧缓冲区复制rects

 for (int i = 0; i < rectangles->size; i++)
 {

   glBindFramebufferEXT(GL_READ_FRAMEBUFFER_EXT, backFramebufferId);
   checkForGLError("back to front Binded read backFramebufferId...");
   glReadBuffer(GL_COLOR_ATTACHMENT0_EXT);

  glBindFramebufferEXT(GL_DRAW_FRAMEBUFFER_EXT, frontFramebufferId);
  checkForGLError("back to front Binded write frontFramebufferId...");
  glDrawBuffer(GL_COLOR_ATTACHMENT0_EXT);

  sourcex1 = rectangles -> rectangles[i].srcX;
  sourcey1 = rectangles -> rectangles[i].srcY;
  int currDstX = rectangles -> rectangles[i].dstX;
  int currDstY = rectangles -> rectangles[i].dstY;
  int w = rectangles -> rectangles[i].width;
  int h = rectangles -> rectangles[i].height;


  glBlitFramebufferEXT(sourcex1,  sourcey1,
                     sourcex1 + w,  sourcey1 + h,
                     currDstX, currDstY,
                     currDstX + w,  currDstY + h,
                     GL_COLOR_BUFFER_BIT, GL_LINEAR);
  checkForGLError("back to front glBlitFramebufferEXT...");

  glBindFramebufferEXT(GL_READ_FRAMEBUFFER_EXT, 0);
  glBindFramebufferEXT(GL_DRAW_FRAMEBUFFER_EXT, 0);

然后在这个循环中我在后面的framebufferbuffer中复制整个前帧缓冲区

  glBindFramebufferEXT(GL_READ_FRAMEBUFFER_EXT, frontFramebufferId);
  checkForGLError("front to back Binded read frontFramebufferId...");
  glReadBuffer(GL_COLOR_ATTACHMENT0_EXT);

  glBindFramebufferEXT(GL_DRAW_FRAMEBUFFER_EXT, backFramebufferId);
  checkForGLError("front to back Binded write backFramebufferId...");
  glDrawBuffer(GL_COLOR_ATTACHMENT0_EXT);

  glBlitFramebufferEXT(0,  0,
                  frameWidth,  frameHeight,
                  0, 0,
                  frameWidth,  frameHeight,
                  GL_COLOR_BUFFER_BIT, GL_LINEAR);
  checkForGLError("front to back glBlitFramebufferEXT...");

  glBindFramebufferEXT(GL_READ_FRAMEBUFFER_EXT, 0);
  glBindFramebufferEXT(GL_DRAW_FRAMEBUFFER_EXT, 0);


 } // end of loop

我想问一下,这段代码是对还是我有些错误?

0 个答案:

没有答案