namespace GL {
OpenGLFramebuffer::OpenGLFramebuffer(bool is_system):
- id(0),
status(is_system ? GL_FRAMEBUFFER_COMPLETE : GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT)
{
if(!is_system)
}
}
-OpenGLFramebuffer::~OpenGLFramebuffer()
+OpenGLFramebuffer::OpenGLFramebuffer(OpenGLFramebuffer &&other):
+ id(other.id),
+ status(other.status)
{
- if(id)
- glDeleteFramebuffers(1, &id);
+ other.id = 0;
}
-FrameFormat OpenGLFramebuffer::get_system_format()
+OpenGLFramebuffer::~OpenGLFramebuffer()
{
- FrameFormat format;
-
- if(EXT_framebuffer_object)
- {
- int value;
- glGetFramebufferAttachmentParameteriv(GL_FRAMEBUFFER, GL_BACK, GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE, &value);
- if(value==GL_NONE)
- glGetFramebufferAttachmentParameteriv(GL_FRAMEBUFFER, GL_FRONT, GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE, &value);
- if(value!=GL_NONE)
- format = (format,COLOR_ATTACHMENT);
-
- glGetFramebufferAttachmentParameteriv(GL_FRAMEBUFFER, GL_DEPTH, GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE, &value);
- if(value!=GL_NONE)
- format = (format,DEPTH_ATTACHMENT);
-
- glGetFramebufferAttachmentParameteriv(GL_FRAMEBUFFER, GL_STENCIL, GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE, &value);
- if(value!=GL_NONE)
- format = (format,STENCIL_ATTACHMENT);
- }
-
- return format;
+ if(id)
+ glDeleteFramebuffers(1, &id);
}
-void OpenGLFramebuffer::get_system_size(unsigned &width, unsigned &height)
+void OpenGLFramebuffer::set_system_format(const FrameFormat &fmt)
{
- int view[4];
- glGetIntegerv(GL_VIEWPORT, view);
- width = view[2];
- height = view[3];
+ static_cast<Framebuffer *>(this)->format = fmt;
}
bool OpenGLFramebuffer::is_format_supported(const FrameFormat &fmt)
static Require _req(ARB_geometry_shader4);
}
+void OpenGLFramebuffer::resize_system(unsigned w, unsigned h)
+{
+ Framebuffer *self = static_cast<Framebuffer *>(this);
+ self->width = w;
+ self->height = h;
+}
+
void OpenGLFramebuffer::update(unsigned mask) const
{
const FrameFormat &format = static_cast<const Framebuffer *>(this)->format;