]> git.tdb.fi Git - libs/gl.git/blobdiff - source/core/texture.cpp
Rewrite state management
[libs/gl.git] / source / core / texture.cpp
index ea503ed1f9d4414f28f200c89be286fdc49f6190..5197b3da4bd7461564305e8d9f7ffa7e8312a794 100644 (file)
@@ -8,7 +8,6 @@
 #include "resourcemanager.h"
 #include "resources.h"
 #include "texture.h"
-#include "texunit.h"
 
 using namespace std;
 
@@ -40,9 +39,6 @@ Texture::Texture(GLenum t, ResourceManager *m):
 
 Texture::~Texture()
 {
-       while(TexUnit *unit = TexUnit::find_unit(this))
-               unbind_from(unit->get_index());
-
        if(id)
                glDeleteTextures(1, &id);
 }
@@ -137,13 +133,22 @@ void Texture::generate_mipmap()
        // glGenerateMipmap is defined here
        static Require _req(EXT_framebuffer_object);
 
+       if(!ARB_direct_state_access)
+       {
+               glActiveTexture(GL_TEXTURE0);
+               glBindTexture(target, id);
+       }
+       generate_mipmap_();
+       if(!ARB_direct_state_access)
+               glBindTexture(target, 0);
+}
+
+void Texture::generate_mipmap_()
+{
        if(ARB_direct_state_access)
                glGenerateTextureMipmap(id);
        else
-       {
-               BindRestore _bind(this);
                glGenerateMipmap(target);
-       }
 }
 
 void Texture::set_auto_generate_mipmap(bool gm)
@@ -172,56 +177,6 @@ void Texture::image(const Graphics::Image &img, bool)
        image(img, 0U);
 }
 
-void Texture::bind_to(unsigned i) const
-{
-       if(!id)
-       {
-               if(manager)
-                       manager->resource_used(*this);
-               if(!id)
-               {
-                       unbind_from(i);
-                       return;
-               }
-       }
-
-       TexUnit &unit = TexUnit::get_unit(i);
-       if(unit.set_texture(this))
-       {
-               if(manager)
-                       manager->resource_used(*this);
-
-               if(ARB_direct_state_access)
-                       glBindTextureUnit(i, id);
-               else
-               {
-                       unit.bind();
-                       glBindTexture(target, id);
-               }
-       }
-}
-
-const Texture *Texture::current(unsigned i)
-{
-       return TexUnit::get_unit(i).get_texture();
-}
-
-void Texture::unbind_from(unsigned i)
-{
-       TexUnit &unit = TexUnit::get_unit(i);
-       const Texture *cur = unit.get_texture();
-       if(unit.set_texture(0))
-       {
-               if(ARB_direct_state_access)
-                       glBindTextureUnit(i, 0);
-               else
-               {
-                       unit.bind();
-                       glBindTexture(cur->target, 0);
-               }
-       }
-}
-
 void Texture::set_debug_name(const string &name)
 {
 #ifdef DEBUG