NAP
computecomponent.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 "renderservice.h"
9 #include "materialinstance.h"
10 #include "shadervariabledeclarations.h"
11 
12 // External Includes
13 #include <nap/resourceptr.h>
14 #include <component.h>
15 
16 namespace nap
17 {
18  // Forward Declares
19  class ComputeComponentInstance;
20 
36  class NAPAPI ComputeComponent : public Component
37  {
38  RTTI_ENABLE(Component)
39  DECLARE_COMPONENT(ComputeComponent, ComputeComponentInstance)
40  public:
42  uint mInvocations = 1;
43  bool mEnabled = true;
44  };
45 
46 
63  {
64  RTTI_ENABLE(ComponentInstance)
65  public:
67 
73  virtual bool init(utility::ErrorState& errorState) override;
74 
79  void compute(VkCommandBuffer commandBuffer);
80 
86  void compute(VkCommandBuffer commandBuffer, uint numInvocations);
87 
92  void enable(bool enable) { mEnabled = enable; }
93 
97  bool isEnabled() const { return mEnabled; }
98 
102  ComputeMaterialInstance& getMaterialInstance() { return mComputeMaterialInstance; }
103 
107  glm::uvec3 getWorkGroupSize() const { return mComputeMaterialInstance.getWorkGroupSize(); }
108 
113  void setInvocations(uint numInvocations) { mInvocations = numInvocations; }
114 
118  uint getInvocations() const { return mInvocations; }
119 
120  protected:
121 
127  virtual void onCompute(VkCommandBuffer commandBuffer, uint numInvocations);
128 
134  void insertBarriers(VkCommandBuffer commandBuffer);
135 
136  RenderService* mRenderService = nullptr;
138  uint mInvocations = 1;
139  bool mEnabled = true;
140  };
141 }
nap::uint
unsigned int uint
Definition: numeric.h:23
nap::ComputeMaterialInstanceResource
Definition: materialinstance.h:86
nap::ComputeComponentInstance::getWorkGroupSize
glm::uvec3 getWorkGroupSize() const
Definition: computecomponent.h:107
nap::ComputeComponent
Definition: computecomponent.h:36
nap::ComputeComponentInstance::setInvocations
void setInvocations(uint numInvocations)
Definition: computecomponent.h:113
nap::utility::ErrorState
Definition: errorstate.h:19
nap::ComputeComponentInstance::getInvocations
uint getInvocations() const
Definition: computecomponent.h:118
nap::ComputeComponentInstance
Definition: computecomponent.h:62
nap::RenderService
Definition: renderservice.h:275
nap::ComputeComponentInstance::enable
void enable(bool enable)
Definition: computecomponent.h:92
nap::EntityInstance
Definition: entity.h:34
nap::ComponentInstance
Definition: component.h:43
nap::Component
Definition: component.h:151
nap::ComputeComponent::mComputeMaterialInstanceResource
ComputeMaterialInstanceResource mComputeMaterialInstanceResource
Property: 'ComputeMaterialInstance' The compute material instance resource.
Definition: computecomponent.h:41
nap::ComputeComponentInstance::mComputeMaterialInstance
ComputeMaterialInstance mComputeMaterialInstance
Definition: computecomponent.h:137
nap::ComputeMaterialInstance
Definition: materialinstance.h:364
nap
Definition: templateapp.h:17
nap::ComputeComponentInstance::isEnabled
bool isEnabled() const
Definition: computecomponent.h:97
nap::ComputeComponentInstance::getMaterialInstance
ComputeMaterialInstance & getMaterialInstance()
Definition: computecomponent.h:102