美文网首页
(十二)帧缓冲区对象

(十二)帧缓冲区对象

作者: YongtaoHuang | 来源:发表于2019-10-27 16:22 被阅读0次

    本章将描述帧缓冲区对象的概念、应用程序创建它们的方法以及应用程序使用它们渲染到屏幕缓冲区或者纹理的方法。

    为什么使用帧缓冲区对象

    应用程序可以使用以下两种技术之一渲染到纹理:
    1、通过绘制到窗口系统提供的帧缓冲区
    2、通过使用连接到纹理的pbuffer来实现渲染到纹理
    上述两种方法对于渲染到纹理或者其他屏幕外秒来说都不理想。作为替代,我们需要允许应用程序直接渲染到纹理的API,或者再OpenGL ES API中具备创建屏幕外表面的能力,并将它作为渲染目标。

    帧缓冲区和渲染缓冲区对象

    下图展现了缓冲区对象、渲染缓冲区对象和纹理之间的关系:


    缓冲区对象、渲染缓冲区对象和纹理.png

    创建帧缓冲区和渲染缓冲区对象

    glGenRenderbuffers用于分配渲染缓冲区对象名称:

    void glGenRenderbuffers(GLsizei n, GLuint *renderbuffers)
    

    glGenFramebuffers用于分配帧缓冲区对象名称:

    void glGenFramebuffers(GLsizei n, GLuint *ids)
    

    使用当前帧缓冲区对象

    glBindRenderbuffer用于设置当前帧缓冲区对象:

    void glBindRenderbuffer(GLenum target, GLuint renderbuffer)
    

    使用屏幕外帧缓冲区对象

    glBindFramebuffer用于设置屏幕外帧缓冲区对象

    void glBindFramebuffer(GLenum target, GLuint framebuffer)
    

    帧缓冲区位块传送

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

    void glBlitFramebuffer( GLint srcX0, GLint srcY0,
    GLint srcX1, GLint srcY1,
    GLint dstX0, GLint dstY0,
    GLint dstX1, GLint dstY1,
    GLbitfield mask, GLenum filter)
    

    帧缓冲区失效

    帧缓冲区失效为应用程序提供了一个通知驱动程序不再需要帧缓冲区内容的机制。glInvalidateFrameb 和glInvalidateSubFra用于使整个或者部分帧缓冲区失效。

    void glInvalidateFrameb uffer(GLenum target,
    GLsizei numAttachments,
    const GLenum *attachments)
    void glInvalidateSubFra mebuffer(GLenum target,
    GLsizei numAttachments,
    const GLenum *attachments,
    GLint x, GLint y,
    GLsizei width, GLsizei height)
    

    删除帧缓冲区和渲染缓冲区对象

    删除帧缓冲区对象API

    void glDeleteRenderbuffers (GLsizei n,
    GLuint *renderbuffers)
    

    删除渲染缓冲区对象API

    void glDeleteFramebuffers( GLsizei n,
    GLuint *framebuffers)
    

    删除用作帧缓冲区附着的渲染缓冲区对象

    如果要删除的帧缓冲区对象作为当前绑定的帧缓冲区对象中的一个附着,则glDeleteRenderbuffers将附着重置为0。如果要删除的帧缓冲区对象作为当前没有绑定的帧缓冲区对象中的一个附着,则glDeleteRenderbuffers不回将附着重置为0。

    性能提示和技巧

    1、避免频繁地在渲染到窗口系统提供的帧缓冲区和渲染到帧缓冲区对象之间的切换。
    2、不要逐帧创建和删除帧缓冲区和渲染缓冲区对象。
    3、尝试避免修改用作渲染目标的帧缓冲区对象附着的纹理。
    4、如果整个纹理图像将被渲染,则将glTexImage2D和glTexImage3D中的pixel参数设置为NULL。
    5、尽可能共享帧缓冲区对象使用的用作附着的深度和模板渲染缓冲区,以保证内存占用需求最小。

    小结

    帧缓冲区对象有多种用途,最为常用的是渲染到纹理。

    相关文章

      网友评论

          本文标题:(十二)帧缓冲区对象

          本文链接:https://www.haomeiwen.com/subject/fmagpctx.html