summaryrefslogtreecommitdiff
path: root/Runtime/Camera/UmbraBackwardsCompatibility.h
diff options
context:
space:
mode:
authorchai <chaifix@163.com>2019-08-14 22:50:43 +0800
committerchai <chaifix@163.com>2019-08-14 22:50:43 +0800
commit15740faf9fe9fe4be08965098bbf2947e096aeeb (patch)
treea730ec236656cc8cab5b13f088adfaed6bb218fb /Runtime/Camera/UmbraBackwardsCompatibility.h
+Unity Runtime codeHEADmaster
Diffstat (limited to 'Runtime/Camera/UmbraBackwardsCompatibility.h')
-rw-r--r--Runtime/Camera/UmbraBackwardsCompatibility.h85
1 files changed, 85 insertions, 0 deletions
diff --git a/Runtime/Camera/UmbraBackwardsCompatibility.h b/Runtime/Camera/UmbraBackwardsCompatibility.h
new file mode 100644
index 0000000..d3eb40b
--- /dev/null
+++ b/Runtime/Camera/UmbraBackwardsCompatibility.h
@@ -0,0 +1,85 @@
+#ifndef UMBRA_BACKWARDS_COMPATIBILITY_H
+#define UMBRA_BACKWARDS_COMPATIBILITY_H
+
+#include "UmbraBackwardsCompatibilityDefine.h"
+#include "UmbraTomeData.h"
+
+#include "External/Umbra/builds/interface/runtime/umbraTome.hpp"
+#include "External/Umbra/builds/interface/runtime/umbraQuery.hpp"
+
+#if SUPPORT_BACKWARDS_COMPATIBLE_UMBRA
+# include "External/Umbra_3_0/source/interface/runtime/umbraTome_3_0.hpp"
+# include "External/Umbra_3_0/source/interface/runtime/umbraQuery_3_0.hpp"
+#endif
+
+inline void CleanupUmbraTomeData (UmbraTomeData& tomeData)
+{
+ if (tomeData.tome)
+ {
+ Umbra::TomeLoader::freeTome(tomeData.tome);
+ tomeData.tome = NULL;
+ }
+
+#if SUPPORT_BACKWARDS_COMPATIBLE_UMBRA
+ if (tomeData.legacyTome)
+ {
+ Umbra_3_0::TomeLoader::freeTome(tomeData.legacyTome);
+ tomeData.legacyTome = NULL;
+ }
+#endif
+}
+inline const UmbraTomeData LoadUmbraTome (const UInt8* buf, size_t bytes)
+{
+ if (buf == NULL || bytes == 0)
+ return UmbraTomeData ();
+
+ const Umbra::Tome* tome = Umbra::TomeLoader::loadFromBuffer(buf, bytes);
+ if (tome->getStatus() == Umbra::Tome::STATUS_OK)
+ {
+ UmbraTomeData tomeData;
+ tomeData.tome = tome;
+ return tomeData;
+ }
+
+
+#if SUPPORT_BACKWARDS_COMPATIBLE_UMBRA
+ if (tome && tome->getStatus() == Umbra::Tome::STATUS_OLDER_VERSION)
+ {
+ const Umbra_3_0::Tome* legacyTome = Umbra_3_0::TomeLoader::loadFromBuffer(buf, bytes);
+ if (legacyTome && legacyTome->getStatus() == Umbra_3_0::Tome::STATUS_OK)
+ {
+ UmbraTomeData tomeData;
+ tomeData.legacyTome = legacyTome;
+ return tomeData;
+ }
+
+ ErrorString("Failed to load legacy tome data");
+ return UmbraTomeData();
+ }
+#endif
+
+ WarningString ("Loading deprecated Occlusion Culling is not supported. Please rebake the occlusion culling data.");
+ return UmbraTomeData ();
+}
+
+inline void SetGateStates( Umbra::Query* query, const UmbraTomeData& tomeData, Umbra::GateStateVector& gateVector)
+{
+#if SUPPORT_BACKWARDS_COMPATIBLE_UMBRA
+ if (tomeData.IsLegacyTome ())
+ {
+ ((Umbra_3_0::QueryExt*)query)->setGateStates((const Umbra_3_0::GateStateVector*)&gateVector);
+ return;
+ }
+#endif
+
+ query->setGateStates(&gateVector);
+}
+
+#if SUPPORT_BACKWARDS_COMPATIBLE_UMBRA
+ #define UMBRA_TOME_METHOD(TOME,method) (TOME.tome != NULL ? TOME.tome->method : TOME.legacyTome->method)
+#else
+ #define UMBRA_TOME_METHOD(TOME,method) (TOME.tome->method)
+#endif
+
+
+#endif \ No newline at end of file