NAP
renderbloomcomponent.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 "rendertotexturecomponent.h"
9 #include "blurshader.h"
10 
11 namespace nap
12 {
13  // Forward Declares
14  class RenderBloomComponentInstance;
15 
23  {
24  RTTI_ENABLE(RenderableComponent)
26  public:
27  ResourcePtr<RenderTexture2D> mInputTexture = nullptr;
28  ResourcePtr<RenderTexture2D> mOutputTexture = nullptr;
30  uint mPassCount = 1;
31  };
32 
33 
56  {
57  RTTI_ENABLE(RenderableComponentInstance)
58  public:
60 
66  virtual bool init(utility::ErrorState& errorState) override;
67 
77  void draw();
78 
84  Texture2D& getOutputTexture() { return *mOutputTexture; }
85 
86  protected:
95  virtual void onDraw(IRenderTarget& renderTarget, VkCommandBuffer commandBuffer, const glm::mat4& viewMatrix, const glm::mat4& projectionMatrix) override;
96 
97  private:
98  using DoubleBufferedRenderTarget = std::array<rtti::ObjectPtr<RenderTarget>, 2>;
99 
100  RenderService* mRenderService = nullptr;
101  RenderTexture2D* mInputTexture = nullptr;
102  RenderTexture2D* mOutputTexture = nullptr;
103 
104  std::vector<DoubleBufferedRenderTarget> mBloomRTs;
105 
106  MaterialInstanceResource mMaterialInstanceResource;
107  MaterialInstance mMaterialInstance;
108 
109  RenderableMesh mRenderableMesh;
110  nap::PlaneMesh mPlane;
111 
112  glm::mat4x4 mModelMatrix;
113 
114  UniformMat4Instance* mModelMatrixUniform = nullptr;
115  UniformMat4Instance* mProjectMatrixUniform = nullptr;
116  UniformMat4Instance* mViewMatrixUniform = nullptr;
117  UniformStructInstance* mMVPStruct = nullptr;
118 
119  Sampler2DInstance* mColorTextureSampler = nullptr;
120  UniformVec2Instance* mDirectionUniform = nullptr;
121  UniformVec2Instance* mTextureSizeUniform = nullptr;
122 
127  UniformMat4Instance* ensureUniform(const std::string& uniformName, nap::UniformStructInstance& mvpStruct, utility::ErrorState& error);
128  };
129 }
nap::uint
unsigned int uint
Definition: numeric.h:23
nap::RenderableComponentInstance
Definition: rendercomponent.h:46
nap::IRenderTarget
Definition: irendertarget.h:21
nap::RenderBloomComponent
Definition: renderbloomcomponent.h:22
nap::RenderBloomComponentInstance::getOutputTexture
Texture2D & getOutputTexture()
Definition: renderbloomcomponent.h:84
nap::rtti::ObjectPtr
Definition: objectptr.h:154
nap::utility::ErrorState
Definition: errorstate.h:19
nap::Texture2D
Definition: texture.h:128
nap::RenderService
Definition: renderservice.h:275
nap::EntityInstance
Definition: entity.h:34
nap::RenderableComponent
Definition: rendercomponent.h:29
nap::RenderBloomComponentInstance
Definition: renderbloomcomponent.h:55
nap::Component
Definition: component.h:151
nap::RenderableMesh
Definition: renderablemesh.h:22
nap::MaterialInstance
Definition: materialinstance.h:297
nap::EBlurSamples
EBlurSamples
Definition: blurshader.h:17
nap
Definition: templateapp.h:17
nap::UniformStructInstance
Definition: uniforminstance.h:53
nap::TypedUniformValueInstance
Definition: uniforminstance.h:243
nap::Sampler2DInstance
Definition: samplerinstance.h:93
nap::EBlurSamples::X5
@ X5
5x5 kernel, linear sampling
nap::PlaneMesh
Definition: planemesh.h:26
nap::MaterialInstanceResource
Definition: materialinstance.h:68
nap::RenderTexture2D
Definition: rendertexture2d.h:24