Added virtual bool Texture::isDirty(contextID) method to help determine whether a GL texture object is likely to be out of date and needs updating
This commit is contained in:
parent
22d6ce826f
commit
b8e5f22cb7
@ -654,6 +654,11 @@ class OSG_EXPORT Texture : public osg::StateAttribute
|
||||
|
||||
class TextureObject;
|
||||
|
||||
|
||||
/** return true if the texture image data has been modified and the associated GL texture object needs to be updated.*/
|
||||
virtual bool isDirty(unsigned int /*contextID*/) const { return false; }
|
||||
|
||||
|
||||
/** Returns a pointer to the TextureObject for the current context. */
|
||||
inline TextureObject* getTextureObject(unsigned int contextID) const
|
||||
{
|
||||
|
@ -64,6 +64,11 @@ class OSG_EXPORT Texture1D : public Texture
|
||||
/** Gets the const texture image. */
|
||||
inline const Image* getImage() const { return _image.get(); }
|
||||
|
||||
|
||||
/** return true if the texture image data has been modified and the associated GL texture object needs to be updated.*/
|
||||
virtual bool isDirty(unsigned int contextID) const { return (_image.valid() && _image->getModifiedCount()!=_modifiedCount[contextID]); }
|
||||
|
||||
|
||||
inline unsigned int& getModifiedCount(unsigned int contextID) const
|
||||
{
|
||||
// get the modified count for the current contextID.
|
||||
|
@ -60,6 +60,9 @@ class OSG_EXPORT Texture2D : public Texture
|
||||
/** Gets the const texture image. */
|
||||
inline const Image* getImage() const { return _image.get(); }
|
||||
|
||||
/** return true if the texture image data has been modified and the associated GL texture object needs to be updated.*/
|
||||
virtual bool isDirty(unsigned int contextID) const { return (_image.valid() && _image->getModifiedCount()!=_modifiedCount[contextID]); }
|
||||
|
||||
inline unsigned int& getModifiedCount(unsigned int contextID) const
|
||||
{
|
||||
// get the modified count for the current contextID.
|
||||
|
@ -63,6 +63,16 @@ class OSG_EXPORT Texture2DArray : public Texture
|
||||
*/
|
||||
virtual unsigned int getNumImages() const { return _images.size(); }
|
||||
|
||||
/** return true if the texture image data has been modified and the associated GL texture object needs to be updated.*/
|
||||
virtual bool isDirty(unsigned int contextID) const
|
||||
{
|
||||
for(unsigned int i=0; i<_images.size(); ++i)
|
||||
{
|
||||
if (_images[i].valid() && _images[i]->getModifiedCount()!=_modifiedCount[i][contextID]) return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/** Check how often was a certain layer in the given context modified */
|
||||
inline unsigned int& getModifiedCount(unsigned int layer, unsigned int contextID) const
|
||||
{
|
||||
|
@ -61,6 +61,9 @@ class OSG_EXPORT Texture3D : public Texture
|
||||
/** Gets the const texture image. */
|
||||
inline const Image* getImage() const { return _image.get(); }
|
||||
|
||||
/** return true if the texture image data has been modified and the associated GL texture object needs to be updated.*/
|
||||
virtual bool isDirty(unsigned int contextID) const { return (_image.valid() && _image->getModifiedCount()!=_modifiedCount[contextID]); }
|
||||
|
||||
inline unsigned int& getModifiedCount(unsigned int contextID) const
|
||||
{
|
||||
// get the modified count for the current contextID.
|
||||
|
@ -51,6 +51,9 @@ class OSG_EXPORT TextureBuffer : public Texture
|
||||
/** Gets the const texture image. */
|
||||
inline const Image* getImage() const { return dynamic_cast<Image*>(_bufferData.get() ); }
|
||||
|
||||
/** return true if the texture image data has been modified and the associated GL texture object needs to be updated.*/
|
||||
virtual bool isDirty(unsigned int contextID) const { return (_bufferData.valid() && _bufferData->getModifiedCount()!=_modifiedCount[contextID]); }
|
||||
|
||||
inline unsigned int & getModifiedCount(unsigned int contextID) const
|
||||
{
|
||||
// get the modified count for the current contextID.
|
||||
|
@ -60,6 +60,18 @@ class OSG_EXPORT TextureCubeMap : public Texture
|
||||
/** Get the number of images that can be assigned to the Texture. */
|
||||
virtual unsigned int getNumImages() const { return 6; }
|
||||
|
||||
|
||||
/** return true if the texture image data has been modified and the associated GL texture object needs to be updated.*/
|
||||
virtual bool isDirty(unsigned int contextID) const
|
||||
{
|
||||
return (_images[0].valid() && _images[0]->getModifiedCount()!=_modifiedCount[0][contextID]) ||
|
||||
(_images[1].valid() && _images[1]->getModifiedCount()!=_modifiedCount[1][contextID]) ||
|
||||
(_images[2].valid() && _images[2]->getModifiedCount()!=_modifiedCount[2][contextID]) ||
|
||||
(_images[3].valid() && _images[3]->getModifiedCount()!=_modifiedCount[3][contextID]) ||
|
||||
(_images[4].valid() && _images[4]->getModifiedCount()!=_modifiedCount[4][contextID]) ||
|
||||
(_images[5].valid() && _images[5]->getModifiedCount()!=_modifiedCount[5][contextID]);
|
||||
}
|
||||
|
||||
inline unsigned int& getModifiedCount(unsigned int face,unsigned int contextID) const
|
||||
{
|
||||
// get the modified count for the current contextID.
|
||||
|
@ -70,6 +70,9 @@ class OSG_EXPORT TextureRectangle : public Texture
|
||||
/** Get the const texture image. */
|
||||
inline const Image* getImage() const { return _image.get(); }
|
||||
|
||||
/** return true if the texture image data has been modified and the associated GL texture object needs to be updated.*/
|
||||
virtual bool isDirty(unsigned int contextID) const { return (_image.valid() && _image->getModifiedCount()!=_modifiedCount[contextID]); }
|
||||
|
||||
inline unsigned int& getModifiedCount(unsigned int contextID) const
|
||||
{
|
||||
// get the modified count for the current contextID.
|
||||
|
Loading…
Reference in New Issue
Block a user