]> git.tdb.fi Git - libs/gl.git/blob - source/backends/opengl/texture2dmultisample_backend.cpp
Check the flat qualifier from the correct member
[libs/gl.git] / source / backends / opengl / texture2dmultisample_backend.cpp
1 #include <msp/gl/extensions/arb_direct_state_access.h>
2 #include <msp/gl/extensions/arb_texture_multisample.h>
3 #include <msp/gl/extensions/arb_texture_storage_multisample.h>
4 #include "texture2dmultisample.h"
5 #include "texture2dmultisample_backend.h"
6
7 namespace Msp {
8 namespace GL {
9
10 OpenGLTexture2DMultisample::OpenGLTexture2DMultisample():
11         Texture(GL_TEXTURE_2D_MULTISAMPLE)
12 {
13         static Require _req(ARB_texture_multisample);
14 }
15
16 void OpenGLTexture2DMultisample::allocate()
17 {
18         const Texture2DMultisample &self = *static_cast<const Texture2DMultisample *>(this);
19
20         if(!id)
21                 create();
22
23         GLenum gl_fmt = get_gl_pixelformat(storage_fmt);
24         if(ARB_texture_storage_multisample)
25         {
26                 if(ARB_direct_state_access)
27                         glTextureStorage2DMultisample(id, self.samples, gl_fmt, self.width, self.height, false);
28                 else
29                 {
30                         bind_scratch();
31                         glTexStorage2DMultisample(target, self.samples, gl_fmt, self.width, self.height, false);
32                 }
33         }
34         else
35         {
36                 bind_scratch();
37                 glTexImage2DMultisample(target, self.samples, gl_fmt, self.width, self.height, false);
38         }
39         apply_swizzle();
40 }
41
42 size_t OpenGLTexture2DMultisample::get_data_size() const
43 {
44         const Texture2DMultisample &self = *static_cast<const Texture2DMultisample *>(this);
45         return self.width*self.height*get_pixel_size(format)*self.samples;
46 }
47
48 } // namespace GL
49 } // namespace Msp