OpenGL离屏渲染
初始化用于离屏渲染的Renderbuffer
和Framebuffer
glGenRenderbuffers(1, &renderbuffer);
glBindRenderbuffer(GL_RENDERBUFFER, renderbuffer);
glRenderbufferStorage(GL_RENDERBUFFER, GL_RGBA, 256, 256);
glGenFramebuffers(1, &framebuffer);
glBindFramebuffer(GL_DRAW_FRAMEBUFFER, framebuffer);
glFramebufferRenderbuffer(GL_DRAW_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, renderbuffer);
离屏渲染
glBindFramebuffer(GL_DRAW_FRAMEBUFFER, framebuffer);
glViewport(0, 0, width, height);
glClearColor(0.0, 0.0, 1.0, 1.0);
glClear(GL_COLOR_BUFFER_BIT);
...
绘制到窗口
glBindFramebuffer(GL_READ_FRAMEBUFFER, framebuffer);
glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0);
glViewport(0, 0, window_width, window_height);
glClearColor(0.0, 0.0, 1.0, 1.0);
glClear(GL_COLOR_BUFFER_BIT);
glBlitFramebuffer(0, 0, width-1, height-1, 0, 0, window_width-1, window_height-1, GL_COLOR_BUFFER_BIT, GL_NEAREST);
glutSwapBuffers();
从离屏渲染Framebuffer读取图像到内存
glBindFramebuffer(GL_READ_FRAMEBUFFER, framebuffer);
glReadPixels(0, 0, width, height, GL_RGBA, GL_UNSIGNED_BYTE, img_buf);