Overte C++ Documentation
DeferredFrameTransform.h
1 //
2 // DeferredFrameTransform.h
3 // libraries/render-utils/src/
4 //
5 // Created by Sam Gateau 6/3/2016.
6 // Copyright 2016 High Fidelity, Inc.
7 // Copyright 2024 Overte e.V.
8 //
9 // Distributed under the Apache License, Version 2.0.
10 // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
11 //
12 
13 #ifndef hifi_DeferredFrameTransform_h
14 #define hifi_DeferredFrameTransform_h
15 
16 #include <gpu/Resource.h>
17 
18 #include <render/Forward.h>
19 #include <render/DrawTask.h>
20 
21 // DeferredFrameTransform is a helper class gathering in one place the needed camera transform
22 // and frame resolution needed for all the deferred rendering passes taking advantage of the Deferred buffers
23 class DeferredFrameTransform {
24  friend class GenerateDeferredFrameTransform;
25 public:
26  using UniformBufferView = gpu::BufferView;
27 
28  DeferredFrameTransform();
29 
30  void update(RenderArgs* args);
31 
32  UniformBufferView getFrameTransformBuffer() const { return _frameTransformBuffer; }
33 
34 protected:
35 
36  // Class describing the uniform buffer with the transform info common to the AO shaders
37  // It s changing every frame
38 #include "DeferredTransform_shared.slh"
39 
40  class FrameTransform : public _DeferredFrameTransform {
41  public:
42  FrameTransform() { infos.stereoInfo = glm::vec4(0.0f); }
43  };
44 
45  UniformBufferView _frameTransformBuffer;
46 };
47 
48 using DeferredFrameTransformPointer = std::shared_ptr<DeferredFrameTransform>;
49 
50 
51 class GenerateDeferredFrameTransform {
52 public:
53  using Output = DeferredFrameTransformPointer;
54  using JobModel = render::Job::ModelO<GenerateDeferredFrameTransform, Output>;
55 
56  GenerateDeferredFrameTransform(uint transformSlot) : _transformSlot(transformSlot) {}
57 
58  void run(const render::RenderContextPointer& renderContext, Output& frameTransform);
59 
60 private:
61  uint _transformSlot;
62 };
63 
64 #endif // hifi_DeferredFrameTransform_h