Przeglądaj źródła

Added depth packing / unpacking

marco.bellan 9 lat temu
rodzic
commit
7823935552
1 zmienionych plików z 18 dodań i 4 usunięć
  1. 18 4
      Source/BansheeCore/Source/BsPixelUtil.cpp

+ 18 - 4
Source/BansheeCore/Source/BsPixelUtil.cpp

@@ -1366,7 +1366,7 @@ namespace BansheeEngine
 			return;
 			return;
 		}
 		}
 			
 			
-
+		//TODO implement depth packing
 
 
 	}
 	}
 
 
@@ -1378,10 +1378,24 @@ namespace BansheeEngine
 			LOGERR("Cannot unpack from " + getFormatName(format) + ": it is not a depth format");
 			LOGERR("Cannot unpack from " + getFormatName(format) + ": it is not a depth format");
 			return;
 			return;
 		}
 		}
-		//TODO fancy checks
 		UINT32* color = (UINT32 *)src;
 		UINT32* color = (UINT32 *)src;
-		float d = static_cast<float>(*color & 0x00FFFFFF);
-		depth = d / (float)16777216;
+		switch (format) {
+		case PF_D24S8:
+			depth = static_cast<float>(*color & 0x00FFFFFF) / (float)16777216;
+			break;
+		case PF_D16:
+			depth = static_cast<float>(*color & 0xFFFF) / (float)65536;
+			break;
+		case PF_D32:
+			depth = static_cast<float>(*color & 0xFFFFFFFF) / (float)4294967296;
+			break;
+		case PF_D32_S8X24:
+			depth = static_cast<float>(*color & 0xFFFFFFFF) / (float)4294967296;
+			break;
+		default:
+			LOGERR("Cannot unpack from " + getFormatName(format));
+			break;
+		}
 	}
 	}
 
 
     void PixelUtil::bulkPixelConversion(const PixelData &src, PixelData &dst)
     void PixelUtil::bulkPixelConversion(const PixelData &src, PixelData &dst)