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