]> git.tdb.fi Git - libs/gl.git/blobdiff - source/backends/opengl/framebuffer_backend.cpp
Add correct copy and move semantics to most classes
[libs/gl.git] / source / backends / opengl / framebuffer_backend.cpp
index 1adcb7f93515c2eef68b4419957704fb81640520..de8a9c6eabd2274cceb83b7c087b570b06149d16 100644 (file)
@@ -19,7 +19,6 @@ namespace Msp {
 namespace GL {
 
 OpenGLFramebuffer::OpenGLFramebuffer(bool is_system):
-       id(0),
        status(is_system ? GL_FRAMEBUFFER_COMPLETE : GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT)
 {
        if(!is_system)
@@ -33,43 +32,22 @@ OpenGLFramebuffer::OpenGLFramebuffer(bool 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)
@@ -96,6 +74,13 @@ void OpenGLFramebuffer::require_layered()
        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;