gpt4 book ai didi

opengl - 帧缓冲区对象 (FBO) 与渲染和深度缓冲区关系

转载 作者:行者123 更新时间:2023-12-03 22:23:25 26 4
gpt4 key购买 nike

我在网上看到了很多示例(for example),它们执行以下操作

  • 创建和绑定(bind) FBO
  • 创建和绑定(bind)缓冲区 (纹理、渲染、深度、模板)
  • 然后,解除绑定(bind)缓冲区
  • 要使用 FBO - 绑定(bind) FBO,请先完成工作,然后取消绑定(bind) FBO
  • 但是,也可以使用纹理缓冲区
  • 绑定(bind)纹理缓冲区以进行读取、写入等。
  • 但从未见过重新绑定(bind)其他缓冲区(渲染、深度、模板),为什么?

  • BUFFERS 创建和绑定(bind)/取消绑定(bind)的示例(以下代码仅用于展示我解释的内容并完美运行),
    // create a framebuffer object, you need to delete them when program exits.
    glGenFramebuffersEXT(1, &fboId);
    glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fboId);

    // create color buffer object and attached to fbo
    glGenRenderbuffersEXT(1, &rboId);
    glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, rboId);
    glRenderbufferStorageEXT(GL_RENDERBUFFER_EXT, GL_RGB, TEXTURE_WIDTH, TEXTURE_HEIGHT);
    glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, 0); //UnBind

    if(useDepthBuffer) {
    glGenRenderbuffersEXT(1, &rboIdDepth);
    glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, rboIdDepth);
    glRenderbufferStorageEXT(GL_RENDERBUFFER_EXT, GL_DEPTH_COMPONENT, TEXTURE_WIDTH, TEXTURE_HEIGHT);
    glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, 0); //UnBind
    }

    glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_RENDERBUFFER_EXT, rboId);
    if(useDepthBuffer)
    glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT, GL_RENDERBUFFER_EXT, rboIdDepth);


    // check FBO status
    printFramebufferInfo();
    bool status = checkFramebufferStatus();
    if(!status)
    fboUsed = false;
    .
    //then,
    .
    glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fboId);
    // Do the work
    glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0);

    1. 为什么我们不需要再次绑定(bind)所有的 BUFFERS(我的意思是同时
    与/绘图对象一起工作
    FBO)?


    2. 幕后发生了什么?

    编辑: attach-> 绑定(bind)和解除-> UnBind

    最佳答案

    我不知道我是否完全理解你,但是绑定(bind)到连接点 (GL_COLOR_ATTACHMENT ...) 的渲染缓冲区是每个 FBO 状态并且这个 FBO 状态保持不变你只需要绑定(bind) FBO 来告诉 OpenGL 这现在使用 FBO,其所有状态(您之前设置的)都将生效。

    关于opengl - 帧缓冲区对象 (FBO) 与渲染和深度缓冲区关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6144845/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com