【问题标题】:Can you glBlitFramebuffer between different levels of the same texture?你能glBlitFramebuffer在同一纹理的不同层次之间吗?
【发布时间】:2021-04-26 19:18:18
【问题描述】:

假设我有一个需要 mipmap 的纹理,但我希望 mipmap 完成硬件加速。我决定最好的路线是这样的:

    int read = glGenFramebuffers();
    int draw = glGenFramebuffers();
    int wh = 256;
    int glObject = glGenTextures();
    glBindTexture(GL_TEXTURE_2D, glObject);

    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, wh, wh, 0, GL_RGBA, GL_UNSIGNED_BYTE, data);

    for(int i = 0; i < mipLevels; ++i) {
        glBindFramebuffer(GL_FRAMEBUFFER, read);
        glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, glObject, i);
            
        glTexImage2D(GL_TEXTURE_2D, i + 1, GL_RGBA8, wh / 2, wh / 2, 0, GL_RGBA, GL_UNSIGNED_BYTE, (ByeBuffer)null);
        glBindFramebuffer(GL_FRAMEBUFFER, draw);
        glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, glObject, i + 1);
            
        glBindFramebuffer(GL_READ_FRAMEBUFFER, read);
        glBindFramebuffer(GL_DRAW_FRAMEBUFFER, draw);
        glBlitFramebuffer(0, 0, wh, wh, 0, 0, wh / 2, wh / 2,  GL_COLOR_BUFFER_BIT, GL_LINEAR);
            
        wh /= 2;
    }

当调用 glCheckFramebufferStatus 时,两个帧缓冲区都在此代码块中返回 INCOMPLETE_ATTACHMENT。我究竟做错了什么?我是否正确分配了空白 mipmap 级别?

【问题讨论】:

    标签: opengl-es framebuffer mipmaps


    【解决方案1】:

    Answer: 我使用glTexImage2D 来分配空白mip 级别,而在这种情况下我应该使用glTexStorage2D 来分配空白级别。以下是指向glTexStorage2D 手册页的链接以获取更多详细信息:https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/glTexStorage2D.xhtml

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-27
      • 1970-01-01
      • 1970-01-01
      • 2017-01-27
      • 1970-01-01
      • 2013-05-07
      • 2021-09-05
      • 1970-01-01
      相关资源
      最近更新 更多