@@ -117,6 +117,9 @@ void Renderer::resetSwapchain() {
117117 uboCopy = device.descriptors (Shaders::inst ().copy );
118118 uboCopy.set (0 ,gbufEmission,Sampler::nearest ());
119119
120+ uboCopyDepth = device.descriptors (Shaders::inst ().copy );
121+ uboCopyDepth.set (0 , zbuffer);
122+
120123 ssao.ssaoBuf = device.attachment (ssao.aoFormat , (swapchain.w ()+1 )/2 ,(swapchain.h ()+1 )/2 );
121124 ssao.blurBuf = device.attachment (ssao.aoFormat , (swapchain.w ()+1 )/2 ,(swapchain.h ()+1 )/2 );
122125
@@ -243,7 +246,8 @@ void Renderer::dbgDraw(Tempest::Painter& p) {
243246 }
244247
245248void Renderer::draw (Tempest::Attachment& result, Tempest::Encoder<CommandBuffer>& cmd, uint8_t cmdId) {
246- auto wview = Gothic::inst ().worldView ();
249+ auto & device = Resources::device ();
250+ auto wview = Gothic::inst ().worldView ();
247251 if (wview==nullptr ) {
248252 cmd.setFramebuffer ({{result, Vec4 (), Tempest::Preserve}});
249253 return ;
@@ -292,14 +296,19 @@ void Renderer::draw(Tempest::Attachment& result, Tempest::Encoder<CommandBuffer>
292296 wview->drawGBuffer (cmd,cmdId);
293297
294298 drawSSAO (result,cmd,*wview);
295- cmd.setFramebuffer ({{result, Tempest::Preserve, Tempest::Preserve}}, {zbuffer, Tempest::Preserve, Tempest::Discard });
299+ cmd.setFramebuffer ({{result, Tempest::Preserve, Tempest::Preserve}}, {zbuffer, Tempest::Preserve, Tempest::Preserve });
296300 wview->drawLights (cmd,cmdId);
297301 wview->drawWater (cmd,cmdId);
298302
299303 wview->drawSky (cmd,cmdId);
300304 wview->drawTranslucent (cmd,cmdId);
301305
302- // cmd.setFramebuffer({{result, Tempest::Preserve, Tempest::Preserve}});
306+ if (device.properties ().hasSamplerFormat (zBufferFormat)){
307+ cmd.setFramebuffer ({{gbufDepth, 1 .f , Tempest::Preserve}});
308+ cmd.setUniforms (Shaders::inst ().copy , uboCopyDepth);
309+ cmd.draw (Resources::fsqVbo ());
310+ }
311+ cmd.setFramebuffer ({{result, Tempest::Preserve, Tempest::Preserve}});
303312 wview->drawFog (cmd,cmdId);
304313 }
305314
0 commit comments