+++ /dev/null
-#include <msp/gl/extensions/arb_direct_state_access.h>
-#include <msp/gl/extensions/ext_framebuffer_multisample.h>
-#include <msp/gl/extensions/ext_framebuffer_object.h>
-#include "renderbuffer.h"
-
-namespace Msp {
-namespace GL {
-
-Renderbuffer::Renderbuffer()
-{
- static Require _req(EXT_framebuffer_object);
-
- if(ARB_direct_state_access)
- glCreateRenderbuffers(1, &id);
- else
- glGenRenderbuffers(1, &id);
-}
-
-Renderbuffer::~Renderbuffer()
-{
- glDeleteRenderbuffers(1, &id);
-}
-
-PixelFormat Renderbuffer::normalize_format(PixelFormat fmt)
-{
- if(!get_component_size(fmt) && MSP_sized_internal_formats)
- {
- unsigned size = (fmt==DEPTH_COMPONENT ? get_gl_api()==OPENGL_ES2 ? 2 : 4 : 1);
- return get_sized_pixelformat(fmt, size);
- }
-
- return fmt;
-}
-
-void Renderbuffer::storage(PixelFormat fmt, unsigned wd, unsigned ht)
-{
- fmt = normalize_format(fmt);
- require_pixelformat(fmt);
- width = wd;
- height = ht;
- if(ARB_direct_state_access)
- glNamedRenderbufferStorage(id, fmt, width, height);
- else
- {
- BindRestore _bind(this);
- glRenderbufferStorage(GL_RENDERBUFFER, fmt, width, height);
- }
-}
-
-void Renderbuffer::storage_multisample(unsigned samples, PixelFormat fmt, unsigned wd, unsigned ht)
-{
- static Require _req(EXT_framebuffer_multisample);
- fmt = normalize_format(fmt);
- require_pixelformat(fmt);
-
- width = wd;
- height = ht;
- if(ARB_direct_state_access)
- glNamedRenderbufferStorageMultisample(id, samples, fmt, width, height);
- else
- {
- BindRestore _bind(this);
- glRenderbufferStorageMultisample(GL_RENDERBUFFER, samples, fmt, width, height);
- }
-}
-
-void Renderbuffer::bind() const
-{
- if(set_current(this))
- glBindRenderbuffer(GL_RENDERBUFFER, id);
-}
-
-void Renderbuffer::unbind()
-{
- if(set_current(0))
- glBindRenderbuffer(GL_RENDERBUFFER, 0);
-}
-
-} // namespace GL
-} // namespace Msp