From 91650cb4ac459da359b5caba52cd70e69dcac353 Mon Sep 17 00:00:00 2001 From: lisyarus Date: Thu, 10 Dec 2020 23:33:25 +0300 Subject: [PATCH] gfx::texture::pixels: support different lods & outputting to existing pixmap --- libs/gfx/include/psemek/gfx/texture.hpp | 26 +++++++++++++++++-------- 1 file changed, 18 insertions(+), 8 deletions(-) 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