]> git.tdb.fi Git - libs/gl.git/blobdiff - source/renderbuffer.cpp
Use ARB_direct_state_access to avoid some bind calls
[libs/gl.git] / source / renderbuffer.cpp
index b2b25a0890212b41bc08251845d80385abf7451a..17d36846e696cdccb36d4b5a28e14d2e301b6025 100644 (file)
@@ -1,3 +1,4 @@
+#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"
@@ -9,7 +10,10 @@ Renderbuffer::Renderbuffer()
 {
        static Require _req(EXT_framebuffer_object);
 
-       glGenRenderbuffers(1, &id);
+       if(ARB_direct_state_access)
+               glCreateRenderbuffers(1, &id);
+       else
+               glGenRenderbuffers(1, &id);
 }
 
 Renderbuffer::~Renderbuffer()
@@ -20,10 +24,15 @@ Renderbuffer::~Renderbuffer()
 void Renderbuffer::storage(PixelFormat fmt, unsigned wd, unsigned ht)
 {
        require_pixelformat(fmt);
-       BindRestore _bind(this);
        width = wd;
        height = ht;
-       glRenderbufferStorage(GL_RENDERBUFFER, fmt, width, height);
+       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)
@@ -31,10 +40,15 @@ void Renderbuffer::storage_multisample(unsigned samples, PixelFormat fmt, unsign
        static Require _req(EXT_framebuffer_multisample);
        require_pixelformat(fmt);
 
-       BindRestore _bind(this);
        width = wd;
        height = ht;
-       glRenderbufferStorageMultisample(GL_RENDERBUFFER, samples, fmt, width, height);
+       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