OpenSceneGraph/include/osg/Texture1D
Robert Osfield 12226e4371 Converted the instances of const built in types being returned from methods
and passed as paramters into straight forward non const built in types,
i.e. const bool foogbar(const int) becomes bool foobar(int).
2002-09-02 12:31:35 +00:00

127 lines
4.4 KiB
C++

//C++ header - Open Scene Graph - Copyright (C) 1998-2002 Robert Osfield
//Distributed under the terms of the GNU Library General Public License (LGPL)
//as published by the Free Software Foundation.
// -*-c++-*-
#ifndef OSG_TEXTURE1D
#define OSG_TEXTURE1D 1
#include <osg/Texture>
namespace osg {
/** Texture state class which encapsulates OpenGl 1D texture functionality.*/
class SG_EXPORT Texture1D : public Texture
{
public :
Texture1D();
/** Copy constructor using CopyOp to manage deep vs shallow copy.*/
Texture1D(const Texture1D& text,const CopyOp& copyop=CopyOp::SHALLOW_COPY);
META_StateAttribute(osg, Texture1D,TEXTURE);
/** return -1 if *this < *rhs, 0 if *this==*rhs, 1 if *this>*rhs.*/
virtual int compare(const StateAttribute& rhs) const;
virtual void getAssociatedModes(std::vector<GLMode>& modes) const
{
modes.push_back(GL_TEXTURE_1D);
}
/** Set the texture image. */
void setImage(Image* image);
/** Get the texture image. */
Image* getImage() { return _image.get(); }
/** Get the const texture image. */
inline const Image* getImage() const { return _image.get(); }
/** Set the texture width and height. If width or height are zero then
* the repsective size value is calculated from the source image sizes. */
inline void setTextureSize(int width) const
{
_textureWidth = width;
}
/** Get the texture subload width. */
inline void getTextureSize(int& width) const
{
width = _textureWidth;
}
class SubloadCallback : public Referenced
{
public:
virtual void load(const Texture1D& texture,State& state) const = 0;
virtual void subload(const Texture1D& texture,State& state) const = 0;
};
void setSubloadCallback(SubloadCallback* cb) { _subloadCallback = cb;; }
SubloadCallback* getSubloadCallback() { return _subloadCallback.get(); }
const SubloadCallback* getSubloadCallback() const { return _subloadCallback.get(); }
/** Set the number of mip map levels the the texture has been created with,
should only be called within an osg::Texuture::apply() and custom OpenGL texture load.*/
void setNumMipmapLevels(unsigned int num) const { _numMimpmapLevels=num; }
/** Get the number of mip map levels the the texture has been created with.*/
unsigned int getNumMipmapLevels() const { return _numMimpmapLevels; }
/** Copy pixels into a 1D texture image.As per glCopyTexImage1D.
* Creates an OpenGL texture object from the current OpenGL background
* framebuffer contents at pos \a x, \a y with width \a width. \a width must be a power of two.
*/
void copyTexImage1D(State& state, int x, int y, int width);
/** Copy a one-dimensional texture subimage. As per glCopyTexSubImage1D.
* Updates portion of an existing OpenGL texture object from the current OpenGL background
* framebuffer contents at pos \a x, \a y with width \a width.
*/
void copyTexSubImage1D(State& state, int xoffset, int x, int y, int width);
/** On first apply (unless already compiled), create the minmapped
* texture and bind it, subsequent apply will simple bind to texture.*/
virtual void apply(State& state) const;
protected :
virtual ~Texture1D();
virtual void computeInternalFormat() const;
/** Helper method which does the creation of the texture itself, and
* does not set or use texture binding. */
void applyTexImage1D(GLenum target, Image* image, State& state, GLsizei& width, GLsizei& numMimpmapLevels) const;
// not ideal that _image is mutable, but its required since
// Image::ensureDimensionsArePowerOfTwo() can only be called
// in a valid OpenGL context, a therefore within an Texture::apply
// which is const...
mutable ref_ptr<Image> _image;
// subloaded images can have different texture and image sizes.
mutable GLsizei _textureWidth;
// number of mip map levels the the texture has been created with,
mutable GLsizei _numMimpmapLevels;
ref_ptr<SubloadCallback> _subloadCallback;
};
}
#endif