This commit is contained in:
Sam Gateau 2015-08-21 23:24:33 -07:00
parent 799a3cae55
commit d9e326258f

View file

@ -11,14 +11,76 @@
#ifndef hifi_model_Asset_h
#define hifi_model_Asset_h
#include <bitset>
#include <map>
#include <memory>
#include <vector>
#include "Material.h"
#include "Geometry.h"
namespace model {
template <class T>
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;