123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151 |
- /* -*-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 <osgDB/Options>
- namespace osgDB {
- class OSGDB_EXPORT ImageOptions : public osgDB::Options
- {
- public:
- ImageOptions();
- ImageOptions(const std::string& str);
- ImageOptions(const ImageOptions& options,const osg::CopyOp& copyop=osg::CopyOp::SHALLOW_COPY):
- osgDB::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;
- protected:
- virtual ~TexCoordRange() {}
- };
- // source
- ImageSamplingMode _sourceImageSamplingMode;
- ImageWindowMode _sourceImageWindowMode;
- RatioWindow _sourceRatioWindow;
- PixelWindow _sourcePixelWindow;
- // destination
- osg::ref_ptr<osg::Image> _destinationImage;
- ImageWindowMode _destinationImageWindowMode;
- RatioWindow _destinationRatioWindow;
- PixelWindow _destinationPixelWindow;
- GLenum _destinationDataType;
- GLenum _destinationPixelFormat;
- void init();
- };
- }
- #endif // OSGDB_IMAGEOPTIONS
|