]> git.tdb.fi Git - libs/gl.git/commitdiff
Prefer explicit mipmap generation with glGenerateMipmap
authorMikko Rasa <tdb@tdb.fi>
Fri, 28 Oct 2016 11:55:23 +0000 (14:55 +0300)
committerMikko Rasa <tdb@tdb.fi>
Fri, 28 Oct 2016 12:18:37 +0000 (15:18 +0300)
Implicit generation with the texture parameter was deprecated in
OpenGL 3.0 and removed in OpenGL 3.2.

source/texture.cpp
source/texture1d.cpp
source/texture2d.cpp
source/texture3d.cpp
source/texturecube.cpp

index b528ca30f5b6ccaee0ac81c0e78e86226f345a1a..fe27a04d9ddd830fa93f21d51052ec0ffc0da8cd 100644 (file)
@@ -172,21 +172,18 @@ void Texture::set_wrap_r(TextureWrap w)
 
 void Texture::set_generate_mipmap(bool gm)
 {
-       if(gm)
+       if(gm && !EXT_framebuffer_object)
                static Require _req(SGIS_generate_mipmap);
        gen_mipmap = gm;
-       if(get_gl_api()!=OPENGL_ES2)
+       if(!EXT_framebuffer_object)
                update_parameter(GENERATE_MIPMAP);
 }
 
 void Texture::auto_generate_mipmap()
 {
-       if(get_gl_api()==OPENGL_ES2)
-       {
-               // glGenerateMipmap is defined here
-               static Require _req(EXT_framebuffer_object);
+       // glGenerateMipmap is defined here
+       if(EXT_framebuffer_object)
                glGenerateMipmap(target);
-       }
 }
 
 void Texture::set_compare_enabled(bool c)
index 44e49f51142fde02d41fa4da16b5119cb129d840..e5a496a455095093c89502d15c3727dd7306ecec 100644 (file)
@@ -61,9 +61,9 @@ void Texture1D::image(unsigned level, PixelFormat fmt, DataType type, const void
 
        BindRestore _bind(this);
        if(ARB_texture_storage)
-               sub_image(level, 0, w, fmt, type, data);
-       else
-               glTexImage1D(target, level, ifmt, w, 0, fmt, type, data);
+               return sub_image(level, 0, w, fmt, type, data);
+
+       glTexImage1D(target, level, ifmt, w, 0, fmt, type, data);
 
        allocated |= 1<<level;
        if(gen_mipmap && level==0)
@@ -82,6 +82,9 @@ void Texture1D::sub_image(unsigned level, int x, unsigned wd, PixelFormat fmt, D
 
        BindRestore _bind(this);
        glTexSubImage1D(target, level, x, wd, fmt, type, data);
+
+       if(gen_mipmap && level==0)
+               auto_generate_mipmap();
 }
 
 void Texture1D::image(const Graphics::Image &img, bool srgb)
index 4aad82d27ad9eeb71678e1b9b1d23386751c6ece..4d6e32f5550cd6f48ee68c71d957278b7ffe355e 100644 (file)
@@ -91,9 +91,9 @@ void Texture2D::image(unsigned level, PixelFormat fmt, DataType type, const void
 
        BindRestore _bind(this);
        if(ARB_texture_storage)
-               sub_image(level, 0, 0, w, h, fmt, type, data);
-       else
-               glTexImage2D(target, level, ifmt, w, h, 0, fmt, type, data);
+               return sub_image(level, 0, 0, w, h, fmt, type, data);
+
+       glTexImage2D(target, level, ifmt, w, h, 0, fmt, type, data);
 
        allocated |= 1<<level;
        if(gen_mipmap && level==0)
@@ -112,6 +112,9 @@ void Texture2D::sub_image(unsigned level, int x, int y, unsigned wd, unsigned ht
 
        BindRestore _bind(this);
        glTexSubImage2D(target, level, x, y, wd, ht, fmt, type, data);
+
+       if(gen_mipmap && level==0)
+               auto_generate_mipmap();
 }
 
 void Texture2D::image(const Graphics::Image &img, bool srgb)
index d04a17e1fbb38bf81c507f9798406f75ca3b2942..7ea17b137e545d0fcc757173799f3598998788cb 100644 (file)
@@ -80,9 +80,9 @@ void Texture3D::image(unsigned level, PixelFormat fmt, DataType type, const void
 
        BindRestore _bind(this);
        if(ARB_texture_storage)
-               sub_image(level, 0, 0, 0, w, h, d, fmt, type, data);
-       else
-               glTexImage3D(target, level, ifmt, width, height, depth, 0, fmt, type, data);
+               return sub_image(level, 0, 0, 0, w, h, d, fmt, type, data);
+
+       glTexImage3D(target, level, ifmt, width, height, depth, 0, fmt, type, data);
 
        allocated |= 1<<level;
        if(gen_mipmap && level==0)
@@ -101,6 +101,9 @@ void Texture3D::sub_image(unsigned level, int x, int y, int z, unsigned wd, unsi
 
        BindRestore _bind(this);
        glTexSubImage3D(target, level, x, y, z, wd, ht, dp, fmt, type, data);
+
+       if(gen_mipmap && level==0)
+               auto_generate_mipmap();
 }
 
 void Texture3D::load_image(const string &fn, int dp)
index 54a008ca50930054ee6c99507c27c032f4ff4e6c..a9961af90a3900660f2e2c71a5a46be8820f6441 100644 (file)
@@ -79,9 +79,9 @@ void TextureCube::image(TextureCubeFace face, unsigned level, PixelFormat fmt, D
 
        BindRestore _bind(this);
        if(ARB_texture_storage)
-               sub_image(face, level, 0, 0, s, s, fmt, type, data);
-       else
-               glTexImage2D(face, level, ifmt, s, s, 0, fmt, type, data);
+               return sub_image(face, level, 0, 0, s, s, fmt, type, data);
+
+       glTexImage2D(face, level, ifmt, s, s, 0, fmt, type, data);
 
        // XXX Allocation should be tracked per-face, but we'll run out of bits
        allocated |= 1<<level;
@@ -102,6 +102,9 @@ void TextureCube::sub_image(TextureCubeFace face, unsigned level, int x, int y,
 
        BindRestore _bind(this);
        glTexSubImage2D(face, level, x, y, wd, ht, fmt, type, data);
+
+       if(gen_mipmap && level==0)
+               auto_generate_mipmap();
 }
 
 void TextureCube::image(TextureCubeFace face, const Graphics::Image &img, bool srgb)