#include <osg/VertexProgram>
#include <osg/Point>
#include <osg/PointSprite>
+#include <osg/Texture>
+
+#include <OpenThreads/Mutex>
+#include <OpenThreads/ScopedLock>
#include <simgear/structure/SGSharedPtr.hxx>
-#include <simgear/threads/SGThread.hxx>
-#include <simgear/threads/SGGuard.hxx>
SGSceneFeatures::SGSceneFeatures() :
+ _textureCompression(UseARBCompression),
_shaderLights(true),
_pointSpriteLights(true),
- _distanceAttenuationLights(true)
+ _distanceAttenuationLights(true),
+ _textureFilter(1)
{
}
+static OpenThreads::Mutex mutexSGSceneFeatures_instance;
SGSceneFeatures*
SGSceneFeatures::instance()
{
static SGSharedPtr<SGSceneFeatures> sceneFeatures;
if (sceneFeatures)
return sceneFeatures;
- static SGMutex mutex;
- SGGuard<SGMutex> guard(mutex);
+ OpenThreads::ScopedLock<OpenThreads::Mutex> lock(mutexSGSceneFeatures_instance);
if (sceneFeatures)
return sceneFeatures;
sceneFeatures = new SGSceneFeatures;
return sceneFeatures;
}
+void
+SGSceneFeatures::setTextureCompression(osg::Texture* texture) const
+{
+ switch (_textureCompression) {
+ case UseARBCompression:
+ texture->setInternalFormatMode(osg::Texture::USE_ARB_COMPRESSION);
+ break;
+ case UseDXT1Compression:
+ texture->setInternalFormatMode(osg::Texture::USE_S3TC_DXT1_COMPRESSION);
+ break;
+ case UseDXT3Compression:
+ texture->setInternalFormatMode(osg::Texture::USE_S3TC_DXT3_COMPRESSION);
+ break;
+ case UseDXT5Compression:
+ texture->setInternalFormatMode(osg::Texture::USE_S3TC_DXT5_COMPRESSION);
+ break;
+ default:
+ texture->setInternalFormatMode(osg::Texture::USE_IMAGE_DATA_FORMAT);
+ break;
+ }
+}
+
bool
SGSceneFeatures::getHavePointSprites(unsigned contextId) const
{