]> git.tdb.fi Git - libs/gl.git/blobdiff - source/core/texture.cpp
Remove default sampler from Texture
[libs/gl.git] / source / core / texture.cpp
index f6594ab14c7e5143434ac0823c862427c70f2c9d..ea503ed1f9d4414f28f200c89be286fdc49f6190 100644 (file)
@@ -1,6 +1,7 @@
 #include <msp/gl/extensions/arb_direct_state_access.h>
 #include <msp/gl/extensions/arb_texture_swizzle.h>
 #include <msp/gl/extensions/ext_framebuffer_object.h>
+#include <msp/gl/extensions/khr_debug.h>
 #include <msp/io/memory.h>
 #include "bindable.h"
 #include "error.h"
@@ -29,15 +30,12 @@ Texture::Texture(GLenum t, ResourceManager *m):
        storage_fmt(RGB8),
        swizzle(NO_SWIZZLE),
        use_srgb_format(false),
-       auto_gen_mipmap(false),
-       default_sampler(*this)
+       auto_gen_mipmap(false)
 {
        if(m)
                set_manager(m);
-       else if(ARB_direct_state_access)
-               glCreateTextures(target, 1, &id);
        else
-               glGenTextures(1, &id);
+               generate_id();
 }
 
 Texture::~Texture()
@@ -49,6 +47,21 @@ Texture::~Texture()
                glDeleteTextures(1, &id);
 }
 
+void Texture::generate_id()
+{
+       if(id)
+               throw invalid_operation("Texture::generate_id");
+       if(ARB_direct_state_access)
+               glCreateTextures(target, 1, &id);
+       else
+               glGenTextures(1, &id);
+
+#ifdef DEBUG
+       if(!debug_name.empty() && KHR_debug)
+               glObjectLabel(GL_TEXTURE, id, debug_name.size(), debug_name.c_str());
+#endif
+}
+
 void Texture::set_format(PixelFormat fmt)
 {
        PixelComponents comp = get_components(fmt);
@@ -75,7 +88,7 @@ void Texture::set_format(PixelFormat fmt)
        default:;
        }
 
-       PixelFormat st_fmt = make_pixelformat(st_comp, get_component_type(fmt));
+       PixelFormat st_fmt = make_pixelformat(st_comp, get_component_type(fmt), is_srgb(fmt));
        require_pixelformat(st_fmt);
        if(swiz!=NO_SWIZZLE)
                static Require _req(ARB_texture_swizzle);
@@ -114,46 +127,6 @@ void Texture::set_parameter_i(GLenum param, int value) const
                glTexParameteri(target, param, value);
 }
 
-void Texture::set_min_filter(TextureFilter f)
-{
-       default_sampler.set_min_filter(f);
-}
-
-void Texture::set_mag_filter(TextureFilter f)
-{
-       default_sampler.set_mag_filter(f);
-}
-
-void Texture::set_filter(TextureFilter f)
-{
-       default_sampler.set_filter(f);
-}
-
-void Texture::set_max_anisotropy(float a)
-{
-       default_sampler.set_max_anisotropy(a);
-}
-
-void Texture::set_wrap(TextureWrap w)
-{
-       default_sampler.set_wrap(w);
-}
-
-void Texture::set_wrap_s(TextureWrap w)
-{
-       default_sampler.set_wrap_s(w);
-}
-
-void Texture::set_wrap_t(TextureWrap w)
-{
-       default_sampler.set_wrap_t(w);
-}
-
-void Texture::set_wrap_r(TextureWrap w)
-{
-       default_sampler.set_wrap_r(w);
-}
-
 bool Texture::can_generate_mipmap()
 {
        return EXT_framebuffer_object;
@@ -181,19 +154,6 @@ void Texture::set_auto_generate_mipmap(bool gm)
        auto_gen_mipmap = gm;
 }
 
-void Texture::set_compare_enabled(bool c)
-{
-       if(c)
-               default_sampler.set_compare(default_sampler.get_compare_function());
-       else
-               default_sampler.disable_compare();
-}
-
-void Texture::set_compare_func(Predicate f)
-{
-       default_sampler.set_compare(f);
-}
-
 void Texture::load_image(const string &fn, bool)
 {
        load_image(fn, 0U);
@@ -226,7 +186,6 @@ void Texture::bind_to(unsigned i) const
        }
 
        TexUnit &unit = TexUnit::get_unit(i);
-       const Texture *cur = unit.get_texture();
        if(unit.set_texture(this))
        {
                if(manager)
@@ -239,9 +198,6 @@ void Texture::bind_to(unsigned i) const
                        unit.bind();
                        glBindTexture(target, id);
                }
-
-               if(!unit.get_sampler() || unit.get_sampler()==&cur->default_sampler)
-                       default_sampler.bind_to(i);
        }
 }
 
@@ -263,12 +219,20 @@ void Texture::unbind_from(unsigned i)
                        unit.bind();
                        glBindTexture(cur->target, 0);
                }
-
-               if(unit.get_sampler()==&cur->default_sampler)
-                       Sampler::unbind_from(i);
        }
 }
 
+void Texture::set_debug_name(const string &name)
+{
+#ifdef DEBUG
+       debug_name = name;
+       if(id && KHR_debug)
+               glObjectLabel(GL_TEXTURE, id, name.size(), name.c_str());
+#else
+       (void)name;
+#endif
+}
+
 
 Texture::Loader::Loader(Texture &t):
        DataFile::CollectionObjectLoader<Texture>(t, 0)
@@ -287,29 +251,13 @@ void Texture::Loader::init()
        levels = 0;
 
        add("external_image", &Loader::external_image);
-       add("external_image_srgb", &Loader::external_image);
-       add("filter", &Loader::filter);
+       add("external_image_srgb", &Loader::external_image_srgb);
        add("generate_mipmap", &Loader::generate_mipmap);
        add("image_data", &Loader::image_data);
-       add("mag_filter", &Loader::mag_filter);
-       add("max_anisotropy", &Loader::max_anisotropy);
-       add("min_filter", &Loader::min_filter);
        add("mipmap_levels", &Loader::mipmap_levels);
-       add("sampler",    &Loader::sampler);
-       add("wrap",       &Loader::wrap);
-       add("wrap_r",     &Loader::wrap_r);
-       add("wrap_s",     &Loader::wrap_s);
-       add("wrap_t",     &Loader::wrap_t);
 }
 
-unsigned Texture::Loader::get_levels() const
-{
-       return (is_mipmapped(obj.default_sampler.get_min_filter()) ? levels : 1);
-}
-
-#pragma GCC diagnostic push
-#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
-void Texture::Loader::load_external_image(Graphics::Image &img, const std::string &fn)
+void Texture::Loader::load_external_image(Graphics::Image &img, const string &fn)
 {
        RefPtr<IO::Seekable> io = get_collection().open_raw(fn);
        if(!io)
@@ -337,15 +285,10 @@ void Texture::Loader::external_image_common(const string &fn)
        {
                Graphics::Image img;
                load_external_image(img, fn);
-               obj.image(img, get_levels());
+               obj.image(img, levels);
        }
 }
 
-void Texture::Loader::filter(TextureFilter f)
-{
-       obj.set_filter(f);
-}
-
 void Texture::Loader::generate_mipmap(bool gm)
 {
        obj.set_auto_generate_mipmap(gm);
@@ -353,26 +296,18 @@ void Texture::Loader::generate_mipmap(bool gm)
 
 void Texture::Loader::image_data(const string &data)
 {
+       if(obj.manager)
+       {
+               obj.set_manager(0);
+               if(!obj.id)
+                       obj.generate_id();
+       }
+
        Graphics::Image img;
        IO::Memory mem(data.data(), data.size());
        img.load_io(mem);
 
-       obj.image(img, get_levels());
-}
-
-void Texture::Loader::mag_filter(TextureFilter f)
-{
-       obj.set_mag_filter(f);
-}
-
-void Texture::Loader::max_anisotropy(float a)
-{
-       obj.set_max_anisotropy(a);
-}
-
-void Texture::Loader::min_filter(TextureFilter f)
-{
-       obj.set_min_filter(f);
+       obj.image(img, levels);
 }
 
 void Texture::Loader::mipmap_levels(unsigned l)
@@ -380,31 +315,5 @@ void Texture::Loader::mipmap_levels(unsigned l)
        levels = l;
 }
 
-void Texture::Loader::sampler()
-{
-       load_sub(obj.default_sampler);
-}
-
-void Texture::Loader::wrap(TextureWrap w)
-{
-       obj.set_wrap(w);
-}
-
-void Texture::Loader::wrap_r(TextureWrap w)
-{
-       obj.set_wrap_r(w);
-}
-
-void Texture::Loader::wrap_s(TextureWrap w)
-{
-       obj.set_wrap_s(w);
-}
-
-void Texture::Loader::wrap_t(TextureWrap w)
-{
-       obj.set_wrap_t(w);
-}
-#pragma GCC diagnostic pop
-
 } // namespace GL
 } // namespace Msp