Overte C++ Documentation
DeferredFramebuffer.h
1 //
2 // DeferredFramebuffer.h
3 // libraries/render-utils/src/
4 //
5 // Created by Sam Gateau 7/11/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_DeferredFramebuffer_h
14 #define hifi_DeferredFramebuffer_h
15 
16 #include "gpu/Resource.h"
17 #include "gpu/Framebuffer.h"
18 
19 // DeferredFramebuffer is a helper class gathering in one place the GBuffer (Framebuffer) and lighting framebuffer
20 class DeferredFramebuffer {
21 public:
22 
23  DeferredFramebuffer();
24 
25  gpu::FramebufferPointer getDeferredFramebuffer();
26  gpu::FramebufferPointer getDeferredFramebufferDepthColor();
27 
28  gpu::TexturePointer getDeferredColorTexture();
29  gpu::TexturePointer getDeferredNormalTexture();
30  gpu::TexturePointer getDeferredSpecularTexture();
31  gpu::TexturePointer getDeferredVelocityTexture();
32 
33  gpu::FramebufferPointer getLightingFramebuffer();
34  gpu::FramebufferPointer getLightingWithVelocityFramebuffer();
35  gpu::TexturePointer getLightingTexture();
36 
37  // Update the depth buffer which will drive the allocation of all the other resources according to its size.
38  void updatePrimaryDepth(const gpu::TexturePointer& depthBuffer);
39  gpu::TexturePointer getPrimaryDepthTexture();
40  const glm::ivec2& getFrameSize() const { return _frameSize; }
41 
42 protected:
43  void allocate();
44 
45  gpu::TexturePointer _primaryDepthTexture;
46 
47  gpu::FramebufferPointer _deferredFramebuffer;
48  gpu::FramebufferPointer _deferredFramebufferDepthColor;
49 
50  gpu::TexturePointer _deferredColorTexture;
51  gpu::TexturePointer _deferredNormalTexture;
52  gpu::TexturePointer _deferredSpecularTexture;
53  gpu::TexturePointer _deferredVelocityTexture;
54 
55  gpu::TexturePointer _lightingTexture;
56  gpu::FramebufferPointer _lightingFramebuffer;
57  gpu::FramebufferPointer _lightingWithVelocityFramebuffer;
58 
59  glm::ivec2 _frameSize;
60 };
61 
62 using DeferredFramebufferPointer = std::shared_ptr<DeferredFramebuffer>;
63 
64 #endif // hifi_DeferredFramebuffer_h