X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fcore%2Ftexture.cpp;h=a65715e716a26c6fbc283655c37c0382fc795010;hb=3efe3bab1c8290bd49a957ebec0ad97e58a35fcf;hp=b8a2614a1da9b697410067a7daaad807476ace7c;hpb=8e58fc4da8443cb67fe4cd70d6f68de2be73011d;p=libs%2Fgl.git diff --git a/source/core/texture.cpp b/source/core/texture.cpp index b8a2614a..a65715e7 100644 --- a/source/core/texture.cpp +++ b/source/core/texture.cpp @@ -15,12 +15,7 @@ namespace Msp { namespace GL { Texture::Texture(unsigned t): - TextureBackend(t), - format(NO_PIXELFORMAT), - storage_fmt(format), - swizzle(NO_SWIZZLE), - use_srgb_format(false), - auto_gen_mipmap(false) + TextureBackend(t) { } void Texture::set_format(PixelFormat fmt) @@ -39,6 +34,48 @@ void Texture::set_format(PixelFormat fmt) swizzle = swiz; } +unsigned Texture::count_levels(unsigned size) +{ + unsigned n = 0; + for(; size; size>>=1, ++n) ; + return n; +} + +void Texture::stage_pixels(void *staging, const void *data, size_t count) +{ + if(swizzle==RGBA_TO_RGB) + { + const uint32_t *src = static_cast(data); + uint32_t *dst = static_cast(staging); + size_t i = 0; + for(; i+3>24)|(src[1]<<8)|0xFF000000; + dst[2] = (src[1]>>16)|(src[2]<<16)|0xFF000000; + dst[3] = (src[2]>>8)|0xFF000000; + src += 3; + dst += 4; + } + + if(i(src); + for(; i(data); + size_t data_size = count*get_pixel_size(storage_fmt); + copy(src, src+data_size, static_cast(staging)); + } +} + void Texture::load_image(const string &fn, unsigned lv) { Graphics::Image img;