Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ OpenGL:无法创建帧缓冲区对象_C++_Opengl - Fatal编程技术网

C++ OpenGL:无法创建帧缓冲区对象

C++ OpenGL:无法创建帧缓冲区对象,c++,opengl,C++,Opengl,创建OpenGL FBO并将颜色缓冲区和模具缓冲区绑定到它 glCheck(glBindFramebuffer(GL_FRAMEBUFFER, fbo)); // Delete old framebuffers if ever created. if ( clrRbo != 0) glDeleteRenderbuffers(1, & clrRbo); if ( stencilRbo != 0) glDeleteRenderbuffers(1, & stencil

创建OpenGL FBO并将颜色缓冲区和模具缓冲区绑定到它

glCheck(glBindFramebuffer(GL_FRAMEBUFFER, fbo));

// Delete old framebuffers if ever created.
if ( clrRbo != 0)
    glDeleteRenderbuffers(1, & clrRbo);
if ( stencilRbo != 0)
    glDeleteRenderbuffers(1, & stencilRbo);

// Create new framebuffers with new size.
int maxSize; glGetIntegerv(GL_MAX_RENDERBUFFER_SIZE,  &maxSize);

glCheck(glGenRenderbuffers(1,&clrRbo));
glCheck(glBindRenderbuffer(GL_RENDERBUFFER,clrRbo));
glCheck(glRenderbufferStorage(GL_RENDERBUFFER, GL_RGBA, (std::min)(maxSize,m_localvp.pix_width),(std::min)(maxSize, m_localvp.pix_height)))

glCheck(glGenRenderbuffers(1,&stencilRbo));
glCheck(glBindRenderbuffer(GL_RENDERBUFFER,stencilRbo));
glCheck(glRenderbufferStorage(GL_RENDERBUFFER, GL_STENCIL_INDEX, (std::min)(maxSize,m_localvp.pix_width),(std::min)(maxSize, m_localvp.pix_height)))

// Bind new framebuffers to FBO;
glCheck(glBindFramebuffer(GL_FRAMEBUFFER, fbo));
glCheck(glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, clrRbo));
glCheck(glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_STENCIL_ATTACHMENT, GL_RENDERBUFFER, stencilRbo));
困扰我的问题在于:

 glRenderbufferStorage(GL_RENDERBUFFER, GL_RGBA, (std::min)(maxSize,m_localvp.pix_width),(std::min)(maxSize, m_localvp.pix_height))
当使用不同的内部格式时,此调用失败(get GL_INVALID_OPERATION error),导致FBO创建失败。有些机器与GL_RGBA配合使用,有些机器与GL_RGBA8配合使用,有些机器与两者配合使用。GL_RGBA8和GL_RGBA有什么区别。如何确定当前计算机支持哪种格式?

(std::min)(maxSize,m\u localvp.pix\u width)
这是一种非常奇怪的函数调用方式。“如何确定当前计算机支持哪种格式?”两者都受支持。本规范不允许出于格式化原因给出
GL\u INVALID\u操作
。实际上,获得该错误的唯一方法是如果绑定的renderbuffer不是有效的renderbuffer对象。