]> git.mxchange.org Git - simgear.git/commitdiff
Handle dds object masks properly:
authorStuart Buchanan <stuart_d_buchanan@yahoo.co.uk>
Sun, 26 Feb 2012 22:38:38 +0000 (22:38 +0000)
committerStuart Buchanan <stuart_d_buchanan@yahoo.co.uk>
Sun, 26 Feb 2012 22:38:38 +0000 (22:38 +0000)
1) Only flip the object-mask if the texture xor the object mask is dds
2) Handle NTFS file systems where the extension may be .DDS rather than .dds.

simgear/scene/material/mat.cxx

index 5888b8672d17cdf1e3e49cf5acf320817e19f785..9c8f208bd120830e781632d3c931379bdc7836cc 100644 (file)
@@ -128,7 +128,9 @@ SGMaterial::read_properties(const SGReaderWriterOptions* options,
         tname = "unknown.rgb";
     }
     
-    if (tname.rfind(".dds") == (tname.length() - 4)) {
+    if ((tname.rfind(".dds") == (tname.length() - 4)) ||
+        (tname.rfind(".DDS") == (tname.length() - 4))   ) 
+    {
       dds.push_back(true);
     } else {
       dds.push_back(false);      
@@ -162,7 +164,9 @@ SGMaterial::read_properties(const SGReaderWriterOptions* options,
       }
       
       if (j == 0) {
-        if (tname.rfind(".dds") == (tname.length() - 4)) {
+        if ((tname.rfind(".dds") == (tname.length() - 4)) ||
+            (tname.rfind(".DDS") == (tname.length() - 4))   )
+        {
           dds.push_back(true);
         } else {
           dds.push_back(false);      
@@ -215,10 +219,14 @@ SGMaterial::read_properties(const SGReaderWriterOptions* options,
       {
         osg::Texture2D* object_mask = new osg::Texture2D;
         
-        if (dds[i]) {
-          // Texture is a DDS. This is relevant for the object mask, as DDS
-          // textures have an origin at the bottom left rather than top
-          // left, therefore we flip the object mask vertically.
+        bool dds_mask = ((omname.rfind(".dds") == (omname.length() - 4)) ||
+                         (omname.rfind(".DDS") == (omname.length() - 4))   );
+        
+        if (dds[i] != dds_mask) {
+          // Texture format does not match mask format. This is relevant for 
+          // the object mask, as DDS textures have an origin at the bottom 
+          // left rather than top left, therefore we flip the object mask 
+          // vertically.
           image->flipVertical();          
         }