32 #include "Utilities/Math/Math.h" 33 #include "Utilities/Memory/Memory.h" 34 #include "Utilities/Profiler/Profiler.h" 35 #include "Core/Components/Transform.h" 36 #include "Utilities/AbstractFactory/AbstractFactory.h" 37 #include "Core/Resources/Mesh.h" 43 Vector3 color{ 1.0f };
47 inline void SetColor(
const Vector3& color)
49 this->color = Clamp(color, MakeVector3(0.0f), MakeVector3(1.0f));
52 inline const Vector3& GetColor()
const 69 inner.GetPool<T>().Deallocate(resource.GetHandle());
75 return inner.GetPool<T>();
79 using ModelData = MxVector<Matrix4x4>;
80 using NormalData = MxVector<Matrix3x3>;
81 using ColorData = MxVector<Vector3>;
82 using BufferIndex = size_t;
90 BufferIndex bufferIndex = std::numeric_limits<BufferIndex>::max();
93 BufferIndex AddInstancedBuffer(
Mesh& mesh,
const MxVector<T>& data)
95 auto VBO = GraphicFactory::Create<VertexBuffer>();
96 auto VBL = GraphicFactory::Create<VertexBufferLayout>();
98 VBO->Load((
float*)data.data(), data.size() *
sizeof(T) /
sizeof(
float), UsageType::DYNAMIC_DRAW);
99 return mesh.AddInstancedBuffer(std::move(VBO), std::move(VBL));
103 void BufferDataByIndex(
const Mesh& mesh,
size_t index,
const MxVector<T>& buffer)
105 auto VBO = mesh.GetBufferByIndex(index);
106 VBO->BufferDataWithResize((
float*)buffer.data(), buffer.size() *
sizeof(T) /
sizeof(
float));
109 void RemoveInstancedBuffer(
Mesh& mesh,
size_t index);
112 const auto& GetInstancePool()
const {
return this->factory.inner.Pool; }
113 auto& GetInstancePool() {
return this->factory.inner.Pool; };
114 size_t GetCount()
const {
return this->GetInstancePool().Allocated(); }
115 auto GetInstances() {
return ComponentView{ this->GetInstancePool() }; }
118 void SubmitInstances();
121 ModelData& GetModelData();
122 NormalData& GetNormalData();
123 ColorData& GetColorData();
Definition: InstanceFactory.h:41
Definition: InstanceFactory.h:62
Definition: ComponentView.h:42
Definition: InstanceFactory.h:58
Definition: AbstractFactory.h:399
Definition: AbstractFactory.h:240
Definition: Application.cpp:49