aboutsummaryrefslogtreecommitdiff
path: root/sdk/extensions/import/apexmodules/NvParameterized/include/NvParamConversionTemplate.h
diff options
context:
space:
mode:
authorBryan Galdrikian <[email protected]>2018-01-26 21:55:41 -0800
committerBryan Galdrikian <[email protected]>2018-01-26 21:55:41 -0800
commitac961c33c61b487d982ca9cf9b04ba4ac754ecda (patch)
tree2600d61bb009f065384d548eb16fdc2d12f0f227 /sdk/extensions/import/apexmodules/NvParameterized/include/NvParamConversionTemplate.h
parentUpdated release notes (diff)
downloadblast-ac961c33c61b487d982ca9cf9b04ba4ac754ecda.tar.xz
blast-ac961c33c61b487d982ca9cf9b04ba4ac754ecda.zip
Apex dependency removed (used in ExtImport)
Mesh corruption and crash fit for UV fitting function Updated release_notes.txt
Diffstat (limited to 'sdk/extensions/import/apexmodules/NvParameterized/include/NvParamConversionTemplate.h')
-rw-r--r--sdk/extensions/import/apexmodules/NvParameterized/include/NvParamConversionTemplate.h147
1 files changed, 147 insertions, 0 deletions
diff --git a/sdk/extensions/import/apexmodules/NvParameterized/include/NvParamConversionTemplate.h b/sdk/extensions/import/apexmodules/NvParameterized/include/NvParamConversionTemplate.h
new file mode 100644
index 0000000..34331ba
--- /dev/null
+++ b/sdk/extensions/import/apexmodules/NvParameterized/include/NvParamConversionTemplate.h
@@ -0,0 +1,147 @@
+/*
+ * Copyright (c) 2008-2017, NVIDIA CORPORATION. All rights reserved.
+ *
+ * NVIDIA CORPORATION and its licensors retain all intellectual property
+ * and proprietary rights in and to this software, related documentation
+ * and any modifications thereto. Any use, reproduction, disclosure or
+ * distribution of this software and related documentation without an express
+ * license agreement from NVIDIA CORPORATION is strictly prohibited.
+ */
+
+
+#ifndef NV_PARAMETERIZED_CONVERSION_TEMPLATE_H
+#define NV_PARAMETERIZED_CONVERSION_TEMPLATE_H
+
+#include <NvTraitsInternal.h>
+#include <nvparameterized/NvParameterizedTraits.h>
+
+namespace NvParameterized
+{
+/**
+\brief Class to handle all the redundant part of version upgrades.
+
+It verifies class names and versions, and it runs the default converter. The user may overload
+convert(), getPreferredVersions() and release() methods.
+*/
+template<typename Told, typename Tnew, uint32_t oldVersion, uint32_t newVersion>
+class ParamConversionTemplate : public NvParameterized::Conversion
+{
+public:
+ typedef Told TOldClass;
+ typedef Tnew TNewClass;
+
+ bool operator()(NvParameterized::Interface& legacyObj, NvParameterized::Interface& obj)
+ {
+ if (!mDefaultConversion)
+ {
+ mDefaultConversion = NvParameterized::internalCreateDefaultConversion(mTraits, getPreferredVersions());
+ }
+
+ // verify class names
+ if (physx::shdfnd::strcmp(legacyObj.className(), Told::staticClassName()) != 0)
+ {
+ return false;
+ }
+ if (physx::shdfnd::strcmp(obj.className(), Tnew::staticClassName()) != 0)
+ {
+ return false;
+ }
+
+ // verify version
+ if (legacyObj.version() != oldVersion)
+ {
+ return false;
+ }
+ if (obj.version() != newVersion)
+ {
+ return false;
+ }
+
+ //Copy unchanged fields
+ if (!(*mDefaultConversion)(legacyObj, obj))
+ {
+ return false;
+ }
+
+ mLegacyData = static_cast<Told*>(&legacyObj);
+ mNewData = static_cast<Tnew*>(&obj);
+
+ if (!convert())
+ {
+ return false;
+ }
+
+ NvParameterized::Handle invalidHandle(mNewData);
+ if (!mNewData->areParamsOK(&invalidHandle, 1))
+ {
+ if (invalidHandle.isValid())
+ {
+ char buf[256];
+ physx::shdfnd::strlcpy(buf, 256, "First invalid item: ");
+ invalidHandle.getLongName(buf + strlen("First invalid item: "), 256UL - static_cast<uint32_t>(strlen("First invalid item: ")));
+ mTraits->traitsWarn(buf);
+ }
+ return false;
+ }
+
+ return true;
+ }
+
+ /// User code, frees itself with the traits, and also calls destroy() on the ParamConversionTemplate object
+ virtual void release()
+ {
+ destroy();
+ mTraits->free(this);
+ }
+
+protected:
+ ParamConversionTemplate(NvParameterized::Traits* traits)
+ : mTraits(traits), mDefaultConversion(0), mLegacyData(0), mNewData(0)
+ {
+ // Virtual method getPreferredVersions() can not be called in constructors
+ // so we defer construction of mDefaultConversion
+ }
+
+ ~ParamConversionTemplate()
+ {
+ destroy();
+ }
+
+ /// User code, return list of preferred versions.
+ virtual const NvParameterized::PrefVer* getPreferredVersions() const
+ {
+ return 0;
+ }
+
+ /// User code, return true if conversion is successful.
+ virtual bool convert()
+ {
+ return true;
+ }
+
+ void destroy()
+ {
+ if (mDefaultConversion)
+ {
+ mDefaultConversion->release();
+ }
+ }
+
+
+ NvParameterized::Traits* mTraits;
+ NvParameterized::Conversion* mDefaultConversion;
+
+ Told* mLegacyData;
+ Tnew* mNewData;
+};
+}
+
+// Force inclusion of files with initParamRef before we redefine it below
+#include "nvparameterized/NvParameterized.h"
+#include "nvparameterized/NvParamUtils.h"
+#include "NvParameters.h"
+// Do not call initParamRef in converter - prefer Traits::createNvParameterized with explicit version
+// (see wiki for more details)
+#define initParamRef DO_NOT_USE_ME
+
+#endif // PARAM_CONVERSION_TEMPLATE_H