]> git.mxchange.org Git - simgear.git/blobdiff - simgear/scene/util/SGSceneFeatures.cxx
Work around apparent OSG 3.2.0 normal binding bug.
[simgear.git] / simgear / scene / util / SGSceneFeatures.cxx
index be0183a4870cac9017c30a7a918b9770026e53cd..4367e453926ddbde2f390af6662c1300ebde3644 100644 (file)
 #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
 {