History

Revolutionizing ao

samcake committed 10 years ago

Commit afb1ebf1 parent 4f04dbc12 files · +221 −190Browse files

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

Unified · Split

libraries/render-utils/src/FramebufferCache.cpp+0−70
@@ -35,10 +35,6 @@ void FramebufferCache::setFrameBufferSize(QSize frameBufferSize) { · 34 unmodified lines
35 _frameBufferSize = frameBufferSize;35 _frameBufferSize = frameBufferSize;
36 _selfieFramebuffer.reset();36 _selfieFramebuffer.reset();
37 _cachedFramebuffers.clear();37 _cachedFramebuffers.clear();
38 _occlusionFramebuffer.reset();
39 _occlusionTexture.reset();
40 _occlusionBlurredFramebuffer.reset();
41 _occlusionBlurredTexture.reset();
42 }38 }
43}39}
44 40
@@ -54,35 +50,6 @@ void FramebufferCache::createPrimaryFramebuffer() { · 9 unmodified lines
54 _selfieFramebuffer->setRenderBuffer(0, tex);50 _selfieFramebuffer->setRenderBuffer(0, tex);
55 51
56 auto smoothSampler = gpu::Sampler(gpu::Sampler::FILTER_MIN_MAG_MIP_LINEAR);52 auto smoothSampler = gpu::Sampler(gpu::Sampler::FILTER_MIN_MAG_MIP_LINEAR);
57
58
59
60 resizeAmbientOcclusionBuffers();
61}
62
63
64void FramebufferCache::resizeAmbientOcclusionBuffers() {
65 _occlusionFramebuffer.reset();
66 _occlusionTexture.reset();
67 _occlusionBlurredFramebuffer.reset();
68 _occlusionBlurredTexture.reset();
69
70
71 auto width = _frameBufferSize.width() >> _AOResolutionLevel;
72 auto height = _frameBufferSize.height() >> _AOResolutionLevel;
73 auto colorFormat = gpu::Element(gpu::VEC4, gpu::NUINT8, gpu::RGB);
74 auto defaultSampler = gpu::Sampler(gpu::Sampler::FILTER_MIN_MAG_LINEAR);
75 // auto depthFormat = gpu::Element(gpu::SCALAR, gpu::UINT32, gpu::DEPTH_STENCIL); // Depth24_Stencil8 texel format
76
77 _occlusionTexture = gpu::TexturePointer(gpu::Texture::create2D(colorFormat, width, height, defaultSampler));
78 _occlusionFramebuffer = gpu::FramebufferPointer(gpu::Framebuffer::create());
79 _occlusionFramebuffer->setRenderBuffer(0, _occlusionTexture);
80 // _occlusionFramebuffer->setDepthStencilBuffer(_primaryDepthTexture, depthFormat);
81
82 _occlusionBlurredTexture = gpu::TexturePointer(gpu::Texture::create2D(colorFormat, width, height, defaultSampler));
83 _occlusionBlurredFramebuffer = gpu::FramebufferPointer(gpu::Framebuffer::create());
84 _occlusionBlurredFramebuffer->setRenderBuffer(0, _occlusionBlurredTexture);
85 // _occlusionBlurredFramebuffer->setDepthStencilBuffer(_primaryDepthTexture, depthFormat);
86}53}
87 54
88 55
@@ -107,40 +74,3 @@ gpu::FramebufferPointer FramebufferCache::getSelfieFramebuffer() { · 18 unmodified lines
107 }74 }
108 return _selfieFramebuffer;75 return _selfieFramebuffer;
109}76}
110
111void FramebufferCache::setAmbientOcclusionResolutionLevel(int level) {
112 const int MAX_AO_RESOLUTION_LEVEL = 4;
113 level = std::max(0, std::min(level, MAX_AO_RESOLUTION_LEVEL));
114 if (level != _AOResolutionLevel) {
115 _AOResolutionLevel = level;
116 resizeAmbientOcclusionBuffers();
117 }
118}
119
120gpu::FramebufferPointer FramebufferCache::getOcclusionFramebuffer() {
121 if (!_occlusionFramebuffer) {
122 resizeAmbientOcclusionBuffers();
123 }
124 return _occlusionFramebuffer;
125}
126
127gpu::TexturePointer FramebufferCache::getOcclusionTexture() {
128 if (!_occlusionTexture) {
129 resizeAmbientOcclusionBuffers();
130 }
131 return _occlusionTexture;
132}
133
134gpu::FramebufferPointer FramebufferCache::getOcclusionBlurredFramebuffer() {
135 if (!_occlusionBlurredFramebuffer) {
136 resizeAmbientOcclusionBuffers();
137 }
138 return _occlusionBlurredFramebuffer;
139}
140
141gpu::TexturePointer FramebufferCache::getOcclusionBlurredTexture() {
142 if (!_occlusionBlurredTexture) {
143 resizeAmbientOcclusionBuffers();
144 }
145 return _occlusionBlurredTexture;
146}