NAP
rendercomponent.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 <glm/glm.hpp>
9 #include <component.h>
10 #include <utility/dllexport.h>
11 #include <cameracomponent.h>
12 
13 // Local includes
14 #include "rendertag.h"
15 #include "renderlayer.h"
16 
17 namespace nap
18 {
19  // Forward declares
20  class RenderableComponentInstance;
21  class RenderService;
22 
29  class NAPAPI RenderableComponent : public Component
30  {
31  RTTI_ENABLE(Component)
33 
34  public:
35  bool mVisible = true;
37  std::vector<ResourcePtr<RenderTag>> mTags;
38  };
39 
40 
47  {
48  RTTI_ENABLE(ComponentInstance)
49 
50  public:
52 
58  virtual bool init(utility::ErrorState& errorState) override;
59 
68  void draw(IRenderTarget& renderTarget, VkCommandBuffer commandBuffer, const glm::mat4& viewMatrix, const glm::mat4& projectionMatrix);
69 
74  void setVisible(bool visible) { mVisible = visible; }
75 
79  bool isVisible() const { return mVisible; }
80 
84  const std::vector<ResourcePtr<RenderTag>>& getTags() const { return getComponent<RenderableComponent>()->mTags; }
85 
89  RenderMask getMask() const { return mRenderMask; }
90 
97  bool includesMask(RenderMask otherMask) { return (mRenderMask == mask::none) || ((mRenderMask & otherMask) > 0); }
98 
104  int getRank() const;
105 
111  const RenderLayer* getLayer() const { return mRenderLayer; }
112 
119  virtual bool isSupported(nap::CameraComponentInstance& camera) const { return true; }
120 
121  protected:
131  virtual void onDraw(IRenderTarget& renderTarget, VkCommandBuffer commandBuffer, const glm::mat4& viewMatrix, const glm::mat4& projectionMatrix) = 0;
132 
133  RenderService* mRenderService = nullptr;
134 
135  private:
136  bool mVisible = true;
137  RenderLayer* mRenderLayer = nullptr;
138  RenderMask mRenderMask = mask::none;
139  };
140 }
nap::RenderableComponentInstance
Definition: rendercomponent.h:46
nap::IRenderTarget
Definition: irendertarget.h:21
nap::RenderableComponentInstance::setVisible
void setVisible(bool visible)
Definition: rendercomponent.h:74
nap::RenderableComponentInstance::includesMask
bool includesMask(RenderMask otherMask)
Definition: rendercomponent.h:97
nap::CameraComponentInstance
Definition: cameracomponent.h:38
nap::mask::none
constexpr RenderMask none
Definition: rendertag.h:31
nap::RenderableComponent::mLayer
ResourcePtr< RenderLayer > mLayer
Property: 'Layer' the render layer assigned to this component.
Definition: rendercomponent.h:36
nap::rtti::ObjectPtr
Definition: objectptr.h:154
nap::utility::ErrorState
Definition: errorstate.h:19
nap::RenderableComponentInstance::getLayer
const RenderLayer * getLayer() const
Definition: rendercomponent.h:111
nap::RenderMask
uint64 RenderMask
Definition: rendertag.h:23
nap::RenderLayer
Definition: renderlayer.h:43
nap::RenderService
Definition: renderservice.h:275
nap::RenderableComponentInstance::getMask
RenderMask getMask() const
Definition: rendercomponent.h:89
nap::RenderableComponentInstance::isVisible
bool isVisible() const
Definition: rendercomponent.h:79
nap::EntityInstance
Definition: entity.h:34
nap::RenderableComponentInstance::getTags
const std::vector< ResourcePtr< RenderTag > > & getTags() const
Definition: rendercomponent.h:84
nap::RenderableComponent::mTags
std::vector< ResourcePtr< RenderTag > > mTags
Property: 'Tags' List of tags specifying the category this render component belongs to.
Definition: rendercomponent.h:37
nap::RenderableComponent
Definition: rendercomponent.h:29
nap::RenderableComponentInstance::isSupported
virtual bool isSupported(nap::CameraComponentInstance &camera) const
Definition: rendercomponent.h:119
nap::ComponentInstance
Definition: component.h:43
nap::Component
Definition: component.h:151
nap
Definition: templateapp.h:17