NAP
renderskyboxcomponent.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 <rendercomponent.h>
9 #include <nap/resourceptr.h>
10 #include <boxmesh.h>
11 #include <materialinstance.h>
12 #include <renderablemesh.h>
13 #include <transformcomponent.h>
14 
15 namespace nap
16 {
17  // Forward declares
18  class RenderSkyBoxComponentInstance;
19 
30  {
31  RTTI_ENABLE(RenderableComponent)
33 
34  public:
35 
36  // Depends on a transform component
37  void getDependentComponents(std::vector<rtti::TypeInfo>& components) const override;
38 
40  RGBColorFloat mColor = { 1.0f, 1.0f, 1.0f };
41  float mOpacity = 1.0f;
43  };
44 
45 
56  {
57  RTTI_ENABLE(RenderableComponentInstance)
58  public:
59  // Default constructor
61 
67  virtual bool init(utility::ErrorState& errorState) override;
68 
73  void setTexture(const TextureCube& texture);
74 
79  const TextureCube& getTexture() const { return mCubeSampler->getTexture(); }
80 
85  void setColor(const glm::vec3& color) { mColorUniform->setValue(color); }
86 
90  const glm::vec3& getColor() const { return mColorUniform->getValue(); }
91 
96  void setOpacity(float opacity) { mAlphaUniform->setValue(opacity); }
97 
101  float getOpacity() const { return mAlphaUniform->getValue(); }
102 
103  protected:
107  void onDraw(IRenderTarget& renderTarget, VkCommandBuffer commandBuffer, const glm::mat4& viewMatrix, const glm::mat4& projectionMatrix) override;
108 
109  private:
110  RenderSkyBoxComponent* mResource = nullptr;
111  RenderService& mRenderService;
112 
113  BoxMesh mSkyBoxMesh;
114  MaterialInstance mMaterialInstance;
115  MaterialInstanceResource mMaterialInstanceResource;
116  RenderableMesh mRenderableMesh;
117  TransformComponentInstance* mTransformComponent;
118 
119  UniformStructInstance* mMVPStruct = nullptr;
120  UniformMat4Instance* mModelMatUniform = nullptr;
121  UniformMat4Instance* mViewMatUniform = nullptr;
122  UniformMat4Instance* mProjectMatUniform = nullptr;
123  UniformFloatInstance* mAlphaUniform = nullptr;
124  UniformVec3Instance* mColorUniform = nullptr;
125  SamplerCubeInstance* mCubeSampler = nullptr;
126  };
127 }
nap::RenderableComponentInstance
Definition: rendercomponent.h:46
nap::IRenderTarget
Definition: irendertarget.h:21
nap::RGBColor< float >
nap::TextureCube
Definition: texture.h:298
nap::RenderSkyBoxComponentInstance::setColor
void setColor(const glm::vec3 &color)
Definition: renderskyboxcomponent.h:85
nap::EBlendMode
EBlendMode
Definition: materialcommon.h:18
nap::rtti::ObjectPtr
Definition: objectptr.h:154
nap::RenderSkyBoxComponentInstance::getOpacity
float getOpacity() const
Definition: renderskyboxcomponent.h:101
nap::utility::ErrorState
Definition: errorstate.h:19
nap::EBlendMode::Opaque
@ Opaque
Regular opaque, similar to (One, Zero) blend.
nap::RenderSkyBoxComponentInstance
Definition: renderskyboxcomponent.h:55
nap::RenderService
Definition: renderservice.h:275
nap::RenderSkyBoxComponent
Definition: renderskyboxcomponent.h:29
nap::RenderSkyBoxComponent::mCubeTexture
ResourcePtr< TextureCube > mCubeTexture
Definition: renderskyboxcomponent.h:39
nap::RenderSkyBoxComponentInstance::getColor
const glm::vec3 & getColor() const
Definition: renderskyboxcomponent.h:90
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
Definition: templateapp.h:17
nap::SamplerCubeInstance
Definition: samplerinstance.h:193
nap::BoxMesh
Definition: boxmesh.h:23
nap::UniformStructInstance
Definition: uniforminstance.h:53
nap::TypedUniformValueInstance
Definition: uniforminstance.h:243
nap::RenderSkyBoxComponentInstance::setOpacity
void setOpacity(float opacity)
Definition: renderskyboxcomponent.h:96
nap::TransformComponentInstance
Definition: transformcomponent.h:73
nap::RenderSkyBoxComponentInstance::getTexture
const TextureCube & getTexture() const
Definition: renderskyboxcomponent.h:79
nap::MaterialInstanceResource
Definition: materialinstance.h:68