95 lines
1.4 KiB
C++
95 lines
1.4 KiB
C++
#ifndef BLUECORE_MESH_MANAGER_H
|
|
#define BLUECORE_MESH_MANAGER_H
|
|
|
|
#include <map>
|
|
#include <string>
|
|
|
|
#include "RenderDevice.h"
|
|
#include "Math/Vector.h"
|
|
#include "Math/Plane.h"
|
|
#include "Utilities/Buffer.h"
|
|
#include "Utilities/Referenced.h"
|
|
|
|
namespace BlueCore {
|
|
|
|
typedef struct
|
|
{
|
|
Vector3Float point;
|
|
float u, v;
|
|
Vector3Float normal;
|
|
} Vertex;
|
|
|
|
typedef struct
|
|
{
|
|
unsigned short a, b, c;
|
|
} TriangleIndices;
|
|
|
|
typedef struct
|
|
{
|
|
public:
|
|
unsigned int first;
|
|
unsigned int count;
|
|
} Subset;
|
|
|
|
typedef struct
|
|
{
|
|
unsigned short neighbours[3];
|
|
PlaneFloat plane;
|
|
bool backFace;
|
|
} ShadowFace;
|
|
|
|
class Mesh : public Referenced
|
|
{
|
|
|
|
ref_ptr<RenderDevice> _Device;
|
|
|
|
public:
|
|
|
|
Buffer<Vertex> VertexBuffer;
|
|
Buffer<TriangleIndices> IndexBuffer;
|
|
Buffer<Subset> SubsetBuffer;
|
|
|
|
Buffer<Vector3Float> tangents;
|
|
Buffer<Vector3Float> bitangents;
|
|
Buffer<ShadowFace> shadowfaces;
|
|
|
|
public:
|
|
|
|
Mesh (RenderDevice* device);
|
|
|
|
void render ();
|
|
void upload ();
|
|
|
|
protected:
|
|
|
|
~Mesh();
|
|
|
|
};
|
|
|
|
|
|
|
|
class MeshManager : public Referenced
|
|
{
|
|
private:
|
|
|
|
std::map<std::string, weak_ptr<Mesh> > _Meshes;
|
|
|
|
bool saveToCache ( Mesh *mesh, const std::string &name );
|
|
|
|
bool loadFromCache ( Mesh *mesh, const std::string &name );
|
|
|
|
ref_ptr<RenderDevice> _Device;
|
|
|
|
public:
|
|
|
|
MeshManager (RenderDevice *device);
|
|
|
|
~MeshManager();
|
|
|
|
Mesh *loadMesh (const std::string &name);
|
|
};
|
|
|
|
} // namespace BlueCore
|
|
|
|
#endif
|