X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;ds=sidebyside;f=source%2Fpixelstore.cpp;h=409f0f9a862e3582c975a486188452a60544dfb6;hb=bec07999d95b76f4b47cffcc564d0cd0afc0435e;hp=011866e3e72410a44031a0b154367c621bebb44f;hpb=126161d1d44ab9503bc747d24a07b7b9d15e527a;p=libs%2Fgl.git diff --git a/source/pixelstore.cpp b/source/pixelstore.cpp index 011866e3..409f0f9a 100644 --- a/source/pixelstore.cpp +++ b/source/pixelstore.cpp @@ -1,4 +1,6 @@ #include +#include +#include #include "gl.h" #include "pixelformat.h" #include "pixelstore.h" @@ -21,7 +23,7 @@ PixelStore PixelStore::from_image(const Graphics::Image &img) { PixelStore pstore; unsigned stride = img.get_stride(); - unsigned ncomp = get_component_count(pixelformat_from_graphics(img.get_format())); + unsigned ncomp = get_component_count(pixelformat_from_image(img)); pstore.set_canvas_size(img.get_stride()/ncomp, 0); pstore.set_alignment(min(stride&~(stride-1), 8U)); return pstore; @@ -35,13 +37,15 @@ void PixelStore::update_parameter(int mask) const if(mask&SIZE) { glPixelStorei(GL_UNPACK_ROW_LENGTH, row_length); - glPixelStorei(GL_UNPACK_IMAGE_HEIGHT, image_height); + if(EXT_texture3D) + glPixelStorei(GL_UNPACK_IMAGE_HEIGHT, image_height); } if(mask&ORIGIN) { glPixelStorei(GL_UNPACK_SKIP_PIXELS, skip_pixels); glPixelStorei(GL_UNPACK_SKIP_ROWS, skip_rows); - glPixelStorei(GL_UNPACK_SKIP_IMAGES, skip_images); + if(EXT_texture3D) + glPixelStorei(GL_UNPACK_SKIP_IMAGES, skip_images); } if(mask&ALIGNMENT) glPixelStorei(GL_UNPACK_ALIGNMENT, alignment); @@ -49,6 +53,7 @@ void PixelStore::update_parameter(int mask) const void PixelStore::set_canvas_size(unsigned w, unsigned h) { + static Require _req(EXT_unpack_subimage); row_length = w; image_height = h; update_parameter(SIZE); @@ -56,6 +61,9 @@ void PixelStore::set_canvas_size(unsigned w, unsigned h) void PixelStore::set_origin(unsigned x, unsigned y, unsigned z) { + static Require _req(EXT_unpack_subimage); + if(z>0) + static Require _req3d(EXT_texture3D); skip_pixels = x; skip_rows = y; skip_images = z;