代码之家  ›  专栏  ›  技术社区  ›  KillianDS

将readbuffer设置为FBO颜色附件失败,枚举错误无效

  •  1
  • KillianDS  · 技术社区  · 13 年前

    根据 OpenGL documentation 我应该能够将像素读取的源设置为 GL_COLOR_ATTACHMENTi 然而,当我尝试这样做时, glGetError 给我一个 GL_INVALID_ENUM 错误随后 glReadPixels 只需读取后台缓冲区。

    报告的版本 glGetString(GL_VERSION) 4.2.11627 Core Profile Forward-Compatible Context .我在linux上运行,并安装了fglrx ati驱动程序(版本8.96.7-120312a-135598C-ati)。

    我检查了我的FBO是否已绑定和完整。我还验证了 glGetError(gl获取错误) 不是由以前的调用设置的。

    它在这方面已经失败了(我希望这里会有错误,但更确切地说 INVALID_OPERATION INVALID_ENUM )以下为:

    #include <iostream>
    #include "Window.h" // My own class based on sfml, but I am sure context creation works fine
    #include <glload/gll.hpp>
    #include <glload/gl_core.hpp>
    
    int main()
    {
        const unsigned int screenW = 1280, screenH = 720;
        Window w(screenW, screenH, 32, false);
        if (glload::LoadFunctions() == glload::LS_LOAD_FAILED)
        {
            std::cerr << "glload failed to load" << std::endl;
            return -1;
        }
        gl::ReadBuffer(gl::GL_COLOR_ATTACHMENT0);
        if( gl::GetError() == gl::GL_INVALID_ENUM)
        {
            std::cerr << "Invalid enum error" << std::endl;
            return -1;
        }
        return 0;
    }
    

    这个电话会触发其他原因吗 无效_编号 还是我使用的OpenGL实现更有可能被窃听?

    1 回复  |  直到 13 年前
        1
  •  2
  •   Nicol Bolas    13 年前

    但是,当我尝试此操作时,glGetError会给我一个GL_INVALID_ENUM错误。随后的glReadPixels只读取后台缓冲区。

    如果您正在从后台缓冲区读取,那么这意味着 default framebuffer 仍然绑定 glReadBuffer 设置的读取缓冲区 现在的 帧缓冲区。

    默认的帧缓冲区没有 GL_COLOR_ATTACHMENT 因此,将这些图像中的一个设置为读取缓冲器是错误的。你必须约束联邦调查局 第一 ,然后设置读取缓冲区。请注意 glReadBuffer(读取缓冲区) 设置绑定到的帧缓冲区的绑定 GL_READ_FRAMEBUFFER GL_DRAW_FRAMEBUFFER 。所以一定要把它绑在正确的地方。

    推荐文章