Hi Robert,

Sounds good, thank you.

Regards,
Per

Robert Osfield wrote:
Hi Per,

The variable names are description of their role so removing them
completely is inappropriate.  What I have done is put /* */ around the
variables to prevent the warning, but to keep the names.  Once I have
a clean build I'll check this in.

Robert.

On Thu, Dec 18, 2008 at 7:12 AM, Per Fahlberg <[email protected]> wrote:
Hi,

When compiling with gcc and the -Wall flag a lot of warnings are generated
because of unused variables in the Image header file, I've removed the
variables in the attached Image file.

Regards,
Per

/* -*-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 OSG_IMAGE
#define OSG_IMAGE 1

#include <osg/BufferObject>
#include <osg/Vec2>
#include <osg/Vec3>
#include <osg/Vec4>
#include <osg/FrameStamp>

#include <string>
#include <vector>

#ifndef GL_VERSION_1_2
   // 1.2 definitions...
   #define GL_BGR                          0x80E0
   #define GL_BGRA                         0x80E1
   #define GL_UNSIGNED_BYTE_3_3_2          0x8032
   #define GL_UNSIGNED_BYTE_2_3_3_REV      0x8362
   #define GL_UNSIGNED_SHORT_5_6_5         0x8363
   #define GL_UNSIGNED_SHORT_5_6_5_REV     0x8364
   #define GL_UNSIGNED_SHORT_4_4_4_4       0x8033
   #define GL_UNSIGNED_SHORT_4_4_4_4_REV   0x8365
   #define GL_UNSIGNED_SHORT_5_5_5_1       0x8034
   #define GL_UNSIGNED_SHORT_1_5_5_5_REV   0x8366
   #define GL_UNSIGNED_INT_8_8_8_8         0x8035
   #define GL_UNSIGNED_INT_8_8_8_8_REV     0x8367
   #define GL_UNSIGNED_INT_10_10_10_2      0x8036
   #define GL_UNSIGNED_INT_2_10_10_10_REV  0x8368
#endif

#ifndef GL_COMPRESSED_ALPHA
   #define GL_COMPRESSED_ALPHA             0x84E9
   #define GL_COMPRESSED_LUMINANCE         0x84EA
   #define GL_COMPRESSED_LUMINANCE_ALPHA   0x84EB
   #define GL_COMPRESSED_INTENSITY         0x84EC
   #define GL_COMPRESSED_RGB               0x84ED
   #define GL_COMPRESSED_RGBA              0x84EE
#endif


#ifndef GL_ABGR_EXT
#define GL_ABGR_EXT                         0x8000
#endif

namespace osg {

// forward declare
class NodeVisitor;

/** Image class for encapsulating the storage texture image data. */
class OSG_EXPORT Image : public Object
{

   public :

       Image();

       /** Copy constructor using CopyOp to manage deep vs shallow copy. */
       Image(const Image& image,const CopyOp& copyop=CopyOp::SHALLOW_COPY);

       virtual Object* cloneType() const { return new Image(); }
       virtual Object* clone(const CopyOp& copyop) const { return new
Image(*this,copyop); }
       virtual bool isSameKindAs(const Object* obj) const { return
dynamic_cast<const Image*>(obj)!=0; }
       virtual const char* libraryName() const { return "osg"; }
       virtual const char* className() const { return "Image"; }

       /** Return -1 if *this < *rhs, 0 if *this==*rhs, 1 if *this>*rhs. */
       virtual int compare(const Image& rhs) const;

       void setFileName(const std::string& fileName);
       inline const std::string& getFileName() const { return _fileName; }

       enum WriteHint {
           NO_PREFERENCE,
           STORE_INLINE,
           EXTERNAL_FILE
       };

       void setWriteHint(WriteHint writeHint) { _writeHint = writeHint; }
       WriteHint getWriteHint() const { return _writeHint; }

       enum AllocationMode {
           NO_DELETE,
           USE_NEW_DELETE,
           USE_MALLOC_FREE
       };

       /** Set the method used for deleting data once it goes out of scope.
*/
       void setAllocationMode(AllocationMode mode) { _allocationMode = mode;
}

       /** Get the method used for deleting data once it goes out of scope.
*/
       AllocationMode getAllocationMode() const { return _allocationMode; }


       /** Allocate a pixel block of specified size and type. */
       void allocateImage(int s,int t,int r,
                          GLenum pixelFormat,GLenum type,
                          int packing=1);


       /** Set the image dimensions, format and data. */
       void setImage(int s,int t,int r,
                     GLint internalTextureformat,
                     GLenum pixelFormat,GLenum type,
                     unsigned char* data,
                     AllocationMode mode,
                     int packing=1);

       /** Read pixels from current frame buffer at specified position and
size, using glReadPixels.
         * Create memory for storage if required, reuse existing pixel
coords if possible.
       */
       void readPixels(int x,int y,int width,int height,
                       GLenum pixelFormat,GLenum type);


       /** Read the contents of the current bound texture, handling
compressed pixelFormats if present.
         * Create memory for storage if required, reuse existing pixel
coords if possible.
       */
       void readImageFromCurrentTexture(unsigned int contextID, bool
copyMipMapsIfAvailable, GLenum type = GL_UNSIGNED_BYTE);


       /** Scale image to specified size. */
       void scaleImage(int s,int t,int r) { scaleImage(s,t,r,
getDataType()); }

       /** Scale image to specified size and with specified data type. */
       void scaleImage(int s,int t,int r, GLenum newDataType);

       /** Copy a source Image into a subpart of this Image at specified
position.
         * Typically used to copy to an already allocated image, such as
creating
         * a 3D image from a stack 2D images.
         * If this Image is empty then image data is created to
         * accomodate the source image in its offset position.
         * If source is NULL then no operation happens, this Image is left
unchanged.
       */
       void copySubImage(int s_offset,int t_offset,int r_offset,osg::Image*
source);


       enum Origin
       {
           BOTTOM_LEFT,
           TOP_LEFT
       };

       /** Set the origin of the image.
         * The default value is BOTTOM_LEFT and is consistent with OpenGL.
         * TOP_LEFT is used for imagery that follows standard Imagery
convention, such as movies,
         * and hasn't been flipped yet.  For such images one much flip the t
axis of the tex coords.
         * to handle this origin position. */
       void setOrigin(Origin origin) { _origin = origin; }

       /** Get the origin of the image.*/
       Origin getOrigin() const { return _origin; }


       /** Width of image. */
       inline int s() const { return _s; }

       /** Height of image. */
       inline int t() const { return _t; }

       /** Depth of image. */
       inline int r() const { return _r; }

       void setInternalTextureFormat(GLint internalFormat);
       inline GLint getInternalTextureFormat() const { return
_internalTextureFormat; }

       void setPixelFormat(GLenum pixelFormat);
       inline GLenum getPixelFormat() const { return _pixelFormat; }

       void setDataType(GLenum dataType);
       inline GLenum getDataType() const { return _dataType; }

       void setPacking(unsigned int packing) { _packing = packing; }
       inline unsigned int getPacking() const { return _packing; }

       /** Return the number of bits required for each pixel. */
       inline unsigned int getPixelSizeInBits() const { return
computePixelSizeInBits(_pixelFormat,_dataType); }

       /** Return the number of bytes each row of pixels occupies once it
has been packed. */
       inline unsigned int getRowSizeInBytes() const { return
computeRowWidthInBytes(_s,_pixelFormat,_dataType,_packing); }

       /** Return the number of bytes each image (_s*_t) of pixels occupies.
*/
       inline unsigned int getImageSizeInBytes() const { return
getRowSizeInBytes()*_t; }

       /** Return the number of bytes the whole row/image/volume of pixels
occupies. */
       inline unsigned int getTotalSizeInBytes() const { return
getImageSizeInBytes()*_r; }

       /** Return the number of bytes the whole row/image/volume of pixels
occupies, including all mip maps if included. */
       unsigned int getTotalSizeInBytesIncludingMipmaps() const;

       /** Return true if the Image represent a valid and usable imagery.*/
       bool valid() const { return _s!=0 && _t!=0 && _r!=0 && _data!=0 &&
_dataType!=0; }

       /** Raw image data. */
       inline unsigned char* data() { return _data; }

       /** Raw const image data. */
       inline const unsigned char* data() const { return _data; }


       inline unsigned char* data(int column, int row=0,int image=0)
       {
           if (!_data) return NULL;
           return
_data+(column*getPixelSizeInBits())/8+row*getRowSizeInBytes()+image*getImageSizeInBytes();
       }

       inline const unsigned char* data(int column, int row=0,int image=0)
const
       {
           if (!_data) return NULL;
           return
_data+(column*getPixelSizeInBits())/8+row*getRowSizeInBytes()+image*getImageSizeInBytes();
       }

       /** Get the color value for specified texcoord.*/
       Vec4 getColor(unsigned int s,unsigned t=0,unsigned r=0) const;

       /** Get the color value for specified texcoord.*/
       Vec4 getColor(const Vec2& texcoord) const { return
getColor(Vec3(texcoord.x(),texcoord.y(),0.0f)); }

       /** Get the color value for specified texcoord.*/
       Vec4 getColor(const Vec3& texcoord) const;


       /** Flip the image horizontally. */
       void flipHorizontal();

       /** Flip the image vertically. */
       void flipVertical();


       /** Ensure image dimensions are a power of two.
         * Mipmapped textures require the image dimensions to be
         * power of two and are within the maxiumum texture size for
         * the host machine.
       */
       void ensureValidSizeForTexturing(GLint maxTextureSize);

       /** Dirty the image, which increments the modified count, to force
osg::Texture to reload the image. */
       inline void dirty() { ++_modifiedCount; if (_bufferObject.valid())
_bufferObject->dirty(); }

       /** Set the modified count value. Used by osg::Texture when using
texture subloading. */
       inline void setModifiedCount(unsigned int value) {
_modifiedCount=value; }

       /** Get modified count value. Used by osg::Texture when using texture
subloading. */
       inline unsigned int getModifiedCount() const { return _modifiedCount;
}


       static bool isPackedType(GLenum type);
       static GLenum computePixelFormat(GLenum pixelFormat);
       static GLenum computeFormatDataType(GLenum pixelFormat);
       static unsigned int computeNumComponents(GLenum pixelFormat);
       static unsigned int computePixelSizeInBits(GLenum pixelFormat,GLenum
type);
       static unsigned int computeRowWidthInBytes(int width,GLenum
pixelFormat,GLenum type,int packing);
       static int computeNearestPowerOfTwo(int s,float bias=0.5f);
       static int computeNumberOfMipmapLevels(int s,int t = 1, int r = 1);

       /** Precomputed mipmaps stuff. */
       typedef std::vector< unsigned int > MipmapDataType;

       inline bool isMipmap() const {return !_mipmapData.empty();};

       unsigned int getNumMipmapLevels() const
       {
           return _mipmapData.size()+1;
       };

       /** Send offsets into data. It is assumed that first mipmap offset
(index 0) is 0.*/
       inline void setMipmapLevels(const MipmapDataType& mipmapDataVector) {
_mipmapData = mipmapDataVector; }

       inline const MipmapDataType& getMipmapLevels() const { return
_mipmapData; }

       inline unsigned int getMipmapOffset(unsigned int mipmapLevel) const
       {
           if(mipmapLevel == 0)
               return 0;
           else if (mipmapLevel < getNumMipmapLevels())
              return _mipmapData[mipmapLevel-1];
           return 0;
       };

       inline unsigned char* getMipmapData(unsigned int mipmapLevel)
       {
          return _data+getMipmapOffset(mipmapLevel);
       }

       inline const unsigned char* getMipmapData(unsigned int mipmapLevel)
const
       {
          return _data+getMipmapOffset(mipmapLevel);
       }

       /*inline const unsigned char* getMipmapData(unsigned int row,
unsigned int column, unsigned int mipmapLevel) const
       {
          if (!_data) return NULL;
          return getMipmapData(mipmapLevel) +
(column*getPixelSizeInBits())/8+row*getRowSizeInBytes();
       }*/

       /** Return true if this image is translucent - i.e. it has alpha
values that are less 1.0 (when normalized). */
       bool isImageTranslucent() const;

       /** Set the optional PixelBufferObject used to map the image memory
efficiently to graphics memory. */
       void setPixelBufferObject(PixelBufferObject* buffer) { _bufferObject
= buffer; if (_bufferObject.valid()) _bufferObject->setImage(this); }

       /** Get the PixelBufferObject.*/
       PixelBufferObject* getPixelBufferObject() { return
_bufferObject.get(); }

       /** Get the const PixelBufferObject.*/
       const PixelBufferObject* getPixelBufferObject() const { return
_bufferObject.get(); }

       virtual void update(NodeVisitor*) {}


       /** method for sending pointer events to images that are acting as
front ends to interactive surfaces such as a vnc or browser window.  Return
true if handled. */
       virtual bool sendPointerEvent(int, int, int) { return false; }

       /** method for sending key events to images that are acting as front
ends to interactive surfaces such as a vnc or browser window.  Return true
if handled.*/
       virtual bool sendKeyEvent(int, bool) { return false; }

       /** method for passing frame information to the custom Image classes,
to be called only when objects associated with imagery are not culled.*/
       virtual void setFrameLastRendered(const osg::FrameStamp*) {}

   protected :

       virtual ~Image();

       Image& operator = (const Image&) { return *this; }

       std::string _fileName;
       WriteHint   _writeHint;


       Origin _origin;

       int _s, _t, _r;
       GLint _internalTextureFormat;
       GLenum _pixelFormat;
       GLenum _dataType;
       unsigned int _packing;

       AllocationMode _allocationMode;
       unsigned char* _data;

       void deallocateData();

       void setData(unsigned char* data,AllocationMode allocationMode);

       unsigned int _modifiedCount;

       MipmapDataType _mipmapData;

       ref_ptr<PixelBufferObject> _bufferObject;
};

class Geode;

/** Convenience function to be used by image loaders to generate a valid
geode
 * to return for readNode().
 * Use the image's s and t values to scale the dimensions of the image.
*/
extern OSG_EXPORT Geode* createGeodeForImage(Image* image);
/** Convenience function to be used by image loaders to generate a valid
geode
 * to return for readNode().
 * Use the specified s and t values to scale the dimensions of the image.
*/
extern OSG_EXPORT Geode* createGeodeForImage(Image* image,float s,float t);

}

#endif                                            // __SG_IMAGE_H

_______________________________________________
osg-submissions mailing list
[email protected]
http://lists.openscenegraph.org/listinfo.cgi/osg-submissions-openscenegraph.org


_______________________________________________
osg-submissions mailing list
[email protected]
http://lists.openscenegraph.org/listinfo.cgi/osg-submissions-openscenegraph.org


_______________________________________________
osg-submissions mailing list
[email protected]
http://lists.openscenegraph.org/listinfo.cgi/osg-submissions-openscenegraph.org

Reply via email to