前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >OpenGL 帧缓冲区位块传送,不得了(附源码)

OpenGL 帧缓冲区位块传送,不得了(附源码)

作者头像
字节流动
发布2022-09-26 10:48:42
9510
发布2022-09-26 10:48:42
举报
文章被收录于专栏:字节流动

如果你觉得本文内容有些超纲,可以先看看 OpenGL ES 干货汇总 系列补补基础。

帧缓冲区位块传送(Blit)可以高效地将一个矩形区域的像素值从一个帧缓冲区(读帧缓冲区)复制到另一个帧缓冲区(绘图帧缓冲区)。

在项目实践中确认了帧缓冲区位块传送的性能和功耗优于 Draw , 此外位块传送还是支持上下采样,以及通过调整映射的矩形区域,可以实现规则的镜像和旋转功能

还有重要的一点,在进行帧缓冲区间位块传之前,需要指定好源帧缓冲区 GL_READ_FRAMEBUFFER 和目标帧缓冲区 GL_DRAW_FRAMEBUFFER ,特别是使用多个 FBO 时需要注意。

帧缓冲区位块传送 glBlitFramebuffer:

使用位块传送的简单 demo , 在新建的帧缓冲区上做完离屏渲染后,直接使用 glBlitFramebuffer 进行上屏。

代码语言:javascript
复制
    // 离屏渲染
    glViewport(, , m_RenderImage.width, m_RenderImage.height);

    glBindFramebuffer(GL_FRAMEBUFFER, m_FboId);
    glUseProgram(m_FboProgramObj);
    glBindVertexArray(m_VaoIds[]);
    glActiveTexture(GL_TEXTURE0);
    glBindTexture(GL_TEXTURE_2D, m_ImageTextureId);
    glUniform1i(m_FboSamplerLoc, );
    GO_CHECK_GL_ERROR();
    glDrawElements(GL_TRIANGLES, , GL_UNSIGNED_SHORT, (const void *));
    GO_CHECK_GL_ERROR();
    glBindVertexArray();
    glBindTexture(GL_TEXTURE_2D, );
    glBindFramebuffer(GL_FRAMEBUFFER, );

    // 上屏
    glViewport(, , screenW, screenH);
    glBindFramebuffer(GL_READ_FRAMEBUFFER, m_FboId);
    glReadBuffer(GL_COLOR_ATTACHMENT0);

    //直接上屏
    glBlitFramebuffer(, , m_RenderImage.width, m_RenderImage.height,
                      , screenH, screenW, ,
                       GL_COLOR_BUFFER_BIT, GL_LINEAR);

思考题:使用 glBlitFramebuffer 上屏的时候,调用方式为什么不用下面这种?

代码语言:javascript
复制
    glBlitFramebuffer(, , m_RenderImage.width, m_RenderImage.height,
                      , , screenW, screenH,
                      GL_COLOR_BUFFER_BIT, GL_LINEAR);

码字不易,帮忙点个赞呗!完整实现代码见项目:https://github.com/githubhaohao/NDK_OpenGLES_3_0,右上角选择 Blit Frame buffer ,有惊喜。

-- END --

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-06-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 字节流动 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档