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>
|
template <typename Pixel>
|
||||||
void load(util::array<Pixel, D> const & p);
|
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>
|
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);
|
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>
|
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();
|
bind();
|
||||||
gl::GetTexImage(Target, 0, format, type, data);
|
gl::GetTexImage(Target, layer, format, type, data);
|
||||||
}
|
}
|
||||||
|
|
||||||
template <std::size_t D, GLenum Target>
|
template <std::size_t D, GLenum Target>
|
||||||
template <typename Pixmap>
|
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>;
|
using traits = pixel_traits<typename Pixmap::value_type>;
|
||||||
|
|
||||||
std::array<std::size_t, D> size;
|
std::array<std::size_t, D> size;
|
||||||
for (std::size_t i = 0; i < D; ++i) size[i] = size_[i];
|
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);
|
template <std::size_t D, GLenum Target>
|
||||||
pixels(traits::format, traits::type, p.data());
|
template <typename Pixmap>
|
||||||
return p;
|
Pixmap basic_texture<D, Target>::pixels(int layer) const
|
||||||
|
{
|
||||||
|
Pixmap pixmap;
|
||||||
|
pixels(pixmap, layer);
|
||||||
|
return pixmap;
|
||||||
}
|
}
|
||||||
|
|
||||||
template <std::size_t D, GLenum Target>
|
template <std::size_t D, GLenum Target>
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue