@@ -175,6 +175,33 @@ OMVoxelManager::OMVoxelManager(OMRenderer *renderer, OMRendererRenderTarget *tar
175175 ->depthReverseZ (true )
176176 ->buildN ();
177177
178+ biltCutoutPipeline =
179+ renderer->createPipeline ()
180+ ->input (ImageSampler)
181+ ->inputName (" inTexture" )
182+ ->output (target)
183+ ->samples (1 )
184+ ->shader (renderer->shaderManager .preprocess (" core/bilt.frag.glsl" , Fragment, GLSLSource, format))
185+ ->shader (renderer->shaderManager .preprocess (" core/bilt2.vert.glsl" , Vertex, GLSLSource, format))
186+ ->format (format)
187+ ->blend (false )
188+ ->depth (false , false )
189+ ->buildN ();
190+
191+ biltTranslucentPipeline =
192+ renderer->createPipeline ()
193+ ->input (ImageSampler)
194+ ->inputName (" inTexture" )
195+ ->output (target)
196+ ->samples (1 )
197+ ->shader (renderer->shaderManager .preprocess (" core/bilt.frag.glsl" , Fragment, GLSLSource, format))
198+ ->shader (renderer->shaderManager .preprocess (" core/bilt2.vert.glsl" , Vertex, GLSLSource, format))
199+ ->format (format)
200+ ->blendFunc ({One, Alpha, One, OneMinusAlpha})
201+ ->blend (true )
202+ ->depth (false , false )
203+ ->buildN ();
204+
178205 voxelLayer = new OMVoxelLayer<OMVoxel>(renderer);
179206 voxelComplexLayer = new OMVoxelLayer<OMVoxelComplex>(renderer);
180207 voxelTranslucentLayer = new OMVoxelLayer<OMVoxel>(renderer);
@@ -197,8 +224,11 @@ OMVoxelManager::OMVoxelManager(OMRenderer *renderer, OMRendererRenderTarget *tar
197224 translucentComplexPipeline->bindInput (2 , textureAtlasSecondary);
198225 translucentComplexPipeline->bindInput (3 , chunkoffs);
199226
227+ translucentTargetMS = new OMRendererTempTarget (renderer);
228+ translucentTargetMS->clearDepth = false ;
229+
230+ cutoutTarget = new OMRendererTempTarget (renderer);
200231 translucentTarget = new OMRendererTempTarget (renderer);
201- translucentTarget->clearDepth = false ;
202232}
203233OMVoxelManager::~OMVoxelManager ()
204234{
@@ -213,6 +243,10 @@ OMVoxelManager::~OMVoxelManager()
213243 delete translucentPipeline;
214244 delete translucentComplexPipeline;
215245 delete debugPipeline;
246+ delete biltTranslucentPipeline;
247+ delete biltCutoutPipeline;
248+ delete translucentTargetMS;
249+ delete cutoutTarget;
216250 delete translucentTarget;
217251}
218252
@@ -382,7 +416,12 @@ auto OMVoxelManager::update(basics::OMCamera &camera) -> void
382416auto OMVoxelManager::submit (OMRendererTask *task, OMRendererTempTarget *target, OMRendererTempTarget *resolveTarget)
383417 -> OMRendererTask *
384418{
385- translucentTarget->constructWithDepth (target->depthTexture , renderer->getExtent (), 4 );
419+ translucentTargetMS->constructWithDepth (target->depthTexture , renderer->getExtent (), 4 );
420+ cutoutTarget->construct (renderer->getExtent ());
421+ translucentTarget->construct (renderer->getExtent ());
422+ biltCutoutPipeline->bindInput (0 , cutoutTarget->colorTexture );
423+ biltTranslucentPipeline->bindInput (0 , translucentTarget->colorTexture );
424+
386425 return task->target (target->target )
387426 ->pipeline (pipeline)
388427 ->vertexBuffer ({voxelLayer->buf ()->buffer })
@@ -393,15 +432,21 @@ auto OMVoxelManager::submit(OMRendererTask *task, OMRendererTempTarget *target,
393432 ->pipeline (debugPipeline)
394433 ->vertexBuffer ({debugoffs})
395434 ->drawN (2 * 12 )
396- ->resolve (resolveTarget ->target )
435+ ->resolve (cutoutTarget ->target )
397436 ->clearColor (glm::vec4 (0.0 , 0.0 , 0.0 , 1.0 ))
398- ->target (translucentTarget ->target )
437+ ->target (translucentTargetMS ->target )
399438 ->pipeline (translucentPipeline)
400439 ->vertexBuffer ({voxelTranslucentLayer->buf ()->buffer })
401440 ->drawInstanceN (6 , voxelTranslucentLayer->buf ()->totalSize / sizeof (OMVoxel))
402441 ->pipeline (translucentComplexPipeline)
403442 ->vertexBuffer ({voxelTranslucentComplexLayer->buf ()->buffer })
404443 ->drawInstanceN (6 , voxelTranslucentComplexLayer->buf ()->totalSize / sizeof (OMVoxelComplex))
444+ ->resolve (translucentTarget->target )
445+ ->target (resolveTarget->target )
446+ ->pipeline (biltCutoutPipeline)
447+ ->drawN (6 )
448+ ->pipeline (biltTranslucentPipeline)
449+ ->drawN (6 )
405450 ->finishN ();
406451}
407452} // namespace openminecraft::renderer::common::wrap
0 commit comments