MaterialComponent.h 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. // Copyright (C) 2009-present, Panagiotis Christopoulos Charitos and contributors.
  2. // All rights reserved.
  3. // Code licensed under the BSD License.
  4. // http://www.anki3d.org/LICENSE
  5. #pragma once
  6. #include <AnKi/Scene/Components/SceneComponent.h>
  7. #include <AnKi/Scene/GpuSceneArray.h>
  8. #include <AnKi/Scene/RenderStateBucket.h>
  9. #include <AnKi/Resource/Forward.h>
  10. namespace anki {
  11. // Forward
  12. class Aabb;
  13. // Connects the material resource with geometry based components (mesh or particle emitter)
  14. class MaterialComponent final : public SceneComponent
  15. {
  16. ANKI_SCENE_COMPONENT(MaterialComponent)
  17. public:
  18. MaterialComponent(SceneNode* node);
  19. ~MaterialComponent();
  20. MaterialComponent& setMaterialFilename(CString fname);
  21. CString getMaterialFilename() const;
  22. Bool hasMaterialResource() const
  23. {
  24. return !!m_resource;
  25. }
  26. MaterialComponent& setSubmeshIndex(U32 submeshIdx);
  27. U32 getSubmeshIndex() const
  28. {
  29. return m_submeshIdx;
  30. }
  31. Bool isValid() const;
  32. private:
  33. GpuSceneArrays::Renderable::Allocation m_gpuSceneRenderable;
  34. GpuSceneArrays::RenderableBoundingVolumeGBuffer::Allocation m_gpuSceneRenderableAabbGBuffer;
  35. GpuSceneArrays::RenderableBoundingVolumeDepth::Allocation m_gpuSceneRenderableAabbDepth;
  36. GpuSceneArrays::RenderableBoundingVolumeForward::Allocation m_gpuSceneRenderableAabbForward;
  37. GpuSceneArrays::RenderableBoundingVolumeRt::Allocation m_gpuSceneRenderableAabbRt;
  38. GpuSceneBufferAllocation m_gpuSceneConstants;
  39. Array<RenderStateBucketIndex, U32(RenderingTechnique::kCount)> m_renderStateBucketIndices;
  40. MaterialResourcePtr m_resource;
  41. SkinComponent* m_skinComponent = nullptr;
  42. MeshComponent* m_meshComponent = nullptr;
  43. ParticleEmitter2Component* m_emitterComponent = nullptr;
  44. U32 m_submeshIdx = 0;
  45. Bool m_anyDirty : 1 = true; // A compound flag because it's too difficult to track everything
  46. Bool m_movedLastFrame : 1 = true;
  47. void update(SceneComponentUpdateInfo& info, Bool& updated) override;
  48. Error serialize(SceneSerializer& serializer) override;
  49. void onOtherComponentRemovedOrAdded(SceneComponent* other, Bool added) override;
  50. Aabb computeAabb(const SceneNode& node) const;
  51. };
  52. } // end namespace anki