C++ OpenGL:无法创建帧缓冲区对象
创建OpenGL FBO并将颜色缓冲区和模具缓冲区绑定到它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
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对象。