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 //
8 // Distributed under the Apache License, Version 2.0.
9 // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
10 //
11 
12 #ifndef hifi_DeferredFrameTransform_h
13 #define hifi_DeferredFrameTransform_h
14 
15 #include <gpu/Resource.h>
16 
17 #include <render/Forward.h>
18 #include <render/DrawTask.h>
19 
20 // DeferredFrameTransform is a helper class gathering in one place the needed camera transform
21 // and frame resolution needed for all the deferred rendering passes taking advantage of the Deferred buffers
22 class DeferredFrameTransform {
23 public:
24  using UniformBufferView = gpu::BufferView;
25 
26  DeferredFrameTransform();
27 
28  void update(RenderArgs* args, glm::vec2 jitter);
29 
30  UniformBufferView getFrameTransformBuffer() const { return _frameTransformBuffer; }
31 
32 protected:
33 
34 
35  // Class describing the uniform buffer with the transform info common to the AO shaders
36  // It s changing every frame
37  class FrameTransform {
38  public:
39  // Pixel info is { viewport width height}
40  glm::vec4 pixelInfo;
41  glm::vec4 invpixelInfo;
42  // Depth info is { n.f, f - n, -f}
43  glm::vec4 depthInfo;
44  // Stereo info is { isStereoFrame, halfWidth }
45  glm::vec4 stereoInfo{ 0.0 };
46  // Mono proj matrix or Left and Right proj matrix going from Mono Eye space to side clip space
47  glm::mat4 projection[2];
48  // Inverse proj matrix or Left and Right proj matrix going from Mono Eye space to side clip space
49  glm::mat4 invProjection[2];
50  // THe mono projection for sure
51  glm::mat4 projectionMono;
52  // Inv View matrix from eye space (mono) to world space
53  glm::mat4 invView;
54  // View matrix from world space to eye space (mono)
55  glm::mat4 view;
56  // Mono proj matrix or Left and Right proj matrix going from Mono Eye space to side clip space without jittering
57  glm::mat4 projectionUnjittered[2];
58  // Inverse proj matrix or Left and Right proj matrix going from Mono Eye space to side clip space without jittering
59  glm::mat4 invProjectionUnjittered[2];
60 
61  FrameTransform() {}
62  };
63  UniformBufferView _frameTransformBuffer;
64 
65 
66 };
67 
68 using DeferredFrameTransformPointer = std::shared_ptr<DeferredFrameTransform>;
69 
70 
71 
72 
73 class GenerateDeferredFrameTransform {
74 public:
75 
76  using Input = glm::vec2;
77  using Output = DeferredFrameTransformPointer;
78  using JobModel = render::Job::ModelIO<GenerateDeferredFrameTransform, Input, Output>;
79 
80  GenerateDeferredFrameTransform() {}
81 
82  void run(const render::RenderContextPointer& renderContext, const Input& jitter, Output& frameTransform);
83 
84 private:
85 };
86 
87 #endif // hifi_DeferredFrameTransform_h