History

BRinging the intermediate render textures in the pipeline as varyings and not throug the singletonn anymore

samcake committed 10 years ago

Commit e0993c51 parent ba759072 files · +263 −0Browse files

Showing the changes to libraries/render-utils/src/DeferredFramebuffer.cpp (1 of 2 files). Show all

Unified · Split

libraries/render-utils/src/DeferredFramebuffer.cpp+182−0
@@ -0,0 +1,182 @@
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#include "DeferredFramebuffer.h"
12
13
14DeferredFramebuffer::DeferredFramebuffer() {
15}
16
17
18void DeferredFramebuffer::setPrimaryDepth(const gpu::TexturePointer& depthBuffer) {
19 //If the size changed, we need to delete our FBOs
20 if (_primaryDepthTexture != depthBuffer) {
21 _primaryDepthTexture = depthBuffer;
22
23 }
24}
25
26void DeferredFramebuffer::setFrameSize(const glm::ivec2& frameBufferSize) {
27 //If the size changed, we need to delete our FBOs
28 if (_frameSize != frameBufferSize) {
29 _frameSize = frameBufferSize;
30 _deferredFramebuffer.reset();
31 _deferredFramebufferDepthColor.reset();
32 _deferredColorTexture.reset();
33 _deferredNormalTexture.reset();
34 _deferredSpecularTexture.reset();
35 _lightingTexture.reset();
36 _lightingFramebuffer.reset();
37
38 _occlusionFramebuffer.reset();
39 _occlusionTexture.reset();
40 _occlusionBlurredFramebuffer.reset();
41 _occlusionBlurredTexture.reset();
42 }
43}
44
45void DeferredFramebuffer::allocate() {
46 _deferredFramebuffer = gpu::FramebufferPointer(gpu::Framebuffer::create());
47 _deferredFramebufferDepthColor = gpu::FramebufferPointer(gpu::Framebuffer::create());
48
49 auto colorFormat = gpu::Element::COLOR_SRGBA_32;
50 auto linearFormat = gpu::Element::COLOR_RGBA_32;
51 auto width = _frameSize.x;
52 auto height = _frameSize.y;
53
54 auto defaultSampler = gpu::Sampler(gpu::Sampler::FILTER_MIN_MAG_POINT);
55 // _primaryColorTexture = gpu::TexturePointer(gpu::Texture::create2D(colorFormat, width, height, defaultSampler));
56
57 // _primaryFramebuffer->setRenderBuffer(0, _primaryColorTexture);
58
59 _deferredColorTexture = gpu::TexturePointer(gpu::Texture::create2D(colorFormat, width, height, defaultSampler));
60
61 _deferredNormalTexture = gpu::TexturePointer(gpu::Texture::create2D(linearFormat, width, height, defaultSampler));
62 _deferredSpecularTexture = gpu::TexturePointer(gpu::Texture::create2D(colorFormat, width, height, defaultSampler));
63
64 _deferredFramebuffer->setRenderBuffer(0, _deferredColorTexture);
65 _deferredFramebuffer->setRenderBuffer(1, _deferredNormalTexture);
66 _deferredFramebuffer->setRenderBuffer(2, _deferredSpecularTexture);
67
68 _deferredFramebufferDepthColor->setRenderBuffer(0, _deferredColorTexture);
69
70 // auto depthFormat = gpu::Element(gpu::SCALAR, gpu::FLOAT, gpu::DEPTH);
71
72 auto depthFormat = gpu::Element(gpu::SCALAR, gpu::UINT32, gpu::DEPTH_STENCIL); // Depth24_Stencil8 texel format
73 if (!_primaryDepthTexture) {
74 _primaryDepthTexture = gpu::TexturePointer(gpu::Texture::create2D(depthFormat, width, height, defaultSampler));
75 }
76
77 _deferredFramebuffer->setDepthStencilBuffer(_primaryDepthTexture, depthFormat);
78
79 _deferredFramebufferDepthColor->setDepthStencilBuffer(_primaryDepthTexture, depthFormat);
80
81
82 auto smoothSampler = gpu::Sampler(gpu::Sampler::FILTER_MIN_MAG_MIP_LINEAR);
83
84 _lightingTexture = gpu::TexturePointer(gpu::Texture::create2D(gpu::Element(gpu::SCALAR, gpu::FLOAT, gpu::R11G11B10), width, height, defaultSampler));
85 _lightingFramebuffer = gpu::FramebufferPointer(gpu::Framebuffer::create());
86 _lightingFramebuffer->setRenderBuffer(0, _lightingTexture);
87 _lightingFramebuffer->setDepthStencilBuffer(_primaryDepthTexture, depthFormat);
88
89 _deferredFramebuffer->setRenderBuffer(3, _lightingTexture);
90
91 // For AO:
92 // auto pointMipSampler = gpu::Sampler(gpu::Sampler::FILTER_MIN_MAG_MIP_POINT);
93 // _depthPyramidTexture = gpu::TexturePointer(gpu::Texture::create2D(gpu::Element(gpu::SCALAR, gpu::FLOAT, gpu::RGB), width, height, gpu::Sampler(gpu::Sampler::FILTER_MIN_MAG_LINEAR_MIP_POINT)));
94 // _depthPyramidFramebuffer = gpu::FramebufferPointer(gpu::Framebuffer::create());
95 // _depthPyramidFramebuffer->setRenderBuffer(0, _depthPyramidTexture);
96 // _depthPyramidFramebuffer->setDepthStencilBuffer(_primaryDepthTexture, depthFormat);
97
98 // resizeAmbientOcclusionBuffers();
99}
100
101/*
102void DeferredFramebuffer::resizeAmbientOcclusionBuffers() {
103 _occlusionFramebuffer.reset();
104 _occlusionTexture.reset();
105 _occlusionBlurredFramebuffer.reset();
106 _occlusionBlurredTexture.reset();
107
108
109 auto width = _frameBufferSize.width() >> _AOResolutionLevel;
110 auto height = _frameBufferSize.height() >> _AOResolutionLevel;
111 auto colorFormat = gpu::Element(gpu::VEC4, gpu::NUINT8, gpu::RGB);
112 auto defaultSampler = gpu::Sampler(gpu::Sampler::FILTER_MIN_MAG_LINEAR);
113 auto depthFormat = gpu::Element(gpu::SCALAR, gpu::UINT32, gpu::DEPTH_STENCIL); // Depth24_Stencil8 texel format
114
115 _occlusionTexture = gpu::TexturePointer(gpu::Texture::create2D(colorFormat, width, height, defaultSampler));
116 _occlusionFramebuffer = gpu::FramebufferPointer(gpu::Framebuffer::create());
117 _occlusionFramebuffer->setRenderBuffer(0, _occlusionTexture);
118 _occlusionFramebuffer->setDepthStencilBuffer(_primaryDepthTexture, depthFormat);
119
120 _occlusionBlurredTexture = gpu::TexturePointer(gpu::Texture::create2D(colorFormat, width, height, defaultSampler));
121 _occlusionBlurredFramebuffer = gpu::FramebufferPointer(gpu::Framebuffer::create());
122 _occlusionBlurredFramebuffer->setRenderBuffer(0, _occlusionBlurredTexture);
123 _occlusionBlurredFramebuffer->setDepthStencilBuffer(_primaryDepthTexture, depthFormat);
124}
125*/
126
127
128gpu::TexturePointer DeferredFramebuffer::getPrimaryDepthTexture() {
129 if (!_primaryDepthTexture) {
130 allocate();
131 }
132 return _primaryDepthTexture;
133}
134
135gpu::FramebufferPointer DeferredFramebuffer::getDeferredFramebuffer() {
136 if (!_deferredFramebuffer) {
137 allocate();
138 }
139 return _deferredFramebuffer;
140}
141
142gpu::FramebufferPointer DeferredFramebuffer::getDeferredFramebufferDepthColor() {
143 if (!_deferredFramebufferDepthColor) {
144 allocate();
145 }
146 return _deferredFramebufferDepthColor;
147}
148
149gpu::TexturePointer DeferredFramebuffer::getDeferredColorTexture() {
150 if (!_deferredColorTexture) {
151 allocate();
152 }
153 return _deferredColorTexture;
154}
155
156gpu::TexturePointer DeferredFramebuffer::getDeferredNormalTexture() {
157 if (!_deferredNormalTexture) {
158 allocate();
159 }
160 return _deferredNormalTexture;
161}
162
163gpu::TexturePointer DeferredFramebuffer::getDeferredSpecularTexture() {
164 if (!_deferredSpecularTexture) {
165 allocate();
166 }
167 return _deferredSpecularTexture;
168}
169
170gpu::FramebufferPointer DeferredFramebuffer::getLightingFramebuffer() {
171 if (!_lightingFramebuffer) {
172 allocate();
173 }
174 return _lightingFramebuffer;
175}
176
177gpu::TexturePointer DeferredFramebuffer::getLightingTexture() {
178 if (!_lightingTexture) {
179 allocate();
180 }
181 return _lightingTexture;
182}