X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fbackends%2Fopengl%2Fframebuffer_backend.cpp;h=de8a9c6eabd2274cceb83b7c087b570b06149d16;hb=8a8cce8ef4ee28b3572a72958b8b407759f9f826;hp=1adcb7f93515c2eef68b4419957704fb81640520;hpb=160e9eea29bd10034733d59507fa1bcca36be401;p=libs%2Fgl.git diff --git a/source/backends/opengl/framebuffer_backend.cpp b/source/backends/opengl/framebuffer_backend.cpp index 1adcb7f9..de8a9c6e 100644 --- a/source/backends/opengl/framebuffer_backend.cpp +++ b/source/backends/opengl/framebuffer_backend.cpp @@ -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(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(this); + self->width = w; + self->height = h; +} + void OpenGLFramebuffer::update(unsigned mask) const { const FrameFormat &format = static_cast(this)->format;