diff --git a/libs/gfx/include/psemek/gfx/texture.hpp b/libs/gfx/include/psemek/gfx/texture.hpp index 66db3828..b6ec4956 100644 --- a/libs/gfx/include/psemek/gfx/texture.hpp +++ b/libs/gfx/include/psemek/gfx/texture.hpp @@ -47,10 +47,13 @@ namespace psemek::gfx template void load(util::array const & p); - void pixels(GLenum format, GLenum type, void * data) const; + void pixels(GLenum format, GLenum type, void * data, int layer = 0) const; template - Pixmap pixels() const; + void pixels(Pixmap & pixmap, int layer = 0) const; + + template + Pixmap pixels(int layer = 0) const; static basic_texture from_data(GLint internal_format, geom::vector const & size, GLenum format, GLenum type, const void * data); @@ -268,24 +271,31 @@ namespace psemek::gfx } template - void basic_texture::pixels(GLenum format, GLenum type, void * data) const + void basic_texture::pixels(GLenum format, GLenum type, void * data, int layer) const { bind(); - gl::GetTexImage(Target, 0, format, type, data); + gl::GetTexImage(Target, layer, format, type, data); } template template - Pixmap basic_texture::pixels() const + void basic_texture::pixels(Pixmap & pixmap, int layer) const { using traits = pixel_traits; std::array size; for (std::size_t i = 0; i < D; ++i) size[i] = size_[i]; + pixmap.resize(size); + pixels(traits::format, traits::type, pixmap.data(), layer); + } - Pixmap p(size); - pixels(traits::format, traits::type, p.data()); - return p; + template + template + Pixmap basic_texture::pixels(int layer) const + { + Pixmap pixmap; + pixels(pixmap, layer); + return pixmap; } template