NAP
renderablemeshcomponent.h
1 /* This Source Code Form is subject to the terms of the Mozilla Public
2  * License, v. 2.0. If a copy of the MPL was not distributed with this
3  * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
4 
5 #pragma once
6 
7 // Local Includes
8 #include "rendercomponent.h"
9 #include "renderablemesh.h"
10 #include "materialinstance.h"
11 
12 // External Includes
13 #include <nap/resourceptr.h>
14 #include <transformcomponent.h>
15 #include <rect.h>
16 
17 namespace nap
18 {
19  class RenderableMeshComponentInstance;
20 
41  {
42  RTTI_ENABLE(RenderableComponent)
44  public:
49  virtual void getDependentComponents(std::vector<rtti::TypeInfo>& components) const override;
50 
54  IMesh& getMeshResource() { return *mMesh; }
55 
56  public:
60  float mLineWidth = 1.0f;
61  };
62 
63 
91  {
92  RTTI_ENABLE(RenderableComponentInstance)
93 
94  public:
96 
100  virtual bool init(utility::ErrorState& errorState) override;
101 
110  RenderableMesh createRenderableMesh(IMesh& mesh, MaterialInstance& materialInstance, utility::ErrorState& errorState);
111 
120  RenderableMesh createRenderableMesh(IMesh& mesh, utility::ErrorState& errorState);
121 
127  void setMesh(const RenderableMesh& mesh);
128 
132  MaterialInstance& getMaterialInstance();
133 
137  IMesh& getMesh() { return mRenderableMesh.getMesh(); }
138 
143  MeshInstance& getMeshInstance() { return getMesh().getMeshInstance(); }
144 
149  const RenderableMesh& getRenderableMesh() const { return mRenderableMesh; }
150 
155  void setClipRect(const math::Rect& rect) { mClipRect = rect; }
156 
161  void setLineWidth(float lineWidth) { mLineWidth = lineWidth; }
162 
166  const math::Rect& getClipRect() const { return mClipRect; }
167 
171  const TransformComponentInstance& getTransform() { return *mTransformComponent; }
172 
182  MaterialInstance* getOrCreateMaterial() { return &mMaterialInstance; }
183 
184  protected:
188  virtual void onDraw(IRenderTarget& renderTarget, VkCommandBuffer commandBuffer, const glm::mat4& viewMatrix, const glm::mat4& projectionMatrix) override;
189 
194 
195  UniformMat4Instance* mModelMatUniform = nullptr;
196  UniformMat4Instance* mViewMatUniform = nullptr;
197  UniformMat4Instance* mProjectMatUniform = nullptr;
198  UniformMat4Instance* mNormalMatrixUniform = nullptr;
199  UniformVec3Instance* mCameraWorldPosUniform = nullptr;
200 
201  float mLineWidth = 1.0f;
202  };
203 }
nap::RenderableComponentInstance
Definition: rendercomponent.h:46
nap::IRenderTarget
Definition: irendertarget.h:21
nap::RenderableMeshComponentInstance::setLineWidth
void setLineWidth(float lineWidth)
Definition: renderablemeshcomponent.h:161
nap::RenderableMeshComponent
Definition: renderablemeshcomponent.h:40
nap::RenderableMeshComponentInstance::mClipRect
math::Rect mClipRect
Clipping rectangle for this instance, in pixel coordinates.
Definition: renderablemeshcomponent.h:192
nap::RenderableMeshComponentInstance::getMesh
IMesh & getMesh()
Definition: renderablemeshcomponent.h:137
nap::rtti::ObjectPtr
Definition: objectptr.h:154
nap::RenderableMeshComponentInstance::getClipRect
const math::Rect & getClipRect() const
Definition: renderablemeshcomponent.h:166
nap::RenderableMeshComponent::mMaterialInstanceResource
MaterialInstanceResource mMaterialInstanceResource
Property: 'MaterialInstance' instance of the material, used to override uniforms for this instance.
Definition: renderablemeshcomponent.h:58
nap::math::Rect
Definition: rect.h:19
nap::utility::ErrorState
Definition: errorstate.h:19
nap::RenderableMeshComponentInstance::getOrCreateMaterial
MaterialInstance * getOrCreateMaterial()
Definition: renderablemeshcomponent.h:182
nap::RenderableMeshComponentInstance
Definition: renderablemeshcomponent.h:90
nap::RenderableMeshComponentInstance::mMaterialInstance
MaterialInstance mMaterialInstance
The MaterialInstance as created from the resource.
Definition: renderablemeshcomponent.h:191
nap::IMesh
Definition: mesh.h:394
nap::RenderableMeshComponentInstance::getTransform
const TransformComponentInstance & getTransform()
Definition: renderablemeshcomponent.h:171
nap::RenderableMeshComponent::mMesh
ResourcePtr< IMesh > mMesh
Property: 'Mesh' Resource to render.
Definition: renderablemeshcomponent.h:57
nap::EntityInstance
Definition: entity.h:34
nap::RenderableComponent
Definition: rendercomponent.h:29
nap::Component
Definition: component.h:151
nap::RenderableMesh
Definition: renderablemesh.h:22
nap::MaterialInstance
Definition: materialinstance.h:297
nap::RenderableMeshComponent::mClipRect
math::Rect mClipRect
Property: 'ClipRect' Optional clipping rectangle, in pixel coordinates.
Definition: renderablemeshcomponent.h:59
nap::RenderableMeshComponentInstance::mRenderableMesh
RenderableMesh mRenderableMesh
The currently active renderable mesh, either set during init() or set by setMesh.
Definition: renderablemeshcomponent.h:193
nap::RenderableMeshComponentInstance::getRenderableMesh
const RenderableMesh & getRenderableMesh() const
Definition: renderablemeshcomponent.h:149
nap
Definition: templateapp.h:17
nap::TypedUniformValueInstance
Definition: uniforminstance.h:243
nap::MeshInstance
Definition: mesh.h:196
nap::RenderableMeshComponentInstance::mTransformComponent
TransformComponentInstance * mTransformComponent
Cached pointer to transform.
Definition: renderablemeshcomponent.h:190
nap::RenderableMeshComponent::getMeshResource
IMesh & getMeshResource()
Definition: renderablemeshcomponent.h:54
nap::TransformComponentInstance
Definition: transformcomponent.h:73
nap::RenderableMeshComponentInstance::setClipRect
void setClipRect(const math::Rect &rect)
Definition: renderablemeshcomponent.h:155
nap::MaterialInstanceResource
Definition: materialinstance.h:68
nap::RenderableMeshComponentInstance::getMeshInstance
MeshInstance & getMeshInstance()
Definition: renderablemeshcomponent.h:143