diff options
| author | Léo Lam <leo@leolam.fr> | 2022-01-06 15:45:31 +0100 |
|---|---|---|
| committer | Léo Lam <leo@leolam.fr> | 2022-01-06 15:45:31 +0100 |
| commit | 751bed1105d93e7b5146d1d05ef893e8da283b13 (patch) | |
| tree | 5e231e345965008c58188d2dde8ae57394120392 /lib | |
| parent | fb6d4646650bcf9ec49987dfbd3e0ae943fcf023 (diff) | |
Havok: Add hkNativePackfileUtils
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/hkStubs/CMakeLists.txt | 2 | ||||
| -rw-r--r-- | lib/hkStubs/Havok/Common/Serialize/Resource/hkResource.h | 44 | ||||
| -rw-r--r-- | lib/hkStubs/Havok/Common/Serialize/Util/hkNativePackfileUtils.h | 35 |
3 files changed, 81 insertions, 0 deletions
diff --git a/lib/hkStubs/CMakeLists.txt b/lib/hkStubs/CMakeLists.txt index 32952a7e..4270759f 100644 --- a/lib/hkStubs/CMakeLists.txt +++ b/lib/hkStubs/CMakeLists.txt @@ -37,6 +37,8 @@ add_library(hkStubs OBJECT Havok/Common/Base/Types/hkRefVariant.h Havok/Common/Base/Types/Geometry/Aabb/hkAabb.h + Havok/Common/Serialize/Resource/hkResource.h + Havok/Common/Serialize/Util/hkNativePackfileUtils.h Havok/Common/Serialize/Util/hkRootLevelContainer.h Havok/Geometry/Collide/Shapes/hkcdShape.h diff --git a/lib/hkStubs/Havok/Common/Serialize/Resource/hkResource.h b/lib/hkStubs/Havok/Common/Serialize/Resource/hkResource.h new file mode 100644 index 00000000..df647006 --- /dev/null +++ b/lib/hkStubs/Havok/Common/Serialize/Resource/hkResource.h @@ -0,0 +1,44 @@ +#pragma once + +#include <Havok/Common/Base/hkBase.h> + +class hkTypeInfoRegistry; + +class hkResource : public hkReferencedObject { +public: + HK_DECLARE_CLASS_ALLOCATOR(hkResource) + + struct Export { + HK_DECLARE_CLASS_ALLOCATOR(Export) + + const char* name; + void* data; + }; + + struct Import { + HK_DECLARE_CLASS_ALLOCATOR(Import) + + const char* name; + void** location; + }; + + virtual const char* getName() const = 0; + + ~hkResource() override = default; + + virtual void callDestructors() {} + + virtual void getImportsExports(hkArray<Import>& impOut, hkArray<Export>& expOut) const = 0; + + virtual void* getContentsPointer(const char* typeName, + const hkTypeInfoRegistry* typeRegistry) const = 0; + + template <typename T> + inline T* getContentsWithRegistry(const hkTypeInfoRegistry* typeRegistry) const; + + template <typename T> + inline T* getContents() const; + + /// Return the top level object type name. + virtual const char* getContentsTypeName() const = 0; +}; diff --git a/lib/hkStubs/Havok/Common/Serialize/Util/hkNativePackfileUtils.h b/lib/hkStubs/Havok/Common/Serialize/Util/hkNativePackfileUtils.h new file mode 100644 index 00000000..d4f35eb1 --- /dev/null +++ b/lib/hkStubs/Havok/Common/Serialize/Util/hkNativePackfileUtils.h @@ -0,0 +1,35 @@ +#pragma once + +#include <Havok/Common/Base/hkBase.h> +#include <Havok/Common/Serialize/Resource/hkResource.h> + +class hkTypeInfoRegistry; + +namespace hkNativePackfileUtils { + +hkResource* load(const void* packfileData, int dataSize, + const hkTypeInfoRegistry* userRegistry = nullptr); + +int getRequiredBufferSize(const void* packfileData, int dataSize); + +void* load(const void* packfileData, int dataSize, void* outBuffer, int outBufferSize, + const hkTypeInfoRegistry* userRegistry = nullptr); + +/// @warning A buffer that has been loaded in place cannot be loaded more than once! +void* loadInPlace(void* packfileData, int dataSize, + const hkTypeInfoRegistry* userRegistry = nullptr, const char** errOut = nullptr); + +const char* getContentsClassName(const void* packfileData, int dataSize); + +void getImportsExports(const void* loadedBuffer, hkArray<hkResource::Export>& expOut, + hkArray<hkResource::Import>& impOut); + +void getImportsExportsInPlace(const void* loadedBuffer, hkArray<hkResource::Export>& expOut, + hkArray<hkResource::Import>& impOut); + +void unload(void* loadedBuffer, int bufferSize); +void unloadInPlace(void* loadedBuffer, int bufferSize); + +hkResult validatePackfileHeader(const void* packfileData, const char** errOut); + +} // namespace hkNativePackfileUtils |
