/* -*-c++-*- OpenSceneGraph - Copyright (C) 1998-2006 Robert Osfield * * This library is open source and may be redistributed and/or modified under * the terms of the OpenSceneGraph Public License (OSGPL) version 0.0 or * (at your option) any later version. The full license is in LICENSE file * included with this distribution, and on the openscenegraph.org website. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * OpenSceneGraph Public License for more details. */ #ifndef OSGDB_IMAGEOPTIONS #define OSGDB_IMAGEOPTIONS 1 #include namespace osgDB { class OSGDB_EXPORT ImageOptions : public osgDB::ReaderWriter::Options { public: ImageOptions(); ImageOptions(const std::string& str); ImageOptions(const ImageOptions& options,const osg::CopyOp& copyop=osg::CopyOp::SHALLOW_COPY): osgDB::ReaderWriter::Options(options,copyop), _sourceImageSamplingMode(options._sourceImageSamplingMode), _sourceImageWindowMode(options._sourceImageWindowMode), _sourceRatioWindow(options._sourceRatioWindow), _sourcePixelWindow(options._sourcePixelWindow), _destinationImage(options._destinationImage), _destinationImageWindowMode(options._destinationImageWindowMode), _destinationRatioWindow(options._destinationRatioWindow), _destinationPixelWindow(options._destinationPixelWindow), _destinationDataType(options._destinationDataType), _destinationPixelFormat(options._destinationPixelFormat) {} META_Object(osgDB,ImageOptions); /** RatioWindow stores the window (as ratios of 0.0 to 1.0) from the overall imagery from which to extract the osg::Image*/ struct RatioWindow { RatioWindow(): windowX(0.0), windowY(0.0), windowWidth(1.0), windowHeight(1.0) {} void set(double x, double y, double w, double h) { windowX = x; windowY = y; windowWidth = w; windowHeight = h; } double windowX; double windowY; double windowWidth; double windowHeight; }; /** PixelWindow stores the window (in exact pixels) from the overall imagery from which to extract the osg::Image*/ struct PixelWindow { PixelWindow(): windowX(0), windowY(0), windowWidth(0), windowHeight(0) {} void set(unsigned int x, unsigned int y, unsigned int w, unsigned int h) { windowX = x; windowY = y; windowWidth = w; windowHeight = h; } unsigned int windowX; unsigned int windowY; unsigned int windowWidth; unsigned int windowHeight; }; enum ImageWindowMode { ALL_IMAGE, RATIO_WINDOW, PIXEL_WINDOW }; enum ImageSamplingMode { NEAREST, LINEAR, CUBIC }; /** Used as UserData attached to generated osg::Image's*/ struct TexCoordRange : public osg::Referenced { TexCoordRange(): _x(0.0), _y(0.0), _w(1.0), _h(1.0) {} void set(double x,double y, double w, double h) { _x = x; _y = y; _w = w; _h = h; } double _x,_y,_w,_h; }; // source ImageSamplingMode _sourceImageSamplingMode; ImageWindowMode _sourceImageWindowMode; RatioWindow _sourceRatioWindow; PixelWindow _sourcePixelWindow; // destination osg::ref_ptr _destinationImage; ImageWindowMode _destinationImageWindowMode; RatioWindow _destinationRatioWindow; PixelWindow _destinationPixelWindow; GLenum _destinationDataType; GLenum _destinationPixelFormat; void init(); }; } #endif // OSGDB_IMAGEOPTIONS