verus/Verus/src/Scene/SceneNodes/Model.h

63 lines
1.2 KiB
C++

#pragma once
namespace verus
{
namespace Scene
{
//! Model is an element of the scene manager container
//! * has a mesh
//! * has a material
//! * has generic parameters
class Model : public Object
{
Mesh _mesh;
MaterialPwn _material;
IO::Dictionary _dict;
int _refCount = 0;
public:
struct Desc
{
CSZ _url = nullptr;
CSZ _mat = nullptr;
};
VERUS_TYPEDEFS(Desc);
Model();
~Model();
void Init(RcDesc desc);
bool Done();
bool IsLoaded() const { return _mesh.IsLoaded(); }
void AddRef() { _refCount++; }
void MarkFirstInstance();
void Draw(CGI::CommandBufferPtr cb);
void BindPipeline(CGI::CommandBufferPtr cb);
void BindGeo(CGI::CommandBufferPtr cb);
void PushInstance(RcTransform3 matW, RcVector4 instData);
RMesh GetMesh() { return _mesh; }
MaterialPtr GetMaterial() { return _material; }
};
VERUS_TYPEDEFS(Model);
class ModelPtr : public Ptr<Model>
{
public:
void Init(Model::RcDesc desc);
};
VERUS_TYPEDEFS(ModelPtr);
class ModelPwn : public ModelPtr
{
public:
~ModelPwn() { Done(); }
void Done();
};
VERUS_TYPEDEFS(ModelPwn);
}
}