NAP
renderfrustumcomponent.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 // External includes
8 #include <renderablemeshcomponent.h>
9 #include <mesh.h>
10 #include <nap/resourceptr.h>
11 #include <componentptr.h>
12 
13 // Local includes
14 #include "boxframemesh.h"
15 
16 namespace nap
17 {
18  // Forward declares
19  class RenderFrustumComponentInstance;
20  class CameraComponentInstance;
21 
31  {
32  RTTI_ENABLE(RenderableComponent)
34 
35  public:
40  virtual void getDependentComponents(std::vector<rtti::TypeInfo>& components) const override;
41 
42  float mLineWidth = 2.0f;
43  RGBColorFloat mColor = { 1.0f, 1.0f, 1.0f };
44  };
45 
46 
56  {
57  RTTI_ENABLE(RenderableComponentInstance)
58  public:
59  // Default constructor
61 
65  virtual bool init(utility::ErrorState& errorState) override;
66 
70  const glm::vec3& getColor() const { return mColorUniform->getValue(); }
71 
75  void setColor(const glm::vec3& color) { mColorUniform->setValue(color); }
76 
80  virtual bool isSupported(nap::CameraComponentInstance& camera) const override { return true; }
81 
82  protected:
86  void onDraw(IRenderTarget& renderTarget, VkCommandBuffer commandBuffer, const glm::mat4& viewMatrix, const glm::mat4& projectionMatrix) override;
87 
88  private:
94  bool updateFrustum(utility::ErrorState& errorState);
95 
96  RenderFrustumComponent* mResource = nullptr;
97  RenderService* mRenderService = nullptr;
98  CameraComponentInstance* mCamera = nullptr;
99  TransformComponentInstance* mCameraTransform = nullptr;
100 
101  BoxFrameMesh mFrustumMesh;
102  RenderableMesh mRenderableMesh;
103  MaterialInstance mMaterialInstance;
104  MaterialInstanceResource mMaterialInstanceResource;
105 
106  UniformStructInstance* mMVPStruct = nullptr;
107  UniformMat4Instance* mModelMatUniform = nullptr;
108  UniformMat4Instance* mViewMatUniform = nullptr;
109  UniformMat4Instance* mProjectMatUniform = nullptr;
110 
111  UniformStructInstance* mUBOStruct = nullptr;
112  UniformVec3Instance* mColorUniform = nullptr;
113  };
114 }
115 
nap::RenderableComponentInstance
Definition: rendercomponent.h:46
nap::RenderFrustumComponentInstance::setColor
void setColor(const glm::vec3 &color)
Definition: renderfrustumcomponent.h:75
nap::IRenderTarget
Definition: irendertarget.h:21
nap::RGBColor< float >
nap::CameraComponentInstance
Definition: cameracomponent.h:38
nap::utility::ErrorState
Definition: errorstate.h:19
nap::BoxFrameMesh
Definition: boxframemesh.h:22
nap::RenderService
Definition: renderservice.h:275
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::RenderFrustumComponent
Definition: renderfrustumcomponent.h:30
nap
Definition: templateapp.h:17
nap::UniformStructInstance
Definition: uniforminstance.h:53
nap::TypedUniformValueInstance
Definition: uniforminstance.h:243
nap::RenderFrustumComponentInstance::getColor
const glm::vec3 & getColor() const
Definition: renderfrustumcomponent.h:70
nap::RenderFrustumComponentInstance::isSupported
virtual bool isSupported(nap::CameraComponentInstance &camera) const override
Definition: renderfrustumcomponent.h:80
nap::TransformComponentInstance
Definition: transformcomponent.h:73
nap::RenderFrustumComponentInstance
Definition: renderfrustumcomponent.h:55
nap::MaterialInstanceResource
Definition: materialinstance.h:68