]> git.tdb.fi Git - libs/gl.git/blob - source/backends/opengl/texture2dmultisample_backend.cpp
Add support for padding in vertex formats
[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         unsigned width = static_cast<const Texture2DMultisample *>(this)->width;
19         unsigned height = static_cast<const Texture2DMultisample *>(this)->height;
20         unsigned samples = static_cast<const Texture2DMultisample *>(this)->samples;
21
22         if(!id)
23                 create();
24
25         GLenum gl_fmt = get_gl_pixelformat(storage_fmt);
26         if(ARB_texture_storage_multisample)
27         {
28                 if(ARB_direct_state_access)
29                         glTextureStorage2DMultisample(id, samples, gl_fmt, width, height, false);
30                 else
31                 {
32                         bind_scratch();
33                         glTexStorage2DMultisample(target, samples, gl_fmt, width, height, false);
34                 }
35         }
36         else
37         {
38                 bind_scratch();
39                 glTexImage2DMultisample(target, samples, gl_fmt, width, height, false);
40         }
41         apply_swizzle();
42 }
43
44 size_t OpenGLTexture2DMultisample::get_data_size() const
45 {
46         unsigned width = static_cast<const Texture2DMultisample *>(this)->width;
47         unsigned height = static_cast<const Texture2DMultisample *>(this)->height;
48         unsigned samples = static_cast<const Texture2DMultisample *>(this)->samples;
49         return width*height*get_pixel_size(format)*samples;
50 }
51
52 } // namespace GL
53 } // namespace Msp