NAP
rendertowindowcomponent.h
1 #pragma once
2 
3 // Local includes
4 #include "renderwindow.h"
5 #include "materialinstance.h"
6 #include "planemesh.h"
7 #include "renderablemesh.h"
8 #include "rendercomponent.h"
9 
10 namespace nap
11 {
12  class RenderToWindowComponentInstance;
13 
39  {
40  RTTI_ENABLE(RenderableComponent)
42  public:
43 
44  enum class EScaleMode : uint8
45  {
46  Window = 0,
47  Square = 1,
48  Custom = 2
49  };
50 
51  ResourcePtr<RenderWindow> mWindow = nullptr;
53  EScaleMode mMode = EScaleMode::Window;
54  glm::vec2 mRatio = { 1.0f, 1.0f };
55  };
56 
57 
83  {
84  RTTI_ENABLE(ComponentInstance)
85  public:
87 
93  bool init(utility::ErrorState& errorState) override;
94 
98  MaterialInstance& getMaterialInstance() { return mMaterialInstance; }
99 
103  const MaterialInstance& getMaterialInstance() const { return mMaterialInstance; }
104 
111  void draw();
112 
117  bool isSupported(nap::CameraComponentInstance& camera) const override;
118 
123 
128  void setMode(RenderToWindowComponent::EScaleMode mode) { mMode = mode; }
129 
134  glm::vec2 getRatio() const;
135 
140  void setRatio(const glm::vec2& ratio);
141 
142  protected:
150  void onDraw(IRenderTarget& renderTarget, VkCommandBuffer commandBuffer, const glm::mat4& viewMatrix, const glm::mat4& projectionMatrix) override;
151 
152  private:
153  nap::PlaneMesh mPlane;
154  MaterialInstance mMaterialInstance;
155  RenderableMesh mRenderableMesh;
156  RenderService* mService = nullptr;
157  glm::mat4x4 mModelMatrix;
158  UniformMat4Instance* mModelMatrixUniform = nullptr;
159  UniformMat4Instance* mProjectMatrixUniform = nullptr;
160  UniformMat4Instance* mViewMatrixUniform = nullptr;
161  UniformStructInstance* mMVPStruct = nullptr;
162  glm::vec2 mRatio = { 1.0f, 1.0f };
163  nap::RenderWindow* mWindow = nullptr;
164 
166  };
167 }
nap::RenderableComponentInstance
Definition: rendercomponent.h:46
nap::IRenderTarget
Definition: irendertarget.h:21
nap::RenderWindow
Definition: renderwindow.h:43
nap::CameraComponentInstance
Definition: cameracomponent.h:38
nap::rtti::ObjectPtr
Definition: objectptr.h:150
nap::uint8
uint8_t uint8
Definition: numeric.h:16
nap::RenderToWindowComponentInstance::setMode
void setMode(RenderToWindowComponent::EScaleMode mode)
Definition: rendertowindowcomponent.h:128
nap::utility::ErrorState
Definition: errorstate.h:19
nap::RenderToWindowComponent::EScaleMode::Window
@ Window
Canvas is scaled to fit window.
nap::RenderService
Definition: renderservice.h:198
nap::RenderToWindowComponentInstance::getMaterialInstance
MaterialInstance & getMaterialInstance()
Definition: rendertowindowcomponent.h:98
nap::RenderToWindowComponent::EScaleMode
EScaleMode
Definition: rendertowindowcomponent.h:44
nap::RenderToWindowComponent
Definition: rendertowindowcomponent.h:38
nap::EntityInstance
Definition: entity.h:34
nap::RenderToWindowComponent::mMaterialInstanceResource
MaterialInstanceResource mMaterialInstanceResource
Property: 'MaterialInstance' material instance.
Definition: rendertowindowcomponent.h:52
nap::RenderableComponent
Definition: rendercomponent.h:29
nap::ComponentInstance
Definition: component.h:43
nap::RenderToWindowComponentInstance::getMode
RenderToWindowComponent::EScaleMode getMode() const
Definition: rendertowindowcomponent.h:122
nap::Component
Definition: component.h:151
nap::RenderableMesh
Definition: renderablemesh.h:22
nap::MaterialInstance
Definition: materialinstance.h:297
nap
Definition: templateapp.h:17
nap::Window
Definition: window.h:26
nap::UniformStructInstance
Definition: uniforminstance.h:53
nap::TypedUniformValueInstance
Definition: uniforminstance.h:243
nap::RenderToWindowComponentInstance
Definition: rendertowindowcomponent.h:82
nap::RenderToWindowComponentInstance::getMaterialInstance
const MaterialInstance & getMaterialInstance() const
Definition: rendertowindowcomponent.h:103
nap::PlaneMesh
Definition: planemesh.h:26
nap::MaterialInstanceResource
Definition: materialinstance.h:68