OpenGL离屏渲染流程代码

目录

  • OpenGL离屏渲染
    • 初始化用于离屏渲染的`Renderbuffer`和`Framebuffer`
    • 离屏渲染
    • 绘制到窗口
    • 从离屏渲染Framebuffer读取图像到内存

OpenGL离屏渲染

初始化用于离屏渲染的RenderbufferFramebuffer

// 初始化
// -----------------
// 生成&绑定&创建储存空间Renderbuffer
glGenRenderbuffers(1, &renderbuffer);
glBindRenderbuffer(GL_RENDERBUFFER, renderbuffer);
glRenderbufferStorage(GL_RENDERBUFFER, GL_RGBA, 256, 256);
// 生成&绑定FrameBuffer
glGenFramebuffers(1, &framebuffer);
glBindFramebuffer(GL_DRAW_FRAMEBUFFER, framebuffer);
// Renderbuffer关联到FrameBuffer
glFramebufferRenderbuffer(GL_DRAW_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, renderbuffer);

离屏渲染

// 离屏渲染
// -----------------
// 绑定Framebuffer
glBindFramebuffer(GL_DRAW_FRAMEBUFFER, framebuffer);
glViewport(0, 0, width, height);
// 渲染到Framebuffer
glClearColor(0.0, 0.0, 1.0, 1.0);
glClear(GL_COLOR_BUFFER_BIT);
// 具体的渲染程序
...

绘制到窗口

// 绘制到窗口
// -----------------
// 从离屏渲染Framebuffer读取并绘制到窗口Framebuffer中
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读取图像到内存

// 从Framebuffer读取图像到内存
glBindFramebuffer(GL_READ_FRAMEBUFFER, framebuffer);
glReadPixels(0, 0, width, height, GL_RGBA, GL_UNSIGNED_BYTE, img_buf);

你可能感兴趣的:(OpenGL,opengl,离屏渲染)