]> git.tdb.fi Git - libs/gl.git/commitdiff
Move the Resource function override of Texture classes into backend
authorMikko Rasa <tdb@tdb.fi>
Wed, 10 Nov 2021 18:08:34 +0000 (20:08 +0200)
committerMikko Rasa <tdb@tdb.fi>
Wed, 10 Nov 2021 18:08:34 +0000 (20:08 +0200)
There's enough differences between APIs that these can't be sensibly kept
in the common classes.

20 files changed:
source/backends/opengl/texture1d_backend.cpp
source/backends/opengl/texture1d_backend.h
source/backends/opengl/texture2d_backend.cpp
source/backends/opengl/texture2d_backend.h
source/backends/opengl/texture2dmultisample_backend.cpp
source/backends/opengl/texture2dmultisample_backend.h
source/backends/opengl/texture3d_backend.cpp
source/backends/opengl/texture3d_backend.h
source/backends/opengl/texturecube_backend.cpp
source/backends/opengl/texturecube_backend.h
source/core/texture1d.cpp
source/core/texture1d.h
source/core/texture2d.cpp
source/core/texture2d.h
source/core/texture2dmultisample.cpp
source/core/texture2dmultisample.h
source/core/texture3d.cpp
source/core/texture3d.h
source/core/texturecube.cpp
source/core/texturecube.h

index a94a5c44ac9d99610d38003b632b2a1d7dfe9dd1..a270468b141883437f46d51de02a54888f69ee6f 100644 (file)
@@ -62,5 +62,11 @@ void OpenGLTexture1D::sub_image(unsigned level, int x, unsigned wd, const void *
        }
 }
 
+size_t OpenGLTexture1D::get_data_size() const
+{
+       unsigned width = static_cast<const Texture1D *>(this)->width;
+       return id ? width*get_pixel_size(storage_fmt) : 0;
+}
+
 } // namespace GL
 } // namespace Msp
index 449118d97a87dc7c3684fb8fc1175f974f2699b4..8c0fa8c690e38b3445f32bf99e53a333a417c4d0 100644 (file)
@@ -13,6 +13,11 @@ protected:
 
        void allocate();
        void sub_image(unsigned, int, unsigned, const void *);
+
+public:
+       virtual AsyncLoader *load(IO::Seekable &, const Resources * = 0) { return 0; }
+       virtual std::size_t get_data_size() const;
+       virtual void unload() { }
 };
 
 using Texture1DBackend = OpenGLTexture1D;
index 578cefe390f0a2ec2bfa4bdb15e73426fef43822..72962117bc9967d98228735063b5189e10368dfd 100644 (file)
@@ -95,11 +95,18 @@ void OpenGLTexture2D::sub_image(unsigned level, int x, int y, unsigned wd, unsig
        glBindBuffer(GL_PIXEL_UNPACK_BUFFER, 0);
 }
 
-Resource::AsyncLoader *OpenGLTexture2D::create_async_loader(IO::Seekable &io)
+Resource::AsyncLoader *OpenGLTexture2D::load(IO::Seekable &io, const Resources *)
 {
        return new AsyncLoader(static_cast<Texture2D &>(*this), io);
 }
 
+uint64_t OpenGLTexture2D::get_data_size() const
+{
+       unsigned width = static_cast<const Texture2D *>(this)->width;
+       unsigned height = static_cast<const Texture2D *>(this)->height;
+       return id ? width*height*get_pixel_size(format) : 0;
+}
+
 void OpenGLTexture2D::unload()
 {
        glDeleteTextures(1, &id);
index 595c51f51ea38e76233f1617f37ea4398095a190..af9f482cbf039c47e6bb17190bfdf7966701032a 100644 (file)
@@ -19,8 +19,10 @@ protected:
        void sub_image(unsigned, int, int, unsigned, unsigned, const void *);
        void sub_image(unsigned, int, int, unsigned, unsigned, const Buffer &, unsigned);
 
-       Resource::AsyncLoader *create_async_loader(IO::Seekable &);
-       void unload();
+public:
+       virtual Resource::AsyncLoader *load(IO::Seekable &, const Resources * = 0);
+       virtual std::size_t get_data_size() const;
+       virtual void unload();
 };
 
 using Texture2DBackend = OpenGLTexture2D;
index c9faa85e99a6dfbee471356db3aa8e941cd40068..e6ee7614b028b88c1c56ea1e11a78e3ead733598 100644 (file)
@@ -41,5 +41,13 @@ void OpenGLTexture2DMultisample::allocate()
        apply_swizzle();
 }
 
+size_t OpenGLTexture2DMultisample::get_data_size() const
+{
+       unsigned width = static_cast<const Texture2DMultisample *>(this)->width;
+       unsigned height = static_cast<const Texture2DMultisample *>(this)->height;
+       unsigned samples = static_cast<const Texture2DMultisample *>(this)->samples;
+       return width*height*get_pixel_size(format)*samples;
+}
+
 } // namespace GL
 } // namespace Msp
index e8a37e4c1151f2011681eb0e4f1b76cddd3a8044..7adb0bf028fe550e8de40f52f443c4ca1b1eec31 100644 (file)
@@ -12,6 +12,11 @@ protected:
        OpenGLTexture2DMultisample();
 
        void allocate();
+
+public:
+       virtual AsyncLoader *load(IO::Seekable &, const Resources * = 0) { return 0; }
+       virtual std::size_t get_data_size() const;
+       virtual void unload() { }
 };
 
 using Texture2DMultisampleBackend = OpenGLTexture2DMultisample;
index d2c1088e293964b10deb45874f083063146aea88..0796472a041de543d67239591928d393fbc97678 100644 (file)
@@ -74,5 +74,13 @@ bool OpenGLTexture3D::is_array() const
        return target==GL_TEXTURE_2D_ARRAY;
 }
 
+size_t OpenGLTexture3D::get_data_size() const
+{
+       unsigned width = static_cast<const Texture3D *>(this)->width;
+       unsigned height = static_cast<const Texture3D *>(this)->height;
+       unsigned depth = static_cast<const Texture3D *>(this)->depth;
+       return id ? width*height*depth*get_pixel_size(storage_fmt) : 0;
+}
+
 } // namespace GL
 } // namespace Msp
index 33dcee08257d0737bd9e8dc8d04aadbed5a873a0..9e79f2496617b3c62f4193a10431e1572996228e 100644 (file)
@@ -16,6 +16,11 @@ protected:
        void sub_image(unsigned, int, int, int, unsigned, unsigned, unsigned, const void *);
 
        bool is_array() const;
+
+public:
+       virtual AsyncLoader *load(IO::Seekable &, const Resources * = 0) { return 0; }
+       virtual std::size_t get_data_size() const;
+       virtual void unload() { }
 };
 
 using Texture3DBackend = OpenGLTexture3D;
index 39169612a450b46b1216cdea9f22c1450475e42e..2b9e09a9c90ecb9a0f27ce48b37e1b9ae747de97 100644 (file)
@@ -75,6 +75,13 @@ void OpenGLTextureCube::sub_image(unsigned face, unsigned level, int x, int y, u
        }
 }
 
+size_t OpenGLTextureCube::get_data_size() const
+{
+       unsigned size = static_cast<const TextureCube *>(this)->size;
+       return id ? size*size*6*get_pixel_size(storage_fmt) : 0;
+}
+
+
 unsigned get_gl_cube_face(unsigned face)
 {
        switch(static_cast<TextureCubeFace>(face))
index 2b789d2f90ed0b423c0a796831f1ce5a8b4ed486..ed5f29cba9136c8fba21ed02393f9b70d2c47df9 100644 (file)
@@ -13,6 +13,11 @@ protected:
 
        void allocate();
        void sub_image(unsigned, unsigned, int, int, unsigned, unsigned, const void *);
+
+public:
+       virtual AsyncLoader *load(IO::Seekable &, const Resources * = 0) { return 0; }
+       virtual std::size_t get_data_size() const;
+       virtual void unload() { }
 };
 
 using TextureCubeBackend = OpenGLTextureCube;
index 7d357ff29c3efaa05806886d5f3da4b053fa5075..d6aa1a347c7e974b43397ab595d8de7b0edd3ef8 100644 (file)
@@ -62,11 +62,6 @@ unsigned Texture1D::get_level_size(unsigned level) const
        return width>>level;
 }
 
-uint64_t Texture1D::get_data_size() const
-{
-       return id ? width*get_pixel_size(storage_fmt) : 0;
-}
-
 
 Texture1D::Loader::Loader(Texture1D &t):
        DataFile::DerivedObjectLoader<Texture1D, Texture::Loader>(t)
index efd0517d628dc168c45f1b506a2133c673dcbcec..16c88a1830a969b9f7625d97b6690e4d99267d82 100644 (file)
@@ -51,11 +51,6 @@ public:
 private:
        unsigned get_n_levels() const;
        unsigned get_level_size(unsigned) const;
-
-public:
-       virtual AsyncLoader *load(IO::Seekable &, const Resources * = 0) { return 0; }
-       virtual std::size_t get_data_size() const;
-       virtual void unload() { }
 };
 
 } // namespace GL
index 9b1c16ea120dbe6fe7d88c96f57dcfbfd386e79e..c9aab79a9cf16c5a2488af530f9d081a3e148547 100644 (file)
@@ -74,16 +74,6 @@ LinAl::Vector<unsigned, 2> Texture2D::get_level_size(unsigned level) const
        return LinAl::Vector<unsigned, 2>(w, h);
 }
 
-Resource::AsyncLoader *Texture2D::load(IO::Seekable &io, const Resources *)
-{
-       return create_async_loader(io);
-}
-
-uint64_t Texture2D::get_data_size() const
-{
-       return id ? width*height*get_pixel_size(format) : 0;
-}
-
 
 Texture2D::Loader::Loader(Texture2D &t):
        DataFile::DerivedObjectLoader<Texture2D, Texture::Loader>(t)
index 61a3f29f035c99b31dc5fc48cceff853ec3fbab8..3a9edae11721c6b626927fed4c5a62e0ab4a72cc 100644 (file)
@@ -56,11 +56,6 @@ public:
 private:
        unsigned get_n_levels() const;
        LinAl::Vector<unsigned, 2> get_level_size(unsigned) const;
-
-public:
-       virtual Resource::AsyncLoader *load(IO::Seekable &, const Resources * = 0);
-       virtual std::size_t get_data_size() const;
-       using Texture2DBackend::unload;
 };
 
 } // namespace GL
index 8ba52522fde8df1a8f5fd6b14560d571c58f960f..72c5f129782c7a98dabbfbc7ae1e01706f0730a3 100644 (file)
@@ -38,10 +38,5 @@ void Texture2DMultisample::image(const Graphics::Image &, unsigned)
        throw invalid_operation("Texture2DMultisample::image");
 }
 
-uint64_t Texture2DMultisample::get_data_size() const
-{
-       return id ? width*height*get_pixel_size(format)*samples : 0;
-}
-
 } // namespace GL
 } // namespace Msp
index 20c0f864b531311563353afc8fa2e9417f022c97..8e234835e182fee9f6845b3ed4783a5ec7f00cde 100644 (file)
@@ -35,10 +35,6 @@ public:
        unsigned get_width() const { return width; }
        unsigned get_height() const { return height; }
        unsigned get_samples() const { return samples; }
-
-       virtual AsyncLoader *load(IO::Seekable &, const Resources * = 0) { return 0; }
-       virtual std::size_t get_data_size() const;
-       virtual void unload() { }
 };
 
 } // namespace GL
index c901556aa52f7aa2b84357f3ce784bf3d440279c..496b5f1fbe80370fefda9e169ad428d98464d274 100644 (file)
@@ -91,11 +91,6 @@ LinAl::Vector<unsigned, 3> Texture3D::get_level_size(unsigned level) const
        return LinAl::Vector<unsigned, 3>(w, h, d);
 }
 
-uint64_t Texture3D::get_data_size() const
-{
-       return id ? width*height*depth*get_pixel_size(storage_fmt) : 0;
-}
-
 
 Texture3D::Loader::Loader(Texture3D &t):
        DataFile::DerivedObjectLoader<Texture3D, Texture::Loader>(t)
index c1bf8ed88bda2201b7ed3805435817227ac097b1..3009e1487a6d57b48ecfb03dd47665db532287e1 100644 (file)
@@ -65,11 +65,6 @@ public:
 protected:
        unsigned get_n_levels() const;
        LinAl::Vector<unsigned, 3> get_level_size(unsigned) const;
-
-public:
-       virtual AsyncLoader *load(IO::Seekable &, const Resources * = 0) { return 0; }
-       virtual std::size_t get_data_size() const;
-       virtual void unload() { }
 };
 
 } // namespace GL
index 0e0a1fc9178dca4ebd8b4cfc55bd52185b5e5b51..2f36f33624cee007b2667daeb993caaf212e9a04 100644 (file)
@@ -138,11 +138,6 @@ Vector3 TextureCube::get_texel_direction(TextureCubeFace face, unsigned u, unsig
        return fv+s*sv+t*tv;
 }
 
-uint64_t TextureCube::get_data_size() const
-{
-       return id ? size*size*6*get_pixel_size(storage_fmt) : 0;
-}
-
 
 TextureCube::Loader::Loader(TextureCube &t):
        DataFile::DerivedObjectLoader<TextureCube, Texture::Loader>(t)
index eef377e34105742236e18e484d68f829825f27b6..d444fee5dfefc8bb084956281a1957efbf9c0447 100644 (file)
@@ -97,10 +97,6 @@ public:
 
        /** Returns a vector pointing to the center of a texel. */
        Vector3 get_texel_direction(TextureCubeFace, unsigned, unsigned);
-
-       virtual AsyncLoader *load(IO::Seekable &, const Resources * = 0) { return 0; }
-       virtual std::size_t get_data_size() const;
-       virtual void unload() { }
 };
 
 void operator>>(const LexicalConverter &, TextureCubeFace &);