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:
Robert Osfield 2018-02-13 12:01:57 +00:00
parent 22d6ce826f
commit b8e5f22cb7
8 changed files with 45 additions and 1 deletions

View File

@ -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
{

View File

@ -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.

View File

@ -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.

View File

@ -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
{

View File

@ -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.

View File

@ -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.

View File

@ -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.

View File

@ -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.