openscenegraph
Texture2D
Go to the documentation of this file.
1/* -*-c++-*- OpenSceneGraph - Copyright (C) 1998-2006 Robert Osfield
2 *
3 * This library is open source and may be redistributed and/or modified under
4 * the terms of the OpenSceneGraph Public License (OSGPL) version 0.0 or
5 * (at your option) any later version. The full license is in LICENSE file
6 * included with this distribution, and on the openscenegraph.org website.
7 *
8 * This library is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * OpenSceneGraph Public License for more details.
12*/
13
14#ifndef OSG_TEXTURE2D
15#define OSG_TEXTURE2D 1
16
17#include <osg/Texture>
18
19namespace osg {
20
25{
26
27 public :
28
30
32
33 template<class T> Texture2D(const osg::ref_ptr<T>& image):
34 _textureWidth(0),
35 _textureHeight(0),
36 _numMipmapLevels(0)
37 {
38 setUseHardwareMipMapGeneration(true);
39 setImage(image.get());
40 }
41
43 Texture2D(const Texture2D& text,const CopyOp& copyop=CopyOp::SHALLOW_COPY);
44
46
48 virtual int compare(const StateAttribute& rhs) const;
49
50 virtual GLenum getTextureTarget() const { return GL_TEXTURE_2D; }
51
53 void setImage(Image* image);
54
55 template<class T> void setImage(const ref_ptr<T>& image) { setImage(image.get()); }
56
58 Image* getImage() { return _image.get(); }
59
61 inline const Image* getImage() const { return _image.get(); }
62
64 virtual bool isDirty(unsigned int contextID) const { return (_image.valid() && _image->getModifiedCount()!=_modifiedCount[contextID]); }
65
66 inline unsigned int& getModifiedCount(unsigned int contextID) const
67 {
68 // get the modified count for the current contextID.
69 return _modifiedCount[contextID];
70 }
71
72
74 virtual void setImage(unsigned int, Image* image) { setImage(image); }
75
76 template<class T> void setImage(unsigned int, const ref_ptr<T>& image) { setImage(image.get()); }
77
79 virtual Image* getImage(unsigned int) { return _image.get(); }
80
82 virtual const Image* getImage(unsigned int) const { return _image.get(); }
83
85 virtual unsigned int getNumImages() const { return 1; }
86
87
90 inline void setTextureSize(int width, int height) const
91 {
92 _textureWidth = width;
93 _textureHeight = height;
94 }
95
96 void setTextureWidth(int width) { _textureWidth=width; }
97 void setTextureHeight(int height) { _textureHeight=height; }
98
99 virtual int getTextureWidth() const { return _textureWidth; }
100 virtual int getTextureHeight() const { return _textureHeight; }
101 virtual int getTextureDepth() const { return 1; }
102
104 {
105 public:
106
107 virtual bool textureObjectValid(const Texture2D& texture, State& state) const
108 {
109 return texture.textureObjectValid(state);
110 }
111
113 {
114 return osg::Texture::generateTextureObject(&texture, state.getContextID(), GL_TEXTURE_2D);
115 }
116
117 virtual void load(const Texture2D& texture,State& state) const = 0;
118 virtual void subload(const Texture2D& texture,State& state) const = 0;
119 };
120
121 void setSubloadCallback(SubloadCallback* cb) { _subloadCallback = cb;; }
122
123 SubloadCallback* getSubloadCallback() { return _subloadCallback.get(); }
124
125 const SubloadCallback* getSubloadCallback() const { return _subloadCallback.get(); }
126
127
131 void setNumMipmapLevels(unsigned int num) const { _numMipmapLevels=num; }
132
134 unsigned int getNumMipmapLevels() const { return _numMipmapLevels; }
135
136
141 void copyTexImage2D(State& state, int x, int y, int width, int height );
142
150 void copyTexSubImage2D(State& state, int xoffset, int yoffset, int x, int y, int width, int height );
151
152
155 virtual void apply(State& state) const;
156
157
158
159 protected :
160
161 virtual ~Texture2D();
162
163 virtual void computeInternalFormat() const;
164 void allocateMipmap(State& state) const;
165
167 bool textureObjectValid(State& state) const;
168
169 friend class SubloadCallback;
170
172
174 mutable GLsizei _textureWidth, _textureHeight;
175
177 mutable GLsizei _numMipmapLevels;
178
180
183
184};
185
186}
187
188#endif
Definition CopyOp:41
Definition Image:179
Definition Referenced:44
Definition StateAttribute:77
Definition State:80
unsigned int getContextID() const
Definition State:114
Definition Texture2D:104
virtual osg::ref_ptr< TextureObject > generateTextureObject(const Texture2D &texture, State &state) const
Definition Texture2D:112
virtual void load(const Texture2D &texture, State &state) const =0
virtual void subload(const Texture2D &texture, State &state) const =0
virtual bool textureObjectValid(const Texture2D &texture, State &state) const
Definition Texture2D:107
Definition Texture2D:25
virtual unsigned int getNumImages() const
Definition Texture2D:85
void setImage(unsigned int, const ref_ptr< T > &image)
Definition Texture2D:76
void setTextureSize(int width, int height) const
Definition Texture2D:90
virtual int getTextureWidth() const
Definition Texture2D:99
unsigned int getNumMipmapLevels() const
Definition Texture2D:134
virtual int getTextureDepth() const
Definition Texture2D:101
unsigned int & getModifiedCount(unsigned int contextID) const
Definition Texture2D:66
virtual const Image * getImage(unsigned int) const
Definition Texture2D:82
void setTextureHeight(int height)
Definition Texture2D:97
virtual void setImage(unsigned int, Image *image)
Definition Texture2D:74
ref_ptr< Image > _image
Definition Texture2D:171
Texture2D(const osg::ref_ptr< T > &image)
Definition Texture2D:33
void setTextureWidth(int width)
Definition Texture2D:96
virtual Image * getImage(unsigned int)
Definition Texture2D:79
void allocateMipmap(State &state) const
GLsizei _textureHeight
Definition Texture2D:174
buffered_value< unsigned int > ImageModifiedCount
Definition Texture2D:181
virtual int compare(const StateAttribute &rhs) const
virtual GLenum getTextureTarget() const
Definition Texture2D:50
void copyTexImage2D(State &state, int x, int y, int width, int height)
Texture2D(const Texture2D &text, const CopyOp &copyop=CopyOp::SHALLOW_COPY)
META_StateAttribute(osg, Texture2D, TEXTURE)
void setImage(Image *image)
ImageModifiedCount _modifiedCount
Definition Texture2D:182
void copyTexSubImage2D(State &state, int xoffset, int yoffset, int x, int y, int width, int height)
virtual int getTextureHeight() const
Definition Texture2D:100
Texture2D(Image *image)
void setImage(const ref_ptr< T > &image)
Definition Texture2D:55
virtual ~Texture2D()
Image * getImage()
Definition Texture2D:58
ref_ptr< SubloadCallback > _subloadCallback
Definition Texture2D:179
virtual bool isDirty(unsigned int contextID) const
Definition Texture2D:64
void setNumMipmapLevels(unsigned int num) const
Definition Texture2D:131
bool textureObjectValid(State &state) const
GLsizei _numMipmapLevels
Definition Texture2D:177
void setSubloadCallback(SubloadCallback *cb)
Definition Texture2D:121
const Image * getImage() const
Definition Texture2D:61
virtual void apply(State &state) const
virtual void computeInternalFormat() const
const SubloadCallback * getSubloadCallback() const
Definition Texture2D:125
SubloadCallback * getSubloadCallback()
Definition Texture2D:123
Definition Texture:422
static osg::ref_ptr< TextureObject > generateTextureObject(const Texture *texture, unsigned int contextID, GLenum target)
Definition buffered_value:27
Definition ref_ptr:32
T * get() const
Definition ref_ptr:117
author: Julien Valentin 2017 (mp3butcher@hotmail.com)
Definition AlphaFunc:19
#define OSG_EXPORT
Definition osg/Export:39