diff --git a/examples/osgtext/osgtext.cpp b/examples/osgtext/osgtext.cpp index 9ac3fd890..105a1252d 100644 --- a/examples/osgtext/osgtext.cpp +++ b/examples/osgtext/osgtext.cpp @@ -516,9 +516,27 @@ int main( int argc, char **argv ) // set the scene to render viewer.setSceneData(rootNode.get()); + // create the windows and run the threads. viewer.realize(); +#if 0 + // this optional compile block is done as a test against graphics + // drivers that claim support for generate mip map, but the actual + // implementation is flacky. It is not compiled by default. + + // go through each graphics context and switch off the generate mip map extension. + // note, this must be done after the realize so that init of texture state and as + // result extension structures have been iniatilized. + for(unsigned int contextID = 0; + contextIDgetMaxNumberOfGraphicsContexts(); + ++contextID) + { + osg::Texture::Extensions* textureExt = osg::Texture::getExtensions(contextID,false); + if (textureExt) textureExt->setGenerateMipMapSupported(false); + } +#endif + while( !viewer.done() ) { // wait for all cull and draw threads to complete. diff --git a/include/osg/Texture b/include/osg/Texture index 961607d0e..d0f66a4e4 100644 --- a/include/osg/Texture +++ b/include/osg/Texture @@ -251,20 +251,39 @@ class SG_EXPORT Texture : public osg::StateAttribute void setupGLExtenions(); + void setTextureFilterAnisotropicSupported(bool flag) { _isTextureFilterAnisotropicSupported=flag; } bool isTextureFilterAnisotropicSupported() const { return _isTextureFilterAnisotropicSupported; } + + void setTextureCompressionARBSupported(bool flag) { _isTextureCompressionARBSupported=flag; } bool isTextureCompressionARBSupported() const { return _isTextureCompressionARBSupported; } + + void setTextureCompressionS3TCSupported(bool flag) { _isTextureCompressionS3TCSupported=flag; } bool isTextureCompressionS3TCSupported() const { return _isTextureCompressionS3TCSupported; } + + void setTextureMirroredRepeatSupported(bool flag) { _isTextureMirroredRepeatSupported=flag; } bool isTextureMirroredRepeatSupported() const { return _isTextureMirroredRepeatSupported; } + + void setTextureEdgeClampSupported(bool flag) { _isTextureEdgeClampSupported=flag; } bool isTextureEdgeClampSupported() const { return _isTextureEdgeClampSupported; } + + void setTextureBorderClampSupported(bool flag) { _isTextureBorderClampSupported=flag; } bool isTextureBorderClampSupported() const { return _isTextureBorderClampSupported; } + + void setGenerateMipMapSupported(bool flag) { _isGenerateMipMapSupported=flag; } bool isGenerateMipMapSupported() const { return _isGenerateMipMapSupported; } + void setMaxTextureSize(GLint maxsize) { _maxTextureSize=maxsize; } GLint maxTextureSize() const { return _maxTextureSize; } bool isCompressedTexImage2DSupported() const { return _glCompressedTexImage2D!=0; } + void setCompressedTexImage2DProc(void* ptr) { _glCompressedTexImage2D = ptr; } void glCompressedTexImage2D(GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data) const; + + void setCompressedTexSubImage2DProc(void* ptr) { _glCompressedTexSubImage2D = ptr; } void glCompressedTexSubImage2D(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei type, const GLvoid *data) const; + + void setGetCompressedTexImageProc(void* ptr) { _glGetCompressedTexImage = ptr; } void glGetCompressedTexImage(GLenum target, GLint level, GLvoid *data) const; protected: @@ -293,7 +312,7 @@ class SG_EXPORT Texture : public osg::StateAttribute * If 'createIfNotInitalized' is true then the Extensions object is * automatically created. However, in this case the extension object * only be created with the graphics context associated with ContextID..*/ - static const Extensions* getExtensions(unsigned int contextID,bool createIfNotInitalized); + static Extensions* getExtensions(unsigned int contextID,bool createIfNotInitalized); /** setExtensions allows users to override the extensions across graphics contexts. * typically used when you have different extensions supported across graphics pipes diff --git a/include/osg/Texture3D b/include/osg/Texture3D index 8a302e1f2..6984fdcf8 100644 --- a/include/osg/Texture3D +++ b/include/osg/Texture3D @@ -120,14 +120,25 @@ class SG_EXPORT Texture3D : public Texture void setupGLExtenions(); + void setTexture3DSupported(bool flag) { _isTexture3DSupported=flag; } bool isTexture3DSupported() const { return _isTexture3DSupported; } + + void setTexture3DFast(bool flag) { _isTexture3DFast=flag; } bool isTexture3DFast() const { return _isTexture3DFast; } + void setMaxTexture3DSize(GLint maxsize) { _maxTexture3DSize=maxsize; } GLint maxTexture3DSize() const { return _maxTexture3DSize; } + void setTexImage3DProc(void* ptr) { _glTexImage3D = ptr; } void glTexImage3D( GLenum target, GLint level, GLenum internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels) const; + + void setTexSubImage3DProc(void* ptr) { _glTexSubImage3D = ptr; } void glTexSubImage3D( GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid *pixels) const; + + void setCopyTexSubImage3DProc(void* ptr) { _glCopyTexSubImage3D = ptr; } void glCopyTexSubImage3D( GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height ) const; + + void setBuild3DMipmapsProc(void* ptr) { _gluBuild3DMipmaps = ptr; } void gluBuild3DMipmaps( GLenum target, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid *data) const; protected: @@ -151,7 +162,7 @@ class SG_EXPORT Texture3D : public Texture * If 'createIfNotInitalized' is true then the Extensions object is * automatically created. However, in this case the extension object * only be created with the graphics context associated with ContextID..*/ - static const Extensions* getExtensions(unsigned int contextID,bool createIfNotInitalized); + static Extensions* getExtensions(unsigned int contextID,bool createIfNotInitalized); /** setExtensions allows users to override the extensions across graphics contexts. * typically used when you have different extensions supported across graphics pipes diff --git a/include/osg/TextureCubeMap b/include/osg/TextureCubeMap index af525e8cd..f94b61c2f 100644 --- a/include/osg/TextureCubeMap +++ b/include/osg/TextureCubeMap @@ -123,6 +123,7 @@ class SG_EXPORT TextureCubeMap : public Texture void setupGLExtenions(); + void setCubeMapSupported(bool flag) { _isCubeMapSupported=flag; } bool isCubeMapSupported() const { return _isCubeMapSupported; } protected: @@ -139,7 +140,7 @@ class SG_EXPORT TextureCubeMap : public Texture * If 'createIfNotInitalized' is true then the Extensions object is * automatically created. However, in this case the extension object * only be created with the graphics context associated with ContextID..*/ - static const Extensions* getExtensions(unsigned int contextID,bool createIfNotInitalized); + static Extensions* getExtensions(unsigned int contextID,bool createIfNotInitalized); /** setExtensions allows users to override the extensions across graphics contexts. * typically used when you have different extensions supported across graphics pipes diff --git a/src/osg/Texture.cpp b/src/osg/Texture.cpp index 32ebd9a5b..ca2c5f23d 100644 --- a/src/osg/Texture.cpp +++ b/src/osg/Texture.cpp @@ -831,7 +831,7 @@ void Texture::compile(State& state) const typedef buffered_value< ref_ptr > BufferedExtensions; static BufferedExtensions s_extensions; -const Texture::Extensions* Texture::getExtensions(unsigned int contextID,bool createIfNotInitalized) +Texture::Extensions* Texture::getExtensions(unsigned int contextID,bool createIfNotInitalized) { if (!s_extensions[contextID] && createIfNotInitalized) s_extensions[contextID] = new Extensions; return s_extensions[contextID].get(); diff --git a/src/osg/Texture3D.cpp b/src/osg/Texture3D.cpp index 9d4c47d3f..e65c940e6 100644 --- a/src/osg/Texture3D.cpp +++ b/src/osg/Texture3D.cpp @@ -313,7 +313,7 @@ void Texture3D::copyTexSubImage3D(State& state, int xoffset, int yoffset, int zo typedef buffered_value< ref_ptr > BufferedExtensions; static BufferedExtensions s_extensions; -const Texture3D::Extensions* Texture3D::getExtensions(unsigned int contextID,bool createIfNotInitalized) +Texture3D::Extensions* Texture3D::getExtensions(unsigned int contextID,bool createIfNotInitalized) { if (!s_extensions[contextID] && createIfNotInitalized) s_extensions[contextID] = new Extensions; return s_extensions[contextID].get(); diff --git a/src/osg/TextureCubeMap.cpp b/src/osg/TextureCubeMap.cpp index 486e9fd06..372a2c184 100644 --- a/src/osg/TextureCubeMap.cpp +++ b/src/osg/TextureCubeMap.cpp @@ -301,7 +301,7 @@ void TextureCubeMap::apply(State& state) const typedef buffered_value< ref_ptr > BufferedExtensions; static BufferedExtensions s_extensions; -const TextureCubeMap::Extensions* TextureCubeMap::getExtensions(unsigned int contextID,bool createIfNotInitalized) +TextureCubeMap::Extensions* TextureCubeMap::getExtensions(unsigned int contextID,bool createIfNotInitalized) { if (!s_extensions[contextID] && createIfNotInitalized) s_extensions[contextID] = new Extensions; return s_extensions[contextID].get();