openscenegraph
Texture2DArray
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_TEXTURE2DARRAY
15#define OSG_TEXTURE2DARRAY 1
16
17#include <osg/Texture>
18#include <list>
19
20namespace osg {
21
29{
30
31 public :
32
34
36 Texture2DArray(const Texture2DArray& cm,const CopyOp& copyop=CopyOp::SHALLOW_COPY);
37
39
41 virtual int compare(const StateAttribute& rhs) const;
42
43 virtual GLenum getTextureTarget() const { return GL_TEXTURE_2D_ARRAY; }
44
46 virtual bool getModeUsage(StateAttribute::ModeUsage&) const { return false; }
47
49 virtual void setImage(unsigned int layer, Image* image);
50
51 template<class T> void setImage(unsigned int layer, const ref_ptr<T>& image) { setImage(layer, image.get()); }
52
54 virtual Image* getImage(unsigned int layer);
55
57 virtual const Image* getImage(unsigned int layer) const;
58
64 virtual unsigned int getNumImages() const { return _images.size(); }
65
67 virtual bool isDirty(unsigned int contextID) const
68 {
69 for(unsigned int i=0; i<_images.size(); ++i)
70 {
71 if (_images[i].valid() && _images[i]->getModifiedCount()!=_modifiedCount[i][contextID]) return true;
72 }
73 return false;
74 }
75
77 inline unsigned int& getModifiedCount(unsigned int layer, unsigned int contextID) const
78 {
79 // get the modified count for the current contextID.
80 return _modifiedCount[layer][contextID];
81 }
82
87 void setTextureSize(int width, int height, int depth);
88
89 void setTextureWidth(int width) { _textureWidth=width; }
90 void setTextureHeight(int height) { _textureHeight=height; }
91 void setTextureDepth(int depth);
92
93 virtual int getTextureWidth() const { return _textureWidth; }
94 virtual int getTextureHeight() const { return _textureHeight; }
95 virtual int getTextureDepth() const { return _textureDepth; }
96
98 {
99 public:
100 virtual void load(const Texture2DArray& texture,State& state) const = 0;
101 virtual void subload(const Texture2DArray& texture,State& state) const = 0;
102 };
103
104
105 void setSubloadCallback(SubloadCallback* cb) { _subloadCallback = cb;; }
106
107 SubloadCallback* getSubloadCallback() { return _subloadCallback.get(); }
108
109 const SubloadCallback* getSubloadCallback() const { return _subloadCallback.get(); }
110
111
112
116 void setNumMipmapLevels(unsigned int num) const { _numMipmapLevels=num; }
117
119 unsigned int getNumMipmapLevels() const { return _numMipmapLevels; }
120
129 void copyTexSubImage2DArray(State& state, int xoffset, int yoffset, int zoffset, int x, int y, int width, int height );
130
133 virtual void apply(State& state) const;
134
135 protected :
136
138
139 bool imagesValid() const;
140
141 virtual void computeInternalFormat() const;
142 GLsizei computeTextureDepth() const;
143 void allocateMipmap(State& state) const;
144
145 void applyTexImage2DArray_subload(State& state, Image* image, GLsizei layer, GLsizei inwidth, GLsizei inheight, GLsizei indepth, GLint inInternalFormat, GLsizei& numMipmapLevels) const;
146
147 typedef std::vector< ref_ptr<Image> > Images;
149
150 // subloaded images can have different texture and image sizes.
151 mutable GLsizei _textureWidth, _textureHeight, _textureDepth;
152
153 // number of mip map levels the texture has been created with,
154 mutable GLsizei _numMipmapLevels;
155
157
159 mutable std::vector<ImageModifiedCount> _modifiedCount;
160};
161
162}
163
164#endif
#define GL_TEXTURE_2D_ARRAY
Definition GLDefines:634
Definition CopyOp:41
Definition Image:179
Definition Referenced:44
Definition StateAttribute:77
Definition State:80
Definition Texture2DArray:98
virtual void load(const Texture2DArray &texture, State &state) const =0
virtual void subload(const Texture2DArray &texture, State &state) const =0
Definition Texture2DArray:29
const SubloadCallback * getSubloadCallback() const
Definition Texture2DArray:109
virtual bool getModeUsage(StateAttribute::ModeUsage &) const
Definition Texture2DArray:46
virtual int compare(const StateAttribute &rhs) const
void setTextureWidth(int width)
Definition Texture2DArray:89
virtual int getTextureDepth() const
Definition Texture2DArray:95
virtual bool isDirty(unsigned int contextID) const
Definition Texture2DArray:67
virtual ~Texture2DArray()
void setTextureSize(int width, int height, int depth)
void setImage(unsigned int layer, const ref_ptr< T > &image)
Definition Texture2DArray:51
virtual void apply(State &state) const
virtual void setImage(unsigned int layer, Image *image)
void setNumMipmapLevels(unsigned int num) const
Definition Texture2DArray:116
virtual Image * getImage(unsigned int layer)
bool imagesValid() const
Texture2DArray(const Texture2DArray &cm, const CopyOp &copyop=CopyOp::SHALLOW_COPY)
virtual void computeInternalFormat() const
std::vector< ImageModifiedCount > _modifiedCount
Definition Texture2DArray:159
void copyTexSubImage2DArray(State &state, int xoffset, int yoffset, int zoffset, int x, int y, int width, int height)
virtual unsigned int getNumImages() const
Definition Texture2DArray:64
virtual GLenum getTextureTarget() const
Definition Texture2DArray:43
void setSubloadCallback(SubloadCallback *cb)
Definition Texture2DArray:105
std::vector< ref_ptr< Image > > Images
Definition Texture2DArray:147
void applyTexImage2DArray_subload(State &state, Image *image, GLsizei layer, GLsizei inwidth, GLsizei inheight, GLsizei indepth, GLint inInternalFormat, GLsizei &numMipmapLevels) const
unsigned int & getModifiedCount(unsigned int layer, unsigned int contextID) const
Definition Texture2DArray:77
virtual const Image * getImage(unsigned int layer) const
void allocateMipmap(State &state) const
virtual int getTextureHeight() const
Definition Texture2DArray:94
ref_ptr< SubloadCallback > _subloadCallback
Definition Texture2DArray:156
Images _images
Definition Texture2DArray:148
GLsizei _textureDepth
Definition Texture2DArray:151
SubloadCallback * getSubloadCallback()
Definition Texture2DArray:107
virtual int getTextureWidth() const
Definition Texture2DArray:93
unsigned int getNumMipmapLevels() const
Definition Texture2DArray:119
META_StateAttribute(osg, Texture2DArray, TEXTURE)
void setTextureDepth(int depth)
GLsizei computeTextureDepth() const
GLsizei _numMipmapLevels
Definition Texture2DArray:154
void setTextureHeight(int height)
Definition Texture2DArray:90
buffered_value< unsigned int > ImageModifiedCount
Definition Texture2DArray:158
Definition Texture:422
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
Definition StateAttribute:308