bool initFramebuffer() { glGenFramebuffers(framebuffer::MAX, &FramebufferName[0]); glNamedFramebufferTextureEXT(FramebufferName[framebuffer::RENDER], GL_COLOR_ATTACHMENT0, TextureName[texture::MULTISAMPLE], 0); glNamedFramebufferTextureEXT(FramebufferName[framebuffer::RESOLVE], GL_COLOR_ATTACHMENT0, TextureName[texture::COLORBUFFER], 0); if(glCheckNamedFramebufferStatusEXT(FramebufferName[framebuffer::RENDER], GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE) return false; if(glCheckNamedFramebufferStatusEXT(FramebufferName[framebuffer::RESOLVE], GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE) return false; return true; }
inline bool checkNamedFramebuffer(GLuint fbo) { GLenum status = glCheckNamedFramebufferStatusEXT(fbo,GL_FRAMEBUFFER); switch(status) { case GL_FRAMEBUFFER_UNDEFINED: nvprintfLevel(LOGLEVEL_ERROR,"OpenGL Error(%s)\n", "GL_FRAMEBUFFER_UNDEFINED"); break; case GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT: nvprintfLevel(LOGLEVEL_ERROR,"OpenGL Error(%s)\n", "GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT"); break; case GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT: nvprintfLevel(LOGLEVEL_ERROR,"OpenGL Error(%s)\n", "GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT"); break; case GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER: nvprintfLevel(LOGLEVEL_ERROR,"OpenGL Error(%s)\n", "GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER"); break; case GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER: nvprintfLevel(LOGLEVEL_ERROR,"OpenGL Error(%s)\n", "GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER"); break; case GL_FRAMEBUFFER_UNSUPPORTED: nvprintfLevel(LOGLEVEL_ERROR,"OpenGL Error(%s)\n", "GL_FRAMEBUFFER_UNSUPPORTED"); break; case GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE: nvprintfLevel(LOGLEVEL_ERROR,"OpenGL Error(%s)\n", "GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE"); break; case GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS: nvprintfLevel(LOGLEVEL_ERROR,"OpenGL Error(%s)\n", "GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS"); break; } return status != GL_FRAMEBUFFER_COMPLETE; }
bool initFramebuffer() { glGenRenderbuffers(1, &ColorRenderbufferName); glNamedRenderbufferStorageMultisampleEXT(ColorRenderbufferName, 4, GL_RGBA, FRAMEBUFFER_SIZE.x, FRAMEBUFFER_SIZE.y); glGenFramebuffers(1, &FramebufferRenderName); glNamedFramebufferRenderbufferEXT(FramebufferRenderName, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, ColorRenderbufferName); if(glCheckNamedFramebufferStatusEXT(FramebufferRenderName, GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE) return false; glGenTextures(1, &ColorTextureName); glTextureImage2DEXT(ColorTextureName, GL_TEXTURE_2D, 0, GL_RGBA8, FRAMEBUFFER_SIZE.x, FRAMEBUFFER_SIZE.y, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0); glGenFramebuffers(1, &FramebufferResolveName); glNamedFramebufferTextureEXT(FramebufferResolveName, GL_COLOR_ATTACHMENT0, ColorTextureName, 0); if(glCheckNamedFramebufferStatusEXT(FramebufferResolveName, GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE) return false; return glf::checkError("initFramebuffer"); }
bool initFramebuffer() { bool Validated(true); glGenFramebuffers(1, &FramebufferName); glNamedFramebufferTextureEXT(FramebufferName, GL_DEPTH_ATTACHMENT, TextureName[texture::DEPTH], 0); glNamedFramebufferTextureEXT(FramebufferName, GL_COLOR_ATTACHMENT0, TextureName[texture::MULTISAMPLE], 0); Validated = Validated && (glCheckNamedFramebufferStatusEXT(FramebufferName, GL_FRAMEBUFFER) == GL_FRAMEBUFFER_COMPLETE); return Validated; }
bool init(size_t width, size_t height, const GLenum internalFormats[NbColorBuffers], GLenum filter = GL_NEAREST) { ParentClass::init(width, height, internalFormats, filter); // check that the FBO is complete GLenum status = glCheckNamedFramebufferStatusEXT(ParentClass::m_Fbo.glId(), GL_DRAW_FRAMEBUFFER); if(GL_FRAMEBUFFER_COMPLETE != status) { std::cerr << GLFramebufferErrorString(status) << std::endl; return false; } return true; }
bool init(size_t width, size_t height, const GLenum internalFormats[NbColorBuffers], GLenum depthInternalFormat, GLenum filter = GL_NEAREST) { ParentClass::init(width, height, internalFormats, filter); // Allocation and attachment of depth texture m_DepthBuffer = GLTexture2D(); m_DepthBuffer.setStorage(1, depthInternalFormat, width, height); m_DepthBuffer.setMinFilter(filter); m_DepthBuffer.setMagFilter(filter); glNamedFramebufferTexture2DEXT(ParentClass::m_Fbo.glId(), GL_DEPTH_ATTACHMENT, GL_TEXTURE_2D, m_DepthBuffer.glId(), 0); // check that the FBO is complete GLenum status = glCheckNamedFramebufferStatusEXT(ParentClass::m_Fbo.glId(), GL_DRAW_FRAMEBUFFER); if(GL_FRAMEBUFFER_COMPLETE != status) { std::cerr << GLFramebufferErrorString(status) << std::endl; return false; } return true; }
GLenum AbstractFramebuffer::checkStatusImplementationDSAEXT(const FramebufferTarget target) { _flags |= ObjectFlag::Created; return glCheckNamedFramebufferStatusEXT(_id, GLenum(target)); }
GLenum FramebufferImplementation_DirectStateAccessEXT::checkStatus(const Framebuffer * fbo) const { return glCheckNamedFramebufferStatusEXT(fbo->id(), GL_FRAMEBUFFER); }