From d9e326258f9312b51693bf09a4e9cf05e97de2fc Mon Sep 17 00:00:00 2001 From: Sam Gateau Date: Fri, 21 Aug 2015 23:24:33 -0700 Subject: [PATCH] Take 0 --- libraries/model/src/model/Asset.h | 66 ++++++++++++++++++++++++++++++- 1 file changed, 64 insertions(+), 2 deletions(-) diff --git a/libraries/model/src/model/Asset.h b/libraries/model/src/model/Asset.h index a18cabba28..f9cc5ee4f4 100644 --- a/libraries/model/src/model/Asset.h +++ b/libraries/model/src/model/Asset.h @@ -11,14 +11,76 @@ #ifndef hifi_model_Asset_h #define hifi_model_Asset_h -#include -#include +#include +#include +#include "Material.h" +#include "Geometry.h" namespace model { +template +class Table { +public: + typedef std::vector< T > Vector; + typedef int ID; + + const ID INVALID_ID = 0; + + enum Version { + DRAFT = 0, + FINAL, + NUM_VERSIONS, + }; + + Table() { + for (auto e : _elements) { + e.resize(0); + } + } + ~Table() {} + + ID add(Version v, const T& element) { + switch (v) { + case DRAFT: { + _elements[DRAFT].push_back(element); + return ID(-(_elements[DRAFT].size() - 1)); + break; + } + case FINAL: { + _elements[FINAL].push_back(element); + return ID(_elements[FINAL].size() - 1); + break; + } + } + return INVALID_ID; + } + +protected: + Vector _elements[NUM_VERSIONS]; +}; + +typedef Table< MaterialPointer > MaterialTable; +typedef Table< MeshPointer > MeshTable; + class Asset { public: + + + Asset(); + ~Asset(); + + MeshTable& editMeshes() { return _meshes; } + const MeshTable& getMeshes() const { return _meshes; } + + MaterialTable& editMaterials() { return _materials; } + const MaterialTable& getMaterials() const { return _materials; } + +protected: + + MeshTable _meshes; + MaterialTable _materials; + }; typedef std::shared_ptr< Asset > AssetPointer;