gfx::texture::pixels: support different lods & outputting to existing pixmap
This commit is contained in:
parent
f4c94e318f
commit
91650cb4ac
1 changed files with 18 additions and 8 deletions
|
|
@ -47,10 +47,13 @@ namespace psemek::gfx
|
|||
template <typename Pixel>
|
||||
void load(util::array<Pixel, D> const & p);
|
||||
|
||||
void pixels(GLenum format, GLenum type, void * data) const;
|
||||
void pixels(GLenum format, GLenum type, void * data, int layer = 0) const;
|
||||
|
||||
template <typename Pixmap>
|
||||
Pixmap pixels() const;
|
||||
void pixels(Pixmap & pixmap, int layer = 0) const;
|
||||
|
||||
template <typename Pixmap>
|
||||
Pixmap pixels(int layer = 0) const;
|
||||
|
||||
static basic_texture from_data(GLint internal_format, geom::vector<std::size_t, D> const & size, GLenum format, GLenum type, const void * data);
|
||||
|
||||
|
|
@ -268,24 +271,31 @@ namespace psemek::gfx
|
|||
}
|
||||
|
||||
template <std::size_t D, GLenum Target>
|
||||
void basic_texture<D, Target>::pixels(GLenum format, GLenum type, void * data) const
|
||||
void basic_texture<D, Target>::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 <std::size_t D, GLenum Target>
|
||||
template <typename Pixmap>
|
||||
Pixmap basic_texture<D, Target>::pixels() const
|
||||
void basic_texture<D, Target>::pixels(Pixmap & pixmap, int layer) const
|
||||
{
|
||||
using traits = pixel_traits<typename Pixmap::value_type>;
|
||||
|
||||
std::array<std::size_t, D> 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 <std::size_t D, GLenum Target>
|
||||
template <typename Pixmap>
|
||||
Pixmap basic_texture<D, Target>::pixels(int layer) const
|
||||
{
|
||||
Pixmap pixmap;
|
||||
pixels(pixmap, layer);
|
||||
return pixmap;
|
||||
}
|
||||
|
||||
template <std::size_t D, GLenum Target>
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue